Lägg till hinder upptäcka morrhår på din Robot (5 / 6 steg)
Steg 5: programmering
Vad den gör
- Programmet kommer att driva din robot fram tills en av morrhår påträffar något, den vilja då omvänd för 500 millisekunder då vända slumpmässigt vänster eller höger under en tid mellan 300 och 1500 millisekunder, innan du fortsätter fram till möta ett annat hinder.
För de intresserade helt enkelt att få det finns gå det två alternativ.
Alternativ 1 - ladda ner och packa upp
- Hämta bifogade zip-filen (07_SERB_Whiskers.zip)
- Packa upp den till din Arduino skiss katalog (standard/Mina dokument/Arduino /)
- Starta Arduino miljö och hämta skissen (_SERB_Whiskers)
- Ladda upp och börja spela
Alternativ 2 - kopiera och klistra in
- Kopiera den Arduino koden nedan
- Klistra in den i utvecklingsmiljön Arduino.
- Ladda upp och börja spela
Tillägg 1 - Arduino kod (_SERB_Whiskers)
/ *** * Arduino kontrollerade Servo Robot (serbiska) - Whisker undvikande ** för mer information besök: http://www.oomlout.com/serb **** beteende: använder två tråd Morris, att stöta på hinder och ** ändras riktningen. Det kommer poll den ** morrhår och när man visar sig vara utlöst det ** kommer att vända för 500 millisekunder sedan ** aktivera slumpmässigt vänster eller höger för en slumpmässig tid ** mellan 300 och 1500 millisekunder **** ledningar:--Arduino kontrollerade Servo Robot--** rätt Servo signalen - pin 9 ** vänster Servo signalen - stift 10 **--morrhår ledningar--** rätt morrhår - stift 6 ** lämnade whisker - pin 7 ** morrhår common - marken **** licens : Detta arbete är licensierat under Creative Commons ** Erkännande-Dela Lika 3.0 Unported License. Till ** se en kopia av denna licens, besök ** http://creativecommons.org/licenses/by-sa/3.0/ ** eller skicka ett brev till Creative Commons, 171 andra ** Street, Suite 300, San Francisco, Kalifornien 94105, ** USA. *** *** / / /---/ / START av MORRHÅR INGRESSEN #define RIGHTWHISKER 6 //the stifts rätt morrhår är kopplad till #define LEFTWHISKER 7 //the pin den vänstra morrhår är kopplad till / /---/ / START av ARDUINO kontrollerade SERVO ROBOT (serbiska) ingress #include < Servo.h > #define LEFTSERVOPIN 10 //The pin vänster Servo är ansluten till #define RIGHTSERVOPIN 9 //The stifts rätt Servo är ansluten till #define MAXOMDR 30 //due till hur kontinuerlig rotation servon //work högsta hastighet uppnås på ett mycket //lower värde än 90 (detta värde ändras //depending på din servon) (för Parallax servon) //20 ger dig komplett utbud 10 gör det mycket //controllable men en liten slowServo leftServo; Servo rightServo; int leftSpeed; Anger hastigheten robot (vänster servon) //a procentsatser mellan - MAXOMDR och MAXSPEEDint rightSpeed; Anger hastigheten på roboten (båda servon) //a andel mellan - MAXOMDR och MAXSPEEDint hastighet = 100; används för enkel kontroll (goForward etc.) //a andel mellan 0 och MAXOMDR / / slutet av detta program INGRESSEN / /---void setup() {beginSerial (9600); //Starts seriell port serbSetup(); //adds servon och förbereder alla //SERB med variabler whiskerSetup();} / * * Huvudloop * skickar roboten framåt sedan kontrollerar det är Morris, om man trycker på * roboten kommer att vända då tur och huvudet framåt gång * / void loop() {goForward(); //sends robot framåt checkWhiskers(); //checks att se om ett morrhår trycks} //---//START MORRHÅR ROUTINESvoid whiskerSetup() {pinMode (RIGHTWHISKER, indata); //Sets rätt morrhår pin vara en ingående pinMode (LEFTWHISKER, indata); //Sets lämnade whisker pin för att vara en ingående digitalWrite (RIGHTWHISKER HÖG); //Sets rätt morrhår pin's interna pullup //resistor (detta innebär PIN-koden är hög när //there är ingen signal ansluten och läser låg //when en negativ signal är fäst digitalWrite (LEFTWHISKER, hög); //Sets lämnade whisker pin's interna pullup //resistor}void checkWhiskers() {if(!digitalRead(RIGHTWHISKER)){reverseAndTurn();} //if rätt morrhår trycks //then bakåt och vrid om ()! digitalRead(LEFTWHISKER)){reverseAndTurn();} //if lämnade whisker trycks //then omvänd och tur} void reverseAndTurn() {goBackward(); //goes bakåt delay(500) //for halv ett andra turnRandom(300,1500); //turns slumpmässigt under en tid mellan 300 och 1500 millisekunder} //END av MORRHÅR rutiner / /---/ /---/ / START av ARDUINO kontrollerade SERVO ROBOT (serbiska) rutiner / * * sätter upp din arduino att ta itu med din serbiska med hjälp av den medföljande * rutiner * / void serbSetup() {setSpeed(speed); pinMode (LEFTSERVOPIN OUTPUT); Anger den vänstra servo signalen pin //to utgång pinMode (RIGHTSERVOPIN, OUTPUT); anger rätt servo signalen pin //to utgång leftServo.attach(LEFTSERVOPIN); fäster lämnat servo rightServo.attach(RIGHTSERVOPIN); fäster rätt servo goStop();} / * * Anger hastigheten av roboten mellan 0-(stopped) och 100-(full hastighet) * OBS: hastighet ändras inte den aktuella hastigheten måste du ändra hastighet * sedan ringa gå metoder innan förändringar sker. * / void setSpeed (int newSpeed) {om (newSpeed > = 100) {newSpeed = 100;} //if hastighet är större än 100 //make det 100 if (newSpeed < = 0) {newSpeed = 0;} //if hastighet är mindre än 0 //it 0 hastighet = newSpeed * MAXOMDR / 100; //scales hastigheten är //between 0 och MAXOMDR} / * * anger hastigheten av robotar rightServo mellan-100-(reversed) och 100-(forward) * OBS : samtal till denna rutin kommer att gälla omedelbart * / void setSpeedRight (int newSpeed) {om (newSpeed > = 100) {newSpeed = 100;} //if hastighet är större än 100 //make det 100 if (newSpeed < = -100) {newSpeed = -100;} //if hastighet är mindre än -100 gör //it -100 rightSpeed = newSpeed * MAXOMDR / 100; //scales hastigheten att vara //between - MAXOMDR och MAXOMDR rightServo.write (90 - rightSpeed); //sends det nya värdet till servo} / * * anger hastigheten av robotar leftServo mellan-100-(reversed) och 100-(forward) * OBS : samtal till denna rutin kommer att gälla omedelbart * / void setSpeedLeft (int newSpeed) {om (newSpeed > = 100) {newSpeed = 100;} //if hastighet är större än 100 //make det 100 if (newSpeed < = -100) {newSpeed = -100;} om hastigheten är mindre än-100 //make det-100 leftSpeed = newSpeed * MAXOMDR / 100; //scales hastigheten att vara //between - MAXOMDR och MAXOMDR leftServo.write (90 + leftSpeed); skickar det nya värdet till servo} / * * vänder sig till robot slumpmässigt vänster eller höger för en slumpmässig tidsperiod mellan * minTime (millisekunder) och maxTime (millisekunder) * / void turnRandom (int minTime, int maxTime) {int val = random(2); //Random nummer att bestämma //between vänster (1) och höger (0) int turnTime = random(minTime,maxTime); //Random nummer för paus //time if(choice == 1) {goLeft();} //If slumptal = 1 sedan vända //left annat {goRight();} //If slumptal = 0 sedan vända //right delay(turnTime); //delay för slumpmässig tid} / * * skickar roboten framåt * / void goForward() {leftServo.write (90 + hastighet); rightServo.write (90 - hastighet);} / * * skickar roboten bakåt * / void goBackward() {leftServo.write (90 - speed), rightServo.write (90 + hastighet);} / * * skickar roboten rätt * / void goRight() {leftServo.write (90 + hastighet), rightServo.write (90 + hastighet);} / * * skickar roboten vänster * / void goLeft() {leftServo.write (90 - speed), rightServo.write (90 - hastighet);} / * * stannar roboten * / void goStop() {leftServo.write(90); rightServo.write(90);} SLUTET AV ARDUINO KONTROLLERADE SERVO ROBOT (SERBISKA) RUTINER / /---