Stap 6: Programmeren van de ATtiny85
De code voor de ATtiny is geschreven met behulp van de Arduino IDE en ik een kleine AVR-Programmer door Sparkfun gebruikt om de code op de chip. Programmering van deze chips is belachelijk makkelijk en komt neer op weinig meer dan een paar stuurprogramma's, inpluggen van de chip in de programmeur, en raken de knop uploaden laden. Sparkfun heeft geschreven een zeer grondige leerprogramma dat elke stap van dit proces verklaart en het is de tutorial die ik gevolgd: Sparkfun Tiny AVR Programmer Tutorial.
De code voor mijn deurbel is relatief eenvoudig vergeleken met de meeste schetsen (Arduino codebestanden) en het werkt als volgt:
- Controleer het spanningsniveau van de bell's spreker pin en die waarde opgeslagen in een variabele.
- Als deze waarde groter dan een bepaalde drempel is wordt de ATtiny tijdelijk zijn PIR verbonden pin hoog ingesteld en knippert de rode LED.
- Als de waarde kleiner dan de drempel is van de ATtiny doet niets en begint de code opnieuw.
Ik heb hier de Arduino-code geplakt, maar u kunt ook downloaden van github of onderaan deze pagina.
Oh ja, maakte ik ook een 3D gedrukte geval voor mijn kleine programmeur. De bestanden voor deze zaak zijn omhoog op Thingiverse.
//Define which wires are attached to what pin const int speakerPin = A1; const int ledPin = 0; const int pirPin = 1; //Create a variable to store the speaker's voltage value int speakerValue; void setup() { //Set the pins as inputs or outputs pinMode(speakerPin, INPUT); pinMode(ledPin, OUTPUT); pinMode(pirPin, OUTPUT); } void loop() { //Read the voltage on the speaker wire pin as an analog //value and store it in the variable speakerValue speakerValue = analogRead(speakerPin); //is the speaker voltage greater than zero? if (speakerValue >= 175){ //yes it is! digitalWrite(ledPin, HIGH); //turn the LED on digitalWrite(pirPin, HIGH); //send 3.3V to the PIR sensor wire delay(1000); //pause for one second digitalWrite(ledPin, LOW); //turn the LED off digitalWrite(pirPin, LOW); //set the PIR sensor wire back to //zero volts } delay(10); //pause for 10 milliseconds before starting over }