Arduino lysføler med summer og blinkende lysdioder: 5 trin

Arduino lysføler med summer og blinkende lysdioder: 5 trin

Indholdsfortegnelse:

Anonim

Dette er et smukt sejt projekt, jeg lavede sammen med min datter. Slutproduktet er sjovt og giver dig noget sjovt at tage til skole for en show-and-tell eller vise dine slægtninge, når de kommer til at besøge!

Det er en kombination af tre andre små Arduino projekter:

- En lyssensor ved hjælp af en fotocelle

- Brug en piezo summer til at skabe en bip med variabel tone og hastighed og

- blinker en sekvens af lysdioder med variabel hastighed

Slutproduktet er en lyssensor med en række lysdioder, som (a) blinker hurtigere med mere lys (og langsommere med mindre) og (b) bipper hurtigere og ved højere tonehøjde med mere lys (og langsommere og lavere tonehøjde med mindre.

Da jeg lavede breadboarddiagrammet ved hjælp af Fritzing, lavede jeg nogle justeringer fra det originale brødbræt, så det er klart at visualisere ledningerne mv.

Hvad du skal bruge:

- brødbræt

- Arduino Uno

- 5x LED'er

- solceller

- piezo højttaler

- 5x 220 ohm modstand (til lysdioder)

- 500 ohm modstand (til solceller)

- 100 ohm modstand (til piezo summer)

For at være helt ærlig har jeg valgt disse modstande baseret på arbejdet udført af andre mennesker og andre projekter, jeg har fundet online. Jeg er sikker på, at der er videnskab og formler bag det, men du finder det ikke i denne vejledende, undskyld.

forsyninger:

Trin 1: Trin 1 - Wire den første LED

Start med det grundlæggende: Tilslut brættet til GND og 5V-stifterne og sørg for at du har jumpers, der forbinder de positive og negative skinner til den anden side af brødbrættet, hvilket gør dem "aktive" og hjælper dig med at opbygge dine kredsløb uden at krydse over brødbrættet for meget.

Vi ønsker at oprette en række LED'er, der skal betjenes uafhængigt.

Lad os forbinde den første LED. Den positive side af LED'en forbinder til pin 13. Den negative side af LED'en, du vil forbinde med en 220 ohm modstand, der så forbindes til GND.

Trin 2: Trin 2 - Wire de andre 4 LED'er

Nu led de fire andre lysdioder efter samme plan: Positive sider til henholdsvis pins 12, 11, 10 og 9 og negative sider til jorden ved hjælp af hver en 220 ohm modstand.

LED'erne er klar: du vil kunne styre dem uafhængigt, hver med en separat PIN-kode.

Trin 3: Trin 3 - Wire Piezo

Vi vil have vores sensor til at bippe. For det vil vi bruge en Piezo-buzzer, så lad os binde den.

Den negative ledning forbinder til GND, og ​​den positive ledning forbinder først til en 100 ohm modstand end til pin 7. Som jeg sagde før, foreslås 100 ohm modstanden i andre projekter, som jeg fandt online.

Trin 4: Trin 4 - Wire den fotovoltaiske celle

Den fotovoltaiske celle er en simpel modstand, der bliver mere ledende, når den udsættes for lys. Så med blinklys blokerer det 100% af strømmen, og med fuld lys gør det muligt at strømme igennem. Måden Arduino "læser" på er, at nul lys returnerer en værdi på 0 og fuld lys returnerer en værdi på 1024.

Den fotovoltaiske celle har ikke en negativ og positiv side. Så du vil føre den ene side til den positive skinne af brættet. Ledningen af ​​den negative side er lidt kompliceret: du vil forbinde den begge (a) til den negative skinne ved brug af en 500 ohm modstand og (b) direkte til pin A0.

Kredsløbet er klar. Lad os se koden.

Trin 5: Trin 5 - Koden

Du finder den fulde kode nedenfor for at klippe og indsætte. Det har // kommentarer, så du kan forstå, hvad der foregår hvor.

Dette er hvad koden laver:

1 - Sensoren læser lysniveauet og måler det fra 0 til 1024

2 - Vi "oversætter" denne læsning til en instruktion for summeren at bippe og LED'erne blinker.

3 - For LED'erne oversætter vi lysets læsning til millisekunder af blinkende. Jo mindre lys, det langsomt blinker. Selv om lyset er stærkt, gør det ikke mere end 700 eller 800 (svært at komme til 1024), så jeg brugte 700 som mit "øverste" lysniveau. På grund af den måde, som MAP-funktionen fungerer, hvis lyset når over 700, vil det blinke tiden til et negativt tal - og det hele går ned. Så jeg lavede en regel om, at Blink_Time ikke kan være kortere end 20 millisekunder.

4 - Lysdioderne lyser i rækkefølge (det vil sige den første bliver tændt, så når den slukker, tændes den næste osv.)

5 - For summeren oversætter vi lysets læsning (0 - 1024) til hertz (120 til 1500), så jo mere lys, jo højere er pitchen.

6 - Buzzeren bipper samtidig med den første, tredje og femte LED, (og for salgstidens længde), hvorefter lysdioderne pause. Dette skaber en pulserende effekt, lys og lyd i samme rytme.

Dette er det. Nyd det!

Kode:

// Lyssensorer med bip og ledsekvenser som en lufthavn

// ints for at blinke

int Blink_Time = 20; // skaber denne variabel til brug for længden af ​​blink og intervaller

int Light_Level = 0; // opretter denne variabel til brug for lysniveauet

int Light_Pin = A0; // pin 0 vil blive brugt til fotocellen

// ints for summer

int Buzz_Tone = 300; // opretter denne variabel for toneren i summeren

int Buzz_Tone_Max = 1500; // max herz for buzz tone

int Buzz_Tone_Min = 120; // min herz for buzz tone

void setup () {

pinMode (9, OUTPUT); // initialiser pint 9-13 som udgang til ledningerne

pinMode (10, OUTPUT);

pinMode (11, OUTPUT);

pinMode (12, OUTPUT);

pinMode (13, OUTPUT);

pinMode (7, OUTPUT); // Indstil summer - pin 7 som en udgang til summeren

Serial.begin (9600); Serial.println ("Klar"); // Åbn seriel porten ved 9600 baud for at overvåge opførslen af ​​variablerne

}

void loop () {

Light_Level = analogRead (Light_Pin); // læser lysniveauet

Blink_Time = map (Light_Level, 0, 700, 300, 1); // indstiller blinktid i henhold til lysniveau (mere lys, mere hastighed)

hvis (Blink_Time <= 20) {Blink_Time = 20;} // angiver en minimumsgrænse for blinketiden. Fordi lysniveauet kan gå over 700, kan kortlægningsfunktionen forårsage blinktid for at blive negativ, i hvilket tilfælde programmet fryser.

// Sæt buzz tone i henhold til lysniveauet (mere lys, mere herz, højere tonehøjde)

Buzz_Tone = kort (Light_Level, 0, 700, Buzz_Tone_Min, Buzz_Tone_Max);

// udskriver alle variabler i serielt skærm for at se, hvad der sker

Serial.print ("Lysniveau =");

Serial.print (Light_Level);

Serial.print ("Blink time =");

Serial.print (Blink_Time);

Serial.print ("Buzz_Tone =");

Serial.print (Buzz_Tone);

Serial.println ("");

// første LED

tone (7, Buzz_Tone); // starter bipet samtidig med at den første ledning tændes

digitalWrite (9, HIGH); // tænd lysdioden til (høj er spændingsniveauet)

forsinkelse (Blink_Time); // vent på blink tid

digitalWrite (9, LOW); // Sluk LED'en ved at lave spændingen LOW

noTone (7); // stopper bip

// anden LED

// ingen bip her, jeg vil kun have tre bip, så jeg lægger dem på den første, tredje og femte lysdiode

digitalWrite (10, HIGH); // tænd lysdioden til (høj er spændingsniveauet)

forsinkelse (Blink_Time); // vent på blink tid

digitalWrite (10, LOW); // Sluk LED'en ved at lave spændingen LOW

// tredje LED

tone (7, Buzz_Tone); // bip

digitalWrite (11, HIGH); // tænd lysdioden til (høj er spændingsniveauet)

forsinkelse (Blink_Time); // vent på blink tid

digitalWrite (11, LOW); // Sluk LED'en ved at lave spændingen LOW

noTone (7);

// fjerde LED

digitalWrite (12, HIGH); // tænd lysdioden til (høj er spændingsniveauet)

forsinkelse (Blink_Time); // vent på blink tid

digitalWrite (12, LOW); // Sluk LED'en ved at lave spændingen LOW

// femte LED

tone (7, Buzz_Tone);

digitalWrite (13, HIGH); // tænd lysdioden til (høj er spændingsniveauet)

forsinkelse (Blink_Time); // vent på blink tid

digitalWrite (13, LOW); // Sluk LED'en ved at lave spændingen LOW

noTone (7);

forsinkelse (5 * Blink_Time); // pause mellem serier af blinkende lysdioder + bip

}