Components and supplies
Ultrasonic Sensor - HC-SR04 (Generic)
Male/Female Jumper Wires
DC Motor, 12 V
Dual H-Bridge motor drivers L298
Resistor 330 ohm
Arduino Nano R3
SparkFun Breadboard Power Supply Stick 5V/3.3V
SparkFun Logic Level Converter - Bi-Directional
RGB Diffused Common Anode
HC-05 Bluetooth Module
Breadboard (generic)
Apps and platforms
Arduino BlueControl
Arduino IDE
Project description
Code
Bluetooth Controlled Robot_Arduino Code.
c_cpp
1/* Bluetooth Controlled Obstacle Avoidance Robot 2 Prepared by : Alok Talukdar 3 Date : 09.05.2020 4*/ 5 6#include<SoftwareSerial.h> // To use any pin on Arduino for Serial communication. 7 8// Define the digital pins for L298 motor control module. 9 10#define IN1 5 // for right motor 11#define IN2 4 // for right motor 12#define IN3 3 // for left motor 13#define IN4 2 // for left motor 14#define ENA 9 // Enable A for PWM control of right motor 15#define ENB 10 // Enable B for PWM control of left motor 16 17// Define the digital pins for RGB LED control 18 19#define redLED 8 20#define greenLED A0 21#define blueLED 11 22 23// Set up the HC-SR04 Ultrasonic sensor module 24 25const int trigPin = 6; // TRIG pin connected to pin D6 of Arduino Nano 26const int echoPin = 7; // ECHO pin connected to pin D7 of Arduino Nano 27 28int i,j,k = 0; 29 30float duration,distance; // variables for distance measurement 31 32// Set up the HC05 Bluetooth module 33 34SoftwareSerial mySerial(12,13); // (12 --> RX , 13 --> TX) 35 36String data; // variables for Bluetooth control 37int btVal; 38 39void setup() { 40 // put your setup code here, to run once: 41 42 pinMode(trigPin,OUTPUT); // Configure pin D6 to transmit ultrasonic pulses 43 pinMode(echoPin,INPUT); // Configure pin D7 to receive ultrasonic pulses 44 45 mySerial.begin(9600); // Configure the Software serial at Baud rate 9600 46 47 pinMode(IN1,OUTPUT); // Configure IN1 - IN4 as OUTPUT to control motors 48 pinMode(IN2,OUTPUT); 49 pinMode(IN3,OUTPUT); 50 pinMode(IN4,OUTPUT); 51 pinMode(ENA,OUTPUT); 52 pinMode(ENB,OUTPUT); 53 54 pinMode(redLED,OUTPUT); 55 pinMode(blueLED,OUTPUT); 56 pinMode(greenLED,OUTPUT); 57 58 digitalWrite(IN1,LOW); // Configure the status of the IN1 - IN4 as LOW 59 digitalWrite(IN2,LOW); 60 digitalWrite(IN3,LOW); 61 digitalWrite(IN4,LOW); 62 63 64 analogWrite(redLED,255); // Switch OFF LED's. RGB LED is common anode type. 65 digitalWrite(blueLED,HIGH); 66 digitalWrite(greenLED,HIGH); 67} 68 69void loop() 70{ 71 // put your main code here, to run repeatedly: 72 73 while (mySerial.available()) 74 { 75 data = mySerial.readStringUntil('\n'); 76 } 77 78 btVal = (data.toInt()); 79 80 switch (btVal) 81 { 82 case 1: 83 84 forward(); 85 digitalWrite(greenLED,LOW); 86 analogWrite(redLED,255); 87 digitalWrite(blueLED,HIGH); 88 dist(); 89 break; 90 91 case 2: 92 93 reverse(); 94 digitalWrite(greenLED,HIGH); 95 analogWrite(redLED,255); 96 digitalWrite(blueLED,LOW); 97 break; 98 99 case 3: 100 101 left(); 102 break; 103 104 case 4: 105 106 right(); 107 break; 108 109 case 5: 110 111 stoprobot(); 112 digitalWrite(greenLED,HIGH); 113 analogWrite(redLED,0); 114 digitalWrite(blueLED,HIGH); 115 break; 116 117 default: 118 digitalWrite(greenLED,HIGH); 119 analogWrite(redLED,255); 120 digitalWrite(blueLED,HIGH); 121 break; 122 123 124 } 125 126 if (mySerial.available() < 0) 127 { 128 //Serial.println("No Bluetooth Data "); 129 } 130} 131 // motor control function declarations 132 133 134 135 void forward() 136 { 137 for(i=0;i<=100;i++) 138 { 139 analogWrite(ENA,i); 140 analogWrite(ENB,i); 141 digitalWrite(IN1,HIGH); 142 digitalWrite(IN2,LOW); 143 digitalWrite(IN3,LOW); 144 digitalWrite(IN4,HIGH); 145 } 146 } 147 148 void reverse() 149 { 150 for(j=0;j<=100;j++) 151 { 152 analogWrite(ENA,j); 153 analogWrite(ENB,j); 154 digitalWrite(IN1,LOW); 155 digitalWrite(IN2,HIGH); 156 digitalWrite(IN3,HIGH); 157 digitalWrite(IN4,LOW); 158 } 159 } 160 161 void left() 162 { 163 analogWrite(ENA,127); 164 analogWrite(ENB,0); 165 digitalWrite(IN1,HIGH); 166 digitalWrite(IN2,LOW); 167 digitalWrite(IN3,HIGH); 168 digitalWrite(IN4,HIGH); 169 } 170 171 void right() 172 { 173 analogWrite(ENA,0); 174 analogWrite(ENB,127); 175 digitalWrite(IN1,HIGH); 176 digitalWrite(IN2,HIGH); 177 digitalWrite(IN3,LOW); 178 digitalWrite(IN4,HIGH); 179 } 180 181 void stoprobot() 182 { 183 analogWrite(ENA,0); 184 analogWrite(ENB,0); 185 digitalWrite(IN1,LOW); 186 digitalWrite(IN2,LOW); 187 digitalWrite(IN3,LOW); 188 digitalWrite(IN4,LOW); 189 } 190 void dist() 191 { 192 digitalWrite(trigPin,LOW); // to send a pulse via the TRIG pin of HC-SR04 193 delayMicroseconds(2); 194 digitalWrite(trigPin,HIGH); 195 delayMicroseconds(10); 196 digitalWrite(trigPin,LOW); 197 198 duration = pulseIn(echoPin,HIGH); // read the duration of the pulse 199 200 distance = (duration*0.0343)/2; // measure the distance in cms. Speed of sound is 340 m/s or 0.0343 cm/us 201 if(distance<20) // if distance is < 20 cms , STOP robot 202 { 203 stoprobot(); 204 digitalWrite(greenLED,HIGH); 205 analogWrite(redLED,0); 206 digitalWrite(blueLED,HIGH); 207 } 208 delay(1000); 209 210 } 211 212
Bluetooth Controlled Robot_Arduino Code.
c_cpp
1/* Bluetooth Controlled Obstacle Avoidance Robot 2 Prepared by : Alok 3 Talukdar 4 Date : 09.05.2020 5*/ 6 7#include<SoftwareSerial.h> 8 // To use any pin on Arduino for Serial communication. 9 10// Define the digital 11 pins for L298 motor control module. 12 13#define IN1 5 // for right motor 14#define 15 IN2 4 // for right motor 16#define IN3 3 // for left motor 17#define IN4 18 2 // for left motor 19#define ENA 9 // Enable A for PWM control of right 20 motor 21#define ENB 10 // Enable B for PWM control of left motor 22 23// Define 24 the digital pins for RGB LED control 25 26#define redLED 8 27#define greenLED 28 A0 29#define blueLED 11 30 31// Set up the HC-SR04 Ultrasonic sensor module 32 33const 34 int trigPin = 6; // TRIG pin connected to pin D6 of Arduino Nano 35const int 36 echoPin = 7; // ECHO pin connected to pin D7 of Arduino Nano 37 38int i,j,k 39 = 0; 40 41float duration,distance; // variables for distance measurement 42 43// 44 Set up the HC05 Bluetooth module 45 46SoftwareSerial mySerial(12,13); // (12 --> 47 RX , 13 --> TX) 48 49String data; // variables for Bluetooth 50 control 51int btVal; 52 53void setup() { 54 // put your setup code here, to 55 run once: 56 57 pinMode(trigPin,OUTPUT); // Configure pin D6 to transmit 58 ultrasonic pulses 59 pinMode(echoPin,INPUT); // Configure pin D7 to receive 60 ultrasonic pulses 61 62 mySerial.begin(9600); // Configure the Software 63 serial at Baud rate 9600 64 65 pinMode(IN1,OUTPUT); // Configure IN1 66 - IN4 as OUTPUT to control motors 67 pinMode(IN2,OUTPUT); 68 pinMode(IN3,OUTPUT); 69 70 pinMode(IN4,OUTPUT); 71 pinMode(ENA,OUTPUT); 72 pinMode(ENB,OUTPUT); 73 74 75 pinMode(redLED,OUTPUT); 76 pinMode(blueLED,OUTPUT); 77 pinMode(greenLED,OUTPUT); 78 79 80 digitalWrite(IN1,LOW); // Configure the status of the IN1 - IN4 as LOW 81 82 digitalWrite(IN2,LOW); 83 digitalWrite(IN3,LOW); 84 digitalWrite(IN4,LOW); 85 86 87 88 analogWrite(redLED,255); // Switch OFF LED's. RGB LED is common anode type. 89 90 digitalWrite(blueLED,HIGH); 91 digitalWrite(greenLED,HIGH); 92} 93 94void 95 loop() 96{ 97 // put your main code here, to run repeatedly: 98 99 while (mySerial.available()) 100 101 { 102 data = mySerial.readStringUntil('\ 103'); 104 } 105 106 btVal = (data.toInt()); 107 108 109 switch (btVal) 110 { 111 case 1: 112 113 114 forward(); 115 digitalWrite(greenLED,LOW); 116 analogWrite(redLED,255); 117 118 digitalWrite(blueLED,HIGH); 119 dist(); 120 break; 121 122 123 case 2: 124 125 reverse(); 126 digitalWrite(greenLED,HIGH); 127 128 analogWrite(redLED,255); 129 digitalWrite(blueLED,LOW); 130 break; 131 132 133 case 3: 134 135 left(); 136 break; 137 138 139 case 4: 140 141 right(); 142 break; 143 144 145 case 5: 146 147 148 stoprobot(); 149 digitalWrite(greenLED,HIGH); 150 analogWrite(redLED,0); 151 152 digitalWrite(blueLED,HIGH); 153 break; 154 155 default: 156 157 digitalWrite(greenLED,HIGH); 158 analogWrite(redLED,255); 159 digitalWrite(blueLED,HIGH); 160 161 break; 162 163 164 } 165 166 if (mySerial.available() 167 < 0) 168 { 169 //Serial.println("No Bluetooth 170 Data "); 171 } 172} 173 // motor control function declarations 174 175 176 177 178 void forward() 179 { 180 for(i=0;i<=100;i++) 181 { 182 183 analogWrite(ENA,i); 184 analogWrite(ENB,i); 185 digitalWrite(IN1,HIGH); 186 187 digitalWrite(IN2,LOW); 188 digitalWrite(IN3,LOW); 189 digitalWrite(IN4,HIGH); 190 191 } 192 } 193 194 void reverse() 195 { 196 for(j=0;j<=100;j++) 197 198 { 199 analogWrite(ENA,j); 200 analogWrite(ENB,j); 201 digitalWrite(IN1,LOW); 202 203 digitalWrite(IN2,HIGH); 204 digitalWrite(IN3,HIGH); 205 digitalWrite(IN4,LOW); 206 207 } 208 } 209 210 void left() 211 { 212 analogWrite(ENA,127); 213 214 analogWrite(ENB,0); 215 digitalWrite(IN1,HIGH); 216 digitalWrite(IN2,LOW); 217 218 digitalWrite(IN3,HIGH); 219 digitalWrite(IN4,HIGH); 220 } 221 222 223 void right() 224 { 225 analogWrite(ENA,0); 226 analogWrite(ENB,127); 227 228 digitalWrite(IN1,HIGH); 229 digitalWrite(IN2,HIGH); 230 digitalWrite(IN3,LOW); 231 232 digitalWrite(IN4,HIGH); 233 } 234 235 void stoprobot() 236 { 237 238 analogWrite(ENA,0); 239 analogWrite(ENB,0); 240 digitalWrite(IN1,LOW); 241 242 digitalWrite(IN2,LOW); 243 digitalWrite(IN3,LOW); 244 digitalWrite(IN4,LOW); 245 246 } 247 void dist() 248 { 249 digitalWrite(trigPin,LOW); // 250 to send a pulse via the TRIG pin of HC-SR04 251 delayMicroseconds(2); 252 253 digitalWrite(trigPin,HIGH); 254 delayMicroseconds(10); 255 digitalWrite(trigPin,LOW); 256 257 258 duration = pulseIn(echoPin,HIGH); // read the duration of the pulse 259 260 261 distance = (duration*0.0343)/2; // measure the distance in cms. Speed 262 of sound is 340 m/s or 0.0343 cm/us 263 if(distance<20) // 264 if distance is < 20 cms , STOP robot 265 { 266 stoprobot(); 267 digitalWrite(greenLED,HIGH); 268 269 analogWrite(redLED,0); 270 digitalWrite(blueLED,HIGH); 271 } 272 273 delay(1000); 274 275 } 276 277
Downloadable files
Circuit Diagram.
Circuit diagram of the robot.
Circuit Diagram.
Comments
Only logged in users can leave comments