Välkommen till den tredje och ännu en spännande Arduino-blogg i serien! Idag ska vi utforska ett spännande sätt att kombinera ljus och ljud i vårt Arduino-projekt. Vi kommer att lära oss hur man aktiverar en summer med hjälp av en fotoresistor, som registrerar ändringar i ljusintensiteten. Sensorvärdena bestämmer när summern låter.
I den här bloggen kommer vi att fokusera på att använda en specifik kod för att uppnå vårt önskade resultat. Vi kommer att introducera och förklara koden steg för steg så att du enkelt kan följa med och implementera den i ditt eget projekt. Koden är enkel , men ändå effektiv för att styra både summern och LED-ljuset baserat på ljusintensiteten som mäts av fotoresistorn.
I koden hittar du att vi använder ljusintensitetsvärdet som mäts av fotomotståndet för att styra både summern och LED-ljuset. Sambandet mellan ljus och värdet från fotomotståndet beror på spänningsdelaren. Koden använder PWM bara under en tröskel; ljudnivå och ljusstyrka ökar inte kontinuerligt med ljuset.
Komponenterna i detta projekt
| KY-018 fotomotstånd |
| Arduino UNO |
| Anslutningskablar |
| KY-006 Passiv summer |
| Eller |
| Fotomotstånds- och summerkit |
- KY-018 Fotoresistor : En fotoresistor, även känd som en ljuskänslig resistor, är en elektronisk komponent som ändrar sin resistans baserat på ljusintensiteten den utsätts för. I vårt projekt använder vi KY-018 Photoresistor för att mäta ljusnivån och använda den som en input till vår Arduino UNO.
- Arduino UNO : Arduino UNO är en populär mikrokontrollerplattform baserad på Atmels ATmega328P mikrokontroller. Den fungerar som hjärnan i vårt projekt och styr både insignalen från fotomotståndet och styrningen av summern och LED-ljuset baserat på ljusintensiteten.
- Bygeltrådar : Bygelkablar är korta kablar med kontakter i båda ändar som används för att koppla ihop olika komponenter på en brödbräda eller för att ansluta komponenterna till Arduino UNO. De ger ett flexibelt och enkelt sätt att ansluta komponenterna.
- KY-006 passiv summer: En passiv summer behöver en växlande eller pulserad drivsignal för en ihållande ton; konstant likspänning ger inte i sig en kontinuerlig ton. Här styrs ljudet av fotomotståndets värde.
KY-018 Fotoresistor
Fotoresistorn fungerar genom att ändra dess motstånd baserat på mängden ljus den utsätts för. När ljus finns kommer motståndet att minska, och när det är brist på ljus kommer motståndet att öka. Detta resistansvärde översätts till en analog spänning som representerar intensiteten hos det avkända ljuset.

Du kan använda KY-018 fotoresistor för att övervaka ljusnivåer i olika miljöer eller som en del av automatiserade system som kräver ett svar på förändringar i ljusförhållanden. Genom att mäta den analoga spänningen från fotoresistorn kan du få information om intensiteten i det omgivande ljuset och fatta beslut utifrån det.
Observera att KY-018 fotoresistorn är en analog sensor , vilket betyder att du behöver en analog ingång på din Arduino (t.ex. en analog stift) för att läsa värdet korrekt.
KY-006 Passiv summer
Modulen har en passiv summer och 3 hanstift. Ett ofta angivet känsligt område ärtoner mellan 1,5 till 2,5 kHz, men frekvensresponsen beror på exakt komponent. Driv den med en vågform via tone() eller lämplig tidsstyrd omkoppling.
Summern kan ge ljudeffekter, varningar och statusljud. Kontrollera modulens spännings- och strömmärkning; anta inte att ett allmänt påstående om 1.5V–15V gäller. Överskrid aldrig Arduinostiftens tillåtna spänning och använd transistordrivning om strömbehovet är för stort för GPIO.
Genom att kontrollera på/av-perioderna med lämpliga fördröjningar eller PWM kan du uppnå olika toner och rytmer . Summern kan vara användbar för att lägga till ljudåterkoppling till dina Arduino-projekt eller för att skapa en enkel larmfunktion.
Projektets krets
Detta projekt använder Arduino UNO, två digitala stift och ett analogt stift tillsammans med flera komponenter för att aktivera en summer och en LED. Det är viktigt att nämna att det också finns några motstånd som spelar en betydande roll i kretsen.
Två specifika digitala stift på Arduino UNO har valts noggrant. Jag har valt digitala stift som stödjer pulsbreddsmodulering ( PWM), alltså pulser mellan ungefär 0 och 5 V med varierande pulsbreddsförhållande. Det är inte en kontinuerligt varierbar likspänning. PWM styr LED:ens medelström; summerns ljudstyrka varierar inte nödvändigtvis linjärt med pulsbreddsförhållandet.
Summern är ansluten till en av Arduinos digitala stift, stift 11, med återledningen till GND i det aktiva-höga exemplet. Följ modulens stiftlayout och strömmärkning; använd lämplig transistordrivning om direkt GPIO-drift inte är tillåten.
Lysdioden är ansluten till ett annat digitalt stift, stift 6 genom ett seriemotstånd på 220 ohm till anoden, med katoden till GND. Den aktiva-höga kopplingen motsvarar att analogWrite(..., 0) betyder av.
För att mäta ljusintensiteten används en fotoresistor (LDR), som fungerar som en variabel resistor. För en lös LDR används ett 10 k ohm motstånd som spänningsdelare mellan 5V och GND, med mittpunkten till analoga stift 0 (A0). Använder du KY-018-modulen ska dess inbyggda spänningsdelare kontrolleras och signalutgången anslutas till A0. Värdets riktning beror på kopplingen.
Varje LED behöver ett eget strömbegränsande motstånd. Summerns skydd och eventuell drivkrets ska följa databladet. Alla jordar är gemensamma; ett enda gemensamt motstånd är inte ett universellt skydd för båda lasterna.
Det historiska schemat nedan ska läsas tillsammans med korrigeringen ovan: anslut de aktiva-höga lasterna mot GND, inte som pull-ups till 5V.

