KIKIBOT Robo Car ESP32 Project
How To Make "KikiBot" Robot Car
Commands:-
forward
backward
left
right
smile
cry
ESP32 Code:-
#include <BluetoothSerial.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
BluetoothSerial SerialBT;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Motor Pins
#define IN1 27
#define IN2 26
#define IN3 25
#define IN4 33
// Ultrasonic
#define trigPin 5
#define echoPin 18
// Mic
#define micPin 34
String command;
// ---------- MOTOR FUNCTIONS ----------
void forward() {
digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW);
}
void backward() {
digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH);
}
void left() {
digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW);
}
void right() {
digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH);
}
void stopCar() {
digitalWrite(IN1,LOW); digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW); digitalWrite(IN4,LOW);
}
// ---------- EMOTIONS ----------
void smile() {
display.clearDisplay();
display.drawCircle(40,30,10,WHITE);
display.drawCircle(88,30,10,WHITE);
display.drawCircle(40, 50, 30, WHITE); // full circle
display.fillRect(10, 50, 60, 30, BLACK); // erase upper half
display.display();
}
void cry() {
display.clearDisplay();
display.drawCircle(40,30,10,WHITE);
display.drawCircle(88,30,10,WHITE);
display.drawLine(40,40,40,55,WHITE);
display.drawLine(88,40,88,55,WHITE);
display.display();
}
void blink() {
display.clearDisplay();
display.drawLine(30,30,50,30,WHITE);
display.drawLine(80,30,100,30,WHITE);
display.display();
}
// ---------- OBSTACLE ----------
long getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
return pulseIn(echoPin, HIGH)/58;
}
// ---------- SETUP ----------
void setup() {
Serial.begin(115200);
SerialBT.begin("KikiBot");
pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT);
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
}
// ---------- LOOP ----------
void loop() {
// Voice / App Command
if (SerialBT.available()) {
command = SerialBT.readString();
command.toLowerCase();
if (command.indexOf("forward")!=-1) forward();
else if (command.indexOf("backward")!=-1) backward();
else if (command.indexOf("left")!=-1) left();
else if (command.indexOf("right")!=-1) right();
else if (command.indexOf("smile")!=-1) smile();
else if (command.indexOf("cry")!=-1) cry();
else stopCar();
}
// Obstacle Avoid
if (getDistance() < 20) {
stopCar();
blink();
}
// Mic Reaction
if (analogRead(micPin) > 2000) {
blink();
}
}
Thankyou...
Electronics Material Used :-
ESP32
L298N Motor Driver
Oled Display
Ultrasonic Sensor
Microphone Module
4 DC Motors
Thankyou...
Comments
Post a Comment