Arduino kontrollerade Sunrise alarmklocka
Kör på bara Atmetl, sunrise simulatorn började få tillfälliga fel, vilket resulterade i ljusa ljusblixtar under sunrise cykel i stället för en successiv ökning. Förmodligen var detta från ytterligare buller från Soleil väckarklockan. Inte längre hade jag lätt tillgång till en Atmel programmerare, så bestämde mig för att uppdatera till en Arduino för enklare framtida förändringar.
Ledningarna är i stort sett samma som tidigare, förutom signalen från Soleil läses av en analog ingång istället för en digital ingång. Jag bestämde mig använder analog ingång skulle göra registeransvarige mer motståndskraftiga mot buller än den min tidigare lösningen med avbrott. Arduino koden är nedan:
lång previousMillis = 0; kommer att lagra förra gången LED uppdaterades
långa intervall = 1000; intervall som du vill uppdatera (millisekunder)
void setup() {
initiera digital PIN-koden som en utgång.
pinMode (9, OUTPUT);
stänga av LED på Arduino styrelsen
pinMode (13, OUTPUT);
digitalWrite 13, låg.
Timer1 gör ~ 16-bitars PWM
TCCR1A = _BV (COM1B1) | _BV (WGM11) | _BV (COM1A1);
TCCR1B = _BV (WGM13) | _BV (WGM12) | _BV (CS10);
ICR1 = 65535;
Starta PWM intermittensen vid 100%
OCR1A = 65535;
aktivera detta för felsökning
Serial.BEGIN(9600);
}
void loop() {
osignerade långa currentMillis = millis();
långa y = 0;
långa utgång [100], u;
int i;
ta 1000 avläsningar på analog ingång
för (jag = 0; jag < 1000; i ++) {
y = y + analogRead(A0);
}
output [0] = 65535 / (1 + exp(-1*0.00002275*(y-500000)));
den genomsnittliga produktionen så det inte hoppa runt
för (jag = 9; jag > 0; i--) {
output [i] = utgång [i-1];
}
u = 0;
för (jag = 0; jag < 10; i ++) {
u = u + utgång [i];
}
se till att produktionsvärde inte går över 65535
om (u/10 > 65535) u = 655350;
ställa in PWM intermittensen
OCR1A = u/10;
om (currentMillis - previousMillis > intervall) {
Spara sista gången utdata trycktes
previousMillis = currentMillis;
ut vad som händer för felsökning
Serial.println(OCR1A);
Serial.println(y);
}
}
Jag fastställt den exponentiella funktionen som matchade produktionen av ljusdioderna till glödljus av ögat och prova. Ett diagram som visar den exponentiella ökningen jämfört med en linjär ökning är fäst.