Piiip

I det här avsnittet kommer att du leka lite med ljud. Ljud är vibrationer. Ljudet från en gitarr kommer exempelvis från strängarnas vibrationer. Du kan även producera ljud med Arduinon genom att generera vibrationer. I följande exempel kommer du att göra detta med en piezohögtalare, och få den att pipa.

Piezohögtalaren


Piezohögtalaren är en elektronisk komponent, gjord av två skivor i olika material. Den ena är metallisk, den andra vanligen keramisk och båda har piezoelektriska egenskaper. När materialen utsätts för spänning repellerar de och producerar ett hörbart klick. När spänningen tas bort  återgår materialen till ursprungspositionen, och ännu ett hörbart klick produceras.

Exempel 2.4

I det här exemplet kommer du att koppla en piezohögtalare till Arduinon och använda samma kod som i Blink-exemplet för att få piezon att klicka.

Material

  • 1 Arduino Uno
  • 1 Education-sköld
  • 1 piezohögtalare
  • 2 labbkablar

Instruktioner

  1. Sätt fast skölden på Arduinons ovansida.
  2. Koppla piezon över kopplingsdäckets mittengap.
  3. Använd labbkablarna för att koppla ett ben till digitala pin 8 (det spelar ingen roll vilket ben) och det andra till GND.
  4. Ladda upp den här koden:

Resultat

Piezon bör nu ge ifrån sig ett hörbart klick i sekunden.

Så här fungerar det

  • Variabeln speakerPin deklareras och tilldelas värdet 8, numret på den digitala pin du använder.
  • I setup() konfigureras pin 8 som en output.
  • loop() skrivs HIGH till pin 8, vilket får piezons material att repellera och skapa ett klick.
  • Programmet pausar i en sekund.
  • Genom att skriva LOW till pin 8, återgår materialet till dess normala position och skapar ett nytt klick.
  • Programmet pausar i ytterligare en sekund.
  • loop() fortsätter att upprepas.

Exempel 2.5

För att kunna höra en ton, istället för klick, behöver du göra så att materialet pendlar snabbare. I det här exemplet kommer du att minska pausen till 1 millisekund.

Instruktioner

  1. Ladda upp den här koden:

Resultat

Piezon bör nu ge ifrån sig ett pipande ljud.

Så här fungerar det

  • loop() skrivs HIGH till pin 8, vilket får piezons material att repellera.
  • Programmet pausar i en millisekund.
  • Genom att skriva LOW till digitala pin 8 återgår materialet till dess normala position.
  • Programmet pausar i ytterligare en millisekund.
  • loop() fortsätter att upprepas.

Den här gångenpendlar) materialet innanför piezon med ett intervall på två millisekunder. Det är för snabbt för att ett klick ska kunna urskiljas. Istället vibrerar materialet och ett pipande ljud skapas.

Toner

Nu vet du att man genererar ljud med en Arduino och en piezohögtalare genom att växla mellan HIGH och LOW ett visst antal gånger per sekund. Antalet gånger som någonting  pendlar kallas för frekvens. Du får olika toner beroende på frekvensen. Hög frekvens, alltså många pendlingar per sekund, ger en hög ton, medan en låg frekvens, få pendlingar per sekund, ger en låg ton.

Tonerna har olika namn: C, D, E, F, G, A, och B.  Av dessa toner har C den lägsta frekvensen, 262 herz, medan B har den högsta på 494 herz. Det betyder att du behöver pendlar 262 gånger per sekund för att spela ett C och 494 gånger per sekund för att spela ett B.

Vill du spela en specifik ton behöver du få pendlingen att stämma överens med tornens frekvens. Det kan du göra genom att ändra på tiden som pinen är HIGH och LOW, alltså genom att ändra värdet i funktionen delay(). Det finns dock ett par problem: delay()

tillåter dig inte att kontrollera tiden tillräckligt precist eftersom det inte går att få en frekvens lägre än 500 herz. (500 gånger per sekund, alltså ett intervall på 2 milliseconder.) Det andra problemet är att delay() får programmet att stanna upp, vilket kan vara ett problem om du vill att programmet ska göra andra saker medan en ton spelas.

Istället finns en funktion som heter tone() , som tar två eller tre parametrar. Den första parametern är den digitala pin till vilken piezon är kopplad. Den andra är tonens frekvens. Funktionen räknar ut delay-tiden beroende på frekvens och pendlar den digitala pinen mellan HIGH och LOW parallellt med andra uppgifter, utan att programmet pausas. Den tredje parametern är valfri och är tonens längd i millisekunder.

Exempel 2.6

I det här exemplet kommer du att använda funktionen tone() för att generera ett A med en frekvens på 440 hertzoch ett C med en frekvens på 261 hertz.

Instruktioner

  1. Ladda upp den här koden:

Resultat

Piezon bör nu spela ett A i en sekund och sedan ett C i två sekunder.

Nya kommandon

  • tone(pinNumber, frequency, duration): spelar en ton på en högtalare som är kopplad till  digitala pin pinNumber, där frequency är tonens frekvens och duration är tonens längd i millisekunder.

Så här fungerar det

  • setup() spelas en ton på digitala pin 8 med en frekvens på 440 hertz. Tonen varar i 1000 millisekunder.
  • Programmet pausar i 1000 millisekunder, under tiden som tonen fortsätter spela.
  • En ton spelas på digital pin 8 med en frekvens av 261 hertz i 2000 millisekunder.
  • Vill du spela andra toner med piezon byter du bara värdet ’440’ till ett annat frekvensvärde som listas i tabellen ovan.

Melodier

En melodi är en kombination av noter. I EducationShield-biblioteket finns en funktion som  som kallas play() som du kan använda för att spela melodier. Läs om hur du använder den för att spela melodier här.

Learn by doing

  • Skriv en melodi med hjälp av tone().
  • Skriv en melodi med hjälp av play() i EducationShield-biblioteket.