Nu när vi har projektets kretsar och komponenter under kontroll är det dags att dyka ner i koden och se hur vi kan programmera Arduino för att styra vår summer och LED med hjälp av ett fotomotstånd.
Koden
Vi har tidigare tagit upp de inbyggda funktionerna/kommandon och programmeringskoncept som används i detta projekt i våra tidigare bloggar i denna serie. Även om vi redan har en god förståelse för dessa koncept, kommer vi fortfarande att utforska koden steg för steg för att säkerställa att vi har en tydlig förståelse för hur man aktiverar summern och lysdioden med hjälp av en fotoresistor.
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 börjar med att definiera tre variabler,sensorPin, buzzerPin och ledPin, som representerar de analoga ingången och två digitala utgångarna på Arduino ansluten till fotoresistorn, summern respektive LED.
Isetup()-funktionen initieras kommunikationen med den seriella monitorn, och stiftenbuzzerPinochledPin sätts som utgångar. Vänta – vad är Serial Monitor?
Seriell monitor
Serial Monitor är ett verktyg i Arduino IDE som låter dig kommunicera med din Arduino via den seriella anslutningen mellan Arduino-kortet och din dator. Du kan öppna Serial Monitor genom att klicka på ikonen högst upp i Arduino IDE-fönstret. 
Med Serial Monitor öppen kan du skicka och ta emot seriella data mellan Arduino och din dator. Du kan använda den seriella monitorn för att skicka kommandon, ställa in parametrar eller ta emot sensorvärden från Arduino. Du kan också använda den för att felsöka och övervaka din Arduino-applikation genom att skriva ut meddelanden och värden.
För att skicka data från Arduino till Serial Monitor kan du använda Serial.print() eller Serial.println() funktionen. Dessa funktioner skickar data som text till fönstret Serial Monitor. Du kan också använda Serial.write() för att skicka binär data.
Den seriella monitorn kan vara användbar för olika ändamål, som att kontrollera och felsöka dina Arduino-program, övervaka sensorvärden, testa kommunikationsprotokoll och interagera med externa enheter eller programvara via serieanslutningen.
Genom att använda Serial Monitor kan du interagera med din Arduino och få feedback och data i realtid, vilket gör det enklare att utveckla, testa och felsöka dina Arduino-projekt.
Iloop()-funktionen utförs följande steg:
- Läs värdet på fotomotståndet med funktionenanalogRead()och lagra värdet i variabelnsenValue. (Vi har lärt oss om analogRead() i tidigare bloggar i den här serien).
- Lägg till en kort fördröjning på 10 millisekunder meddelay()-funktionen.
- Skriv ut värdet för senValue till seriell monitor med Serial.println().
Därefter kontrolleras värdet på senValue. Om det understiger 500 utförs följande. Om lägre värden betyder ljus eller mörker beror på spänningsdelarens koppling; mät och välj tröskeln för din uppkoppling.
- Summern drivs med analogWrite() och ett värde som är en fjärdedel av senValue.
- Lysdioden tänds på samma sätt som summern.
Om senValue är 500 eller högre sätts båda PWM-utgångarna till 0. Det stänger av komponenterna med den korrigerade aktiva-höga kopplingen ovan.
Vi har utforskat analog inläsning och PWM för att styra ljud och ljus utifrån en ljussensor. Det ger många möjligheter till interaktiva effekter. Men det kommer mer!
BONUSPROJEKT
Okej Super! Nu har vi varit med om ännu ett spännande projekt, men om du tror att bloggen är slut, tänk om! Vi har förberett ett roligt litet bonusprojekt! Och det är inte vilket bonusprojekt som helst... Har du någonsin drömt om att spela på en banan? OROR INTE MER, för nu har du chansen!
I detta bonusprojekt kommer vi att utforska ett roligt och interaktivt sätt att spela musik med hjälp av kapacitiv avkänning på Arduino och vår gode vän summern. Genom att koppla bananer till de digitala stift för kapacitiv avkänning och röra vid dem kan vi skapa olika toner eftersom detta ändrar banans kapacitans. Härmed skapar vi vårt eget bananpiano! Föreställ dig att imponera på dina vänner och familj med dina musikaliska bananfärdigheter. Detta projekt är både underhållande och lärorikt.
I detta bonusprojekt använder vi alla komponenter från originalprojektet förutom fotoresistorn. Utöver det behöver vi två andra "komponenter", nämligen:
1M ohm motstånd
Bananer
Hur fungerar detta bananpiano egentligen?
Klassiska Arduino UNO saknar särskilda kapacitiva touchstift. CapacitiveSensor använder vanliga digitala stift och högohmiga motstånd för att uppskatta kapacitans från laddningstiden. Beröring av ett ledande föremål ändrar mätningen. Telefoners pekskärmar registrerar också kapacitansförändringar, men hårdvaran är annorlunda.
Bananpianot använder digitala Arduinostift och biblioteket ”CapacitiveSensor” för att konfigurera och läsa av kretsarna med motstånd och beröringselektroder.
I vårt exempel använder vi 3 bananer, men fler kanaler kräver lediga stift, lämpliga motstånd, koppling och kodändringar. Se kopplingen i den härYou-Tube-video.
Här är bonuskoden:
#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 inkluderar vi biblioteket " CapacitiveSensor ", vilket gör att vi kan använda de kapacitiva sensorerna i vårt projekt.
- Vi definierar stiftet för vår summer med#define. Detta gör det enkelt att byta om det behövs.
- Därefter skapar vi tre objekt av typenCapacitiveSensorgenom att ange sändnings- och mottagnings-pinnumren för varje sensor.
- I void setup() inaktiveras automatisk baskalibrering genom set_CS_AutocaL_Millis() för varje sensor. Bedöm om det passar din uppställning och kalibrera trösklarna själv.
- I void loop() läser vi ett kapacitivt mätvärde med capacitiveSensor() för varje sensor och lagrar resultaten i touch1, touch2 och touch3.
- Därefter testar vi sensorerna i turordning med if och else if. Ett värde över 1000 tolkas i exemplet som beröring; tröskeln måste anpassas till uppställningen. Summern aktiveras med tone() och en frekvens som bestämmer tonen.
- Om ingen sensor utlöser tröskeln stängs summern av med noTone().
- Till sist läggs en kort väntan till med delay() innan sensorerna läses igen.
Detta är en enkel kodöversikt. Läs dokumentationen för CapacitiveSensor-biblioteket för att förstå detaljerna om du vill fördjupa dig.
Vi hoppas att du har gillat den här bloggserien om Arduino-projekt och lärt dig något nytt om elektronik och programmering längs vägen. Vi har täckt grundläggande koncept som analoga sensorer, ljusstyrning och ljudproduktion.
Genom dessa projekt har vi utforskat olika komponenter inklusive fotoresistorer, summer, lysdioder och kapacitiva sensorer. Vi fick också praktisk erfarenhet av att ansluta och programmera Arduino för att skapa interaktiva och roliga prylar.
Kom ihåg att detta bara är början på din resa inom elektronik och programmering. Det finns oändliga möjligheter att utforska och skapa med Arduino-plattformen. Vi uppmuntrar dig att fortsätta lära dig och experimentera med nya projekt.
Vi hoppas att den här bloggserien har gett dig inspiration och motivation att fortsätta med dina egna projekt och experiment. Kom alltid ihåg att ha kul och experimentera säkert när du utforskar Arduinos spännande värld.
Tack för att du följer vår bloggserie och vi ses nästa gång när vi dyker in i ett nytt projekt!
