← Område 1 Guide · Buzzern Felsökning

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:

RadenVad 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)
Prova själv

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.

Tecknet beror på din modul

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

SymptomTrolig orsakÅtgärd
Helt tyst, koden kör utan felAktiv 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 slutarProgrammet 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 frekvensenByt till den utan lapp
Larmet går inte att tystaKnappens if står efter sensorns – sensorn vinnerKnappen först, sensorn som elif
Larmet går hela tiden, eller aldrigFel tecken för din modulByt > mot <, eller flytta tröskeln

Ord på den här sidan

OrdBetyder
PWMPulse width modulation. Pinnen slår på och av snabbt. Två tal: hur ofta (freq) och hur stor del av tiden på (duty)
frekvensHur många gånger per sekund. Enhet hertz, Hz. 440 Hz = tonen A
duty cycleAndelen av varje slag som pinnen är på. duty_u16 tar 0–65535
passiv piezoBuzzer som behöver en växlande signal för att låta. Kan spela toner
aktiv piezoBuzzer 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