Arduino LDR Motion Tracking (2 / 2 steg)
Steg 2: Koden upp
Innan jag går in i koden av skiss, du vet att det finns en hel del variation i motstånd värdena för varje LDR (Ja, säkert på $0,36 varje), och jag vill ha den behandlingen vara så nära varandra som möjligt, i en skala. Så, del av koden är avsedd att vikt avläsningar för varje LDR att utjämna avläsningarna.
Min strategi kan vara otymplig, men det verkar fungera.
Jag använder för loopar för att initiera Arduino analoga stiften:
för (int indexA = 0; indexA < 6; indexA ++) {
pinMode (indexA, ingång);
}
sedan räkna jag ut medelvärdet för alla LDR och vägning för varje LDR (mot detta genomsnitt)
void averageLDR() < br > {
int tmpAvg = 0;
för (int indexA = 0; indexA < 6; indexA ++)
{
int tmpVal = 0;
för (int indexB = 0; indexB < 100; indexB ++)
{
tmpVal += analogRead(indexA);
}
LDR [indexA] = tmpVal / 100;
ldrAvg += LDR [indexA];
}
ldrAvg = ldrAvg / 6;
för (int indexA = 0; indexA < 6; indexA ++)
{
LDR [indexA] = ldrAvg - LDR [indexA];
}
}
Genomsnittligt görs genom att ta 100 läsningar för varje LDR, summera värdena och divideras med 100. Genomsnittligt skrivs till en matris med 6 element. Matris värdena läggs tillsammans och delat med 6 för att ge en övergripande genomsnittet för LDR, slutligen, enskilda LDR värdet läggs tillbaka till matrisen som det globala genomsnittet - enskilda genomsnittet. Så, slut dig med en total genomsnittlig (ldrAverage) och 6 korrigeringskoefficienterna (LDR[6]) som kommer att tillämpas på varje analogRead, således:
void loop() < br > {
för (int indexA = 0; indexA < 6; indexA ++)
{
inputValue = analogRead(indexA) + LDR [indexA];
Sträng se = sträng ("LDR:" + String(indexA) + "värde:" + String(inputValue));
Serial.println(se);
}
Serial.println("---");
Delay(3000);
}
Skissen ser helt enkelt håller läser varje av LDR sekventiellt.
Vad du sluta med är en seriell utgång som ger dig vissa initiering information om genomsnitt processen och sedan LDR avläsningarna.
Du kan se hur detta sedan kan tillämpas på en motion tracking skiss.
Få det högsta värdet läser, som är där mitt i förslaget är, kan du få den nästa högsta grannen om förslaget är bara höger- eller bara av LDR.
Om två LDR är likvärdiga, är förslaget centrerad mellan dessa två LDR... och så vidare.
Så istället för att bara skicka utdata till seriell, kan du göra något tjusig med dem... och gå rotera ett kanontorn!