Generator dźwięku esp8266

Typ_projektu
microPython
Zdjecie główne
Krótki opis projektu

Sterowanie częstotliwością fal dźwiękowych za pomocą potencjometru lub fotorezystora. Pokazuje jak brzmi dźwięk o różnych częstotliwościach oraz może pomóc w zrozumieniu działania potencjometru lub fotorezystora. Ćwiczenie można wykonać w kilku różnych wersjach w zależności od dostępnych elementów.

Niezbędne elementy
  • ESP8266
  • Płytka stykowa
  • Wyświetlacz OLED i2c
  • Potencjometr 10k
  • Brzęczyk
  • Dioda
  • Rezystor 330 Ω
  • Kable męsko-męskie oraz męsko – żeńskie
  • Komputer PC z oprogramowaniem Thonny

Opcjonalnie:

  • Głośnik
  • Potencjometr 10k x 2
  • Fotorezystor
  • Rezystor 330 Ω x 2
Opis projektu

Ćwiczenie polega na sterowaniu częstotliwością emitowanej fali dźwiękowej za pomocą potencjometru lub fotorezystora. Do układu podłączona jest także migająca z zadaną częstotliwością dioda, co lepiej obrazuje temat fal sinusoidalnych. Miganie diody najlepiej widać przy niższych częstotliwościach.

Ćwiczenie można wykonać w kilku wersjach w zależności od dostępnych elementów. Fale dźwiękowe emitujemy za pomocą głośnika lub brzęczyka. Opcja z brzęczykiem jest łatwiejsza i wymaga tylko jednego potencjometru, jednak emituje dźwięk gorszej jakości i ma mniejszy zakres częstotliwości. Przy wykorzystaniu brzęczyka otrzymujemy dźwięk od ok. 100 Hz do ok.1000Hz. Sterujemy brzęczykiem poprzez przekręcanie gałki potencjometru, co zmienia częstotliwość emitowanego dźwięku.

Jeżeli ma się jednak dostęp do głośnika, warto wypróbować bardziej zaawansowaną wersję. Głośnik nie wyemituje dźwięku o częstotliwości wyższej niż 1000Hz, z powodu ograniczeń w samym programie (funkcja PWM obsługuje zakres częstotliwości jedynie do 1KHz), natomiast będzie mógł nadawać dźwięk o niższej częstotliwości, nawet do 10 Hz. W tym przypadku, sterujemy głośnikiem na dwa sposoby: potencjometrem podłączonym do portu A0 wybieramy częstotliwość dźwięku, natomiast potencjometrem podłączonym do głośnika możemy zmieniać jego głośność. Żeby podłączyć głośnik do obwodu, zalecane jest kupienie odpowiedniego złącza. W przypadku gdy nie posiada się odpowiedniego sprzęt, złącze jack można w prowizoryczny owinąć dwoma kabelkami, tak jak na jednym ze zdjęć w poniżej, a następnie podpiąć kabelki do płytki stykowej. Kabelek znajdujący się niżej (na szerszej części jacka) trzeba podłączyć do uziemienia (GND), natomiast kabelek znajdujący się wyżej, na mniej szerokiej części podłącza się do środkowej nóżki drugiego potencjometru. W obu przypadkach głośnik należy także podłączyć do gniazdka.

Kolejną zmianą w ćwiczeniu jest wykorzystanie fotorezystora zamiast potencjometru. Utrudnia to dokładne sterowanie, można jednak pokazać działanie fotorezystora i jest to ciekawy dodatek do samego ćwiczenia. Kiedy światło jest przygaszane lub fotorezystor zostanie przysłonięty ręką: brzęczyk lub głośnik zacznie emitować niższy dźwięk.

Uwaga Przy korzystaniu z głośnika diodę LED można podpiąć bezpośrednio do potencjometru, w tym przypadku część kodu z komentarzem ,,dla brzęczyka” jest niepotrzebna. Należy też zwrócić uwagę na fragment kodu z komentarzem ,,obliczanie częstotliwości”, przed odpaleniem programu warto sprawdzić jakie wartości zwraca adc.read() i odpowiednio zmodyfikować obliczenia. Obliczenia należy zmodyfikować także przy korzystaniu z głośnika, jeżeli chce się uzyskać dźwięki niższe niż 100Hz.

Zdjęcia
kod programu

 

from machine import Pin, I2C, PWM, ADC
import ssd1306
import time

adc = ADC(0)
Pin(16, Pin.OUT, value=1)
i2c = I2C(scl=Pin(5), sda=Pin(4))
oled = ssd1306.SSD1306_I2C(128,64,i2c)
beeper=PWM(Pin(15), freq = 100, duty = 512)
oled.fill(0)
frRef = 0
while True:
   frbuzz = (((adc.read())/1024)*900)-100 #obliczanie częstotliwości
   if(frbuzz != frRef):
       beeper.freq(int(frbuzz))
       oled.fill(0)
       oled.text('czestotliwosc:', 10, 20, 1)
       if (frbuzz >= 1000):
           oled.text(str(int(frbuzz)),40, 30, 1)
           oled.text('Hz',75,30,1)
       else:
           oled.text(str(int(frbuzz)),45, 30, 1)
           oled.text('Hz',75,30,1)
       oled.show()
Schemat
Youtube
Tagi
częstotliwość fale dźwięk potencjometr fotorezystor fizyka esp8266 micropython