Sensor Lampu Arduino Dengan Buzzer dan LED Berkedip: 5 Langkah

Sensor Lampu Arduino Dengan Buzzer dan LED Berkedip: 5 Langkah

Isi kandungan:

Anonim

Ini adalah projek yang cantik yang saya buat dengan anak perempuan saya. Produk akhir adalah menyeronokkan dan memberikan anda sesuatu yang sejuk untuk dibawa ke sekolah untuk menunjukkan-dan-memberitahu atau menunjukkan saudara-mara anda apabila mereka datang untuk melawat!

Ini gabungan tiga projek Arduino kecil yang lain:

- Sensor cahaya menggunakan photocell

- menggunakan puzzler piezo untuk membuat pengait dengan nada dan kelajuan berubah dan

- berkelip urutan LED dengan kelajuan berubah-ubah

Produk akhir adalah sensor cahaya dengan siri LED yang (a) berkedip dengan lebih cepat dengan lebih banyak cahaya (dan lebih perlahan dengan kurang) dan (b) bip lebih cepat dan pada padang yang lebih tinggi dengan lebih ringan (dan lebih perlahan dan rendah padang dengan kurang.

Apabila saya mencipta rajah papan roti menggunakan Fritzing saya membuat beberapa pelarasan dari papan roti asal supaya jelas untuk memvisualisasikan wayar dan sebagainya.

Apa yang anda perlukan:

- papan roti

- Arduino Uno

- 5x LED

- sel fotovoltaik

- penceramah piezo

- 5x 220 ohm perintang (untuk LED)

- 500 ohm perintang (untuk sel photovoltaic)

- 100 ohm perintang (untuk buzzer piezo)

Untuk menjadi jujur, saya telah memilih perintang ini berdasarkan kerja yang dilakukan oleh orang lain dan projek lain yang saya dapati dalam talian. Saya yakin terdapat sains dan formula di belakangnya tetapi anda tidak akan dapati dalam Instructable ini, maaf.

Bekalan:

Langkah 1: Langkah 1 - Wayar LED Pertama

Mulakan dengan asas-asas: sambungkan papan ke GND dan pin 5V dan pastikan anda mempunyai jumper yang menyambungkan rel positif dan negatif ke sisi lain papan roti, menjadikannya "aktif" dan membantu anda membina litar anda tanpa melintasi papan selancar terlalu banyak.

Kami ingin mencipta urutan LED untuk dikendalikan secara bebas.

Mari sambungkan LED pertama. Sisi positif LED menyambung ke pin 13. Sisi negatif LED anda akan menyambung dengan perintang 220 ohm, yang kemudiannya disambungkan ke GND.

Langkah 2: Langkah 2 - Kawat 4 LED Lain

Kini wayar empat lagi LED berikut pelan yang sama: sisi positif masing-masing untuk pin 12, 11, 10 dan 9 masing-masing, dan sisi negatif ke tanah, menggunakan setiap perintang 220 ohm.

LED siap: anda dapat mengawalnya secara berasingan, masing-masing melalui PIN yang berasingan.

Langkah 3: Langkah 3 - Kawat Piezo

Kami mahu sensor kami menjadi bip. Untuk itu kita akan menggunakan buzzer Piezo, jadi mari kita kabelnya.

Kawat negatif menyambung kepada GND dan dawai positif menghubungkan pertama kepada 100 ohm perintang, daripada pin 7. Seperti yang saya katakan sebelumnya, perintang 100 ohm disarankan dalam projek-projek lain yang saya dapati dalam talian.

Langkah 4: Langkah 4 - Wire Cell Photovoltaic

Sel photovoltaic adalah penghalang mudah yang menjadi lebih konduktif apabila terdedah kepada cahaya. Jadi, dengan lampu sifar ia menyekat 100% arus, dan dengan cahaya penuh ia membolehkan arus mengalir melalui. Cara Arduino "membaca" ini ialah cahaya sifar mengembalikan nilai 0 dan cahaya penuh mengembalikan nilai 1024.

Sel photovoltaic tidak mempunyai sisi negatif dan positif. Jadi anda akan menyambungkan satu sisi ke kereta api positif papan. Pendawaian sisi negatif sedikit rumit: anda akan menyambungkannya kedua-duanya (a) ke rel negatif menggunakan perintang 500 ohm dan (b) terus ke pin A0.

Litar sudah siap. Mari lihat kod itu.

Langkah 5: Langkah 5 - Kod

Anda akan mendapati kod penuh di bawah untuk memotong dan tampal. Ia mempunyai // komen supaya anda dapat memahami apa yang berlaku di mana.

Inilah yang sedang dilakukan oleh kod:

1 - Sensor membaca tahap cahaya, mengukurnya dari 0 hingga 1024

2 - Kami "menterjemahkan" bacaan ini ke dalam instruksi untuk bunyi buzzer untuk bip dan LED untuk berkedip.

3 - Untuk LED, kami menerjemahkan bacaan cahaya ke dalam milisaat berkelip. Kurang cahaya, lambat ia berkedip. Melakukan beberapa ujian, walaupun cahaya itu kuat, ia tidak melebihi 700 atau 800 (sukar untuk sampai ke 1024) jadi saya menggunakan 700 sebagai tahap cahaya "atas" saya. Kerana cara fungsi MAP berfungsi, jika cahaya mencapai melebihi 700, ia akan menjadikan masa sekejap menjadi nombor negatif - dan keseluruhan perkara itu terhempas. Jadi saya membuat peraturan bahawa Blink_Time tidak boleh lebih pendek daripada 20 milisaat.

4 - Lampu LED dalam urutan (iaitu, yang pertama bertukar, maka apabila ia mematikan seterusnya seterusnya dan lain-lain)

5 - Untuk buzzer, kami menerjemahkan bacaan cahaya (0 - 1024) ke hertz (120 hingga 1500), jadi lebih ringan, semakin tinggi padang.

6 - Buzzer berbunyi bip pada waktu yang sama seperti LED pertama, ketiga dan kelima, (dan untuk jangka waktu jualan) kemudian berhenti sementara jeda LED. Ini mewujudkan kesan berdenyut, cahaya dan bunyi dalam irama yang sama.

Inilah dia. Nikmatinya!

Kod:

/ // Sensor cahaya dengan bip dan urutan leds seperti lapangan terbang

// ints untuk berkelip

int Blink_Time = 20; / / membuat pembolehubah ini untuk digunakan untuk jangka waktu berkedut dan selang

int Light_Level = 0; / / membuat pembolehubah ini untuk digunakan untuk tahap cahaya

int Light_Pin = A0; // pin 0 akan digunakan untuk photostel

// ints untuk buzzer

int Buzz_Tone = 300; // mencipta pemboleh ubah ini untuk nada buzzer

int Buzz_Tone_Max = 1500; // max herz untuk nada buzz

int Buzz_Tone_Min = 120; // min herz untuk nada buzz

void setup () {

pinMode (9, OUTPUT); / / memulakan huruf 9 - 13 sebagai output bagi yang diketuai

pinMode (10, OUTPUT);

pinMode (11, OUTPUT);

pinMode (12, OUTPUT);

pinMode (13, OUTPUT);

pinMode (7, OUTPUT); // Set buzzer - pin 7 sebagai output untuk buzzer

Serial.begin (9600); Serial.println ("Siap"); // Buka port bersiri pada 9600 baud untuk memantau kelakuan pembolehubah

}

kekosongan gelung () {

Light_Level = analogRead (Light_Pin); // membaca tahap cahaya

Blink_Time = peta (Light_Level, 0, 700, 300, 1); / / menetapkan waktu berkedip mengikut tahap cahaya (lebih ringan, lebih laju)

jika (Blink_Time <= 20) {Blink_Time = 20;} // menetapkan had minimum untuk masa sekejap. Kerana tahap cahaya boleh melebihi 700, fungsi pemetaan boleh menyebabkan masa kedip-kedip menjadi negatif, di mana program membeku.

/ / menetapkan nada buzz mengikut tahap cahaya (lebih banyak cahaya, lebih banyak, padang yang lebih tinggi)

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

// mencetak semua pembolehubah dalam monitor bersiri untuk anda melihat apa yang sedang berlaku

Serial.print ("Light level =");

Serial.print (Light_Level);

Serial.print ("time Blink =");

Serial.print (Blink_Time);

Serial.print ("Buzz_Tone =");

Serial.print (Buzz_Tone);

Serial.println ("");

/ / LED pertama

nada (7, Buzz_Tone); / // memulakan bip pada masa yang sama yang dipimpin pertama menghidupkan

digitalWrite (9, TINGGI); / / putar LED pada (TINGGI adalah tahap voltan)

kelewatan (Blink_Time); / tunggu untuk waktu sekejap

digitalWrite (9, LOW); // Matikan lampu LED dengan membuat voltan LOW

noTone (7); / / berhenti bip

// LED kedua

// tidak ada bip di sini, saya hanya mahu tiga bip jadi saya meletakkannya pada LED pertama, ketiga dan kelima

digitalWrite (10, TINGGI); / / putar LED pada (TINGGI adalah tahap voltan)

kelewatan (Blink_Time); / tunggu untuk waktu sekejap

digitalWrite (10, LOW); // Matikan lampu LED dengan membuat voltan LOW

// LED ketiga

nada (7, Buzz_Tone); // beep

digitalWrite (11, TINGGI); / / putar LED pada (TINGGI adalah tahap voltan)

kelewatan (Blink_Time); / tunggu untuk waktu sekejap

digitalWrite (11, LOW); // Matikan lampu LED dengan membuat voltan LOW

noTone (7);

// LED keempat

digitalWrite (12, TINGGI); / / putar LED pada (TINGGI adalah tahap voltan)

kelewatan (Blink_Time); / tunggu untuk waktu sekejap

digitalWrite (12, LOW); // Matikan lampu LED dengan membuat voltan LOW

/ // kelima LED

nada (7, Buzz_Tone);

digitalWrite (13, TINGGI); / / putar LED pada (TINGGI adalah tahap voltan)

kelewatan (Blink_Time); / tunggu untuk waktu sekejap

digitalWrite (13, LOW); // Matikan lampu LED dengan membuat voltan LOW

noTone (7);

kelewatan (5 * Blink_Time); / jeda antara siri LED berkelip + Beeps

}