Velkommen til den tredje og endnu en spændende Arduino-blog i serien! I dag vil vi udforske en spændende måde at kombinere lys og lyd i vores Arduino-projekt. Vi vil lære at aktivere en buzzer ved hjælp af en photoresistor, der registrerer ændringer i lysintensiteten. Sensorværdierne bestemmer, hvornår buzzeren lyder.
I denne blog vil vi fokusere på brugen af en specifik kode til at opnå vores ønskede resultat. Vi vil introducere og forklare koden trin for trin, så du nemt kan følge med og implementere den i dit eget projekt. Koden er enkel, men alligevel effektiv til at styre både buzzeren og LED-lyset baseret på lysintensiteten målt af photoresistoren.
I koden vil du opdage, at vi bruger lysintensitetsværdien målt af photoresistoren til at styre både buzzeren og LED-lyset. Sammenhængen mellem lys og værdien fra photoresistoren afhænger af spændingsdeleren. Koden bruger kun PWM under en tærskel; lydstyrke og lysstyrke stiger ikke kontinuerligt med lyset.
Komponenterne i dette projekt
| KY-018 Photoresistor |
| Arduino UNO |
| jumper-ledninger |
| KY-006 Passiv Buzzer |
| Eller |
| Photoresistor og Buzzer Kit |
- KY-018 Photoresistor: En photoresistor, også kendt som en lysfølsom modstand, er en elektronisk komponent, der ændrer sin modstand baseret på lysintensiteten, den udsættes for. I vores projekt bruger vi KY-018 Photoresistoren til at måle lysniveauet og bruge det som en indgang til vores Arduino UNO.
- Arduino UNO: Arduino UNO er en populær mikrocontroller-platform baseret på Atmel's ATmega328P-mikrocontroller. Den fungerer som hjernen i vores projekt og styrer både indgangen fra photoresistoren og styringen af buzzeren og LED-lyset baseret på lysintensiteten.
- Jumper-ledninger: Jumper-ledninger er korte kabler med stik i begge ender, der bruges til at oprette forbindelse mellem forskellige komponenter på et breadboard eller til at forbinde komponenterne til Arduino UNO. De giver en fleksibel og nem måde at oprette forbindelse mellem komponenterne på.
- KY-006 Passiv Buzzer: En passiv buzzer kræver et vekslende eller pulseret drivsignal til en vedvarende tone; konstant jævnspænding giver ikke i sig selv en kontinuerlig tone. Her styres lyden af photoresistorens værdi.
KY-018 Photoresistor
Photoresistoren fungerer ved at ændre sin modstand baseret på mængden af lys, den udsættes for. Når der er lys til stede, vil modstanden falde, og når der er mangel på lys, vil modstanden stige. Denne modstandsværdi oversættes til en analog spænding, der repræsenterer intensiteten af det registrerede lys.

