Components and supplies
LM2596 DC-DC step down transformer module
Jumper wires (generic)
HC-05 Bluetooth Module
5mm SS rod (50 cm)
DHT11 Temperature & Humidity Sensor (4 pins)
Multiple output voltage conversion module (5V, 3.3V)
JX 300 Servo Motor (300 degrees rotation)
RGB LED module
Speaker: 3W, 4 ohms
7.4 V 2S Lipo 15 C 800mAh Battery
Resistor 1k ohm
Standard LCD - 16x2 White on Blue
Resistor 221 ohm
General Purpose Transistor NPN
USB MP3 Audio Sound Player Decoder Module
Arduino Mega 2560
Bolt and Nut (M6x110)
Servo Arm metal disk
Speaker 3W 4 ohms
Bolts and nuts (M2.5x12, M2.5x20)
Cooling Fan
Resistor 10k ohm
I2C LCD backpack
Wheels with tyres
ON/OFF switch
M3x15 metal hex spacer standoffs
5 mm rigid flange coupling for nema 17 motors
LM35 Temperature sensing module
9V battery (generic)
JX 180 Servo (180 degrees rotation)
Ultrasonic Sensor - HC-SR04 (Generic)
M3x35 metal hex spacer standoffs
NEMA 17 Stepper Motor
PIR Motion Sensor (generic)
LDR light sensor module
28BYJ-48 12V DC 32 step Motor
Mini Breadboard
ISD 1820 Voice recorder module
Pushbutton switch 12mm
11.1 V 3S lipo 25 C 2200mAh Battery
ULN2003 Stepper Driver
Bolt and Nut (M6x60)
EMAX ES 3104 Servo Motor (180 degrees rotation)
Tools and machines
Electric Drill with drill bits of different size
Socket wrench
Soldering iron (generic)
Allen Wrench
Smoothing File
Fluke Multimeter
Super Glue
Screw Driver (plus)
Hand held Saw
Screw Driver (minus)
3D Printer (generic)
Apps and platforms
Arduino IDE
MIT App Inventor 2
Project description
Code
Roger Bot Main Code
arduino
I have tried to explain the code through commented out section. Most of the functions defined will be self explanatory.
1/* 2aux1, aux2 and aux3 will send 2byte number 9200, 9300, 9400 respectively which can be used for additional programs within the main code. 3written by: hannu_hell 4Special shoutout to youtuber Robojax, How to Mechatronics, Mert Arduino for this code is not purely mine and i have tweaked sections of various codes from the above mentioned authors to suit my project. 5What i have written is in no way perfect and i would be happy to accept any modifications. Thanks. 6 7ROGER BOT 8 9 Pin No Description 10 11 TX Transmit Serial Communication to Bluetooth module 12 RX Receive Serial Communication to Bluetooth module 13 2 Signal to Servo 4 14 3 Signal to Servo 5 15 4 Signal to Servo 3 16 5 Signal to Servo 1 17 6 Roger Head Right LED (Red) 18 7 Roger Head Right LED (Yellow) 19 8 Roger Head Right LED (Green) 20 9 Roger Head Left LED (Green) 21 10 Roger Head Left LED (Yellow) 22 11 Roger Head Left LED (Red) 23 12 RGB and Blue LED 24 13 Red LED set 25 A1 LM 35 Temperature Signal 26 A2 Photocell Signal 27 A15 Driver Cooling Fan 28 22 N/A 29 23 PIR Signal 30 24 N/A 31 25 N/A 32 26 N/A 33 27 IN 1 Gripper Motor 34 28 Signal to Servo 6 (Base Rotation Servo) 35 29 IN 2 Gripper Motor 36 30 Signal to Servo 7 (Steering Servo) 37 31 IN 3 Gripper Motor 38 32 Signal to Servo 2 39 33 IN 4 Gripper Motor 40 34 Left Side Drive Motor LED 41 35 TRIG Sonic Sensor 42 36 Drive Motor 1 DIR Pin 43 37 Drive Motor 1 STEP Pin 44 38 Drive Motor 2 DIR Pin 45 39 Drive Motor 2 STEP PIN 46 40 Drive Motor 1 Arm Pin 47 41 Drive Motor 2 Arm Pin 48 42 MP3 - Previous Signal 49 43 Gripper End Stop Switch 50 44 MP3 - Next Signal 51 45 DHT11 - Humidity Signal 52 46 MP3 Play/Pause Signal 53 47 MP3 Repeat Signal 54 48 ISD1820 Voice Record 55 49 ISD1820 Voice Playback 56 50 Right Side Drive Motor LED 57 51 Signal to Servo 8 (Head Servo) 58 52 ECHO Sonic Sensor 59 53 MP3 Power Signal 60 SDA LCD Display via IIC 61 SCL LCD Display via IIC 62 63*/ 64 65#include <Servo.h> 66#include <LiquidCrystal_I2C.h> 67#include <Wire.h> 68#include <dht.h> 69dht DHT; 70#define DHT11_PIN 45 71 72Servo myservo1, myservo2, myservo3, myservo4,myservo5,myservo6,myservo7,myservo8; 73LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7,3, POSITIVE); 74 75 76 int _step = 0; 77 const int Pin1 = 27; 78 const int Pin2 = 29; 79 const int Pin3 = 31; 80 const int Pin4 = 33; 81 const int sleep = 40; 82 const int sleep2 = 41; 83 const int stepPin = 37; 84 const int dirPin = 36; 85 const int stepPin2 = 39; 86 const int dirPin2 = 38; 87 const int redLed = 13; 88 const int rgbLed = 12; 89 const int rightsideLed = 50; 90 const int leftsideLed = 34; 91 const int rec = 48; 92 const int playback = 49; 93 const int head1redLed = 11; 94 const int head1yellowLed = 10; 95 const int head1greenLed = 9; 96 const int head2redLed = 6; 97 const int head2yellowLed = 7; 98 const int head2greenLed = 8; 99 const int trigPin = 35; 100 const int echoPin = 52; 101 const int humidity = 45; 102 const int tempPin = A1; 103 const int fan = A15; 104 const int mp3Power = 53; 105 const int mp3Play = 46; 106 const int mp3Next = 44; 107 const int mp3Previous = 42; 108 const int mp3Repeat = 47; 109 long duration; 110 int distanceInch, distanceCm, avedist90, avedist60, avedist120; 111 boolean dir;// false=clockwise, true=anticlockwise 112 113 114void setup() 115{ 116 lcd.begin(16, 2); 117 118 119 pinMode(Pin1, OUTPUT); 120 pinMode(Pin2, OUTPUT); 121 pinMode(Pin3, OUTPUT); 122 pinMode(Pin4, OUTPUT); 123 pinMode(50, OUTPUT); 124 pinMode(34, OUTPUT); 125 pinMode(12, OUTPUT); 126 pinMode(13, OUTPUT); 127 pinMode(48, OUTPUT); 128 pinMode(49, OUTPUT); 129 pinMode(A15, OUTPUT); 130 pinMode(trigPin, OUTPUT); 131 pinMode(echoPin, INPUT); 132 pinMode(tempPin, INPUT); 133 pinMode(53, OUTPUT); 134 pinMode(42, OUTPUT); 135 pinMode(46, OUTPUT); 136 pinMode(47, OUTPUT); 137 pinMode(44, OUTPUT); 138 139 for (int i = 36; i<42; i++){ 140 pinMode(i, OUTPUT); 141 } 142 for (int j = 6; j<12; j++){ 143 pinMode(j, OUTPUT); 144 delay(5); 145 digitalWrite(j, LOW); 146 } 147 148 149 150//ON START-UP THREAD--------------------------- 151 152 lcdmain(); 153 delay(3000); 154 lcd.clear(); 155 digitalWrite(redLed, LOW); 156 digitalWrite(rgbLed, LOW); 157 digitalWrite(rightsideLed, LOW); 158 digitalWrite(leftsideLed, LOW); 159 160 for (int k = 0; k<16; k++){ 161 lcd.setCursor(k, 0); 162 lcd.print("Arming.."); 163 delay(500); 164 lcd.clear(); 165 } 166 167 myservo1.attach(5); 168 myservo2.attach(32); 169 myservo3.attach(4); 170 myservo4.attach(2); 171 myservo5.attach(3); 172 myservo6.attach(28); 173 myservo7.attach(30); 174 myservo8.attach(51); 175 176 delay(1000); 177 178// armCheck(); This function is for checking if all the arm servos and movements are ok. i have commented it out for now. 179 180 lcd.setCursor(5, 0); 181 lcd.print("Ready for"); 182 lcd.setCursor(5, 1); 183 lcd.print("Bluetooth"); 184 delay(1000); 185 lcd.clear(); 186 lcdmain(); 187 delay(100); 188 Serial.begin(9600); 189 190} 191 192 193 194void loop() 195{ 196 197 if(Serial.available()>= 2 ) 198 { 199 200 unsigned int servopos = Serial.read(); 201 unsigned int servopos1 = Serial.read(); 202 unsigned int realservo = (servopos1 *256) + servopos; 203 Serial.println(realservo); 204 205 if (realservo >= 1000 && realservo < 1180) { 206 int servo1 = realservo; 207 int servo2 = realservo; 208 servo1 = map(servo1, 1000, 1176, 0, 176); 209 servo2 = map(servo2, 1000, 1180, 180, 0); 210 myservo1.write(servo1); 211 myservo2.write(servo2+5.5); 212 delay(25); 213 } 214 215 if (realservo >= 2000 && realservo < 2136) { 216 int servo3 = realservo; 217 servo3 = map(servo3, 2000, 2136, 20, 145); 218 myservo3.write(servo3); 219 delay(15); 220 } 221 if (realservo >= 3000 && realservo < 3180) { 222 int servo4 = realservo; 223 servo4 = map(servo4, 3000, 3180, 0, 180); 224 myservo4.write(servo4); 225 delay(15); 226 } 227 if (realservo >= 4000 && realservo < 4180) { 228 int servo5 = realservo; 229 servo5 = map(servo5, 4000, 4180, 0, 180); 230 myservo5.write(servo5); 231 delay(20); 232 } 233 if (realservo >= 5000 && realservo < 5180) { 234 int servo6 = realservo; 235 servo6 = map(servo6, 5000, 5180, 0, 180); 236 myservo6.write(servo6); 237 238 delay(15); 239 } 240 if (realservo >= 6000 && realservo < 6180) { 241 int servo7 = realservo; 242 servo7 = map(servo7, 6000, 6180, 0, 180); 243 myservo7.write(servo7); 244 delay(2); 245 } 246 247 if (realservo == 7000) { 248 grippertightMove(3000, 1.2); 249 } 250 if (realservo == 7100) { 251 gripperlooseMove(3000, 1.2); 252 } 253 if (realservo == 7200){ 254 forwardMove(60, 15); 255 } 256 if (realservo == 7300){ 257 reverseMove(60, 15); 258 } 259 if (realservo == 7400){ 260 clockwiseMove(50, 15); 261 } 262 if (realservo == 7500){ 263 anticlockwiseMove(50, 15); 264 } 265 if (realservo == 7600){ 266 forwardMove(30, 15); 267 } 268 if (realservo == 7700){ 269 reverseMove(30, 15); 270 } 271 if (realservo == 7800){ 272 digitalWrite(redLed, HIGH); 273 digitalWrite(rgbLed, HIGH); 274 digitalWrite(rightsideLed, HIGH); 275 digitalWrite(leftsideLed, HIGH); 276 } 277 if (realservo == 7900){ 278 digitalWrite(redLed, LOW); 279 digitalWrite(rgbLed, LOW); 280 digitalWrite(rightsideLed, LOW); 281 digitalWrite(leftsideLed, LOW); 282 } 283 if (realservo == 8000){ 284 record(8000); 285 } 286 if (realservo == 8100){ 287 playBack(8000); 288 } 289 if (realservo == 8200){ 290 powerSave(); 291 } 292 if (realservo == 8300){ 293 analogWrite(fan, 1023); 294 } 295 if (realservo == 8400){ 296 SURVEILLANCE(100, 2000); 297 } 298 if (realservo == 8500){ 299 SENSORDATA(); 300 } 301 //if (realservo == 8600){ 302 //WATCHDOG(); 303 //} 304 //if (realservo == 8700){ 305 //AUX button1 306 //} 307 //if (realservo == 8800){ 308 //AUX button2 309 //} 310 //if (realservo == 8900){ 311 //AUX button3 312 //} 313 if (realservo == 9000){ 314 digitalWrite(mp3Play, HIGH); 315 delay(250); 316 digitalWrite(mp3Play, LOW); 317 delay(10); 318 } 319 if (realservo == 9100){ 320 digitalWrite(mp3Next, HIGH); 321 delay(250); 322 digitalWrite(mp3Next, LOW); 323 } 324 if (realservo == 9200){ 325 digitalWrite(mp3Previous, HIGH); 326 delay(250); 327 digitalWrite(mp3Previous, LOW); 328 } 329 if (realservo == 9300){ 330 digitalWrite(mp3Repeat, HIGH); 331 delay(250); 332 digitalWrite(mp3Repeat, LOW); 333 } 334 if (realservo == 9400){ 335 digitalWrite(mp3Power, HIGH); 336 } 337 338} 339} 340 341// DRIVE MOTORS FUNCTIONS DEFINED BELOW-------------------------- 342void forwardMove(int fwdPace, int fwdpaceDelay){ 343 digitalWrite(sleep, HIGH); 344 digitalWrite(sleep2, HIGH); 345 delay(5); 346 digitalWrite(dirPin, HIGH); 347 digitalWrite(dirPin2, LOW); 348 for(int fwd=0; fwd<fwdPace; fwd++){ 349 digitalWrite(stepPin, HIGH); 350 digitalWrite(stepPin2, HIGH); 351 delay(fwdpaceDelay); 352 digitalWrite(stepPin, LOW); 353 digitalWrite(stepPin2, LOW); 354 delay(fwdpaceDelay); 355 } 356 digitalWrite(sleep, LOW); 357 digitalWrite(sleep2, LOW); 358 delay(5); 359} 360 361void reverseMove(int rvsPace, int rvspaceDelay){ 362 digitalWrite(sleep, HIGH); 363 digitalWrite(sleep2, HIGH); 364 delay(5); 365 digitalWrite(dirPin, LOW); 366 digitalWrite(dirPin2, HIGH); 367 for(int rvs=0; rvs<rvsPace; rvs++){ 368 digitalWrite(stepPin, HIGH); 369 digitalWrite(stepPin2, HIGH); 370 delay(rvspaceDelay); 371 digitalWrite(stepPin, LOW); 372 digitalWrite(stepPin2, LOW); 373 delay(rvspaceDelay); 374 } 375 digitalWrite(sleep, LOW); 376 digitalWrite(sleep2, LOW); 377 delay(5); 378} 379 380void clockwiseMove(int clkPace, int clkpaceDelay){ 381 digitalWrite(sleep, HIGH); 382 digitalWrite(sleep2, HIGH); 383 delay(5); 384 digitalWrite(dirPin, HIGH); 385 digitalWrite(dirPin2, HIGH); 386 for(int clk=0; clk<clkPace; clk++){ 387 digitalWrite(stepPin, HIGH); 388 digitalWrite(stepPin2, HIGH); 389 delay(clkpaceDelay); 390 digitalWrite(stepPin, LOW); 391 digitalWrite(stepPin2, LOW); 392 delay(clkpaceDelay); 393 } 394 digitalWrite(sleep, LOW); 395 digitalWrite(sleep2, LOW); 396 delay(5); 397} 398 399void anticlockwiseMove(int aclkPace, int aclkpaceDelay){ 400 digitalWrite(sleep, HIGH); 401 digitalWrite(sleep2, HIGH); 402 delay(5); 403 digitalWrite(dirPin, LOW); 404 digitalWrite(dirPin2, LOW); 405 for(int aclk=0; aclk<aclkPace; aclk++){ 406 digitalWrite(stepPin, HIGH); 407 digitalWrite(stepPin2, HIGH); 408 delay(aclkpaceDelay); 409 digitalWrite(stepPin, LOW); 410 digitalWrite(stepPin2, LOW); 411 delay(aclkpaceDelay); 412 } 413 digitalWrite(sleep, LOW); 414 digitalWrite(sleep2, LOW); 415 delay(5); 416} 417 418 419// GRIPPER MOTOR FUNCTIONS DEFINED------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 420 421void grippertightMove(int grptightPace, int grptightpaceDelay){ 422 for (int grptight=0; grptight<grptightPace; grptight++){ 423 switch(_step){ 424 case 0: 425 digitalWrite(Pin1, LOW); 426 digitalWrite(Pin2, LOW); 427 digitalWrite(Pin3, LOW); 428 digitalWrite(Pin4, HIGH); 429 break; 430 case 1: 431 digitalWrite(Pin1, LOW); 432 digitalWrite(Pin2, LOW); 433 digitalWrite(Pin3, HIGH); 434 digitalWrite(Pin4, HIGH); 435 break; 436 case 2: 437 digitalWrite(Pin1, LOW); 438 digitalWrite(Pin2, LOW); 439 digitalWrite(Pin3, HIGH); 440 digitalWrite(Pin4, LOW); 441 break; 442 case 3: 443 digitalWrite(Pin1, LOW); 444 digitalWrite(Pin2, HIGH); 445 digitalWrite(Pin3, HIGH); 446 digitalWrite(Pin4, LOW); 447 break; 448 case 4: 449 digitalWrite(Pin1, LOW); 450 digitalWrite(Pin2, HIGH); 451 digitalWrite(Pin3, LOW); 452 digitalWrite(Pin4, LOW); 453 break; 454 case 5: 455 digitalWrite(Pin1, HIGH); 456 digitalWrite(Pin2, HIGH); 457 digitalWrite(Pin3, LOW); 458 digitalWrite(Pin4, LOW); 459 break; 460 case 6: 461 digitalWrite(Pin1, HIGH); 462 digitalWrite(Pin2, LOW); 463 digitalWrite(Pin3, LOW); 464 digitalWrite(Pin4, LOW); 465 break; 466 case 7: 467 digitalWrite(Pin1, HIGH); 468 digitalWrite(Pin2, LOW); 469 digitalWrite(Pin3, LOW); 470 digitalWrite(Pin4, HIGH); 471 break; 472 default: 473 digitalWrite(Pin1, LOW); 474 digitalWrite(Pin2, LOW); 475 digitalWrite(Pin3, LOW); 476 digitalWrite(Pin4, LOW); 477 break; 478 } 479 _step--; 480 481 if(_step<0){ 482 _step=7; 483 } 484 if(_step>7){ 485 _step=0; 486 } 487 delay(grptightpaceDelay); 488 489 } 490} 491 492void gripperlooseMove(int grploosePace, int grploosepaceDelay){ 493 for(int grploose=0; grploose<grploosePace; grploose++){ 494 switch(_step){ 495 case 0: 496 digitalWrite(Pin1, LOW); 497 digitalWrite(Pin2, LOW); 498 digitalWrite(Pin3, LOW); 499 digitalWrite(Pin4, HIGH); 500 break; 501 case 1: 502 digitalWrite(Pin1, LOW); 503 digitalWrite(Pin2, LOW); 504 digitalWrite(Pin3, HIGH); 505 digitalWrite(Pin4, HIGH); 506 break; 507 case 2: 508 digitalWrite(Pin1, LOW); 509 digitalWrite(Pin2, LOW); 510 digitalWrite(Pin3, HIGH); 511 digitalWrite(Pin4, LOW); 512 break; 513 case 3: 514 digitalWrite(Pin1, LOW); 515 digitalWrite(Pin2, HIGH); 516 digitalWrite(Pin3, HIGH); 517 digitalWrite(Pin4, LOW); 518 break; 519 case 4: 520 digitalWrite(Pin1, LOW); 521 digitalWrite(Pin2, HIGH); 522 digitalWrite(Pin3, LOW); 523 digitalWrite(Pin4, LOW); 524 break; 525 case 5: 526 digitalWrite(Pin1, HIGH); 527 digitalWrite(Pin2, HIGH); 528 digitalWrite(Pin3, LOW); 529 digitalWrite(Pin4, LOW); 530 break; 531 case 6: 532 digitalWrite(Pin1, HIGH); 533 digitalWrite(Pin2, LOW); 534 digitalWrite(Pin3, LOW); 535 digitalWrite(Pin4, LOW); 536 break; 537 case 7: 538 digitalWrite(Pin1, HIGH); 539 digitalWrite(Pin2, LOW); 540 digitalWrite(Pin3, LOW); 541 digitalWrite(Pin4, HIGH); 542 break; 543 default: 544 digitalWrite(Pin1, LOW); 545 digitalWrite(Pin2, LOW); 546 digitalWrite(Pin3, LOW); 547 digitalWrite(Pin4, LOW); 548 break; 549 } 550 _step++; 551 if(_step>7){ 552 _step=0; 553 } 554 if(_step<0){ 555 _step=7; 556 } 557 delay(grploosepaceDelay); 558 559 } 560} 561 562 563// SERVO MOTORS' FUNCTIONS DEFINED BELOW-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 564 565 566void dualservoSetposition(int servoAngle){ 567 int servo1 = servoAngle; 568 int servo2 = servoAngle; 569 servo1 = map(servo1, 0, 176, 0, 176); 570 servo2 = map(servo2, 0, 180, 180, 0); 571 myservo1.write(servo1); 572 myservo2.write((servo2)+5.5); 573} 574 575void servo3Setposition(int servo3Angle){ 576 int servo3 = servo3Angle; 577 servo3 = map(servo3, 0, 136, 0, 136); 578 myservo3.write(servo3); 579} 580 581void servo4Setposition(int servo4Angle){ 582 int servo4 = servo4Angle; 583 servo4 = map(servo4, 0, 180, 0, 180); 584 myservo4.write(servo4); 585} 586 587void servo5Setposition(int servo5Angle){ 588 int servo5 = servo5Angle; 589 servo5 = map(servo5, 0, 180, 0, 180); 590 myservo5.write(servo5); 591} 592 593void servo6Setposition(int servo6Angle){ 594 int servo6 = servo6Angle; 595 servo6 = map(servo6, 0, 180, 0, 180); 596 myservo6.write(servo6); 597} 598 599void servo7Setposition(int servo7Angle){ 600 int servo7 = servo7Angle; 601 servo7 = map(servo7, 0, 180, 0, 180); 602 myservo7.write(servo7); 603} 604 605void servo8Setposition(int servo8Angle){ 606 int servo8 = servo8Angle; 607 servo8 = map(servo8, 0, 180, 0, 180); 608 myservo8.write(servo8); 609} 610 611void dualservoMove(int dualservoAngle, int dualservodesiredAngle, int dualservostepDelay){ 612 if (dualservodesiredAngle > dualservoAngle){ 613 for (dualservoAngle; dualservoAngle < dualservodesiredAngle; dualservoAngle++){ 614 int servo1 = dualservoAngle; 615 int servo2 = dualservoAngle; 616 servo1 = map(servo1, 0, 176, 0, 176); 617 servo2 = map(servo2, 0, 180, 180, 0); 618 myservo1.write(servo1); 619 myservo2.write((servo2)+5.5); 620 delay(dualservostepDelay); 621 } 622 } 623 if (dualservodesiredAngle < dualservoAngle){ 624 for (dualservoAngle; dualservoAngle > dualservodesiredAngle; dualservoAngle--){ 625 int servo1 = dualservoAngle; 626 int servo2 = dualservoAngle; 627 servo1 = map(servo1, 0, 176, 0, 176); 628 servo2 = map(servo2, 0, 180, 180, 0); 629 myservo1.write(servo1); 630 myservo2.write((servo2)+5.5); 631 delay(dualservostepDelay); 632 } 633 } 634} 635 636void servo3Move(int servo3Angle, int servo3desiredAngle, int servo3stepDelay){ 637 if (servo3desiredAngle > servo3Angle){ 638 for (servo3Angle; servo3Angle < servo3desiredAngle; servo3Angle++){ 639 int servo3 = servo3Angle; 640 servo3 = map(servo3, 0, 136, 0, 136); 641 myservo3.write(servo3); 642 delay(servo3stepDelay); 643 } 644 } 645 if (servo3desiredAngle < servo3Angle){ 646 for (servo3Angle; servo3Angle > servo3desiredAngle; servo3Angle--){ 647 int servo3 = servo3Angle; 648 servo3 = map(servo3, 0, 136, 0, 136); 649 myservo3.write(servo3); 650 delay(servo3stepDelay); 651 } 652 } 653} 654 655void servo4Move(int servo4Angle, int servo4desiredAngle, int servo4stepDelay){ 656 if (servo4desiredAngle > servo4Angle){ 657 for (servo4Angle; servo4Angle < servo4desiredAngle; servo4Angle++){ 658 int servo4 = servo4Angle; 659 servo4 = map(servo4, 0, 136, 0, 136); 660 myservo4.write(servo4); 661 delay(servo4stepDelay); 662 } 663 } 664 if (servo4desiredAngle < servo4Angle){ 665 for (servo4Angle; servo4Angle > servo4desiredAngle; servo4Angle--){ 666 int servo4 = servo4Angle; 667 servo4 = map(servo4, 0, 136, 0, 136); 668 myservo4.write(servo4); 669 delay(servo4stepDelay); 670 } 671 } 672} 673 674void servo5Move(int servo5Angle, int servo5desiredAngle, int servo5stepDelay){ 675 if (servo5desiredAngle > servo5Angle){ 676 for (servo5Angle; servo5Angle < servo5desiredAngle; servo5Angle++){ 677 int servo5 = servo5Angle; 678 servo5 = map(servo5, 0, 136, 0, 136); 679 myservo5.write(servo5); 680 delay(servo5stepDelay); 681 } 682 } 683 if (servo5desiredAngle < servo5Angle){ 684 for (servo5Angle; servo5Angle > servo5desiredAngle; servo5Angle--){ 685 int servo5 = servo5Angle; 686 servo5 = map(servo5, 0, 136, 0, 136); 687 myservo5.write(servo5); 688 delay(servo5stepDelay); 689 690 } 691 } 692} 693 694void servo6Move(int servo6Angle, int servo6desiredAngle, int servo6stepDelay){ 695 if (servo6desiredAngle > servo6Angle){ 696 for (servo6Angle; servo6Angle < servo6desiredAngle; servo6Angle++){ 697 int servo6 = servo6Angle; 698 servo6 = map(servo6, 0, 136, 0, 136); 699 myservo6.write(servo6); 700 delay(servo6stepDelay); 701 } 702 } 703 if (servo6desiredAngle < servo6Angle){ 704 for (servo6Angle; servo6Angle > servo6desiredAngle; servo6Angle--){ 705 int servo6 = servo6Angle; 706 servo6 = map(servo6, 0, 136, 0, 136); 707 myservo6.write(servo6); 708 delay(servo6stepDelay); 709 710 } 711 } 712} 713 714void servo7Move(int servo7Angle, int servo7desiredAngle, int servo7stepDelay){ 715 if (servo7desiredAngle > servo7Angle){ 716 for (servo7Angle; servo7Angle < servo7desiredAngle; servo7Angle++){ 717 int servo7 = servo7Angle; 718 servo7 = map(servo7, 0, 136, 0, 136); 719 myservo7.write(servo7); 720 delay(servo7stepDelay); 721 } 722 } 723 if (servo7desiredAngle < servo7Angle){ 724 for (servo7Angle; servo7Angle > servo7desiredAngle; servo7Angle--){ 725 int servo7 = servo7Angle; 726 servo7 = map(servo7, 0, 136, 0, 136); 727 myservo7.write(servo7); 728 delay(servo7stepDelay); 729 730 } 731 } 732} 733 734void servo8Move(int servo8Angle, int servo8desiredAngle, int servo8stepDelay){ 735 if (servo8desiredAngle > servo8Angle){ 736 for (servo8Angle; servo8Angle < servo8desiredAngle; servo8Angle++){ 737 int servo8 = servo8Angle; 738 servo8 = map(servo8, 0, 136, 0, 136); 739 myservo8.write(servo8); 740 delay(servo8stepDelay); 741 } 742 } 743 if (servo8desiredAngle < servo8Angle){ 744 for (servo8Angle; servo8Angle > servo8desiredAngle; servo8Angle--){ 745 int servo8 = servo8Angle; 746 servo8 = map(servo8, 0, 136, 0, 136); 747 myservo8.write(servo8); 748 delay(servo8stepDelay); 749 750 } 751 } 752} 753 754// ISD VOICE RECORD FUNCTIONS DEFINED-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 755void record(int recordTime){ 756 digitalWrite(rec, HIGH); 757 delay(recordTime); 758 digitalWrite(rec, LOW); 759 delay(10); 760} 761 762void playBack(int playbackTime){ 763 digitalWrite(playback, HIGH); 764 delay(playbackTime); 765 digitalWrite(playback, LOW); 766 delay(10); 767} 768 769// MISC FUNCTIONS------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 770void powerSave(){ 771 digitalWrite(mp3Power, LOW); 772 digitalWrite(redLed, LOW); 773 digitalWrite(rgbLed, LOW); 774 digitalWrite(rightsideLed, LOW); 775 digitalWrite(leftsideLed, LOW); 776 analogWrite(fan, 0); 777 digitalWrite(head1redLed, LOW); 778 digitalWrite(head1yellowLed, LOW); 779 digitalWrite(head1greenLed, LOW); 780 digitalWrite(head2redLed, LOW); 781 digitalWrite(head2yellowLed, LOW); 782 digitalWrite(head2greenLed, LOW); 783} 784 785void lcdmain(){ 786 lcd.setCursor(5, 0); 787 lcd.print("RogerbOt"); 788 lcd.setCursor(5, 1); 789 lcd.print("inc."); 790} 791 792void armCheck(){ 793 lcd.setCursor(5, 0); 794 lcd.print("Roger Arm"); 795 lcd.setCursor(5, 1); 796 lcd.print("Check.."); 797 delay(1000); 798 799 800 dualservoSetposition(95); 801 delay(500); 802 servo3Setposition(90); 803 delay(500); 804 servo4Setposition(90); 805 delay(500); 806 servo5Setposition(90); 807 delay(500); 808 servo6Setposition(90); 809 delay(500); 810 servo6Move(90, 150, 50); 811 delay(500); 812 servo6Move(150, 90, 50); 813 delay(1000); 814 servo6Move(90, 60, 50); 815 delay(500); 816 servo6Move(60, 90, 50); 817 delay(1000); 818 dualservoMove(95, 120, 50); 819 delayMicroseconds(30); 820 servo3Move(90, 110, 35); 821 delayMicroseconds(30); 822 servo4Move(90, 70, 35); 823 delayMicroseconds(30); 824 servo5Move(90, 170, 5); 825 delayMicroseconds(3000); 826 servo5Move(170, 90, 5); 827 delayMicroseconds(30); 828 servo4Move(70, 90, 35); 829 delayMicroseconds(30); 830 servo3Move(110, 90, 35); 831 delayMicroseconds(30); 832 dualservoMove(120, 95, 50); 833 834 delay(1000); 835 836 dualservoMove(95, 75, 60); 837 delay(500); 838 servo3Move(90, 70, 50); 839 delay(500); 840 servo4Move(90, 110, 50); 841 delay(500); 842 servo5Move(90, 10, 5); 843 delay(500); 844 servo5Move(10, 90, 5); 845 delay(500); 846 servo4Move(110, 90, 50); 847 delay(500); 848 servo3Move(70, 90, 50); 849 delay(500); 850 dualservoMove(75, 95, 60); 851 852 delay(1000); 853 854 lcd.clear(); 855 lcd.setCursor(5, 0); 856 lcd.print("Arm Check"); 857 lcd.setCursor(5, 1); 858 lcd.print("Completed"); 859 delay(1500); 860 lcd.clear(); 861} 862 863int surveillance(){ 864 865digitalWrite(trigPin, LOW); 866delayMicroseconds(2); 867digitalWrite(trigPin, HIGH); 868delayMicroseconds(10); 869digitalWrite(trigPin, LOW); 870duration = pulseIn(echoPin, HIGH); 871distanceCm = duration*0.034/2; 872distanceInch = duration*0.0133/2; 873lcd.setCursor(0,0); 874lcd.print("Distance: "); 875lcd.print(distanceCm); 876lcd.print(" cm"); 877delay(10); 878lcd.setCursor(0,1); 879lcd.print("Distance: "); 880lcd.print(distanceInch); 881lcd.print(" inch"); 882return distanceCm; 883} 884 885 886int accuracy90(){ 887 lcd.clear(); 888 delay(10); 889 servo8Setposition(90); 890 delay(1000); 891 surveillance(); 892 int dist1 = distanceCm; 893 delay(1000); 894 lcd.clear(); 895 surveillance(); 896 int dist2 = distanceCm; 897 delay(1000); 898 lcd.clear(); 899 surveillance(); 900 int dist3 = distanceCm; 901 delay(15); 902 avedist90 = ((dist1 + dist2 + dist3) / 3); 903 return avedist90; 904} 905 906int accuracy60(){ 907 lcd.clear(); 908 delay(10); 909 servo8Move(90, 60, 10); 910 delay(1000); 911 surveillance(); 912 int dist1 = distanceCm; 913 delay(1000); 914 lcd.clear(); 915 surveillance(); 916 int dist2 = distanceCm; 917 delay(1000); 918 lcd.clear(); 919 surveillance(); 920 int dist3 = distanceCm; 921 delay(15); 922 avedist60 = ((dist1 + dist2 + dist3) / 3); 923 return avedist60; 924} 925 926int accuracy120(){ 927 lcd.clear(); 928 delay(10); 929 servo8Move(50, 120, 10); 930 delay(1000); 931 surveillance(); 932 int dist1 = distanceCm; 933 delay(1000); 934 lcd.clear(); 935 surveillance(); 936 int dist2 = distanceCm; 937 delay(1000); 938 lcd.clear(); 939 surveillance(); 940 int dist3 = distanceCm; 941 delay(15); 942 avedist120 = ((dist1 + dist2 + dist3) / 3); 943 return avedist120; 944} 945 946void SURVEILLANCE(int limitDist, int driveDelay){ 947while(Serial.available() < 2){ 948 949 accuracy90(); 950 int AD90 = avedist90; 951 delay(1000); 952 accuracy60(); 953 int AD60 = avedist60; 954 delay(1000); 955 accuracy120(); 956 int AD120 = avedist120; 957 delay(1000); 958 servo8Move(120, 90, 10); 959 delay(1000); 960 lcd.clear(); 961 delay(20); 962 lcdmain(); 963 964 if ((AD90 < limitDist) && (AD60 < limitDist) && (AD120 < limitDist)){ 965 reverseMove(50, 15); 966 if(AD120 > AD60){ 967 anticlockwiseMove(90, 15); 968 delay(driveDelay); 969 } 970 if (AD120 < AD60){ 971 clockwiseMove(90, 15); 972 delay(driveDelay); 973 } 974 } 975 976 if ((AD90 > limitDist) && (AD60 > limitDist) && (AD120 > limitDist)){ 977 forwardMove(80, 15); 978 delay(driveDelay); 979 if(AD120 > AD60){ 980 anticlockwiseMove(90, 15); 981 delay(driveDelay); 982 } 983 if (AD120 < AD60){ 984 clockwiseMove(90, 15); 985 delay(driveDelay); 986 } 987 } 988 989 if ((AD90 < limitDist) && (AD120 < limitDist) && (AD60 > limitDist)){ 990 clockwiseMove(90, 15); 991 delay(driveDelay); 992 forwardMove(50, 15); 993 delay(driveDelay); 994 995 } 996 997 if ((AD60 < limitDist) && (AD120 < limitDist) && (AD90 > limitDist)){ 998 forwardMove(50, 15); 999 if (AD120 < AD60){ 1000 clockwiseMove(90, 15); 1001 delay(driveDelay); 1002 } 1003 if (AD120 > AD60){ 1004 anticlockwiseMove(90, 15); 1005 delay(driveDelay); 1006 } 1007 1008 } 1009 1010 if ((AD60 < limitDist) && (AD90 < limitDist) && (AD120 > limitDist)){ 1011 anticlockwiseMove(90, 15); 1012 delay(driveDelay); 1013 forwardMove(50, 15); 1014 delay(driveDelay); 1015 } 1016 1017 if ((AD90 > limitDist) && (AD120 > limitDist) && (AD60 < limitDist)){ 1018 if(AD120 > AD90){ 1019 anticlockwiseMove(90, 15); 1020 delay(driveDelay); 1021 forwardMove(50, 15); 1022 delay(driveDelay); 1023 } 1024 if (AD120 < AD90){ 1025 forwardMove(50, 15); 1026 delay(driveDelay); 1027 } 1028 1029 } 1030 if ((AD90 > limitDist) && (AD60 > limitDist) && (AD120 < limitDist)){ 1031 if(AD60 > AD90){ 1032 clockwiseMove(90, 15); 1033 delay(driveDelay); 1034 forwardMove(50, 15); 1035 delay(driveDelay); 1036 } 1037 if (AD60 < AD90){ 1038 forwardMove(50, 15); 1039 delay(driveDelay); 1040 } 1041 } 1042 if ((AD60 > limitDist) && (AD120 > limitDist) && (AD90 < limitDist)){ 1043 if(AD120 > AD60){ 1044 anticlockwiseMove(90, 15); 1045 delay(driveDelay); 1046 forwardMove(50, 15); 1047 delay(driveDelay); 1048 } 1049 if (AD120 < AD60){ 1050 clockwiseMove(90, 15); 1051 delay(driveDelay); 1052 forwardMove(50, 15); 1053 delay(driveDelay); 1054 } 1055 } 1056 if ((AD90 > 2000) || (AD120 > 2000) || (AD60 > 2000)){ 1057 accuracy90(); 1058 delay(1000); 1059 accuracy60(); 1060 delay(1000); 1061 accuracy120(); 1062 delay(1000); 1063 servo8Move(120, 90, 10); 1064 delay(1000); 1065 lcd.clear(); 1066 delay(20); 1067 lcdmain(); 1068 } 1069} 1070} 1071 1072void SENSORDATA(){ 1073 int chk = DHT.read11(DHT11_PIN); 1074 float temp = analogRead(tempPin); 1075 temp = (temp * 0.48828125); 1076 lcd.clear(); 1077 lcd.setCursor(0, 0); 1078 lcd.print("Temp: "); 1079 lcd.print(temp); 1080 lcd.print("C"); 1081 delay(10); 1082 lcd.setCursor(0, 1); 1083 lcd.print("Humidity: "); 1084 lcd.print((DHT.humidity) - 121); 1085 lcd.print("%"); 1086} 1087 1088void WATCHDOG(){ 1089 /*I have left this function blank. For watchdog mode several alarms could be triggered via the PIR sensor. 1090 For example the power to mp3 module could be supplied and the rover could also move in a programmed manner if the alarm is triggered.*/ 1091} 1092 1093 1094
Roger Bot Main Code
arduino
I have tried to explain the code through commented out section. Most of the functions defined will be self explanatory.
1/* 2aux1, aux2 and aux3 will send 2byte number 9200, 9300, 9400 respectively which can be used for additional programs within the main code. 3written by: hannu_hell 4Special shoutout to youtuber Robojax, How to Mechatronics, Mert Arduino for this code is not purely mine and i have tweaked sections of various codes from the above mentioned authors to suit my project. 5What i have written is in no way perfect and i would be happy to accept any modifications. Thanks. 6 7ROGER BOT 8 9 Pin No Description 10 11 TX Transmit Serial Communication to Bluetooth module 12 RX Receive Serial Communication to Bluetooth module 13 2 Signal to Servo 4 14 3 Signal to Servo 5 15 4 Signal to Servo 3 16 5 Signal to Servo 1 17 6 Roger Head Right LED (Red) 18 7 Roger Head Right LED (Yellow) 19 8 Roger Head Right LED (Green) 20 9 Roger Head Left LED (Green) 21 10 Roger Head Left LED (Yellow) 22 11 Roger Head Left LED (Red) 23 12 RGB and Blue LED 24 13 Red LED set 25 A1 LM 35 Temperature Signal 26 A2 Photocell Signal 27 A15 Driver Cooling Fan 28 22 N/A 29 23 PIR Signal 30 24 N/A 31 25 N/A 32 26 N/A 33 27 IN 1 Gripper Motor 34 28 Signal to Servo 6 (Base Rotation Servo) 35 29 IN 2 Gripper Motor 36 30 Signal to Servo 7 (Steering Servo) 37 31 IN 3 Gripper Motor 38 32 Signal to Servo 2 39 33 IN 4 Gripper Motor 40 34 Left Side Drive Motor LED 41 35 TRIG Sonic Sensor 42 36 Drive Motor 1 DIR Pin 43 37 Drive Motor 1 STEP Pin 44 38 Drive Motor 2 DIR Pin 45 39 Drive Motor 2 STEP PIN 46 40 Drive Motor 1 Arm Pin 47 41 Drive Motor 2 Arm Pin 48 42 MP3 - Previous Signal 49 43 Gripper End Stop Switch 50 44 MP3 - Next Signal 51 45 DHT11 - Humidity Signal 52 46 MP3 Play/Pause Signal 53 47 MP3 Repeat Signal 54 48 ISD1820 Voice Record 55 49 ISD1820 Voice Playback 56 50 Right Side Drive Motor LED 57 51 Signal to Servo 8 (Head Servo) 58 52 ECHO Sonic Sensor 59 53 MP3 Power Signal 60 SDA LCD Display via IIC 61 SCL LCD Display via IIC 62 63*/ 64 65#include <Servo.h> 66#include <LiquidCrystal_I2C.h> 67#include <Wire.h> 68#include <dht.h> 69dht DHT; 70#define DHT11_PIN 45 71 72Servo myservo1, myservo2, myservo3, myservo4,myservo5,myservo6,myservo7,myservo8; 73LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7,3, POSITIVE); 74 75 76 int _step = 0; 77 const int Pin1 = 27; 78 const int Pin2 = 29; 79 const int Pin3 = 31; 80 const int Pin4 = 33; 81 const int sleep = 40; 82 const int sleep2 = 41; 83 const int stepPin = 37; 84 const int dirPin = 36; 85 const int stepPin2 = 39; 86 const int dirPin2 = 38; 87 const int redLed = 13; 88 const int rgbLed = 12; 89 const int rightsideLed = 50; 90 const int leftsideLed = 34; 91 const int rec = 48; 92 const int playback = 49; 93 const int head1redLed = 11; 94 const int head1yellowLed = 10; 95 const int head1greenLed = 9; 96 const int head2redLed = 6; 97 const int head2yellowLed = 7; 98 const int head2greenLed = 8; 99 const int trigPin = 35; 100 const int echoPin = 52; 101 const int humidity = 45; 102 const int tempPin = A1; 103 const int fan = A15; 104 const int mp3Power = 53; 105 const int mp3Play = 46; 106 const int mp3Next = 44; 107 const int mp3Previous = 42; 108 const int mp3Repeat = 47; 109 long duration; 110 int distanceInch, distanceCm, avedist90, avedist60, avedist120; 111 boolean dir;// false=clockwise, true=anticlockwise 112 113 114void setup() 115{ 116 lcd.begin(16, 2); 117 118 119 pinMode(Pin1, OUTPUT); 120 pinMode(Pin2, OUTPUT); 121 pinMode(Pin3, OUTPUT); 122 pinMode(Pin4, OUTPUT); 123 pinMode(50, OUTPUT); 124 pinMode(34, OUTPUT); 125 pinMode(12, OUTPUT); 126 pinMode(13, OUTPUT); 127 pinMode(48, OUTPUT); 128 pinMode(49, OUTPUT); 129 pinMode(A15, OUTPUT); 130 pinMode(trigPin, OUTPUT); 131 pinMode(echoPin, INPUT); 132 pinMode(tempPin, INPUT); 133 pinMode(53, OUTPUT); 134 pinMode(42, OUTPUT); 135 pinMode(46, OUTPUT); 136 pinMode(47, OUTPUT); 137 pinMode(44, OUTPUT); 138 139 for (int i = 36; i<42; i++){ 140 pinMode(i, OUTPUT); 141 } 142 for (int j = 6; j<12; j++){ 143 pinMode(j, OUTPUT); 144 delay(5); 145 digitalWrite(j, LOW); 146 } 147 148 149 150//ON START-UP THREAD--------------------------- 151 152 lcdmain(); 153 delay(3000); 154 lcd.clear(); 155 digitalWrite(redLed, LOW); 156 digitalWrite(rgbLed, LOW); 157 digitalWrite(rightsideLed, LOW); 158 digitalWrite(leftsideLed, LOW); 159 160 for (int k = 0; k<16; k++){ 161 lcd.setCursor(k, 0); 162 lcd.print("Arming.."); 163 delay(500); 164 lcd.clear(); 165 } 166 167 myservo1.attach(5); 168 myservo2.attach(32); 169 myservo3.attach(4); 170 myservo4.attach(2); 171 myservo5.attach(3); 172 myservo6.attach(28); 173 myservo7.attach(30); 174 myservo8.attach(51); 175 176 delay(1000); 177 178// armCheck(); This function is for checking if all the arm servos and movements are ok. i have commented it out for now. 179 180 lcd.setCursor(5, 0); 181 lcd.print("Ready for"); 182 lcd.setCursor(5, 1); 183 lcd.print("Bluetooth"); 184 delay(1000); 185 lcd.clear(); 186 lcdmain(); 187 delay(100); 188 Serial.begin(9600); 189 190} 191 192 193 194void loop() 195{ 196 197 if(Serial.available()>= 2 ) 198 { 199 200 unsigned int servopos = Serial.read(); 201 unsigned int servopos1 = Serial.read(); 202 unsigned int realservo = (servopos1 *256) + servopos; 203 Serial.println(realservo); 204 205 if (realservo >= 1000 && realservo < 1180) { 206 int servo1 = realservo; 207 int servo2 = realservo; 208 servo1 = map(servo1, 1000, 1176, 0, 176); 209 servo2 = map(servo2, 1000, 1180, 180, 0); 210 myservo1.write(servo1); 211 myservo2.write(servo2+5.5); 212 delay(25); 213 } 214 215 if (realservo >= 2000 && realservo < 2136) { 216 int servo3 = realservo; 217 servo3 = map(servo3, 2000, 2136, 20, 145); 218 myservo3.write(servo3); 219 delay(15); 220 } 221 if (realservo >= 3000 && realservo < 3180) { 222 int servo4 = realservo; 223 servo4 = map(servo4, 3000, 3180, 0, 180); 224 myservo4.write(servo4); 225 delay(15); 226 } 227 if (realservo >= 4000 && realservo < 4180) { 228 int servo5 = realservo; 229 servo5 = map(servo5, 4000, 4180, 0, 180); 230 myservo5.write(servo5); 231 delay(20); 232 } 233 if (realservo >= 5000 && realservo < 5180) { 234 int servo6 = realservo; 235 servo6 = map(servo6, 5000, 5180, 0, 180); 236 myservo6.write(servo6); 237 238 delay(15); 239 } 240 if (realservo >= 6000 && realservo < 6180) { 241 int servo7 = realservo; 242 servo7 = map(servo7, 6000, 6180, 0, 180); 243 myservo7.write(servo7); 244 delay(2); 245 } 246 247 if (realservo == 7000) { 248 grippertightMove(3000, 1.2); 249 } 250 if (realservo == 7100) { 251 gripperlooseMove(3000, 1.2); 252 } 253 if (realservo == 7200){ 254 forwardMove(60, 15); 255 } 256 if (realservo == 7300){ 257 reverseMove(60, 15); 258 } 259 if (realservo == 7400){ 260 clockwiseMove(50, 15); 261 } 262 if (realservo == 7500){ 263 anticlockwiseMove(50, 15); 264 } 265 if (realservo == 7600){ 266 forwardMove(30, 15); 267 } 268 if (realservo == 7700){ 269 reverseMove(30, 15); 270 } 271 if (realservo == 7800){ 272 digitalWrite(redLed, HIGH); 273 digitalWrite(rgbLed, HIGH); 274 digitalWrite(rightsideLed, HIGH); 275 digitalWrite(leftsideLed, HIGH); 276 } 277 if (realservo == 7900){ 278 digitalWrite(redLed, LOW); 279 digitalWrite(rgbLed, LOW); 280 digitalWrite(rightsideLed, LOW); 281 digitalWrite(leftsideLed, LOW); 282 } 283 if (realservo == 8000){ 284 record(8000); 285 } 286 if (realservo == 8100){ 287 playBack(8000); 288 } 289 if (realservo == 8200){ 290 powerSave(); 291 } 292 if (realservo == 8300){ 293 analogWrite(fan, 1023); 294 } 295 if (realservo == 8400){ 296 SURVEILLANCE(100, 2000); 297 } 298 if (realservo == 8500){ 299 SENSORDATA(); 300 } 301 //if (realservo == 8600){ 302 //WATCHDOG(); 303 //} 304 //if (realservo == 8700){ 305 //AUX button1 306 //} 307 //if (realservo == 8800){ 308 //AUX button2 309 //} 310 //if (realservo == 8900){ 311 //AUX button3 312 //} 313 if (realservo == 9000){ 314 digitalWrite(mp3Play, HIGH); 315 delay(250); 316 digitalWrite(mp3Play, LOW); 317 delay(10); 318 } 319 if (realservo == 9100){ 320 digitalWrite(mp3Next, HIGH); 321 delay(250); 322 digitalWrite(mp3Next, LOW); 323 } 324 if (realservo == 9200){ 325 digitalWrite(mp3Previous, HIGH); 326 delay(250); 327 digitalWrite(mp3Previous, LOW); 328 } 329 if (realservo == 9300){ 330 digitalWrite(mp3Repeat, HIGH); 331 delay(250); 332 digitalWrite(mp3Repeat, LOW); 333 } 334 if (realservo == 9400){ 335 digitalWrite(mp3Power, HIGH); 336 } 337 338} 339} 340 341// DRIVE MOTORS FUNCTIONS DEFINED BELOW-------------------------- 342void forwardMove(int fwdPace, int fwdpaceDelay){ 343 digitalWrite(sleep, HIGH); 344 digitalWrite(sleep2, HIGH); 345 delay(5); 346 digitalWrite(dirPin, HIGH); 347 digitalWrite(dirPin2, LOW); 348 for(int fwd=0; fwd<fwdPace; fwd++){ 349 digitalWrite(stepPin, HIGH); 350 digitalWrite(stepPin2, HIGH); 351 delay(fwdpaceDelay); 352 digitalWrite(stepPin, LOW); 353 digitalWrite(stepPin2, LOW); 354 delay(fwdpaceDelay); 355 } 356 digitalWrite(sleep, LOW); 357 digitalWrite(sleep2, LOW); 358 delay(5); 359} 360 361void reverseMove(int rvsPace, int rvspaceDelay){ 362 digitalWrite(sleep, HIGH); 363 digitalWrite(sleep2, HIGH); 364 delay(5); 365 digitalWrite(dirPin, LOW); 366 digitalWrite(dirPin2, HIGH); 367 for(int rvs=0; rvs<rvsPace; rvs++){ 368 digitalWrite(stepPin, HIGH); 369 digitalWrite(stepPin2, HIGH); 370 delay(rvspaceDelay); 371 digitalWrite(stepPin, LOW); 372 digitalWrite(stepPin2, LOW); 373 delay(rvspaceDelay); 374 } 375 digitalWrite(sleep, LOW); 376 digitalWrite(sleep2, LOW); 377 delay(5); 378} 379 380void clockwiseMove(int clkPace, int clkpaceDelay){ 381 digitalWrite(sleep, HIGH); 382 digitalWrite(sleep2, HIGH); 383 delay(5); 384 digitalWrite(dirPin, HIGH); 385 digitalWrite(dirPin2, HIGH); 386 for(int clk=0; clk<clkPace; clk++){ 387 digitalWrite(stepPin, HIGH); 388 digitalWrite(stepPin2, HIGH); 389 delay(clkpaceDelay); 390 digitalWrite(stepPin, LOW); 391 digitalWrite(stepPin2, LOW); 392 delay(clkpaceDelay); 393 } 394 digitalWrite(sleep, LOW); 395 digitalWrite(sleep2, LOW); 396 delay(5); 397} 398 399void anticlockwiseMove(int aclkPace, int aclkpaceDelay){ 400 digitalWrite(sleep, HIGH); 401 digitalWrite(sleep2, HIGH); 402 delay(5); 403 digitalWrite(dirPin, LOW); 404 digitalWrite(dirPin2, LOW); 405 for(int aclk=0; aclk<aclkPace; aclk++){ 406 digitalWrite(stepPin, HIGH); 407 digitalWrite(stepPin2, HIGH); 408 delay(aclkpaceDelay); 409 digitalWrite(stepPin, LOW); 410 digitalWrite(stepPin2, LOW); 411 delay(aclkpaceDelay); 412 } 413 digitalWrite(sleep, LOW); 414 digitalWrite(sleep2, LOW); 415 delay(5); 416} 417 418 419// GRIPPER MOTOR FUNCTIONS DEFINED------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 420 421void grippertightMove(int grptightPace, int grptightpaceDelay){ 422 for (int grptight=0; grptight<grptightPace; grptight++){ 423 switch(_step){ 424 case 0: 425 digitalWrite(Pin1, LOW); 426 digitalWrite(Pin2, LOW); 427 digitalWrite(Pin3, LOW); 428 digitalWrite(Pin4, HIGH); 429 break; 430 case 1: 431 digitalWrite(Pin1, LOW); 432 digitalWrite(Pin2, LOW); 433 digitalWrite(Pin3, HIGH); 434 digitalWrite(Pin4, HIGH); 435 break; 436 case 2: 437 digitalWrite(Pin1, LOW); 438 digitalWrite(Pin2, LOW); 439 digitalWrite(Pin3, HIGH); 440 digitalWrite(Pin4, LOW); 441 break; 442 case 3: 443 digitalWrite(Pin1, LOW); 444 digitalWrite(Pin2, HIGH); 445 digitalWrite(Pin3, HIGH); 446 digitalWrite(Pin4, LOW); 447 break; 448 case 4: 449 digitalWrite(Pin1, LOW); 450 digitalWrite(Pin2, HIGH); 451 digitalWrite(Pin3, LOW); 452 digitalWrite(Pin4, LOW); 453 break; 454 case 5: 455 digitalWrite(Pin1, HIGH); 456 digitalWrite(Pin2, HIGH); 457 digitalWrite(Pin3, LOW); 458 digitalWrite(Pin4, LOW); 459 break; 460 case 6: 461 digitalWrite(Pin1, HIGH); 462 digitalWrite(Pin2, LOW); 463 digitalWrite(Pin3, LOW); 464 digitalWrite(Pin4, LOW); 465 break; 466 case 7: 467 digitalWrite(Pin1, HIGH); 468 digitalWrite(Pin2, LOW); 469 digitalWrite(Pin3, LOW); 470 digitalWrite(Pin4, HIGH); 471 break; 472 default: 473 digitalWrite(Pin1, LOW); 474 digitalWrite(Pin2, LOW); 475 digitalWrite(Pin3, LOW); 476 digitalWrite(Pin4, LOW); 477 break; 478 } 479 _step--; 480 481 if(_step<0){ 482 _step=7; 483 } 484 if(_step>7){ 485 _step=0; 486 } 487 delay(grptightpaceDelay); 488 489 } 490} 491 492void gripperlooseMove(int grploosePace, int grploosepaceDelay){ 493 for(int grploose=0; grploose<grploosePace; grploose++){ 494 switch(_step){ 495 case 0: 496 digitalWrite(Pin1, LOW); 497 digitalWrite(Pin2, LOW); 498 digitalWrite(Pin3, LOW); 499 digitalWrite(Pin4, HIGH); 500 break; 501 case 1: 502 digitalWrite(Pin1, LOW); 503 digitalWrite(Pin2, LOW); 504 digitalWrite(Pin3, HIGH); 505 digitalWrite(Pin4, HIGH); 506 break; 507 case 2: 508 digitalWrite(Pin1, LOW); 509 digitalWrite(Pin2, LOW); 510 digitalWrite(Pin3, HIGH); 511 digitalWrite(Pin4, LOW); 512 break; 513 case 3: 514 digitalWrite(Pin1, LOW); 515 digitalWrite(Pin2, HIGH); 516 digitalWrite(Pin3, HIGH); 517 digitalWrite(Pin4, LOW); 518 break; 519 case 4: 520 digitalWrite(Pin1, LOW); 521 digitalWrite(Pin2, HIGH); 522 digitalWrite(Pin3, LOW); 523 digitalWrite(Pin4, LOW); 524 break; 525 case 5: 526 digitalWrite(Pin1, HIGH); 527 digitalWrite(Pin2, HIGH); 528 digitalWrite(Pin3, LOW); 529 digitalWrite(Pin4, LOW); 530 break; 531 case 6: 532 digitalWrite(Pin1, HIGH); 533 digitalWrite(Pin2, LOW); 534 digitalWrite(Pin3, LOW); 535 digitalWrite(Pin4, LOW); 536 break; 537 case 7: 538 digitalWrite(Pin1, HIGH); 539 digitalWrite(Pin2, LOW); 540 digitalWrite(Pin3, LOW); 541 digitalWrite(Pin4, HIGH); 542 break; 543 default: 544 digitalWrite(Pin1, LOW); 545 digitalWrite(Pin2, LOW); 546 digitalWrite(Pin3, LOW); 547 digitalWrite(Pin4, LOW); 548 break; 549 } 550 _step++; 551 if(_step>7){ 552 _step=0; 553 } 554 if(_step<0){ 555 _step=7; 556 } 557 delay(grploosepaceDelay); 558 559 } 560} 561 562 563// SERVO MOTORS' FUNCTIONS DEFINED BELOW-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 564 565 566void dualservoSetposition(int servoAngle){ 567 int servo1 = servoAngle; 568 int servo2 = servoAngle; 569 servo1 = map(servo1, 0, 176, 0, 176); 570 servo2 = map(servo2, 0, 180, 180, 0); 571 myservo1.write(servo1); 572 myservo2.write((servo2)+5.5); 573} 574 575void servo3Setposition(int servo3Angle){ 576 int servo3 = servo3Angle; 577 servo3 = map(servo3, 0, 136, 0, 136); 578 myservo3.write(servo3); 579} 580 581void servo4Setposition(int servo4Angle){ 582 int servo4 = servo4Angle; 583 servo4 = map(servo4, 0, 180, 0, 180); 584 myservo4.write(servo4); 585} 586 587void servo5Setposition(int servo5Angle){ 588 int servo5 = servo5Angle; 589 servo5 = map(servo5, 0, 180, 0, 180); 590 myservo5.write(servo5); 591} 592 593void servo6Setposition(int servo6Angle){ 594 int servo6 = servo6Angle; 595 servo6 = map(servo6, 0, 180, 0, 180); 596 myservo6.write(servo6); 597} 598 599void servo7Setposition(int servo7Angle){ 600 int servo7 = servo7Angle; 601 servo7 = map(servo7, 0, 180, 0, 180); 602 myservo7.write(servo7); 603} 604 605void servo8Setposition(int servo8Angle){ 606 int servo8 = servo8Angle; 607 servo8 = map(servo8, 0, 180, 0, 180); 608 myservo8.write(servo8); 609} 610 611void dualservoMove(int dualservoAngle, int dualservodesiredAngle, int dualservostepDelay){ 612 if (dualservodesiredAngle > dualservoAngle){ 613 for (dualservoAngle; dualservoAngle < dualservodesiredAngle; dualservoAngle++){ 614 int servo1 = dualservoAngle; 615 int servo2 = dualservoAngle; 616 servo1 = map(servo1, 0, 176, 0, 176); 617 servo2 = map(servo2, 0, 180, 180, 0); 618 myservo1.write(servo1); 619 myservo2.write((servo2)+5.5); 620 delay(dualservostepDelay); 621 } 622 } 623 if (dualservodesiredAngle < dualservoAngle){ 624 for (dualservoAngle; dualservoAngle > dualservodesiredAngle; dualservoAngle--){ 625 int servo1 = dualservoAngle; 626 int servo2 = dualservoAngle; 627 servo1 = map(servo1, 0, 176, 0, 176); 628 servo2 = map(servo2, 0, 180, 180, 0); 629 myservo1.write(servo1); 630 myservo2.write((servo2)+5.5); 631 delay(dualservostepDelay); 632 } 633 } 634} 635 636void servo3Move(int servo3Angle, int servo3desiredAngle, int servo3stepDelay){ 637 if (servo3desiredAngle > servo3Angle){ 638 for (servo3Angle; servo3Angle < servo3desiredAngle; servo3Angle++){ 639 int servo3 = servo3Angle; 640 servo3 = map(servo3, 0, 136, 0, 136); 641 myservo3.write(servo3); 642 delay(servo3stepDelay); 643 } 644 } 645 if (servo3desiredAngle < servo3Angle){ 646 for (servo3Angle; servo3Angle > servo3desiredAngle; servo3Angle--){ 647 int servo3 = servo3Angle; 648 servo3 = map(servo3, 0, 136, 0, 136); 649 myservo3.write(servo3); 650 delay(servo3stepDelay); 651 } 652 } 653} 654 655void servo4Move(int servo4Angle, int servo4desiredAngle, int servo4stepDelay){ 656 if (servo4desiredAngle > servo4Angle){ 657 for (servo4Angle; servo4Angle < servo4desiredAngle; servo4Angle++){ 658 int servo4 = servo4Angle; 659 servo4 = map(servo4, 0, 136, 0, 136); 660 myservo4.write(servo4); 661 delay(servo4stepDelay); 662 } 663 } 664 if (servo4desiredAngle < servo4Angle){ 665 for (servo4Angle; servo4Angle > servo4desiredAngle; servo4Angle--){ 666 int servo4 = servo4Angle; 667 servo4 = map(servo4, 0, 136, 0, 136); 668 myservo4.write(servo4); 669 delay(servo4stepDelay); 670 } 671 } 672} 673 674void servo5Move(int servo5Angle, int servo5desiredAngle, int servo5stepDelay){ 675 if (servo5desiredAngle > servo5Angle){ 676 for (servo5Angle; servo5Angle < servo5desiredAngle; servo5Angle++){ 677 int servo5 = servo5Angle; 678 servo5 = map(servo5, 0, 136, 0, 136); 679 myservo5.write(servo5); 680 delay(servo5stepDelay); 681 } 682 } 683 if (servo5desiredAngle < servo5Angle){ 684 for (servo5Angle; servo5Angle > servo5desiredAngle; servo5Angle--){ 685 int servo5 = servo5Angle; 686 servo5 = map(servo5, 0, 136, 0, 136); 687 myservo5.write(servo5); 688 delay(servo5stepDelay); 689 690 } 691 } 692} 693 694void servo6Move(int servo6Angle, int servo6desiredAngle, int servo6stepDelay){ 695 if (servo6desiredAngle > servo6Angle){ 696 for (servo6Angle; servo6Angle < servo6desiredAngle; servo6Angle++){ 697 int servo6 = servo6Angle; 698 servo6 = map(servo6, 0, 136, 0, 136); 699 myservo6.write(servo6); 700 delay(servo6stepDelay); 701 } 702 } 703 if (servo6desiredAngle < servo6Angle){ 704 for (servo6Angle; servo6Angle > servo6desiredAngle; servo6Angle--){ 705 int servo6 = servo6Angle; 706 servo6 = map(servo6, 0, 136, 0, 136); 707 myservo6.write(servo6); 708 delay(servo6stepDelay); 709 710 } 711 } 712} 713 714void servo7Move(int servo7Angle, int servo7desiredAngle, int servo7stepDelay){ 715 if (servo7desiredAngle > servo7Angle){ 716 for (servo7Angle; servo7Angle < servo7desiredAngle; servo7Angle++){ 717 int servo7 = servo7Angle; 718 servo7 = map(servo7, 0, 136, 0, 136); 719 myservo7.write(servo7); 720 delay(servo7stepDelay); 721 } 722 } 723 if (servo7desiredAngle < servo7Angle){ 724 for (servo7Angle; servo7Angle > servo7desiredAngle; servo7Angle--){ 725 int servo7 = servo7Angle; 726 servo7 = map(servo7, 0, 136, 0, 136); 727 myservo7.write(servo7); 728 delay(servo7stepDelay); 729 730 } 731 } 732} 733 734void servo8Move(int servo8Angle, int servo8desiredAngle, int servo8stepDelay){ 735 if (servo8desiredAngle > servo8Angle){ 736 for (servo8Angle; servo8Angle < servo8desiredAngle; servo8Angle++){ 737 int servo8 = servo8Angle; 738 servo8 = map(servo8, 0, 136, 0, 136); 739 myservo8.write(servo8); 740 delay(servo8stepDelay); 741 } 742 } 743 if (servo8desiredAngle < servo8Angle){ 744 for (servo8Angle; servo8Angle > servo8desiredAngle; servo8Angle--){ 745 int servo8 = servo8Angle; 746 servo8 = map(servo8, 0, 136, 0, 136); 747 myservo8.write(servo8); 748 delay(servo8stepDelay); 749 750 } 751 } 752} 753 754// ISD VOICE RECORD FUNCTIONS DEFINED-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 755void record(int recordTime){ 756 digitalWrite(rec, HIGH); 757 delay(recordTime); 758 digitalWrite(rec, LOW); 759 delay(10); 760} 761 762void playBack(int playbackTime){ 763 digitalWrite(playback, HIGH); 764 delay(playbackTime); 765 digitalWrite(playback, LOW); 766 delay(10); 767} 768 769// MISC FUNCTIONS------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 770void powerSave(){ 771 digitalWrite(mp3Power, LOW); 772 digitalWrite(redLed, LOW); 773 digitalWrite(rgbLed, LOW); 774 digitalWrite(rightsideLed, LOW); 775 digitalWrite(leftsideLed, LOW); 776 analogWrite(fan, 0); 777 digitalWrite(head1redLed, LOW); 778 digitalWrite(head1yellowLed, LOW); 779 digitalWrite(head1greenLed, LOW); 780 digitalWrite(head2redLed, LOW); 781 digitalWrite(head2yellowLed, LOW); 782 digitalWrite(head2greenLed, LOW); 783} 784 785void lcdmain(){ 786 lcd.setCursor(5, 0); 787 lcd.print("RogerbOt"); 788 lcd.setCursor(5, 1); 789 lcd.print("inc."); 790} 791 792void armCheck(){ 793 lcd.setCursor(5, 0); 794 lcd.print("Roger Arm"); 795 lcd.setCursor(5, 1); 796 lcd.print("Check.."); 797 delay(1000); 798 799 800 dualservoSetposition(95); 801 delay(500); 802 servo3Setposition(90); 803 delay(500); 804 servo4Setposition(90); 805 delay(500); 806 servo5Setposition(90); 807 delay(500); 808 servo6Setposition(90); 809 delay(500); 810 servo6Move(90, 150, 50); 811 delay(500); 812 servo6Move(150, 90, 50); 813 delay(1000); 814 servo6Move(90, 60, 50); 815 delay(500); 816 servo6Move(60, 90, 50); 817 delay(1000); 818 dualservoMove(95, 120, 50); 819 delayMicroseconds(30); 820 servo3Move(90, 110, 35); 821 delayMicroseconds(30); 822 servo4Move(90, 70, 35); 823 delayMicroseconds(30); 824 servo5Move(90, 170, 5); 825 delayMicroseconds(3000); 826 servo5Move(170, 90, 5); 827 delayMicroseconds(30); 828 servo4Move(70, 90, 35); 829 delayMicroseconds(30); 830 servo3Move(110, 90, 35); 831 delayMicroseconds(30); 832 dualservoMove(120, 95, 50); 833 834 delay(1000); 835 836 dualservoMove(95, 75, 60); 837 delay(500); 838 servo3Move(90, 70, 50); 839 delay(500); 840 servo4Move(90, 110, 50); 841 delay(500); 842 servo5Move(90, 10, 5); 843 delay(500); 844 servo5Move(10, 90, 5); 845 delay(500); 846 servo4Move(110, 90, 50); 847 delay(500); 848 servo3Move(70, 90, 50); 849 delay(500); 850 dualservoMove(75, 95, 60); 851 852 delay(1000); 853 854 lcd.clear(); 855 lcd.setCursor(5, 0); 856 lcd.print("Arm Check"); 857 lcd.setCursor(5, 1); 858 lcd.print("Completed"); 859 delay(1500); 860 lcd.clear(); 861} 862 863int surveillance(){ 864 865digitalWrite(trigPin, LOW); 866delayMicroseconds(2); 867digitalWrite(trigPin, HIGH); 868delayMicroseconds(10); 869digitalWrite(trigPin, LOW); 870duration = pulseIn(echoPin, HIGH); 871distanceCm = duration*0.034/2; 872distanceInch = duration*0.0133/2; 873lcd.setCursor(0,0); 874lcd.print("Distance: "); 875lcd.print(distanceCm); 876lcd.print(" cm"); 877delay(10); 878lcd.setCursor(0,1); 879lcd.print("Distance: "); 880lcd.print(distanceInch); 881lcd.print(" inch"); 882return distanceCm; 883} 884 885 886int accuracy90(){ 887 lcd.clear(); 888 delay(10); 889 servo8Setposition(90); 890 delay(1000); 891 surveillance(); 892 int dist1 = distanceCm; 893 delay(1000); 894 lcd.clear(); 895 surveillance(); 896 int dist2 = distanceCm; 897 delay(1000); 898 lcd.clear(); 899 surveillance(); 900 int dist3 = distanceCm; 901 delay(15); 902 avedist90 = ((dist1 + dist2 + dist3) / 3); 903 return avedist90; 904} 905 906int accuracy60(){ 907 lcd.clear(); 908 delay(10); 909 servo8Move(90, 60, 10); 910 delay(1000); 911 surveillance(); 912 int dist1 = distanceCm; 913 delay(1000); 914 lcd.clear(); 915 surveillance(); 916 int dist2 = distanceCm; 917 delay(1000); 918 lcd.clear(); 919 surveillance(); 920 int dist3 = distanceCm; 921 delay(15); 922 avedist60 = ((dist1 + dist2 + dist3) / 3); 923 return avedist60; 924} 925 926int accuracy120(){ 927 lcd.clear(); 928 delay(10); 929 servo8Move(50, 120, 10); 930 delay(1000); 931 surveillance(); 932 int dist1 = distanceCm; 933 delay(1000); 934 lcd.clear(); 935 surveillance(); 936 int dist2 = distanceCm; 937 delay(1000); 938 lcd.clear(); 939 surveillance(); 940 int dist3 = distanceCm; 941 delay(15); 942 avedist120 = ((dist1 + dist2 + dist3) / 3); 943 return avedist120; 944} 945 946void SURVEILLANCE(int limitDist, int driveDelay){ 947while(Serial.available() < 2){ 948 949 accuracy90(); 950 int AD90 = avedist90; 951 delay(1000); 952 accuracy60(); 953 int AD60 = avedist60; 954 delay(1000); 955 accuracy120(); 956 int AD120 = avedist120; 957 delay(1000); 958 servo8Move(120, 90, 10); 959 delay(1000); 960 lcd.clear(); 961 delay(20); 962 lcdmain(); 963 964 if ((AD90 < limitDist) && (AD60 < limitDist) && (AD120 < limitDist)){ 965 reverseMove(50, 15); 966 if(AD120 > AD60){ 967 anticlockwiseMove(90, 15); 968 delay(driveDelay); 969 } 970 if (AD120 < AD60){ 971 clockwiseMove(90, 15); 972 delay(driveDelay); 973 } 974 } 975 976 if ((AD90 > limitDist) && (AD60 > limitDist) && (AD120 > limitDist)){ 977 forwardMove(80, 15); 978 delay(driveDelay); 979 if(AD120 > AD60){ 980 anticlockwiseMove(90, 15); 981 delay(driveDelay); 982 } 983 if (AD120 < AD60){ 984 clockwiseMove(90, 15); 985 delay(driveDelay); 986 } 987 } 988 989 if ((AD90 < limitDist) && (AD120 < limitDist) && (AD60 > limitDist)){ 990 clockwiseMove(90, 15); 991 delay(driveDelay); 992 forwardMove(50, 15); 993 delay(driveDelay); 994 995 } 996 997 if ((AD60 < limitDist) && (AD120 < limitDist) && (AD90 > limitDist)){ 998 forwardMove(50, 15); 999 if (AD120 < AD60){ 1000 clockwiseMove(90, 15); 1001 delay(driveDelay); 1002 } 1003 if (AD120 > AD60){ 1004 anticlockwiseMove(90, 15); 1005 delay(driveDelay); 1006 } 1007 1008 } 1009 1010 if ((AD60 < limitDist) && (AD90 < limitDist) && (AD120 > limitDist)){ 1011 anticlockwiseMove(90, 15); 1012 delay(driveDelay); 1013 forwardMove(50, 15); 1014 delay(driveDelay); 1015 } 1016 1017 if ((AD90 > limitDist) && (AD120 > limitDist) && (AD60 < limitDist)){ 1018 if(AD120 > AD90){ 1019 anticlockwiseMove(90, 15); 1020 delay(driveDelay); 1021 forwardMove(50, 15); 1022 delay(driveDelay); 1023 } 1024 if (AD120 < AD90){ 1025 forwardMove(50, 15); 1026 delay(driveDelay); 1027 } 1028 1029 } 1030 if ((AD90 > limitDist) && (AD60 > limitDist) && (AD120 < limitDist)){ 1031 if(AD60 > AD90){ 1032 clockwiseMove(90, 15); 1033 delay(driveDelay); 1034 forwardMove(50, 15); 1035 delay(driveDelay); 1036 } 1037 if (AD60 < AD90){ 1038 forwardMove(50, 15); 1039 delay(driveDelay); 1040 } 1041 } 1042 if ((AD60 > limitDist) && (AD120 > limitDist) && (AD90 < limitDist)){ 1043 if(AD120 > AD60){ 1044 anticlockwiseMove(90, 15); 1045 delay(driveDelay); 1046 forwardMove(50, 15); 1047 delay(driveDelay); 1048 } 1049 if (AD120 < AD60){ 1050 clockwiseMove(90, 15); 1051 delay(driveDelay); 1052 forwardMove(50, 15); 1053 delay(driveDelay); 1054 } 1055 } 1056 if ((AD90 > 2000) || (AD120 > 2000) || (AD60 > 2000)){ 1057 accuracy90(); 1058 delay(1000); 1059 accuracy60(); 1060 delay(1000); 1061 accuracy120(); 1062 delay(1000); 1063 servo8Move(120, 90, 10); 1064 delay(1000); 1065 lcd.clear(); 1066 delay(20); 1067 lcdmain(); 1068 } 1069} 1070} 1071 1072void SENSORDATA(){ 1073 int chk = DHT.read11(DHT11_PIN); 1074 float temp = analogRead(tempPin); 1075 temp = (temp * 0.48828125); 1076 lcd.clear(); 1077 lcd.setCursor(0, 0); 1078 lcd.print("Temp: "); 1079 lcd.print(temp); 1080 lcd.print("C"); 1081 delay(10); 1082 lcd.setCursor(0, 1); 1083 lcd.print("Humidity: "); 1084 lcd.print((DHT.humidity) - 121); 1085 lcd.print("%"); 1086} 1087 1088void WATCHDOG(){ 1089 /*I have left this function blank. For watchdog mode several alarms could be triggered via the PIR sensor. 1090 For example the power to mp3 module could be supplied and the rover could also move in a programmed manner if the alarm is triggered.*/ 1091} 1092 1093 1094
Downloadable files
RogerBot Schematic Diagram
This is the schematic diagram for the servos, drive motors and the sensors onboard RogerBot. The schematic for the audio modules are shown in the story section.
RogerBot Schematic Diagram
RogerBot Schematic Diagram
This is the schematic diagram for the servos, drive motors and the sensors onboard RogerBot. The schematic for the audio modules are shown in the story section.
RogerBot Schematic Diagram
Documentation
RogerBot Catia V5 files
These are the CATIA V5 files. Im sorry but i made some changes to some parts after printing them its not refelcted on the design files. They are 1- 'Roger_Armsecondservo2.CATpart', had to be sawed off a bit from the top to accomodate for the top part of arm. 2- 'Roger_Armrotationbase.CATpart', i have made some cutouts from the servo wires, 3- 'Roger_bottomplate.CATpart', i have sawed off the front part where the two legs with the ball wheels go through. The legs do not go through them and the bottomplate is held in place with a bolt (M6) through the top plate with the neccessary spacing for batteries and other accessories.
https://github.com/hannu-hell/RogerBot-CATIA-V5-files
Comments
Only logged in users can leave comments
hannu_hell
0 Followers
•0 Projects
Table of contents
Intro
4
0