LDR Robot (13 / 15 steg)
Steg 13: Testa IR
Använda följande kod för att bestämma om IR-detektering är korrekt inställd. Ladda upp koden, sedan lägga din hand framför IR-LED och Arduino's LED ska vända. När du flyttar din hand bort bör lampan stänga av. (På bilden ovan LED är märkt med ett "L")
Kod:
(http://www.egrobotics.com/instructions/code/testir.ino)
#define IRsensorPin 11 void IR38Write() { void loop() {
#define IRledPin 10
#define D13ledPin 13
för (int jag = 0; jag < = 384; i ++) {
digitalWrite (IRledPin, hög);
delayMicroseconds(13);
digitalWrite (IRledPin, låg);
delayMicroseconds(13);
}
}
void setup() {
pinMode (IRledPin, OUTPUT);
digitalWrite (IRledPin, låg);
pinMode (D13ledPin, OUTPUT);
digitalWrite (D13ledPin, låg);
}
IR38Write();
om (digitalRead(IRsensorPin)==LOW) {
digitalWrite (D13ledPin, hög);
} annat {
digitalWrite (D13ledPin, låg);
}
Delay(100);
}
Felsökning:
Om lysdioden är alltid på eller kommer off ofta lägga till mer tejp runt stråna och sätta en avdelare mur mellan IR-LED och IR-sensorn.
Om lampan inte tänds bör du allt är anslutna och kopplat till rätt stift. Vara att vinklarna är korrekta. Ljuset måste kunna studsa objektet och återvända till den svarta delen av IR-sensorn.
Del 2
Om din IR-LED och mottagare fungerar korrekt är nästa sak att göra prova följande kod som aktiverar både LDR och IR för att ha roboten söka ut ljus, men på samma tid försök att undvika hinder i vägen.
Kod:
(http://www.egrobotics.com/instructions/code/robotavoid.ino)
#include < Servo.h >
Servo myservo;
#define IRsensorPin 11
#define IRledPin 10
CONST int RightSensor = 2;
CONST int LeftSensor = 0;
int IR;
int SensorLeft;
int SensorRight;
int SensorDifference;
void IR38Write() {
för (int jag = 0; jag < = 384; i ++) {
digitalWrite (IRledPin, hög);
delayMicroseconds(13);
digitalWrite (IRledPin, låg);
delayMicroseconds(13);
}
}
void setup() {
myservo.attach(5);
pinMode (IRledPin, OUTPUT);
digitalWrite (IRledPin, låg);
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
pinMode (LeftSensor, indata);
pinMode (RightSensor, indata);
Serial.BEGIN(9600);
Serial.println ("\nBeginning ljus söker beteende");
}
void loop() {
IR38Write();
IR = digitalRead(IRsensorPin);
Delay(50);
SensorLeft = 1023 - analogRead(LeftSensor);
Delay(1);
SensorRight = 1023 - analogRead(RightSensor);
Delay(1);
SensorDifference = abs (SensorLeft - SensorRight);
Serial.Print ("vänster Sensor =");
Serial.Print(SensorLeft);
Serial.Print("\t");
Serial.Print ("rätt Sensor =");
Serial.Print(SensorRight);
Serial.Print("\t");
om (SensorLeft > SensorRight & & SensorDifference > 75 & & IR == hög) {
Serial.println("left");
digitalWrite 8, hög.
Delay(250);
digitalWrite 8, låg.
Delay(100);
}
om (IR == låg) {
digitalWrite 8, hög.
Delay(1500);
digitalWrite 8, låg.
digitalWrite 8, låg.
Delay(150);
}
om (SensorLeft < SensorRight & & SensorDifference > 75 & & IR == hög) {
digitalWrite (9, hög).
Delay(250);
digitalWrite (9, låg).
Delay(100);
}
annars om (SensorDifference < 75 & & IR == hög) {
Serial.println("forward");
digitalWrite 8, hög.
digitalWrite (9, hög).
Delay(500);
digitalWrite 8, låg.
digitalWrite (9, låg).
Delay(250);
}
Serial.Print("\n");
}