Knock Knock Box

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

  1. Fäst skölden på Arduinons ovansida.
  2. Koppla en piezohögtalare över kopplingsdäckets mittengap och koppla ett ben till digitala pin 8 och det andra till GND.
  3. Koppla en 1M ohms resistor mellan analoga pin A0 och GND via ett separat kopplingsdäck.
  4. Koppla den andra piezohögtalaren till analog plugg A0 och GND. Detta är knacksensorn.
  5. Bygg Knock Knock Box.
  6. Koppla Arduinokonstruktionen till datorn och ladda upp exemplet ’KnockKnockBox’.
  7. Koppla ifrån Arduinokonstruktionen från datorn och koppla ett 9V batteri med en strömkontakt till Arduinons strömkontakt.
  8. Placera konstruktionen i Knock Knock Box. Innan du stönger locket bör du försäkra dig om att piezon som fungerar som sensor är i kontakt med lådans lock.

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 array timer[] 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ärdet true.
  • Variabeln currentTime deklareras och tilldelas värdet millis(). 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 alltid timeoutBase när en knackning upptäcks, genom att tilldelas värdet av currentTime.
  • Elementet på indexnummer currentKnock i timer[] tilldelas också värdet av currentTime.
  • 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 av timer[].
  • currentKnock ökar med 1.
  • Om ingen knackning upptäckts skippas if-satsen.
  • Om started är true 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 genom timer[]–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 som false, köra clearArray() och sätta currentKnock 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.