Du kan bruge KY-018 photoresistoren til at overvåge lysniveauer i forskellige miljøer eller som en del af automatiserede systemer, der kræver respons på ændringer i lysforholdene. Ved at måle den analoge spænding fra photoresistoren kan du få information om intensiteten af det omgivende lys og tage beslutninger baseret på det.
Bemærk, at KY-018 photoresistoren er en analog sensor, hvilket betyder, at du skal bruge en analog indgang på din Arduino (f.eks. en analog pin) for at læse værdien korrekt.
KY-006 Passiv buzzer
Modulet har en passiv buzzer og 3 hanstifter. Et ofte angivet følsomt område er toner mellem 1,5 til 2,5 kHz, men frekvensresponsen afhænger af den præcise komponent. Driv den med en bølgeform via tone() eller passende tidsstyret switching.
Buzzeren kan give lydeffekter, advarsler og statuslyde. Kontrollér modulets spændings- og strømmærkning; antag ikke, at en generel påstand om 1.5V–15V gælder. Overskrid aldrig Arduino-pinnenes tilladte spænding, og brug transistordrivning, hvis strømbehovet er for stort til GPIO.
Ved at styre tænd/sluk-perioderne med passende forsinkelser eller PWM kan du opnå forskellige toner og rytmer. Buzzeren kan være nyttig til at tilføje lydfeedback til dine Arduino-projekter eller til at skabe en simpel alarmfunktion.
Projektets Kredsløb
I dette projekt bruges Arduino UNO, to digitale stifter og en analog stift sammen med flere komponenter for at aktivere en buzzer og en LED. Det er vigtigt at nævne, at der også er nogle modstande, der spiller en væsentlig rolle i kredsløbet.
To specifikke digitale stifter på Arduino UNO er blevet valgt omhyggeligt. Jeg har valgt digitale stifter, der understøtter pulsbreddemodulation (PWM), altså pulser mellem omtrent 0 og 5 V med varierende duty cycle. Det er ikke en kontinuert variabel jævnspænding. PWM styrer LED’ens middelstrøm; buzzerens lydstyrke varierer ikke nødvendigvis lineært med duty cycle.
Buzzeren er tilsluttet en af Arduino's digitale stifter, pin 11, med returledningen til GND i det aktive-høje eksempel. Følg modulets pinout og strømmærkning; brug passende transistordrivning, hvis direkte GPIO-drift ikke er tilladt.
LED'en er tilsluttet en anden digital stift, pin 6 gennem en 220 ohm seriemodstand til anoden, med katoden til GND. Denne aktive-høje forbindelse svarer til, at analogWrite(..., 0) betyder slukket.
For at måle lysintensiteten bruges en photoresistor (LDR), der fungerer som variabel modstand. Til en løs LDR bruges en 10 k ohm modstand som spændingsdeler mellem 5V og GND, med midtpunktet til analoge pin 0 (A0). Bruger du KY-018-modulet, skal dets indbyggede spændingsdeler kontrolleres og signaludgangen forbindes til A0. Måleretningen afhænger af koblingen.
Hver LED kræver sin egen strømbegrænsende modstand. Buzzerbeskyttelse og eventuel driver skal følge databladet. Alle jordforbindelser er fælles; én fælles modstand er ikke universel beskyttelse for begge belastninger.
Det historiske diagram nedenfor skal læses sammen med rettelsen ovenfor: Forbind de aktive-høje belastninger mod GND, ikke som pull-ups til 5V.

