Teknik 1 · område 1 · pass 3
Buzzern
Hittills har programmet bara kunnat blinka. En buzzer låter det säga något – och den lär dig PWM, som är samma sak som styr motorerna om en vecka.
1. En ton
Använd den passiva piezon – den utan vit klisterlapp på ovansidan. Den med lapp är aktiv och ger bara en enda ton.
modul S ──── Pico GP16
modul − ──── Pico GND
(modul + ──── Pico 3V3, om modulen har tre stift)
Ny fil ton.py:
from machine import Pin, PWM
from time import sleep
ton = PWM(Pin(16))
ton.freq(440)
ton.duty_u16(30000)
sleep(0.5)
ton.duty_u16(0)
Kör. En halv sekund ton, sedan tyst. Ingen while True den här gången –
programmet körs uppifrån och ner en gång och är klart.
2. Vad PWM är
En pinne kan bara vara på eller av. Men den kan slå på och av väldigt snabbt. Det är PWM, pulse width modulation, och det är två tal:
| Raden | Vad den gör |
|---|---|
PWM(Pin(16)) | Gör pinnen till en som slår på och av, i stället för att bara vara på |
freq(440) | Hur många gånger per sekund. 440 gånger = tonen A |
duty_u16(30000) | Hur stor del av varje slag pinnen är på. 0 = aldrig = tyst. 65535 = alltid = också tyst, för då slår den inte. 30000 är ungefär hälften |
En passiv piezo låter bara om signalen växlar – därför PWM, inte on().
Om en vecka är det samma duty_u16 som bestämmer hur fort ett hjul snurrar.
3. Tre toner
Frekvenserna för C, E och G: 262, 330, 392. Skriv en funktionsliknande följd:
from machine import Pin, PWM
from time import sleep
ton = PWM(Pin(16))
ton.freq(262)
ton.duty_u16(30000)
sleep(0.3)
ton.freq(330)
sleep(0.3)
ton.freq(392)
sleep(0.3)
ton.duty_u16(0)
Byt ut talen. Gör en egen melodi på fem toner. Lägg en kort tystnad
(duty_u16(0), sleep(0.05), duty_u16(30000)) mellan
två toner som är lika – annars hörs de som en.
4. Larmet: allt ihop
Knapp, ljussensor och buzzer i ett program. Scenariot: sensorn ligger i en låda. Någon öppnar lådan, det blir ljust, larmet går. Knappen tystar.
from machine import ADC, Pin, PWM
from time import sleep
ljus = ADC(26)
knapp = Pin(14, Pin.IN, Pin.PULL_UP)
led = Pin(15, Pin.OUT)
ton = PWM(Pin(16))
ton.freq(880)
troskel = 30000
larm = False
while True:
varde = ljus.read_u16()
if knapp.value() == 0:
larm = False
elif varde > troskel:
larm = True
if larm:
ton.duty_u16(30000)
led.on()
else:
ton.duty_u16(0)
led.off()
sleep(0.05)
elif betyder annars om. Python läser villkoren uppifrån och det
första som stämmer vinner. Därför står knappen först: den ska alltid
kunna tysta, oavsett ljuset.
varde > troskel är rätt om din sensor ger högre tal i ljus. Ger den
högre tal i mörker: <. Du vet vilket sedan nattlampan.
Klart när — det här ska alla ha
Om du hinner — utmaning
Kryssen sparas i din webbläsare.
5. Felsökning
5 rader
| Symptom | Trolig orsak | Åtgärd |
|---|---|---|
| Helt tyst, koden kör utan fel | Aktiv piezo (vit lapp) i stället för passiv, eller duty_u16(0) | Byt modul. Kontrollera att duty är 30000 när det ska låta |
| En ton som aldrig slutar | Programmet stoppades innan duty_u16(0) | Kör igen, eller skriv ton.duty_u16(0) i terminalen |
Samma ton oavsett freq() | Aktiv piezo – den struntar i frekvensen | Byt till den utan lapp |
| Larmet går inte att tysta | Knappens if står efter sensorns – sensorn vinner | Knappen först, sensorn som elif |
| Larmet går hela tiden, eller aldrig | Fel tecken för din modul | Byt > mot <, eller flytta tröskeln |
Ord på den här sidan
| Ord | Betyder |
|---|---|
| PWM | Pulse width modulation. Pinnen slår på och av snabbt. Två tal: hur ofta (freq) och hur stor del av tiden på (duty) |
| frekvens | Hur många gånger per sekund. Enhet hertz, Hz. 440 Hz = tonen A |
| duty cycle | Andelen av varje slag som pinnen är på. duty_u16 tar 0–65535 |
| passiv piezo | Buzzer som behöver en växlande signal för att låta. Kan spela toner |
| aktiv piezo | Buzzer med inbyggd ton. Låter av bara ström. Kan inte byta ton |
| elif | "Annars om." Ett villkor till, som bara prövas om det ovanför inte stämde |
Ordträning