Skrämmande Halloween ögon med ljud och allt Sensor (4 / 5 steg)
Steg 4: Arduino kod
Du behöver några kod att köra ScareOS. Koden kontrollerar komponenterna och hanterar vakna/sova, utlöser ljud och visar ögonen på LED matrix. Du kan hitta den fullständiga koden på https://github.com/mp911de/scare-os-halloween-iot
Koden är beläget i scare-os/skrämma-os.ino. Du behöver två ytterligare bibliotek:
Webbplatsen Adafruit har en fin tutorial hur man installera Arduino bibliotek. Så öppna skissen, kompilera den och ladda upp den till din Arduino. Du kan införa koden för att använda olika pins eller justera avstånd/timing:
#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
Gängning med Arduino
Arduino kod körs endast entrådiga, vilket betyder att din Arduino kan göra bara en sak i taget. Sund trigger modulen, exempelvis upptar inte Arduino när ett ljud spelas upp. Så spela ljud i bakgrunden i denna terminologi.
Varför jag berättar det?
Visning och animera grafik, som det är gjort med matrix ögonen, kräver Arduino att köra kod, sova ett tag och sedan exekvera kod igen och så vidare. En animation cykel varar mellan 0.5 sek och 10 SEK. I denna tid upptas Arduino med animeringen. Om någon går av utbud sensorn jättefort, skulle vi inte märka det, eftersom vi är upptagna med att animera och inte med mätning av avstånd.
Men det är inte helt sant. För mesta, Arduino "sover" vilket innebär att vi kunde använda den tiden för att göra olika saker - saker som utlöser ett ljud eller mäta avståndet. Koden är skriven att utnyttja dessa förseningar. Här hittar du massor av samtal till en bgProcessing() metod. Denna metod kallas med en försening parameter. Om förseningen är tillräckligt lång för att mäta avståndet (mäta avstånd behöver tid och utlöser ljud, alltför), mäts avståndet och ljudbearbetning anropas det. Det är inte precis en Schemaläggaren som en Windows eller MacOS använda emulera multi-threading på en CPU (core), men det mellanlägg uppgifter på ett liknande sätt.
Några ord om att mäta avstånd
Mellan sensorn använder fysiken av ljudets hastighet för att bestämma avståndet. Ett ultraljud utlöses och mikrofonen registrerar eka. Som rusas av solitt, torr luft är cirka en kilometer i 2.914 SEK. Eftersom ljudet behöver slå ett objekt som studsar tillbaka, korsade vägen två gånger. Det betyder att varaktigheten att mäta avståndet är
AVSTÅND * ljudets hastighet * 2
Ibland rapporterar sträcker sig sensorn ekots efter ett shorer eller en längre tid. Resultatet av detta flimmer avstånd upp till 100 cm. Dessa är avvikare och förfalska resultatet (antagandet av avstånd). Koden, därför utför en rad åtgärder, sorterar resultaten och tar några mellersta resultatet. Det fungerar ganska bra och genomförandet är ganska enkelt (lättare än beräkning av en quantile).