Piëzo-luidspreker

Je komt ze tegen in horloges, kaartlezers, pc’s, alles dat piept bij opstart, de tweeters van je stereo-set, knuffels en nog heel veel meer toepassingen. De kans is groot dat je dan naar een piëzo-speakerelement luisterde. De piëzo is niet meer weg te denken binnen de techniek. Ze zijn goedkoop, veelzijdig, klein en eenvoudig aan te sturen.

Piëzo is een materiaal dat elektriciteit kan opwekken wanneer het onder mechanische druk komt te staan. Andersom kan het materiaal ook in verschillende richtingen uitzetten wanneer er een spanning op wordt gezet. Het woord piëzo is afgeleid van het Oudgriekse woord drukken (piezein) .

In deze tutorial laat ik zien wat een piëzo luidspreker is en hoe eenvoudig de piëzo via de Raspberry Pi aan te sturen is. Ofschoon het mogelijk is om met de piëzo trillingen of stoten te detecteren, beperk ik mij in deze tutorial tot het fabriceren van geluid.

Daar gaan we…!

Wat is een piëzo luidspreker?

Piëzo-luidsprekers bevatten een speciaal materiaal, het zogenaamde ‘piëzo-element’, dat het piëzo (elektrische) effect vertoont als je er spanning op zet, in dit geval zet het materiaal uit als er spanning op gezet wordt.

Indien er druk op het piëzo element wordt gezet kun je de spanning op een voltmeter waarnemen. Geef je er een behoorlijke tik op, dan kan de spanning tot enkele duizenden volts oplopen, denk daarbij aan de vonk van een elektrische aansteker waar een piëzo-element in verwerkt zit.

Veel vaste materialen, zoals steen of zout, zijn hard omdat hun atomen dicht op elkaar zitten. Deze materialen kennen een kristalstructuur.

Piezo-effect bij samengeperste kristallen

In sommige materialen kunnen kristalstructuren iets buigen of samengedrukt worden wanneer er genoeg kracht op wordt uitgeoefend. Hierdoor gaan sommige atomen naast andere atomen zitten waar ze normaal gesproken niet naast zouden zitten.

In piëzo-elektrische materialen hebben deze atomen tegengestelde ladingen: één positief en de andere negatief. Zodra deze atomen met tegengestelde ladingen dicht bij elkaar komen, ontstaat er elektriciteit.

Zomaar twee verschillende piëzo luidspreker toepassingen

De piëzo luidspreker

Je kunt ook het tegenovergestelde doen: een elektrisch veld op piëzo-elementen toepassen om kristalstructuren te laten uitzetten of buigen, waardoor de algehele vorm van het materiaal verandert. Wanneer je een piëzo-luidspreker gebruikt, laat je het piëzo-element binnenin zo snel samentrekken en uitzetten dat het trilt en geluid maakt.

Raspberry Pi maakt de toon

Piëzo speakers gebruiken met de Raspberry Pi om geluiden te genereren is bijna net zo eenvoudig als LED’s laten knipperen. Je hebt alleen een paar dingen en een code die d.m.v. PWM de GPIO aanstuurt. Je hebt geen weerstand nodig, het piëzo-element kan rechtstreeks aan GPIO-21 aangesloten worden. Het piëzo onderdeel kent geen polariteit.

Open je favoriete editor en kopieer onderstaande code er in, sla het script op en noem het ‘RPI_piezo.py‘.

import RPi.GPIO as GPIO   #importeer de GPIO bibliotheek
import time               #importeer de tijd bibliotheek

class Buzzer(object):
 def __init__(self):
  GPIO.setmode(GPIO.BCM)  
  GPIO.setwarnings(False)
 
  self.buzzer_pin = 21     #stel de GPIO21 (pin 40) in

  GPIO.setup(self.buzzer_pin, GPIO.IN)
  GPIO.setup(self.buzzer_pin, GPIO.OUT)
  print("buzzer ready")

 def __del__(self):
  class_name = self.__class__.__name__
  print (class_name, "finished")

 def buzz(self,pitch, duration):   #maak de functie 'buzz' en stuur de pitch en duur)
 
  if(pitch==0):
   time.sleep(duration)
   return
  period = 1.0 / pitch     #in de natuurkunde is de periode (sec/cyc) het omgekeerde van de frequentie (cyc/sec)
  delay = period / 2     #bereken de tijd voor de halve periode (golf)  
  cycles = int(duration * pitch)   #het aantal te produceren golven is de duur maal de frequentie

  for i in range(cycles):    #start een lus vanaf 0 tot de hierboven berekende variabele “cycli”
   GPIO.output(self.buzzer_pin, True)   #Maak pin 18 HOOG
   time.sleep(delay)                    #Wacht op pin 18 HOOG
   GPIO.output(self.buzzer_pin, False)  #Maak pin 18 LAAG
   time.sleep(delay)                    #Wacht op pin 18 LAAG

 def play(self, tune):
  GPIO.setmode(GPIO.BCM)
  GPIO.setup(self.buzzer_pin, GPIO.OUT)
  x=0

  print("Playing tune ",tune)
  if(tune==1):
    pitches=[262,294,330,349,392,440,494,523, 587, 659,698,784,880,988,1047]
    duration=0.1
    for p in pitches:
      self.buzz(p, duration)  #voer de toonhoogte en duur in op de functie “buzz”
      time.sleep(duration *0.5)
    for p in reversed(pitches):
      self.buzz(p, duration)
      time.sleep(duration *0.5)

  elif(tune==2):
    pitches=[262,330,392,523,1047]
    duration=[0.2,0.2,0.2,0.2,0.2,0,5]
    for p in pitches:
      self.buzz(p, duration[x])  #voer de toonhoogte en duur in op de functie “buzz”
      time.sleep(duration[x] *0.5)
      x+=1
  elif(tune==3):
    pitches=[392,294,0,392,294,0,392,0,392,392,392,0,1047,262]
    duration=[0.2,0.2,0.2,0.2,0.2,0.2,0.1,0.1,0.1,0.1,0.1,0.1,0.8,0.4]
    for p in pitches:
      self.buzz(p, duration[x])  #voer de toonhoogte en duur in op de functie “buzz”
      time.sleep(duration[x] *0.5)
      x+=1

  elif(tune==4):
    pitches=[1047, 988,659]
    duration=[0.1,0.1,0.2]
    for p in pitches:
      self.buzz(p, duration[x])  #voer de toonhoogte en duur in op de functie “buzz”
      time.sleep(duration[x] *0.5)
      x+=1

  elif(tune==5):
    pitches=[1047, 988,523]
    duration=[0.1,0.1,0.2]
    for p in pitches:
      self.buzz(p, duration[x])  #voer de toonhoogte en duur in op de functie “buzz”
      time.sleep(duration[x] *0.5)
      x+=1

  GPIO.setup(self.buzzer_pin, GPIO.IN)

if __name__ == "__main__":
  a = input("Enter Tune number 1-5: ")
  buzzer = Buzzer()
  buzzer.play(int(a))

Om het programma te starten geef je het commando:

python RPi_piezo.py

In het scherm verschijnt een keuzemenu. Maak je keuze en de Pi speelt een korte melodie af.

Have A Nice Day!

Geef als eerste een reactie

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd.


*