Arduino 4wd robot med ping sensor "J-Bot" (5 / 6 steg)
Steg 5: Steg 5 - nu tid att programmet!
Detta är verkligen roligt i del. himlen är gränsen när det gäller programmering din J-Bot. Förväg kan du programmera vägen till godis office maskinen eller kaffekanna till har din office kompis göra en pick-up. Lägga till en web-cam to peer runt höga skåp väggar, lägga högtalarna sänds låtar, tillsätt lemmar och en fjärrkontroll att hämta din favorit gadgets. J-Bot väntar på din fantasi att köra helt enkelt botty.
Först måste du Hämta programvaran Arduino. Nästa Hämta Arduino Stepper/Servo mjukvarubibliotek och följ anvisningarna på hur man sätter biblioteket i dess respektive mapp.
Öppna programvaran Arduino och klistra in koden.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include < AFMotor.h > / / aktiverar Motor biblioteket
#include < Servo.h > / / aktiverar Servo biblioteket
Servo PingServo;
AF_DCMotor motor1(1); Motor 1 är ansluten till port 1 motor sköld
AF_DCMotor motor2(2); Motor 2 är ansluten till port 2 motor sköld
int minSafeDist = 11; Minsta avstånd för ping sensor att veta när man ska vända
int pingPin = A0; Ping sensor är ansluten till port A0
int centerDist, leftDist, rightDist, backDist; Definiera variabler center, vänster, höger och tillbaka avstånd
lång varaktighet, tum, cm; Definiera variabler för Ping sensor
void setup() {
PingServo.attach(10); Servo är kopplad till pinne 10 i motor sköld
PingServo.write(90); Centrera den Ping sensor (uttrycker det i 90 grader)
motor1.setSpeed(215); Anger hastigheten på den första motorn (0, motorerna är vände bort 255 är den snabbaste inställning som du kan använda, jag brukade 215 inte driva motorerna för hårt.)
motor2.setSpeed(215); Anger hastigheten på den andra motorn (0, motorerna är vände bort 255 är den snabbaste inställning som du kan använda, jag brukade 215 inte driva motorerna för hårt.)
Serial.BEGIN(9600); Aktiverar seriella monitor för felsökning ändamål
Serial.println ("Serial test!"); Testa den seriell kommunikationen
}
void AllStop() {
motor1.Run(release); Stänger av motorn 1
motor2.Run(release); Stänger av motorn 2
}
void AllForward() {/ / gör roboten gå framåt
motor1.Run(forward); Motor 1 går framåt
motor2.Run(forward); Motor 2 går framåt
Serial.println ("kommer fram"); En linje i följetong monitor
}
void turnRight() {/ / gör roboten gå rätt
motor2.Run(Backward); Stänger av motorn 2
motor1.Run(forward); Motor 1 går framåt
Delay(1600); Tidsåtgången vid sväng höger (1,6 sekunder)
Serial.println ("motorer går rätt"); En linje i följetong monitor
}
void GoBack() {/ / gör roboten gå tillbaka
motor2.Run(Backward); Motor 2 går tillbaka
motor1.Run(Backward); Motor 1 går tillbaka
Delay(1600); Tiden som krävs för att gå tillbaka (1,6 sekunder)
Serial.println("Backward"); En linje i följetong monitor
}
void turnLeft() {/ / gör roboten gå vänster
motor2.Run(forward); Motor 2 går framåt
motor1.Run(Backward); stänger av motorn 1
Delay(1600); Tiden som krävs för att vända vänster (1,6) sekunder
Serial.println ("motorer går vänster"); / / en linje i följetong monitor
}
Startar en slinga för att besluta vad man ska göra
void loop()
{
LookAhead();
Serial.Print(inches);
Serial.println ("inches"); En linje i följetong monitor
om (tum > = minSafeDist) / * om inches framför ett objekt är större än eller lika med de minsta säkerhetsavstånd (11 tum), reagerar * /
{
AllForward(); Alla hjul fram
Delay(110); Vänta 0.11 sekunder
} annat / / om inte:
{
AllStop(); Stoppa alla motorer
LookAround(); Kontrollera din omgivning för bästa vägen
IF(rightDist > leftDist) / / om rätt avstånd är större än vänster avståndet, sväng höger
{
turnRight();
} else om (leftDist > rightDist) / / om vänster avståndet är större än rätt avstånd, sväng vänster
{
turnLeft();
} else om (leftDist & & rightDist < minSafeDist) / / om vänster och höger avståndet är mindre än minuten säkert avstånd (11 tum) gå tillbaka
{
GoBack();
}
}
}
osignerade långa ping() {
pinMode (pingPin, produktionen); Göra Pingpin att mata
digitalWrite (pingPin, låg); Skicka en låg puls
delayMicroseconds(2); vänta två mikrosekunder
digitalWrite (pingPin, hög); Skicka en hög puls
delayMicroseconds(5); vänta i 5 sekunder för mikro
digitalWrite (pingPin, låg); Skicka en låg puls
pinMode(pingPin,INPUT); Växla Pingpin att mata in
längd = pulseIn (pingPin, hög); lyssna efter echo
/ * Konvertera mikro sekunder till Inches
-------------------------------------*/
tum = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
}
långa microsecondsToInches (lång mikrosekunder) / / konverterar tid till ett avstånd
{
återvända mikrosekunder / 74 / 2;
}
långa microsecondsToCentimeters (lång mikrosekunder) / / konverterar tid till ett avstånd
{
återvända mikrosekunder / 29 / 2;
}
void LookAhead() {
PingServo.write(90); / / vinkel för att se fram
Delay(175); vänta 0.175 sekunder
ping();
}
void LookAround() {
PingServo.write(180); 180° vinkel
Delay(320); vänta 0.32 sekunder
ping();
rightDist = inches; få rätt avstånd
PingServo.write(0); se till andra sidan
Delay(620); vänta 0,62 sekunder
ping();
leftDist = inches; få den vänstra distans
PingServo.write(90); 90° vinkel
Delay(275); vänta 0,275 sekunder
En linje i följetong monitor
Serial.Print ("RightDist:");
Serial.println(rightDist);
Serial.Print ("LeftDist:");
Serial.println(leftDist);
Serial.Print ("CenterDist:");
Serial.println(centerDist);
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------