The Centaurus (Mark 1)
Heavy-duty and Swift movement from DC Motors with control from an IR Remote, and a fashionable mustache for the ladies.
Components and supplies
1
H-BRIDGE KIT 2GO
8
Resistor 330 ohm
1
9V battery (generic)
1
9V Battery Clip
8
LED (generic)
1
Ultrasonic Sensor - HC-SR04 (Generic)
1
Shift Register- Parallel to Serial
1
ELEGOO EL-KIT-012 UNO Project Smart Robot Car Kit V 3.0
1
IR receiver (generic)
1
Mustache
1
Jumper wires (generic)
1
Breadboard (generic)
1
Arduino UNO
1
IR Remote
4
DC Motor, 12 V
1
Male/Female Jumper Wires
Tools and machines
1
Screws
1
Soldering iron (generic)
1
Wood Sander
1
Tape, Velcro® Stick On Tape/Strip
1
Wood Carver
1
Jig Saw
1
Wood
1
Tape, Duct
1
Drill
Project description
Code
The Centaurus (Mark 1) - Code
arduino
Here is the first ever code of The Centaurus, hope you find this useful!
1//------------------------------------- 2//Code by Brayden Ford (Circuit-Praxis) 3//------------------------------------- 4//Welcome To Centaurus's Code 5//------------------------------------- 6 7//library for dual motor driver 8#include <SparkFun_TB6612.h> 9 10//library for remote 11#include <IRremote.h> 12 13//ultra sonic sensor pins 14int trigPin = 3; 15int echoPin = A2; 16int pingTravelTime; 17 18//remote 19int IRpin = A0; 20String Command; 21IRrecv IR(IRpin); 22decode_results cmd; 23 24//dual motor driver pins 25#define AN1 12 26#define BN1 7 27#define AN2 4 28#define BN2 8 29#define PWMA 5 30#define PWMB 6 31#define STBY 9 32 33//constants for motor configuration 34const int offsetA = 1; 35const int offsetB = -1; 36 37//define duel motor driver pins 38Motor motor1 = Motor(AN1, AN2, PWMA, offsetA, STBY); 39Motor motor2 = Motor(BN1, BN2, PWMB, offsetB, STBY); 40 41//delay 42int dt = 100; 43 44// Rnadom pattern for turning function 45long randomTurn = 43; 46 47//Shift regigister pins for LEDs 48const int dataPin = A3; 49const int clockPin = 13; 50const int latchPin = 2; 51 52//(LEDs) when forward 53byte fLeds = 0b11111111; 54//when slowed down 55byte sLeds = 0b01111110; 56//when slowed down more 57byte ssLeds = 0b00111100; 58//default LEDs 59byte dLeds = 0b01111110; 60//when back 61byte bLeds = 0b10000001; 62//turn LEDs off 63byte oLeds = 0b00000000; 64 65void setup() { 66 //setup serial monitor 67 Serial.begin(9600); 68 69 //IR remote 70 IR.enableIRIn(); 71 72 //ultra sonic sensor setup 73 pinMode(trigPin, OUTPUT); 74 pinMode(echoPin, INPUT); 75 //shift register 76 pinMode(clockPin, OUTPUT); 77 pinMode(latchPin, OUTPUT); 78 pinMode(dataPin, OUTPUT); 79 80 // Rnadom pattern for turning to mimic AI features 81 randomSeed(40); 82 83} 84 85void loop() { 86 87 //wait until button has been pressed 88 while (IR.decode(&cmd) == 0) { 89 90 } 91 92 ////////////////////////////////if IR = up arrow button - go forward 93 if (cmd.value == 0xFF629D) { 94 IR.enableIRIn(); 95 delay(60); 96 IR.resume(); 97 forward(motor1, motor2, 255); 98 digitalWrite(latchPin, LOW); 99 shiftOut(dataPin, clockPin, LSBFIRST, bLeds); 100 digitalWrite(latchPin, HIGH); 101 digitalWrite(latchPin, LOW); 102 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000000); 103 digitalWrite(latchPin, HIGH); 104 delay(40); 105 digitalWrite(latchPin, LOW); 106 shiftOut(dataPin, clockPin, LSBFIRST, 0b00011000); 107 digitalWrite(latchPin, HIGH); 108 delay(40); 109 digitalWrite(latchPin, LOW); 110 shiftOut(dataPin, clockPin, LSBFIRST, 0b00100100); 111 digitalWrite(latchPin, HIGH); 112 delay(40); 113 digitalWrite(latchPin, LOW); 114 shiftOut(dataPin, clockPin, LSBFIRST, 0b01000010); 115 digitalWrite(latchPin, HIGH); 116 delay(40); 117 digitalWrite(latchPin, LOW); 118 shiftOut(dataPin, clockPin, LSBFIRST, 0b10000001); 119 digitalWrite(latchPin, HIGH); 120 delay(40); 121 digitalWrite(latchPin, LOW); 122 shiftOut(dataPin, clockPin, LSBFIRST, 0b11111111); 123 digitalWrite(latchPin, HIGH); 124 } 125 else{ 126 if (cmd.value != 0xFF42BD) { 127 IR.enableIRIn(); 128 delay(60); 129 IR.resume(); 130 } 131 } 132 133 ////////////////////////////////if IR = down arrow button - go back 134 if (cmd.value == 0xFFA857) { 135 IR.enableIRIn(); 136 delay(60); 137 IR.resume(); 138 back(motor1, motor2, -160); 139 digitalWrite(latchPin, LOW); 140 shiftOut(dataPin, clockPin, LSBFIRST, bLeds); 141 digitalWrite(latchPin, HIGH); 142 digitalWrite(latchPin, LOW); 143 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000000); 144 digitalWrite(latchPin, HIGH); 145 delay(40); 146 digitalWrite(latchPin, LOW); 147 shiftOut(dataPin, clockPin, LSBFIRST, 0b10000001); 148 digitalWrite(latchPin, HIGH); 149 delay(40); 150 digitalWrite(latchPin, LOW); 151 shiftOut(dataPin, clockPin, LSBFIRST, 0b01000010); 152 digitalWrite(latchPin, HIGH); 153 delay(40); 154 digitalWrite(latchPin, LOW); 155 shiftOut(dataPin, clockPin, LSBFIRST, 0b00100100); 156 digitalWrite(latchPin, HIGH); 157 delay(40); 158 digitalWrite(latchPin, LOW); 159 shiftOut(dataPin, clockPin, LSBFIRST, 0b00011000); 160 digitalWrite(latchPin, HIGH); 161 delay(40); 162 digitalWrite(latchPin, LOW); 163 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000000); 164 digitalWrite(latchPin, HIGH); 165 } 166 167 ////////////////////////////////if IR = left arrow button - turn left 168 if (cmd.value == 0xFF22DD) { 169 IR.enableIRIn(); 170 delay(60); 171 IR.resume(); 172 motor1.brake(); 173 motor2.drive(255); 174 digitalWrite(latchPin, LOW); 175 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000000); 176 digitalWrite(latchPin, HIGH); 177 delay(20); 178 digitalWrite(latchPin, LOW); 179 shiftOut(dataPin, clockPin, LSBFIRST, 0b10000000); 180 digitalWrite(latchPin, HIGH); 181 delay(20); 182 digitalWrite(latchPin, LOW); 183 shiftOut(dataPin, clockPin, LSBFIRST, 0b01000000); 184 digitalWrite(latchPin, HIGH); 185 delay(20); 186 digitalWrite(latchPin, LOW); 187 shiftOut(dataPin, clockPin, LSBFIRST, 0b00100000); 188 digitalWrite(latchPin, HIGH); 189 delay(20); 190 digitalWrite(latchPin, LOW); 191 shiftOut(dataPin, clockPin, LSBFIRST, 0b00010000); 192 digitalWrite(latchPin, HIGH); 193 delay(20); 194 digitalWrite(latchPin, LOW); 195 shiftOut(dataPin, clockPin, LSBFIRST, 0b00001000); 196 digitalWrite(latchPin, HIGH); 197 delay(20); 198 digitalWrite(latchPin, LOW); 199 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000100); 200 digitalWrite(latchPin, HIGH); 201 delay(20); 202 digitalWrite(latchPin, LOW); 203 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000010); 204 digitalWrite(latchPin, HIGH); 205 delay(20); 206 digitalWrite(latchPin, LOW); 207 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000001); 208 digitalWrite(latchPin, HIGH); 209 delay(20); 210 digitalWrite(latchPin, LOW); 211 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000000); 212 digitalWrite(latchPin, HIGH); 213 delay(20); 214 } 215 216 ////////////////////////////////if IR = right arrow button - turn right 217 if (cmd.value == 0xFFC23D) { 218 IR.enableIRIn(); 219 delay(60); 220 IR.resume(); 221 motor1.drive(255); 222 motor2.brake(); 223 digitalWrite(latchPin, LOW); 224 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000000); 225 digitalWrite(latchPin, HIGH); 226 delay(20); 227 digitalWrite(latchPin, LOW); 228 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000001); 229 digitalWrite(latchPin, HIGH); 230 delay(20); 231 digitalWrite(latchPin, LOW); 232 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000010); 233 digitalWrite(latchPin, HIGH); 234 delay(20); 235 digitalWrite(latchPin, LOW); 236 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000100); 237 digitalWrite(latchPin, HIGH); 238 delay(20); 239 digitalWrite(latchPin, LOW); 240 shiftOut(dataPin, clockPin, LSBFIRST, 0b00001000); 241 digitalWrite(latchPin, HIGH); 242 delay(20); 243 digitalWrite(latchPin, LOW); 244 shiftOut(dataPin, clockPin, LSBFIRST, 0b00010000); 245 digitalWrite(latchPin, HIGH); 246 delay(20); 247 digitalWrite(latchPin, LOW); 248 shiftOut(dataPin, clockPin, LSBFIRST, 0b00100000); 249 digitalWrite(latchPin, HIGH); 250 delay(20); 251 digitalWrite(latchPin, LOW); 252 shiftOut(dataPin, clockPin, LSBFIRST, 0b01000000); 253 digitalWrite(latchPin, HIGH); 254 delay(20); 255 digitalWrite(latchPin, LOW); 256 shiftOut(dataPin, clockPin, LSBFIRST, 0b10000000); 257 digitalWrite(latchPin, HIGH); 258 delay(20); 259 digitalWrite(latchPin, LOW); 260 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000000); 261 digitalWrite(latchPin, HIGH); 262 delay(20); 263 } 264 265 ////////////////////////////////if IR = OK button - stop 266 if (cmd.value == 0xFF02FD) { 267 IR.enableIRIn(); 268 delay(60); 269 IR.resume(); 270 forward(motor1, motor2, 0); 271 digitalWrite(latchPin, LOW); 272 shiftOut(dataPin, clockPin, LSBFIRST, fLeds); 273 digitalWrite(latchPin, HIGH); 274 } 275 276 ////////////////////////////////////IR = # (number sign button) 277 if (cmd.value == 0xFF52AD) { 278 IR.enableIRIn(); 279 delay(10); 280 IR.resume(); 281 //turn on each LED 282 for (int i = 0; i < 256; i++) { 283 //take the latchClock low so the LEDs don't 284 //change while you're sending in bits 285 digitalWrite(latchPin, LOW); 286 //shift out the bits 287 shiftOut(dataPin, clockPin, MSBFIRST, i); 288 digitalWrite(latchPin, HIGH); 289 delay(60); 290 //wait until button has been pressed 291 while (IR.decode(&cmd) == 0) { 292 if (cmd.value == 0xFF52AD) { 293 for (int i = 0; i < 256; i++) { 294 //take the latchClock low so the LEDs don't 295 //change while you're sending in bits 296 digitalWrite(latchPin, LOW); 297 //shift out the bits 298 shiftOut(dataPin, clockPin, MSBFIRST, i); 299 digitalWrite(latchPin, HIGH); 300 delay(60); 301 } 302 } 303 } 304 } 305 } 306 ////////////////////////////////////if IR = * (star button) 307 if (cmd.value == 0xFF42BD) { 308 AI_driving(); 309 310 } 311} 312 313 void AI_driving(){ 314 315 //initialize and print vision distance of Centaurus 316 Serial.print(" "); 317 Serial.print("Distance of View is: "); 318 Serial.println(pingTravelTime); 319 digitalWrite(trigPin, LOW); 320 delayMicroseconds(10); 321 digitalWrite(trigPin, HIGH); 322 delayMicroseconds(10); 323 digitalWrite(trigPin, LOW); 324 pingTravelTime = pulseIn(echoPin, HIGH); 325 delay(100); 326 327 //forward 328 if (pingTravelTime > 3000) { 329 forward(motor1, motor2, 255); 330 digitalWrite(latchPin, LOW); 331 shiftOut(dataPin, clockPin, LSBFIRST, fLeds); 332 digitalWrite(latchPin, HIGH); 333 } 334 335 //slow down 336 if (pingTravelTime < 3000 && pingTravelTime > 2500) { 337 forward(motor1, motor2, 200); 338 digitalWrite(latchPin, LOW); 339 shiftOut(dataPin, clockPin, LSBFIRST, sLeds); 340 digitalWrite(latchPin, HIGH); 341 } 342 343 //slow down more 344 if (pingTravelTime < 2500 && pingTravelTime > 2000) { 345 forward(motor1, motor2, 160); 346 digitalWrite(latchPin, LOW); 347 shiftOut(dataPin, clockPin, LSBFIRST, ssLeds); 348 digitalWrite(latchPin, HIGH); 349 } 350 351 //back 352 if (pingTravelTime < 600 && pingTravelTime >= 0) { 353 back(motor1, motor2, -180); 354 digitalWrite(latchPin, LOW); 355 shiftOut(dataPin, clockPin, LSBFIRST, bLeds); 356 digitalWrite(latchPin, HIGH); 357 digitalWrite(latchPin, LOW); 358 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000000); 359 digitalWrite(latchPin, HIGH); 360 delay(140); 361 digitalWrite(latchPin, LOW); 362 shiftOut(dataPin, clockPin, LSBFIRST, 0b10000001); 363 digitalWrite(latchPin, HIGH); 364 delay(140); 365 digitalWrite(latchPin, LOW); 366 shiftOut(dataPin, clockPin, LSBFIRST, 0b01000010); 367 digitalWrite(latchPin, HIGH); 368 delay(140); 369 digitalWrite(latchPin, LOW); 370 shiftOut(dataPin, clockPin, LSBFIRST, 0b00100100); 371 digitalWrite(latchPin, HIGH); 372 delay(140); 373 digitalWrite(latchPin, LOW); 374 shiftOut(dataPin, clockPin, LSBFIRST, 0b00011000); 375 digitalWrite(latchPin, HIGH); 376 delay(140); 377 digitalWrite(latchPin, LOW); 378 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000000); 379 digitalWrite(latchPin, HIGH); 380 delay(140); 381 } 382 383 //turn (random direction) 384 if (pingTravelTime > 600 && pingTravelTime < 2200) { 385 //generate and print decesion thought process system 386 randomTurn = random(2); 387 Serial.print(" randomTurn Value is: "); 388 Serial.print(randomTurn); 389 if (randomTurn == 1) { 390 motor1.drive(200); 391 motor2.brake(); 392 digitalWrite(latchPin, LOW); 393 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000000); 394 digitalWrite(latchPin, HIGH); 395 delay(80); 396 digitalWrite(latchPin, LOW); 397 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000001); 398 digitalWrite(latchPin, HIGH); 399 delay(80); 400 digitalWrite(latchPin, LOW); 401 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000010); 402 digitalWrite(latchPin, HIGH); 403 delay(80); 404 digitalWrite(latchPin, LOW); 405 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000100); 406 digitalWrite(latchPin, HIGH); 407 delay(80); 408 digitalWrite(latchPin, LOW); 409 shiftOut(dataPin, clockPin, LSBFIRST, 0b00001000); 410 digitalWrite(latchPin, HIGH); 411 delay(80); 412 digitalWrite(latchPin, LOW); 413 shiftOut(dataPin, clockPin, LSBFIRST, 0b00010000); 414 digitalWrite(latchPin, HIGH); 415 delay(80); 416 digitalWrite(latchPin, LOW); 417 shiftOut(dataPin, clockPin, LSBFIRST, 0b00100000); 418 digitalWrite(latchPin, HIGH); 419 delay(80); 420 digitalWrite(latchPin, LOW); 421 shiftOut(dataPin, clockPin, LSBFIRST, 0b01000000); 422 digitalWrite(latchPin, HIGH); 423 delay(80); 424 digitalWrite(latchPin, LOW); 425 shiftOut(dataPin, clockPin, LSBFIRST, 0b10000000); 426 digitalWrite(latchPin, HIGH); 427 delay(80); 428 digitalWrite(latchPin, LOW); 429 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000000); 430 digitalWrite(latchPin, HIGH); 431 delay(80); 432 } 433 if (randomTurn == 0) { 434 motor1.brake(); 435 motor2.drive(200); 436 digitalWrite(latchPin, LOW); 437 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000000); 438 digitalWrite(latchPin, HIGH); 439 delay(80); 440 digitalWrite(latchPin, LOW); 441 shiftOut(dataPin, clockPin, LSBFIRST, 0b10000000); 442 digitalWrite(latchPin, HIGH); 443 delay(80); 444 digitalWrite(latchPin, LOW); 445 shiftOut(dataPin, clockPin, LSBFIRST, 0b01000000); 446 digitalWrite(latchPin, HIGH); 447 delay(80); 448 digitalWrite(latchPin, LOW); 449 shiftOut(dataPin, clockPin, LSBFIRST, 0b00100000); 450 digitalWrite(latchPin, HIGH); 451 delay(80); 452 digitalWrite(latchPin, LOW); 453 shiftOut(dataPin, clockPin, LSBFIRST, 0b00010000); 454 digitalWrite(latchPin, HIGH); 455 delay(80); 456 digitalWrite(latchPin, LOW); 457 shiftOut(dataPin, clockPin, LSBFIRST, 0b00001000); 458 digitalWrite(latchPin, HIGH); 459 delay(80); 460 digitalWrite(latchPin, LOW); 461 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000100); 462 digitalWrite(latchPin, HIGH); 463 delay(80); 464 digitalWrite(latchPin, LOW); 465 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000010); 466 digitalWrite(latchPin, HIGH); 467 delay(80); 468 digitalWrite(latchPin, LOW); 469 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000001); 470 digitalWrite(latchPin, HIGH); 471 delay(80); 472 digitalWrite(latchPin, LOW); 473 shiftOut(dataPin, clockPin, LSBFIRST, 0b00000000); 474 digitalWrite(latchPin, HIGH); 475 delay(80); 476 } 477 } 478 //forward 479 if(pingTravelTime < 0) { 480 forward(motor1, motor2, 255); 481 digitalWrite(latchPin, LOW); 482 shiftOut(dataPin, clockPin, LSBFIRST, fLeds); 483 digitalWrite(latchPin, HIGH); 484 } 485 486 } 487 488//------------------------------------------------------------------------ 489//Thanks for visiting the code of Centaurus. Hope you find this useful! 490//------------------------------------------------------------------------
Comments
Only logged in users can leave comments