Knacka på den här kistan för att väcka de döda. Oroa dig inte, skelettet kommer inte hoppa ut och jaga dig utan det kommer istället svara från insidan. Ok, vi vet att du vet att det inte finns något riktigt skelett där inne. Det är egentligen en piezo som används som en knacksensor. Efter att ha buggt detta projekt kanske du hittar fler praktiska sätt att använda denna sensor. Kolla in det här låset som känner igen hemliga knackningar för inspiration.
Material
- 1 Arduino Uno
- 1 Education-sköld
- 1 kopplingsdäck
- 2 piezohögtalare
- 1 1M ohm resistor
- 3 svarta labbkablar
- 3 färgade labbkablar
- 1 9V batteri
- 1 strömkontakt
- Knock Knock Box-kit
- Maskeringstejp
Instruktioner
Kod
Hitta koden i File>Examples>EducationShield>Block3-Magic>Projects>KnockKnockBox
Så här fungerar det
- EducationShield-biblioteket inkluderas
- Konstanten
MAX_KNOCKS
definieras och tilldelas värdet 30. - The PiezoKnockSensor object is declared,
sensor
. - PiezoKnockSensor-objektet
sensor
deklareras. - Variabeln
speaker
deklareras. - Variablerna som används för att hålla koll på knackningarna deklareras:
timer[]
,started
,timeoutBase
,timeout
,currentKnock
. - I
setup()
konfigureras knacksensorn. - Knackvariablerna tilldelas värden.
- Programmet hoppar till funktionen
clearArray()
. - I
clearArray()
, loopar en for loop genom arraytimer[]
och varje element tilldelas värdet 0. - Programmet hoppar tillbaka till
setup()
. - I
loop()
, kollas om en knackning upptäcks. Om så är fallet händer följande. - Om
started
är falskt, betyder det att första knackningen i en runda har upptäckts.started
tilldelas värdettrue
. - Variabeln
currentTime
deklareras och tilldelas värdetmillis()
.millis()
returnerar antalet millisekunder som passerat sedan programmet startade. timeoutBase
är variabeln som kommer användas för att kolla hur lång tid som passerat sedan den senaste knackningen. Därför återställs alltidtimeoutBase
när en knackning upptäcks, genom att tilldelas värdet avcurrentTime
.- Elementet på indexnummer currentKnock i
timer[]
tilldelas också värdet avcurrentTime
. - Första gången en knackning upptäcks är
currentKnock
lika med 0, därför lagras den aktuella tiden i det första elementet avtimer[]
. currentKnock
ökar med 1.- Om ingen knackning upptäckts skippas if-satsen.
- Om
started
ärtrue
används en andra if-sats för att kontrollera om för lång tid har passerat sedan den senaste knackningen. - Om för lång tid har passerat hoppar programmet till funktionen
playBack()
. - I
playBack()
, loopar en for-loop genomtimer[]
–elementen, så längen som ett element inte är likvärdigt med 0. - För varje loop spelas en ton upp och programmet pausar i det antal millisekunder som registrerades mellan knackningarna.
- Tiden att pausa räknas ut genom
timer[i+1]-timer[i]
. Det innebär tiden mellan programmets start och nästa knackning, minus tiden mellan programmets start och aktuell knackning. - När for-loopen har avslutats hoppar programmet tillbaka till
loop()
. - Parametrarna återställs genom att sätta
started
somfalse
, köraclearArray()
och sättacurrentKnock
till 0. - Om tiden som passerat inte är för lång, händer ingenting och
loop()
fortsätter upprepas och kolla efter knackningar.
Problemlösning
- Hänvisa till illustrationen och dubbelkolla dina kopplingar. Var noga med att skölden och labbkablarna är ordentligt kopplade.
- Var säker på att batteriet har kopplats ordentligt så att LED:n markerad “ON LED” på Arduinon är tänd. Testa med Arduinon kopplad till datorn utan 9V-batteriet. Om det fungerar med USB-kabeln men inte med batteriet, kan det vara något som är fel med batteriet. Byt batteri.
- Kom ihåg att knacka på rätt vägg på lådan (den med piezon som aggerar som knacksensor).
- Se referenssidan för knacksensorer.
Lär genom att göra
- Ändra på ljudet som spelas upp när lådan knackar tillbaka.
- Lägg till LED:s så att skelettets ögon blinkar, antingen när du knackar på lådan eller när piezon spelar spelar upp ljud.