Waarop enkel de Atmetl, dat de simulator van de zonsopgang begonnen met het krijgen van intermitterende fouten, wat resulteerde in felle lichtflitsen tijdens de cyclus van de zonsopgang in plaats van een geleidelijke toename. Dit was vermoedelijk van extra ruis van de wekker van de Soleil. Ik had niet meer gemakkelijke toegang tot een Atmel-programmer, dus besloten om te werken aan een Arduino voor gemakkelijker toekomstige veranderingen.
De bedrading is dat grotendeels dezelfde als voorheen, behalve het signaal van de Soleil wordt gelezen door een analoge ingang in plaats van een digitale ingang. Heb ik besloten dat de domeincontroller beter bestand tegen lawaai dan via de analoge ingang zou maken de mijn vorige oplossing met behulp van interrupts. Arduino code is hieronder:
lange previousMillis = 0; laatste keer LED werd bijgewerkt zal slaan
lange interval = 1000; interval waartegen bijwerken (milliseconden)
VOID Setup {}
Initialiseer de digitale pin als uitgang.
pinMode (9, OUTPUT);
uitschakelen van de LED op de Arduino board
pinMode (13, OUTPUT);
digitalWrite (13, laag);
Timer1 doet ~ 16-bits PWM
TCCR1A = _BV (COM1B1) | _BV (WGM11) | _BV (COM1A1);
TCCR1B = _BV (WGM13) | _BV (WGM12) | _BV (CS10);
ICR1 = 65535;
Start de taakcyclus van de PWM op 100%
OCR1A = 65535;
dit voor foutopsporing inschakelen
Serial.begin(9600);
}
void loop {}
unsigned long currentMillis = millis();
lange y = 0;
lang uitgang [100], u;
int i;
Neem 1000 lezingen op de analoge ingang
voor (ik = 0; ik < 1000; i ++) {}
y = y + analogRead(A0);
}
uitgang [0] = 65535 / (1 + exp(-1*0.00002275*(y-500000)));
gemiddelde van de uitvoer, zodat het niet rond springen
voor (ik = 9; Ik > 0; ik--) {}
uitgang [i] = output [i-1];
}
u = 0;
voor (ik = 0; ik < 10; i ++) {}
u = u + uitgang [i];
}
Zorg ervoor dat de waarde van de output hierboven 65535 niet gaan
Als u (u/10 > 65535) = 655350;
instellen van de PWM-taakcyclus
OCR1A = u/10;
Als (currentMillis - previousMillis > interval) {}
opslaan van de laatste keer dat het resultaat was afgedrukt
previousMillis = currentMillis;
uitgang what's going on voor foutopsporing
Serial.println(OCR1A);
Serial.println(y);
}
}
Ik vastbesloten de exponentiële functie die overeenkomen met de output van de LED's om de gloeiende lichten door oog en trial and error. Een grafiek met de exponentiële stijging in vergelijking tot een lineaire verhoging is gekoppeld.