Fonctionne sur tout le Atmetl, que le simulateur d’aube commencé à recevoir des erreurs intermittentes, qui a abouti à des flashs lumineux de lumière pendant le cycle de lever du soleil au lieu d’une augmentation progressive. C’était sans doute du bruit supplémentaire depuis le réveil du Soleil. Je n’avais plus un accès facile à un programmeur d’Atmel, a donc décidé de mettre à jour à un Arduino pour les changements à venir plus faciles.
Le câblage est en grande partie le même que précédemment, sauf le signal provenant du Soleil est lu par une entrée plutôt que d’une entrée numérique analogique. J’ai décidé, à l’aide de l’entrée analogique rendrait le contrôleur plus résistant au bruit que la ma solution précédente à l’aide d’interruptions. Code de l’Arduino est ci-dessous :
long previousMillis = 0 ; va stocker la dernière fois mise à jour de LED
intervalle long = 1000 ; intervalle à laquelle mettre à jour (en millisecondes)
void setup() {}
initialiser la broche numérique en tant que sortie.
pinMode (sortie 9) ;
éteindre la LED sur la carte Arduino
pinMode (13, sortie) ;
digitalWrite (13, faible) ;
Timer1 fait PWM ~ 16-bit
TCCR1A = _BV (COM1B1) | _BV (WGM11) | _BV (COM1A1) ;
TCCR1B = _BV (WGM13) | _BV (WGM12) | _BV (CS10) ;
ICR1 = 65535 ;
Démarrer le cycle PWM à 100 %
OCR1A = 65535 ;
cela allume pour le débogage
Serial.Begin(9600) ;
}
void loop() {}
unsigned long currentMillis = millis() ;
longtemps y = 0 ;
longue sortie [100], u ;
int i ;
prendre 1000 lectures sur l’entrée analogique
pour (i = 0; i < 1000; i ++) {}
y = y + analogRead(A0) ;
}
sortie [0] = 65535 / (1 + exp(-1*0.00002275*(y-500000))) ;
la sortie moyenne, donc il n’est pas sauter partout
pour (i = 9; J’ai > 0; i--) {}
sortie [i] = sortie [i-1] ;
}
u = 0 ;
pour (i = 0; i < 10; i ++) {}
u = u + sortie [i] ;
}
Assurez-vous que la valeur de sortie ne va pas au-dessus de 65535
Si u (u/10 > 65535) = 655350 ;
définir le facteur de marche PWM
OCR1A = u/10 ;
Si (currentMillis - previousMillis > intervalle) {}
enregistrer la dernière fois que la sortie a été imprimée
previousMillis = currentMillis ;
sortie ce qui se passe pour le débogage
Serial.println(OCR1A) ;
Serial.println(y) ;
}
}
J’ai déterminé la fonction exponentielle qui correspondait à la sortie des LED pour les lampes à incandescence par le œil et de tâtonnements. Un graphique illustrant la montée exponentielle par rapport à une augmentation linéaire est attaché.