Czujnik światła Arduino z buzzerem i migającymi diodami LED: 5 kroków

Czujnik światła Arduino z buzzerem i migającymi diodami LED: 5 kroków

Spisu treści:

Anonim

To całkiem fajny projekt, który stworzyłem z moją córką. Produkt końcowy jest zabawny i daje ci coś fajnego do szkoły na pokaz i opowiadanie lub pokazuje krewnym, kiedy przychodzą na wizytę!

To połączenie trzech innych małych projektów Arduino:

- czujnik światła wykorzystujący fotokomórkę

- użycie piezoelektrycznego brzęczyka do stworzenia brzęczyka o zmiennym tonie i prędkości oraz

- miganie sekwencji diod LED o zmiennej prędkości

Produktem końcowym jest czujnik światła z serią diod LED, które (a) migają szybciej z większą ilością światła (i wolniej z mniejszą ilością) i (b) sygnały dźwiękowe szybciej i na wyższym poziomie z większą ilością światła (i wolniejszym i niższym skokiem z mniejszą ilością światła).

Kiedy utworzyłem diagram breadboardowy za pomocą Fritzingu, dokonałem pewnych korekt z oryginalnej deski do krojenia chleba, aby było jasne, aby zwizualizować przewody itp.

Czego potrzebujesz:

- deska do krojenia chleba

- Arduino Uno

- 5x diody LED

- ogniwo fotowoltaiczne

- głośnik piezoelektryczny

- 5 x rezystor 220 omów (dla diod LED)

- rezystor 500 omów (dla ogniwa fotowoltaicznego)

- rezystor 100 omów (dla brzęczyka piezo)

Aby być całkowicie szczerym, wybrałem te rezystory w oparciu o pracę wykonaną przez innych ludzi i inne projekty, które znalazłem w Internecie. Jestem pewien, że kryje się za tym nauka i formuły, ale nie znajdziesz tego w tym Instruktażu, przepraszam.

Kieszonkowe dzieci:

Krok 1: Krok 1 - Podłącz pierwszą diodę LED

Zacznij od podstaw: podłącz płytę do GND i pinów 5 V i upewnij się, że masz zworki łączące szyny dodatnie i ujemne z drugą stroną deski rozdzielczej, dzięki czemu są „aktywne” i pomagają ci zbudować obwody bez przekraczania płyty kuchennej zbyt wiele.

Chcemy stworzyć sekwencję diod LED, które będą obsługiwane niezależnie.

Podłączmy pierwszą diodę LED. Dodatnia strona diody LED łączy się z pinem 13. Negatywna strona diody LED zostanie podłączona do rezystora 220 omów, który jest następnie podłączony do GND.

Krok 2: Krok 2 - Podłącz pozostałe 4 diody LED

Teraz podłącz pozostałe cztery diody LED zgodnie z tym samym planem: dodatnie strony do styków 12, 11, 10 i 9 odpowiednio, a strony ujemne do masy, używając każdego rezystora 220 omów.

Diody LED są gotowe: będziesz mógł je kontrolować niezależnie, każdy za pomocą oddzielnego kodu PIN.

Krok 3: Krok 3 - Połącz piezo

Chcemy, aby nasz czujnik wydał sygnał dźwiękowy. Do tego użyjemy brzęczyka Piezo, więc go podłączmy.

Przewód ujemny łączy się z GND, a przewód dodatni łączy się najpierw z rezystorem 100 omów, a nie z pinem 7. Jak powiedziałem wcześniej, opornik 100 omów jest sugerowany w innych projektach, które znalazłem w Internecie.

Krok 4: Krok 4 - Podłącz ogniwo fotowoltaiczne

Ogniwo fotowoltaiczne to prosty rezystor, który staje się bardziej przewodzący pod wpływem światła. Tak więc przy zerowym świetle blokuje 100% prądu, a przy pełnym świetle umożliwia przepływ prądu. Sposób, w jaki Arduino „odczytuje” to, że światło zerowe zwraca wartość 0, a światło pełne zwraca wartość 1024.

Ogniwo fotowoltaiczne nie ma strony ujemnej i dodatniej. Więc poprowadzisz jedną stronę do dodatniej szyny deski. Okablowanie strony ujemnej jest nieco skomplikowane: połączysz je obie (a) do szyny ujemnej za pomocą rezystora 500 omów i (b) bezpośrednio do pinu A0.

Obwód jest gotowy. Spójrzmy na kod.

Krok 5: Krok 5 - Kodeks

Pełny kod znajdziesz poniżej, aby wyciąć i wkleić. Ma // komentarze, dzięki którym możesz zrozumieć, co się dzieje w miejscu.

Oto co robi kod:

1 - Czujnik odczytuje poziom światła, mierząc go od 0 do 1024

2 - „Tłumaczymy” ten odczyt na instrukcję, aby brzęczyk wydawał sygnał dźwiękowy, a diody LED migały.

