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. Med dette projekt kan vi skabe et interaktivt miljø, hvor lyden af buzzeren bliver aktiveret, når lyset rammer photoresistoren.
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. Jo mere lys der registreres af photoresistoren, desto højere vil lydstyrken på buzzeren og lysstyrken på LED-lyset være.
Komponenterne i dette projekt
KY-018 Photoresisto |
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 er en komponent, der kan producere lyd, når den tilføres en elektrisk strøm. I vores projekt bruger vi KY-006 Passiv Buzzeren til at generere lyd, der svarer til lysintensiteten målt af photoresistoren.
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
Dette modul består af en passiv buzzer og 3 han-header pins. Du kan bruge den til at generere toner mellem 1,5 til 2,5 kHz ved at tænde og slukke den gentagne gange ved forskellige frekvenser enten ved hjælp af forsinkelser eller PWM (Pulse Width Modulation).
KY-006-buzzeren er i stand til at generere lyde i dette frekvensområde ved at tænde og slukke hurtigt. Du kan bruge den til at skabe forskellige lydeffekter, alarmlyde eller til at indikere forskellige tilstande i dit projekt. Bemærk, at den kræver en driftsspænding mellem 1,5V og 15V DC for at fungere korrekt.
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), hvilket betyder, at de kan generere variable udgangsspændinger mellem 0 og 5 volt. Dette giver mulighed for styring af lydstyrken på buzzeren og lysstyrken på LED'en.
Buzzeren er tilsluttet en af Arduino's digitale stifter, pin 11, og det andet ben af buzzerenx er trukket højt, hvilket betyder, at det er forbundet til en spændingskilde.
LED'en er tilsluttet en anden digital stift, pin 6, og den anden ende af LED'en er også trukket højt ved hjælp af en 220 ohm modstand. Dette sikrer, at strømmen gennem LED'en begrænses for at undgå beskadigelse.
For at måle lysintensiteten bruges en photoresistor (LDR), der fungerer som en variabel modstand. LDR'en er tilkoblet en 10 k ohm modstand og den anden ende til Arduino UNO's analoge pin 0 (A0). Dette tillader Arduino at måle spændingen over LDR'en og dermed bestemme lysintensiteten.
For at forsyne buzzeren og LED'en leveres 5 volt fra Arduino UNO's 5V pin. En 220 ohm modstand er placeret i serie med både buzzeren og LED'en for at begrænse strømmen og beskytte komponenterne.
Kredsløbsdiagrammet nedenfor viser den forbindelse mellem komponenterne og Arduino UNO.
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 digitale pins 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 den er mindre end 500, betyder det, at der er lavt lysniveau, og der udføres følgende handlinger:
- 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 større, betyder det, at der er tilstrækkeligt lys, og begge komponenter slukkes ved at sætte deres output-værdi til 0.
Vi har udforsket koncepter som analog indlæsning og PWM (Pulse Width Modulation) for at kontrollere lydstyrken på buzzeren og lysstyrken på LED'en baseret på lysniveauet, der registreres af photoresistoren. Dette åbner op for en bred vifte af muligheder for at skabe interaktive lydeffekter og lysstyring i vores projekter. Men vent… 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 kapacitive pins på Arduino og vores gode ven, buzzeren. Ved at tilkoble bananer til Arduinoens kapacitive pins 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?
Kapacitive pins på Arduino er digitale indgange, der er i stand til at registrere ændringer i kapacitans, hvilket gør det muligt at opdage berøring eller nærhed af en persons krop eller et andet objekt uden fysisk kontakt. Kapacitansen ændres, når der er en tilstedeværelse af en ledende genstand i nærheden af pinnen. Det er for eksempel sådan din touch-funktion fungerer på din mobil - ved at måle ændringer i kapitansen når du rører ved din skærm!
I vores banan-klaver projekt benytter vi kapacitive pins på Arduino til at opdage berøring af bananer. Vi bruger biblioteket "CapacitiveSensor" til at konfigurere og læse data fra kapacitive sensorer, der er forbundet til de relevante pins.
I vores eksempel benytter vi 3 bananer, men du kan tilføje så mange bananer som der er kapacitive pins! Hvis det er svært at tyde opsætningen for kredsløbet til dit helt eget banan-klaver se opsætningen af 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 slukker vi for autokalibreringen af sensorerne ved at bruge funktionen set_CS_AutocaL_Millis() for hver sensor. Dette giver os mere kontrol over følsomheden af sensorerne.
- I void loop()-funktionen sætter vi følsomheden af hver sensor ved at læse værdien fra capacitiveSensor()-funktionen for hver sensor. Vi gemmer disse værdier i variablerne touch1, touch2 og touch3.
- Herefter kontrollerer vi hver sensor separat ved hjælp af if- og else if-betingelser. Hvis værdien af en sensor er højere end 1000, betyder det, at den er blevet berørt. Vi aktiverer derefter buzzeren ved hjælp af 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!