Halloween onda ögon - Redux (och resten!) (6 / 6 steg)
Steg 6: Control Unit
Styrenheten består av en Arduino och två staplade sköldar som följer;
- Arduino Uno R3 (icke-klon). http://proto-pic.co.uk/Arduino-Uno/
- Detta används för att kontrollera och synkronisera effekter
- Adafruit Waveshield v1.1. https://www.adafruit.com/products/94
- Detta möjliggör ljuduppspelning med PWM från Uno kör på Adafruit wave biblioteket WaveHC.h och WaveUtil.h. Detaljer här; https://learn.adafruit.com/adafruit-Wave-Shield-Audio-Shield-for-Arduino
- Adafruit Proto sköld v0.5. https://www.adafruit.com/products/51
- Detta ger 1W ljud förstärkning.
Som jag nämnde på första sidan, men kommer att sammanfatta här. När systemet är inaktivt i är det quiescent staten ultra ljusa gröna lysdioderna puls "hotfullt", detta uppnås genom kontrollerad modulering av PWM-signal som matas till föraren transistorn T2 ansluten till stift 6 på Arduino via en 10K motstånd. Samlaren av T2 sjunker den nuvarande belastningen från 5 gröna lysdioderna anslutna parallellt.
Under rörelsedetektering skickas signalen från PIR till analoga pin A0. Detta gjordes som jag ville prova några PIR-sensorer och läsa de respektive datablad jag var förvånad över att vissa enhet utgångar nödvändigtvis inte swing komplett leverans järnväg. Följaktligen för att spara min behöva lägga någon ytterligare signal konditionering elektronik trådbundna jag produktionen av PIR till en analog ingång potentiellt avsöka en nivå om det behövs. När det händer, var PIR jag fast för ett billigt Ebay köp som tillförlitligt gjorde jobbet och används en öppen kollektor utgång med lokala dra upp. I detta fall A0 är konfigurerad som en digital ingång och fungerar bra.
Programvara i Uno har skrivits att leta efter mer än en trigger (det är faktiskt användarvariabel) i en viss period så falska utlöser inte inträffar. Jag hittade 2 triggers "DETECTION_COUNTS_MAX" i en 10 andra period "DETECTION_WINDOW_TIMER_VALUE_MS" var tillräckligt för att stoppa irriterande grannarna (om man tittar nära på burspråk i videon kan du se mig frenetiskt vinka för att kvitta sak). En case baserat tillståndsdator används för att fånga i utkanten av denna händelse.
När en giltig rörelse upptäckten görs programmet vänder den gröna lysdioderna full på (annars avbryter krävs för att köra som en samtidiga process och jag misstänker att Adafruit Wave biblioteket behöver fritt tillträde till avbrott att styra ljud generation), vilket gör koden enklare.
Onda ögon utlöses och ljud spelas. Ljud sökvägen slås ut via ett relä under inaktiva som jag hittade under utveckling buller från gröna lysdioder PWM var koppling till audio och orsakar en märkbar "brum".
Ljudspåret är en samling av mindre spår uppträdda tillsammans och spelade sekventiellt. För att göra livet lättare (bara en enkel sekventiella få från flash-kort) jag fantasifullt namngivna spår 1th1.wav, 2sc1.wav, 3fs1.wav, 4cd1.wav, 5el1.wav och 6ew1.wav och kopierade dem på en gång att den minne kort se till att de var placerade i följd.
Om du vill synkronisera byte av skallen lysdioder från blått till rött (det händer vid punkten i banan där skratt uppstår och "välkomna" talas bara efter den knarrande dörren), kollar jag för att se när spåret "4cd1.wav" är klar sedan vitalisera reläet att byta till röda lysdioder.
När ljudspåret är fullt klar allt återställs och systemet faller tillbaka till den quiescent övervakning staten.
Kod för styrenheten har bifogats nedan tillsammans med ljudfiler jag använde.