Når vi nu har styr på projektets kredsløb og komponenter, er det tid til at dykke ned i koden og se, hvordan vi kan programmere Arduino til at styre vores buzzer og LED ved hjælp af en photoresistor.
Koden
Vi har tidligere dækket de indbyggede funktioner/kommandoer og programmeringskoncepter, der bruges i dette projekt, i vores tidligere blogs i denne serie. Selvom vi allerede har en god forståelse for disse begreber, vil vi stadig udforske koden trin for trin for at sikre, at vi har en klar forståelse af, hvordan vi aktiverer buzzeren og LED'en ved hjælp af en photoresistor.
int sensorPin = 14; // A0 er repræsenteret af det numeriske værdi 14
int buzzerPin = 11; // Arduino summer interface stift
int ledPin = 6; // Arduino LED interface stift
void setup() {
Serial.begin(115200); // Start Serial monitor i Arduino IDE
pinMode(buzzerPin, OUTPUT); // Indstil summerstiften som output
pinMode(ledPin, OUTPUT); // Indstil LED-stiften som output
}
void loop() {
int senValue = analogRead(sensorPin);
delay(10);
Serial.println(senValue);
if (senValue < 500) {
analogWrite(buzzerPin, senValue / 4); // Tænd for summeren
analogWrite(ledPin, senValue / 4); // Tænd for LED'en
} else {
analogWrite(buzzerPin, 0); // Sluk for summeren
analogWrite(ledPin, 0); // Sluk for LED'en
}
}
Koden starter med at definere tre variable, sensorPin, buzzerPin og ledPin, der repræsenterer de analoge indgang og to digitale udgange på Arduino, der er forbundet til henholdsvis photoresistoren, buzzeren og LED'en.
I setup()-funktionen initialiseres kommunikationen med Serial monitor, og stifterne buzzerPin og ledPin sættes som outputs. Hovsa.. klap lige hesten fordi hvad er Serial Monitor??
Serial Monitor
Serial Monitor er et værktøj i Arduino IDE, der giver dig mulighed for at kommunikere med din Arduino via den serielle forbindelse mellem Arduino-boardet og din computer. Du kan åbne Serial Monitor ved at klikke på ikonet øverst i Arduino IDE-vinduet.
Når Serial Monitor er åben, kan du sende og modtage serielle data mellem Arduino og din computer. Du kan bruge Serial Monitor til at sende kommandoer, indstille parametre eller modtage sensorværdier fra Arduino. Du kan også bruge det til at fejlfinde og overvåge din Arduino-applikation ved at udskrive beskeder og værdier.
For at sende data fra Arduino til Serial Monitor kan du bruge funktionen Serial.print() eller Serial.println(). Disse funktioner sender data som tekst til Serial Monitor-vinduet. Du kan også bruge Serial.write() til at sende binær data.
Serial Monitor kan være nyttig til forskellige formål, såsom at kontrollere og fejlfinde dine Arduino-programmer, overvåge sensorværdier, teste kommunikationsprotokoller og interagere med eksterne enheder eller software via den serielle forbindelse.
Ved at udnytte Serial Monitor kan du interagere med din Arduino og få feedback og data i realtid, hvilket gør det lettere at udvikle, teste og fejlfinde dine Arduino-projekter.
I loop()-funktionen udføres følgende trin:
- Læs værdien af photoresistoren ved at bruge funktionen analogRead() og gem værdien i variablen senValue. (Vi har lært om analogRead() I tidligere blogge i denne serie).
- Tilføj en kort forsinkelse på 10 millisekunder ved hjælp af delay()-funktionen.
- Udskriv værdien af senValue til Serial monitor ved hjælp af Serial.println().
Herefter kontrolleres værdien af senValue. Hvis værdien er under 500, udføres følgende. Om lavere værdier betyder lyst eller mørkt, afhænger af spændingsdeleren; mål og vælg tærsklen til din opsætning.
- Buzzeren aktiveres ved at anvende analogWrite()-funktionen med en værdi svarende til en fjerdedel af senValue.
- LED'en tændes på samme måde som buzzeren.
Hvis senValue er 500 eller højere, sættes begge PWM-udgange til 0. Det slukker komponenterne med den korrigerede aktive-høje ledningsføring ovenfor.
Vi har udforsket analog indlæsning og PWM til at styre lyd og lys ud fra en lyssensorværdi. Det giver mange muligheder for interaktive effekter. Men der er mere!
BONUS PROJEKT
Okay, super! Nu har vi været igennem endnu et spændende projekt, men hvis du tror, at bloggen er ovre, så tænk igen! Vi har nemlig forberedt et sjovt lille bonusprojekt! Og det er ikke et hvilket som helst bonusprojekt... Har du nogensinde drømt om at spille på en banan? WORRY NO MORE, for nu har du chancen!
I dette bonusprojekt vil vi udforske en sjov og interaktiv måde at spille musik ved hjælp af kapacitiv sensing på Arduino og vores gode ven, buzzeren. Ved at tilkoble bananer til Arduinoens digitale pins til kapacitiv sensing og røre dem kan vi skabe forskellige toner da dette ændrer bananernes kapacitans. Hermed skaber vi vores eget banan-klaver! Forestil dig at imponere dine venner og familie med dine musikalske banan-evner. Dette projekt er både underholdende og lærerigt.
I dette bonusprojekt benytter vi alle komponenterne fra det oprindelige projekt udover photoresistoren. Ud over det har vi brug to andre “komponenter”, nemlig:
1M ohms mostande
Bananer
Hvordan virker det her banan-klaver egentlig?
Klassisk Arduino UNO har ingen dedikerede kapacitive touch-pins. CapacitiveSensor bruger almindelige digitale pins og højohmige modstande til at estimere kapacitans ud fra opladningstid. Berøring af en ledende genstand ændrer målingen. Mobilers touchskærme registrerer også kapacitansændringer, men hardwaren er anderledes.
Banan-klaveret bruger digitale Arduino-pins og biblioteket ”CapacitiveSensor” til at konfigurere og aflæse kredsløbene med modstande og berøringselektroder.
I vores eksempel benytter vi 3 bananer, men flere kanaler kræver ledige pins, passende modstande, ledningsføring og kodeændringer. Se kredsløbet i denne You-Tube video.
Her er bonus koden:
#include <CapacitiveSensor.h>
#define buzzer 11
// Deklarér variabler til kapacitive sensorer
CapacitiveSensor banan1 = CapacitiveSensor(12, 3);
CapacitiveSensor banan2 = CapacitiveSensor(12, 4);
CapacitiveSensor banan3 = CapacitiveSensor(12, 5);
void setup() {
// Sluk for autokalibrering på kanal 1 - bare som et eksempel
banan1.set_CS_AutocaL_Millis(0xFFFFFFFF);
banan2.set_CS_AutocaL_Millis(0xFFFFFFFF);
banan3.set_CS_AutocaL_Millis(0xFFFFFFFF);
}
void loop() {
// Indstil følsomheden for sensorerne
long touch1 = banan1.capacitiveSensor(1000);
long touch2 = banan2.capacitiveSensor(1000);
long touch3 = banan3.capacitiveSensor(1000);
// Når sensoren berøres, afspilles en tone på summeren
if (touch1 > 1000) {
tone(buzzer, 400);
} else if (touch2 > 1000) {
tone(buzzer, 600);
} else if (touch3 > 1000) {
tone(buzzer, 800);
} else {
noTone(buzzer);
}
delay(10);
}
- Først inkluderer vi biblioteket "CapacitiveSensor", som giver os mulighed for at bruge de kapacitive sensorer i vores projekt.
- Vi definerer pinnen for vores buzzer ved at bruge #define. Dette gør det nemt at ændre, hvis det er nødvendigt.
- Derefter opretter vi tre objekter af typen CapacitiveSensor ved at angive sende- og modtagepinnumrene for hver sensor.
- I void setup()-funktionen deaktiveres automatisk baseline-kalibrering ved hjælp af set_CS_AutocaL_Millis() for hver sensor. Vurdér om det passer til din opsætning, og kalibrér selv tærsklerne.
- I void loop()-funktionen læser vi en kapacitiv måleværdi med capacitiveSensor() for hver sensor og gemmer resultaterne i variablerne touch1, touch2 og touch3.
- Herefter kontrollerer vi hver sensor separat ved hjælp af if- og else if-betingelser. En værdi over 1000 tolkes i eksemplet som berøring; tærsklen skal tilpasses opsætningen. Buzzeren aktiveres med tone()-funktionen og angiver en frekvens til at generere en tone.
- Hvis ingen sensorer er blevet berørt, slukker vi for buzzeren ved hjælp af noTone()-funktionen.
- Til sidst tilføjer vi en kort forsinkelse ved hjælp af delay()-funktionen for at give tid til at registrere sensorinputtet igen.
Det er vigtigt at bemærke, at dette er en simpel beskrivelse af koden for at give en overordnet forståelse. Det kan være nyttigt at læse dokumentationen til CapacitiveSensor-biblioteket for at få en dybere forståelse af, hvordan det fungerer, hvis du vil udforske det yderligere.
Vi håber, at du har nyder denne blogserie om Arduino-projekter og lært noget nyt om elektronik og programmering undervejs. Vi har dækket grundlæggende koncepter som analoge sensorer, lysstyring og lydproduktion.
Gennem disse projekter har vi udforsket forskellige komponenter, herunder photoresistorer, buzzere, LED'er og kapacitive sensorer. Vi har også fået praktisk erfaring med at forbinde og programmere Arduinoen til at skabe interaktive og sjove gadgets.
Husk, at dette kun er begyndelsen på din rejse inden for elektronik og programmering. Der er uendelige muligheder for at udforske og skabe med Arduino-platformen. Vi opfordrer dig til at fortsætte med at lære og eksperimentere med nye projekter.
Vi håber, at denne blogserie har givet dig inspiration og motivation til at fortsætte med dine egne projekter og eksperimenter. Husk altid at have det sjovt og eksperimentere sikkert, mens du udforsker den spændende verden af Arduino.
Tak fordi du fulgte med i vores blogserie og vi ses næste gang, hvor vi dykker ned i et nyt projekt!
