Ljus som söker och hinder att undvika Robot (6 / 9 steg)
Steg 6: Arduino kod
Först av allt måste du centrera din kontinuerlig rotation servon. Centrering dem, menar jag att stoppa dem från att snurra fritt hela tiden. Skriv koden nedan och ladda upp den till din arduino. Nu två saker kommer att hända. Antingen servon kommer att inte snurra, vilket innebär att de redan är centrerade, eller de kommer att snurra på lite fart. Om de snurrar måste du göra något. Kontinuerlig servon har en skruv i sidan där deras kablar är. Ta skruvmejseln och medan servo snurrar skruv eller skruva loss skruven lite tills servo slutar. Detta är hur du centrera dem. Bromsen (mitten) är 90, fullgas vänster är 0 och full gas rätt är 180.
#include
Servo leftMotor;
Servo rightMotor;
void setup() {
rightMotor.attach(11);
leftMotor.attach(10);
}
void loop() {
rightMotor.write(90);
leftMotor.write(90);
}
Nu är du redo att programmera din arduino robot! Få den koden och ladda upp den till din Arrduino! Förhoppningsvis kommer allt att fungera perfekt!
#include //include servo bibliotek
#define trigPin 7 //the trig pin från avstånd sensor
#define echoPin 4 //the echo pin från avstånd sensor
CONST int RForward = 120; hastigheten på servo, högsta hastighet är 180
CONST int RBackward = 60.
CONST int LForward = 60.
CONST int LBackward = 120;
CONST int RNeutral = 90. centrerad position
CONST int LNeutral = 90.
CONST int RightLightSensor = 0; förklara de analoga stift för photoresistors
CONST int LeftLightSensor = 2;
CONST int collisionThresh = 15. tröskeln för hinder (i cm)
int SensorLeft;
int SensorRight;
int SensorDifference;
int leftDistance, rightDistance; avstånd på vardera sidan
Servo panMotor; Micro servo med avstånd sensorn på det
Servo leftMotor; deklarera motorer
Servo rightMotor;
lång varaktighet; tid det tar att ta emot PING))) signal
void setup() {
rightMotor.attach(11); bifoga motorer till rätt stift
leftMotor.attach(10);
panMotor.attach(6);
panMotor.write(90); Center pan servo
pinMode (trigPin, produktionen);
pinMode (echoPin, ingång);
pinMode (LeftLightSensor, indata);
pinMode (RightLightSensor, indata);
}
void loop() {
int avstånd = ping(); anropa funktionen ping för att få avståndet framför roboten
SensorLeft = 1023 - analogRead(LeftLightSensor); Läs photoresistors
Delay(1);
SensorRight = 1023 - analogRead(RightLightSensor);
Delay(1);
SensorDifference = abs (SensorLeft - SensorRight);
om (avstånd > collisionThresh) //if sökväg är klart styras från ljus
{
om (SensorLeft > SensorRight & & SensorDifference > 75) {//left
leftMotor.write(LBackward);
rightMotor.write(RForward);
Delay(250);
}
om (SensorLeft < SensorRight & & SensorDifference > 75) {//right
leftMotor.write(LForward);
rightMotor.write(RBackward);
Delay(250);
}
annars om (SensorDifference < 75) {//forward
leftMotor.write(LForward);
rightMotor.write(RForward);
Delay(500);
}
}
annat //if sökväg är blockerade {
leftMotor.write(LNeutral);
rightMotor.write(RNeutral);
panMotor.write(0);
Delay(500);
rightDistance = ping(); Skanna till höger
Delay(500);
panMotor.write(180);
Delay(700);
leftDistance = ping(); Skanna till vänster
Delay(500);
panMotor.write(90); tillbaka till center
Delay(100);
compareDistance();
}
}
void compareDistance() {
om (leftDistance > rightDistance) //if vänster hindras mindre
{
leftMotor.write(LBackward);
rightMotor.write(RForward); Sväng vänster
Delay(500);
}
annars om (rightDistance > leftDistance) //if höger hindras mindre
{
leftMotor.write(LForward);
rightMotor.write(RBackward); Sväng höger
Delay(500);
}
annat //if de hindras lika
{
leftMotor.write(LForward);
rightMotor.write(RForward); vända 180 grader
Delay(1000);
}
}
lång ping() {/ / skicka ut PING))) signalera puls
digitalWrite (trigPin, låg);
delayMicroseconds(2);
digitalWrite (trigPin, hög);
delayMicroseconds(5);
digitalWrite (trigPin, låg);
Få tid det tar för att få eko
längd = pulseIn (echoPin, hög);
Konvertera varaktighet till avstånd
returnera varaktighet / 29 / 2;
}