Stap 4: Arduino Code
Moet u sommige code kan worden uitgevoerd op ScareOS. De code controleert de onderdelen en behandelt wake/slaap, triggering geluiden en het weergeven van de ogen op de LED-matrix. U vindt de volledige code op https://github.com/mp911de/scare-os-halloween-iot
De code is gelegen in schrikken-os/schrikken-os.ino. U moet twee extra bibliotheken:
De site van Adafruit heeft een mooie tutorial hoe Arduino bibliotheken te installeren. Dus open de schets, compileren en uploaden naar je Arduino. U kunt de code voor het gebruik van verschillende pennen of aanpassen van de afstand/timing vast:
#define PIN_SONIC_TRIGGER 3#define PIN_SONIC_ECHO 2#define PIN_SND_TRIGGER_WAKE 9 #define PIN_SND_TRIGGER_REGULAR 8 #define PIN_SND_TRIGGER_NEAR 7 #define PIN_SND_TRIGGER_SLEEPING 6 #define PIN_SND_ACTIVE 5// ms #define SOUND_INTERVAL_MS 20000 #define WAKE_DURATION_MS 180000#define ACTIVATION_DISTANCE_CM 280 #define NEAR_DISTANCE_CM 100
Threading met Arduino
Arduino code uitgevoerd alleen single-threaded, wat betekent dat je Arduino slechts één ding tegelijk kan doen. Het geluid triggermodule, bijvoorbeeld, doet niet bezetten de Arduino zodra een geluid wordt afgespeeld. Zo spelen de geluiden op de achtergrond binnen deze terminologie.
Waarom ik zeg je dat?
Weer te geven en het animeren van graphics, zoals het is gedaan met de ogen van de matrix, vereist de Arduino code uitvoeren, een tijdje slapen, dan weer en zo verder met het uitvoeren van code. Één animatie cyclus duurt tussen de 0,5 sec en 10sec. In deze tijd, is de Arduino bezig met de animatie. Als iemand door de sensor bereik echt snel wandelingen, zou we niet opmerken, omdat wij zijn bezet met het animeren en niet met het meten van de afstand.
Maar dat is niet volledig waar. Allermeest naar de tijd, de Arduino "sleeps" wat betekent dat we die tijd verschillende dingen - om dingen te doen zoals triggering van een geluid of meetafstand kunnen gebruiken. De code is geschreven om gebruik te maken van deze vertragingen. U vindt veel van een methode bgProcessing() wordt aangeroepen. Deze methode wordt aangeroepen met de parameter van een vertraging. De vertraging is lang genoeg voor het meten van de afstand (het meten van dat de afstand heeft tijd nodig en triggering geluid, ook), de afstand wordt gemeten als de geluidsverwerking er wordt aangeroepen. Het is niet precies een taakplanner zoals een Windows of MacOS gebruiken om te emuleren multi-threading op één CPU (core), maar het interleaves taken op een vergelijkbare manier.
Enkele woorden over de meetafstand
De opgezette sensor maakt gebruik van de fysica van de snelheid van het geluid om de afstand te bepalen. Een ultrasoon geluid wordt geactiveerd en de microfoon registreert de echo. De snelheid van het geluid in de droge lucht is ongeveer een kilometer in 2.914 sec. Aangezien het geluid nodig heeft om te raken van een object dat het stuitert terug, is de manier waarop tweemaal gekruist. Dit betekent, dat de duur voor het meten van de afstand
DISTANCE * Speed of Sound * 2
Soms, meldt de opgezette sensor een echo na een shorer of een langere tijd. Het resultaat daarvan zijn afstanden van maximaal 100cm flikkeren. Dit zijn uitschieters en vervalsen van het resultaat (de veronderstelling van afstand). De code, daarom, wordt een reeks maatregelen uitgevoerd, sorteert de resultaten en neemt enkele Midden resultaat. Het werkt vrij goed en de uitvoering is heel simpel (makkelijker dan een kwantiel berekening).