{"id":285,"date":"2013-06-15T01:25:18","date_gmt":"2013-06-14T19:25:18","guid":{"rendered":"http:\/\/markwheeler.com\/wordpress\/?p=285"},"modified":"2013-06-15T01:25:18","modified_gmt":"2013-06-14T19:25:18","slug":"arduino-uno-r3-robot-rover","status":"publish","type":"post","link":"https:\/\/markwheeler.com\/?p=285","title":{"rendered":"Arduino Uno R3 Robot Rover"},"content":{"rendered":"<p><a href=\"http:\/\/markwheeler.com\/wordpress\/wp-content\/uploads\/2013\/06\/myRover.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft  wp-image-295\" alt=\"myRover\" src=\"http:\/\/markwheeler.com\/wordpress\/wp-content\/uploads\/2013\/06\/myRover.jpg\" width=\"614\" height=\"346\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/www.amazon.com\/gp\/product\/B006H06TVG\/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B006H06TVG&amp;linkCode=as2&amp;tag=markwheelercom\">Arduino Uno R3<\/a><\/p>\n<p><a href=\"http:\/\/www.amazon.com\/gp\/product\/B006UTE70E\/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B006UTE70E&amp;linkCode=as2&amp;tag=markwheelercom\">Arduino Motor Shield r3<\/a><\/p>\n<p><a href=\"http:\/\/www.amazon.com\/gp\/product\/B004U8TOE6\/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B004U8TOE6&amp;linkCode=as2&amp;tag=markwheelercom\">HC-SR04 Distance Sensor<\/a> &#8211; using the <a href=\"https:\/\/code.google.com\/p\/arduino-new-ping\/downloads\/detail?name=NewPing_v1.5.zip&amp;can=2&amp;q=\">NewPing library<\/a><\/p>\n<p><a href=\"http:\/\/www.amazon.com\/gp\/product\/B008Q47VKE\/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B008Q47VKE&amp;linkCode=as2&amp;tag=markwheelercom\">SainSmart 4WD Chassis<\/a><\/p>\n<p><a href=\"http:\/\/www.amazon.com\/gp\/product\/B0015H2V72\/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B0015H2V72&amp;linkCode=as2&amp;tag=markwheelercom\">Standard Servo<\/a> (* Not Continous 360)<\/p>\n<p>#include &lt;NewPing.h&gt;<br \/>\n#include &lt;Servo.h&gt;<\/p>\n<p>#define SENSOR_TRIG_PIN 7<br \/>\n#define SENSOR_ECHO_PIN 6<br \/>\n#define SENSOR_MIN_DIST 40<br \/>\n#define SENSOR_MAX_DIST 200<\/p>\n<p>#define MOTOR_CH_A 12<br \/>\n#define BRAKE_CH_A 9<br \/>\n#define SPEED_CH_A 3<\/p>\n<p>#define MOTOR_CH_B 13<br \/>\n#define BRAKE_CH_B 8<br \/>\n#define SPEED_CH_B 11<\/p>\n<p>#define HI_SPEED 255<br \/>\n#define LO_SPEED 128<\/p>\n<p>NewPing sonar(SENSOR_TRIG_PIN, SENSOR_ECHO_PIN, SENSOR_MAX_DIST);<\/p>\n<p>\/\/ servo stuff:<br \/>\nint pos = 0;<br \/>\nint servoCenter = 45;<br \/>\nint servoRight = 90; \/\/ how far right? Max is 180, full right.<br \/>\nint servoLeft = 0; \/\/ how far left? Min is 0, full left.<\/p>\n<p>Servo myservo; \/\/ create servo object to control a servo<br \/>\n\/\/ a maximum of eight servo objects can be created<br \/>\nvoid setup() {<br \/>\nSerial.begin(9600);<\/p>\n<p>pinMode(MOTOR_CH_A, OUTPUT);<br \/>\npinMode(BRAKE_CH_A, OUTPUT);<br \/>\npinMode(SPEED_CH_A, OUTPUT);<\/p>\n<p>pinMode(MOTOR_CH_B, OUTPUT);<br \/>\npinMode(BRAKE_CH_B, OUTPUT);<br \/>\npinMode(SPEED_CH_B, OUTPUT);<\/p>\n<p>myservo.attach(5); \/\/ attaches the servo on pin 5 to the servo object<br \/>\nmyservo.write(servoCenter); \/\/ center it by default<br \/>\n}<\/p>\n<p>void loop() {<br \/>\n\/\/ delay(50);<br \/>\nint ping = sonar.ping_cm();<br \/>\nint dir;<br \/>\nSerial.println(ping);<\/p>\n<p>if ( ping &gt; SENSOR_MIN_DIST ) {<br \/>\ngo_forward();<br \/>\n}<\/p>\n<p>if ( ping &lt;= SENSOR_MIN_DIST ) {<\/p>\n<p>\/\/ if ( ping != 0 ) {<br \/>\nbrake();<br \/>\ndelay(20);<br \/>\ndir = go_look();<br \/>\ndelay(20);<br \/>\ngo_backwards();<br \/>\ndelay(650);<br \/>\n\/\/ be smart about turn direction<\/p>\n<p>if (dir = 1) {<br \/>\nSerial.println(&#8220;Left is blocked &#8211; going right.&#8221;);<br \/>\nSerial.println(dir);<br \/>\nturn_right();<br \/>\ndelay(550);<br \/>\n}<br \/>\nif (dir = 2) {<br \/>\nSerial.println(&#8220;Right is blocked &#8211; going left.&#8221;);<br \/>\nSerial.println(dir);<br \/>\nturn_left();<br \/>\ndelay(550);<br \/>\n}<\/p>\n<p>brake();<br \/>\ndelay(20);<br \/>\n\/\/ }<\/p>\n<p>&nbsp;<\/p>\n<p>}<br \/>\n}<\/p>\n<p>int go_look () {<br \/>\n\/\/ look both ways for better path<br \/>\nmyservo.write(servoRight);<br \/>\nint anglel = myservo.read();<br \/>\nSerial.println(anglel);<\/p>\n<p>delay(1000);<\/p>\n<p>myservo.write(servoLeft);<br \/>\nint angler = myservo.read();<br \/>\nSerial.println(angler);<br \/>\ndelay(1000);<\/p>\n<p>myservo.write(servoCenter);<br \/>\nint anglec = myservo.read();<br \/>\nSerial.println(anglec);<\/p>\n<p>if ( anglel &lt;= SENSOR_MIN_DIST ) {<br \/>\nreturn 1;<br \/>\n}<br \/>\nif ( angler &lt;= SENSOR_MIN_DIST ) {<br \/>\nreturn 2;<br \/>\n}<br \/>\n}<\/p>\n<p>void go_forward() {<br \/>\nSerial.println(&#8220;Going forward&#8230;&#8221;);<\/p>\n<p>digitalWrite(MOTOR_CH_A, HIGH);<br \/>\ndigitalWrite(BRAKE_CH_A, LOW);<br \/>\nanalogWrite(SPEED_CH_A, HI_SPEED);<\/p>\n<p>digitalWrite(MOTOR_CH_B, HIGH);<br \/>\ndigitalWrite(BRAKE_CH_B, LOW);<br \/>\nanalogWrite(SPEED_CH_B, HI_SPEED);<br \/>\n}<\/p>\n<p>void go_backwards() {<br \/>\nSerial.println(&#8220;Going back&#8230;&#8221;);<\/p>\n<p>digitalWrite(MOTOR_CH_A, LOW);<br \/>\ndigitalWrite(BRAKE_CH_A, LOW);<br \/>\nanalogWrite(SPEED_CH_A, LO_SPEED);<\/p>\n<p>digitalWrite(MOTOR_CH_B, LOW);<br \/>\ndigitalWrite(BRAKE_CH_B, LOW);<br \/>\nanalogWrite(SPEED_CH_B, HI_SPEED);<br \/>\n}<\/p>\n<p>void turn_left() {<br \/>\nSerial.println(&#8220;Going left&#8230;&#8221;);<br \/>\ndigitalWrite(BRAKE_CH_A, LOW);<br \/>\nanalogWrite(SPEED_CH_A, HI_SPEED);<br \/>\ndigitalWrite(MOTOR_CH_B, HIGH);<br \/>\ndigitalWrite(BRAKE_CH_B, LOW);<br \/>\nanalogWrite(SPEED_CH_B, HI_SPEED);<br \/>\n}<\/p>\n<p>void turn_right() {<br \/>\nSerial.println(&#8220;Going right&#8230;&#8221;);<\/p>\n<p>digitalWrite(MOTOR_CH_A, HIGH);<br \/>\ndigitalWrite(BRAKE_CH_A, LOW);<br \/>\nanalogWrite(SPEED_CH_A, HI_SPEED);<br \/>\ndigitalWrite(BRAKE_CH_B, LOW);<br \/>\nanalogWrite(SPEED_CH_B, HI_SPEED);<br \/>\n}<\/p>\n<p>void brake() {<br \/>\nSerial.println(&#8220;Braking&#8230;&#8221;);<\/p>\n<p>digitalWrite(BRAKE_CH_A, HIGH);<br \/>\ndigitalWrite(BRAKE_CH_B, HIGH);<br \/>\n}<br \/>\n<iframe loading=\"lazy\" src=\"http:\/\/www.youtube.com\/embed\/GKv7ViSvbRg\" height=\"315\" width=\"560\" allowfullscreen=\"\" frameborder=\"0\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Arduino Uno R3 Arduino Motor Shield r3 HC-SR04 Distance Sensor &#8211; using the NewPing library SainSmart 4WD Chassis Standard Servo (* Not Continous 360) #include &lt;NewPing.h&gt; #include &lt;Servo.h&gt; #define SENSOR_TRIG_PIN 7 #define SENSOR_ECHO_PIN 6 #define SENSOR_MIN_DIST 40 #define SENSOR_MAX_DIST [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[14,8],"tags":[],"class_list":["post-285","post","type-post","status-publish","format-standard","hentry","category-arduino","category-projects"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/markwheeler.com\/index.php?rest_route=\/wp\/v2\/posts\/285","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/markwheeler.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/markwheeler.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/markwheeler.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/markwheeler.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=285"}],"version-history":[{"count":0,"href":"https:\/\/markwheeler.com\/index.php?rest_route=\/wp\/v2\/posts\/285\/revisions"}],"wp:attachment":[{"href":"https:\/\/markwheeler.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/markwheeler.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/markwheeler.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}