3 - W przypadku diod LED tłumaczymy odczyt światła na milisekundy migania. Im mniej światła, tym wolniej miga. Wykonując kilka testów, nawet gdy światło jest mocne, nie przekracza 700 lub 800 (trudno dostać się do 1024), więc użyłem 700 jako mojego „górnego” poziomu światła. Ze względu na sposób działania funkcji MAP, jeśli światło osiągnie wartość powyżej 700, zmieni czas migania na liczbę ujemną - a całość ulegnie awarii. Dlatego stworzyłem regułę, że Blink_Time nie może być krótsza niż 20 milisekund.

4 - Diody LED zapalają się kolejno (to znaczy, że pierwszy się włącza, a następnie, gdy się wyłącza, następny włącza się itd.)

5 - Dla brzęczyka tłumaczymy odczyt światła (0 - 1024) na herc (120 do 1500), więc im więcej światła, tym wyższy ton.

6 - Brzęczyk emituje sygnał dźwiękowy w tym samym czasie, co pierwsza, trzecia i piąta dioda LED (i przez czas trwania sprzedaży), a następnie zatrzymuje się, gdy diody LED zatrzymają się. Tworzy to pulsujący efekt, światło i dźwięk w tym samym rytmie.

To jest to. Ciesz się!

Kod:

// Czujniki światła z sygnałami dźwiękowymi i sekwencją diod LED jak na lotnisku

// ints do migania

int Blink_Time = 20; // tworzy tę zmienną, która będzie używana do długości mrugnięć i interwałów

int Light_Level = 0; // tworzy tę zmienną, która będzie używana dla poziomu światła

int Light_Pin = A0; // pin 0 zostanie użyty do fotokomórki

// ints dla brzęczyka

int Buzz_Tone = 300; // tworzy tę zmienną dla tonu brzęczyka

int Buzz_Tone_Max = 1500; // max herz za dźwięk buzzu

int Buzz_Tone_Min = 120; // min herz za dźwięk buzzu

void setup () {

pinMode (9, OUTPUT); // inicjalizuj pint 9 - 13 jak wyjścia dla diod

pinMode (10, OUTPUT);

pinMode (11, OUTPUT);

pinMode (12, OUTPUT);

pinMode (13, OUTPUT);

pinMode (7, OUTPUT); // Ustaw buzzer - pin 7 jako wyjście brzęczyka

Serial.begin (9600); Serial.println („Ready”); // Otwórz port szeregowy z szybkością 9600 bodów, aby monitorować zachowanie zmiennych

}

void loop () {

Light_Level = analogRead (Light_Pin); // odczytuje poziom światła

Blink_Time = mapa (Light_Level, 0, 700, 300, 1); // ustawia czas migania zgodnie z poziomem światła (więcej światła, większa prędkość)

if (Blink_Time <= 20) {Blink_Time = 20;} // ustawia minimalny limit czasu migania. Ponieważ poziom światła może przekroczyć 700, funkcja mapowania może spowodować, że czas migania stanie się ujemny, w którym to przypadku program zawiesza się.

// ustawia dźwięk buzza w zależności od poziomu światła (więcej światła, więcej herz, wyższy ton)

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

// wyświetla wszystkie zmienne w monitorze szeregowym, aby zobaczyć, co się dzieje

Serial.print („Light level =”);

Serial.print (Light_Level);

Serial.print („Czas migania =”);

Serial.print (Blink_Time);

Serial.print ("Buzz_Tone =");

Serial.print (Buzz_Tone);

Serial.println ("");

// pierwsza dioda LED

ton (7, Buzz_Tone); // uruchamia sygnał dźwiękowy w tym samym czasie, gdy świeci pierwsza dioda

digitalWrite (9, HIGH); // włącz diodę LED (HIGH to poziom napięcia)

delay (Blink_Time); // poczekaj na czas migania

digitalWrite (9, LOW); // wyłącz diodę, obniżając napięcie

noTone (7); // zatrzymuje dźwięk

// druga dioda LED

// nie słychać sygnału dźwiękowego, chcę tylko trzy sygnały dźwiękowe, więc umieszczam je na pierwszej, trzeciej i piątej diodzie LED

digitalWrite (10, HIGH); // włącz diodę LED (HIGH to poziom napięcia)

delay (Blink_Time); // poczekaj na czas migania

digitalWrite (10, LOW); // wyłącz diodę, obniżając napięcie

// trzecia dioda LED

ton (7, Buzz_Tone); //brzęczyk

digitalWrite (11, HIGH); // włącz diodę LED (HIGH to poziom napięcia)

delay (Blink_Time); // poczekaj na czas migania

digitalWrite (11, LOW); // wyłącz diodę, obniżając napięcie

noTone (7);

// czwarta dioda LED

digitalWrite (12, HIGH); // włącz diodę LED (HIGH to poziom napięcia)

delay (Blink_Time); // poczekaj na czas migania

digitalWrite (12, LOW); // wyłącz diodę, obniżając napięcie

// piąta dioda LED

ton (7, Buzz_Tone);

digitalWrite (13, HIGH); // włącz diodę LED (HIGH to poziom napięcia)

delay (Blink_Time); // poczekaj na czas migania

digitalWrite (13, LOW); // wyłącz diodę, obniżając napięcie

noTone (7);

delay (5 * Blink_Time); // pauza między seriami migających diod LED + sygnałów dźwiękowych

}