LifeSize Poseable Animatronic Endoskeleton (7 / 7 steg)
Steg 7: Ljus söker Arduino skiss
Följande kod förkroppsligar den Arduino skissen för att söka ett starkt ljus med en stegmotor.
/*
Stepper Motor Control - jakten att hitta en stark ljuskälla detta program kör en unipolär eller bipolär stegmotor. Motorn är kopplad till digital stift 8-11 på Arduino. Motorn bör kretsa ett varv i en riktning, sedan en revolution i den andra riktningen. Skapad av Scott Turnbull 30 oktober 2014 * /
#include
CONST int stepsPerRevolution = 72. ändra detta för att passa ett antal steg per varv / / för din motor
initiera stepper biblioteket på stift 8 till 11:
Stepper myStepper (stepsPerRevolution, 8,11,12,13);
int sensorPin = A4; Välj input PIN-koden för fotomotstånd
int sensorPin2 = A5; Välj input PIN-koden för 2: a fotomotstånd
int sensorValue = 0; variabel för ljus indatavärde
int sensorValue2 = 0; variabel för 2 ljus indatavärde
int sensecalibrate = 0; ett värde att kalibrera matchade sensor värden
int sensorValue_old = 0; föregående värde från sensorn
int stepvalue = 2; stegvärdet för att flytta
int stepbump = stepvalue; värde (med tecken) för att flytta varje uppdatering
int stepmax = stepsPerRevolution/4. Hur mycket ska sopa på vardera sidan
int steptally = 0; hålla antalet steg från utgångsläge
void setup() {
ställa in hastigheten på 5 varv:
myStepper.setSpeed(5); initiera serieporten:
Serial.BEGIN(9600);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
sensorValue = analogRead(sensorPin);
sensorValue2 = analogRead(sensorPin2);
sensecalibrate = sensorValue - sensorValue2;
}
void loop() {/ / läsa värdet från sensorn:
sensorValue = analogRead(sensorPin);
sensorValue2 = analogRead (sensorPin2) + sensecalibrate;
Serial.Print ("Sensor värde:");
Serial.Print(sensorValue);
Serial.Print ("Sensor värde 2:");
Serial.println(sensorValue2); Serial.Print ("steg stämmer:"); Serial.println(steptally);
om ljuset är starkare, hålla sig i den riktningen
om (sensorValue > sensorValue2) {
om (abs(steptally+stepvalue) < stepmax) {
myStepper.step(stepvalue);
steptally = steptally + stepvalue;
} annat {
myStepper.step(-10);
steptally = steptally -10;
}
} annat {
om ljuset är svagare, växlar riktning och dubbel tillbaka
stepbump = 0-stepvalue;
om (abs(steptally+stepbump) < stepmax) {
myStepper.step(stepbump);
steptally = steptally + stepbump;
} annat {
myStepper.step(10);
steptally = steptally + 10;
}
}
Delay(400);
}