Isi kandungan:

Moodlamp RGB berkuasa buatan Arduino: 7 Langkah
Moodlamp RGB berkuasa buatan Arduino: 7 Langkah

Video: Moodlamp RGB berkuasa buatan Arduino: 7 Langkah

Video: Moodlamp RGB berkuasa buatan Arduino: 7 Langkah
Video: 3 Bocah Terlindas Truk Saat Selfie Di Atas Motor 2024, Julai
Anonim
Moodlamp RGB berkuasa buatan Arduino
Moodlamp RGB berkuasa buatan Arduino
Moodlamp RGB berkuasa buatan Arduino
Moodlamp RGB berkuasa buatan Arduino

Instruksional ini dibahagikan kepada 5 bahagian: - Merancang pembinaan (Langkah 1) - Teduhan buatan tangan (Langkah 2 + 3) - Litar elektronik untuk memandu LED 3W dengan pengawal ATmega8 (Langkah4) - Kod (Langkah 5) - Cara mendapatkannya berdiri sendiri (kilat bootloader Arduino dengan PonyProg dan bakar lakarannya) (Langkah6) tidak lama lagi Vid: Beberapa Tayangan

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: Moodlamp Pic2: LED 3W yang hebat

Langkah 1: Merancang Pembinaan:

Merancang Pembinaan
Merancang Pembinaan
Merancang Pembinaan
Merancang Pembinaan

Saya suka membuat konsep hanya pada satu helaian kertas. Pada helaian pertama anda melihat beberapa idea awal. Saya memilih reka bentuk kanan bawah. Halaman kedua menunjukkan beberapa perincian untuk pembinaan. Ukuran adalah eksperimen seperti setiap kali, tetapi ok untuk saya;-) Pemikiran perkakasan saya adalah: - Bolehkah saya mengendalikan bahan? - Adakah cahaya akan bersinar melalui tempat teduh? - Berapa bahagian yang harus dimiliki? - Berapa banyak tombol dan periuk yang saya perlukan untuk antara muka yang mudah? Fikiran perisian saya adalah: Berapa banyak fungsi yang harus ada pada lampu? - RGB automatik memudar dengan kelajuan yang dapat diubah - Penyesuaian warna manual - Putih dengan kecerahan boleh laras

Langkah 2: Warna Buatan Tangan

Warna Buatan Tangan
Warna Buatan Tangan
Warna Buatan Tangan
Warna Buatan Tangan
Warna Buatan Tangan
Warna Buatan Tangan

Mengumpulkan bahan: Tempat teduh: Saya menjumpai kepingan plastik 3 kaki x 3 kaki dari kilang 30 kilang (Pic1-3). Gunakan pisau tajam untuk memotongnya. Saya membekukan plastik menggunakan kertas pasir (Pic4-6). Untuk dapatkan silinder licin yang saya pasangkan semuanya setelah menggerudi lubang yang betul (Pic7-8). Pasangkan warna plastik pada penyokong tembaga berulir. Ia kelihatan baik dan agak mudah untuk dikendalikan. Saya menggerudi dan mengetuk lubang untuk memadankan bar berulir 1/8 (Pic9-10). Sementara itu, saya membuat pendingin untuk menyejukkan LED 3W dan mempunyai asas yang kukuh Kerana tidak mendapat terlalu banyak warna dari batang, saya membina sangkar kecil dari batang kimpalan dengan kacang M8 di atas (Pic12). Setelah selesai saya mengumpulkan semua. Skru dan mur kecil sedikit sukar, tetapi 30 minit kemudian saya menyelesaikannya.

Langkah 3: Warna Buatan Tangan

Warna Buatan Tangan
Warna Buatan Tangan
Warna Buatan Tangan
Warna Buatan Tangan
Warna Buatan Tangan
Warna Buatan Tangan

Pangkalannya: Cakera itu dimasukkan ke dalam mesin bubut agar licin dan bulat. Selepas itu, saya mengotorkannya dengan noda kayu mahoni supaya pinus kelihatan baik. Apa seterusnya?!? Saya memutuskan untuk membuat pangkalan menggunakan yang sama plastik buram sebagai bayangan, dan lampu latar dengan RGB microLED (Pic5). Tombol: Saya membuat butang dari sekeping kayu mahoni dan tombol dari potongan kayu kacang.

Langkah 4: Litar Elektrik:

Litar Elektrik
Litar Elektrik
Litar Elektrik
Litar Elektrik
Litar Elektrik
Litar Elektrik

Pada gambar pertama, anda melihat skema saya. Dan inilah video lain: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Langkah 5: Kodnya:

Kodnya
Kodnya
Kodnya
Kodnya
Kodnya
Kodnya

Pada gambar anda melihat proses saya dengan Arduino. Mula-mula saya mencuba ProtoShield buatan sendiri, pek bateri dan beberapa jenis LED. Saya memulakan dengan "Spooky Projects" dan "BionicArduino" oleh TodEKurt beberapa bulan yang lalu.https://todbot.com/blog/spookyarduino/Kod saya adalah hanya gabungan rumit kod projeknya. "RGBMoodlight", "RGBPotMixer" dan beberapa sambungan. Tiga analog-in dan.one digital-in sebagai mod beralih (Terima kasih kepada Ju. untuk rutin gangguan:): LED disambungkan ke D9, D10 dan D11 yang menyokong PulseWithModulation. Sekiranya anda suka, saya boleh menerbitkan lakaran, tetapi ia adalah gabungan yang sangat telanjang dari kedua-dua kod hebat ini. Inilah kod lampu saya yang asli. Ia kelihatan agak tidak kemas, kerana ia adalah saya peringkat awal dalam pengaturcaraan … Tetapi jika anda menyalinnya, ia semestinya berfungsi dengan baik. Terdapat titik-titik baik, seperti "PotColorMixer", "RGBfadingFunction" dan Interrupt-Routine untuk mod-switch./* nejo June2008

Kod untuk "Moodlamp" saya, berdasarkan "dimmingLEDs" oleh Clay Shirky

* nejo Sep2008

  • Kod akhir untuk lampu isyarat dengan pertukaran mod interrupt, dail cepat analog untuk perubahan warna RGB dan perubahan warna RGB.
  • Fungsi redup berfungsi hanya untuk warna putih

* nejo Oktober2008

  • Sambungan suara untuk lampu isyarat:
  • Mikrofon kondensor dengan Amp LM368 kecil, alat pendengar dan penapis lulus rendah-RC
  • dengan inputInput analog lain saya menggunakan fungsi RGBPotMixer untuk menukar warna dengan mendapatkan isyarat mikrofon.

* * * Kod untuk 3 LED silang, merah, hijau dan biru, atau satu LED tiga warna, menggunakan PWM

  • Program ini perlahan-lahan memudar dari merah ke hijau, hijau ke biru, dan biru ke merah
  • Kod debugging menggunakan Arduino 0004, kerana ia menggunakan fungsi gaya Serial.begin () - baru
  • asalnya "dimmingLEDs" oleh Clay Shirky

*

  • AnalogRead diaktifkan pada Pin A0 untuk mengubah kelajuan pudar RGB
  • AnalogRead diaktifkan pada Pin A2 untuk mengubah warna hueRGB

* * * / # include // Outputint ledPin = 13; // controlPin untuk debuggingint redPin = 9; // LED Merah, disambungkan ke pin digital 9int greenPin = 10; // LED hijau, disambungkan ke pin digital 10int bluePin = 11; // LED Biru, disambungkan ke pin digital 11int dimredPin = 3; // Pin untuk nilai peredupan analog, disambungkan ke transistor driverint dimgreenPin = 5; int dimbluePin = 6; // Inputint switchPin = 2; // suis disambungkan ke pin D2int val = 0; // pemboleh ubah untuk membaca pin statusint buttonState; // pemboleh ubah untuk menahan butang keadaan butangTekanan = 0; // 3 tekan untuk pergi! Int potPin0 = 0; // Pot untuk menyesuaikan kelewatan antara memudar di Moodlamp; int potPin2 = 2; // Potensiometer output untuk menukar warna colorue potVal = 0; // Pemboleh ubah untuk menyimpan input dari potensiometerint maxVal = 0; // nilai untuk menyimpan faktor peredupan lalai adalah 255, jika tidak ada Pot yang disambungkan; dimPin = 4; // Pot disambungkan ke A4 untuk meredupkan kecerahan // Pemboleh ubah programint redVal = 255; // Pemboleh ubah untuk menyimpan nilai yang akan dihantar ke pinsint greenVal = 1; // Nilai awal adalah Merah penuh, Hijau dan Biru offint blueVal = 1; int i = 0; // Loop counter int waiting; // = 15; // Kelewatan 50ms (.05 saat); pendekkan untuk fadesint yang lebih cepat k = 0; // nilai untuk kawalanLED dalam fungsi berkedip DEBUG = 0; // Kaunter DEBUG; jika ditetapkan ke 1, akan menulis semula nilai melalui serialint LCD = 0; // Kaunter LCD; jika ditetapkan ke 1, akan menulis kembali nilai melalui penyediaan serialvoid () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // menetapkan pin sebagai output pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // menetapkan pin sebagai output pinMode (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Tetapkan pin suis sebagai input attachInterrupt (0, isr0, RISING); if (DEBUG) {// Sekiranya kita ingin melihat nilai pin untuk debug… Serial.begin (9600); // … sediakan siri ouput pada gaya 0004}} // Gelung programvoid utama () {if (buttonPresses == 0) {Moodlamp (); // memanggil fungsi Moodlight} jika (buttonPresses == 1) {RGBPotMixer (); // memanggil fungsi campuran manuel} if (buttonPresses == 2) {White (); // Semuanya berwarna putih di sini} jika (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); // Putih (); Pantau (); redup ();} batal Monitor () {// Hantar Ke Negeri ke monitor jika (DEBUG) {// Sekiranya kita ingin membaca output DEBUG + = 1; // Tingkatkan penghitung DEBUG jika (DEBUG> 10) {// Cetak setiap 10 gelung DEBUG = 1; // Tetapkan semula kaunter Serial.print (i); // Perintah bersiri dalam gaya 0004. Serial.print ("\ t"); // Cetak tab Serial.print ("R:"); // Nyatakan bahawa output adalah nilai merah Serial.print (redVal); // Cetak warna merah Serial.print ("\ t"); // Cetak tab Serial.print ("G:"); // Ulangi untuk hijau dan biru … Serial.print (greenVal); Serial.print ("\ t"); Cetakan bersiri ("B:"); Serial.print (blueVal); // println, diakhiri dengan Serial.print pengembalian kereta ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, diakhiri dengan Serial.print pengembalian kereta ("\ t"); Serial.print ("tunggu:"); Cetakan bersiri (tunggu); // menulis nilai potPin0 ke monitor Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // menulis nilai potPin0 ke monitor Serial.print ("\ t"); Serial.print ("butangState:"); Serial.print (butangState); // menuliskan nilai potPin0 ke monitor Serial.print ("\ t"); Serial.print ("butang Tekan:"); Serial.println (butang Tekan); // menulis nilai butang Tekan ke monitor}}} kekosongan redup () // Fungsi untuk meredup Putih // mungkin kemudian untuk semua Mod {maxVal = analogRead (dimPin); maxVal / = 4; // Julat analog dari 0..1024 terlalu banyak untuk meredupkan nilai analogWrite 0..255 (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} batal Moodlamp () {tunggu = analogRead (potPin0); // cari nilai dari potPin0; // jika tidak ada Pot yang disambungkan: tunggu 255 i + = 1; // Pembilang kenaikan // i = i - maxVal; if (i <255) // Fasa pertama pudar {redVal - = 1; // Merah turun hijauVal + = 1; // Hijau ke atas biruVal = 1; // Biru rendah} lain jika (i <509) // Fasa kedua pudar {redVal = 1; // Merah rendah hijauVal - = 1; // Hijau turun biruVal + = 1; // Biru ke atas} lain jika (i <763) // Fasa ketiga pudar {redVal + = 1; // Merahkan hijauVal = 1; // Hijau lo2 blueVal - = 1; // Biru bawah} lain // Tetapkan semula kaunter, dan mulakan pudar lagi {i = 1; } // kita melakukan "255-redVal" dan bukan hanya "redVal" kerana // LED disambungkan hingga + 5V dan bukannya Gnd analogWrite (redPin, 255 - redVal); // Tulis nilai semasa ke pin LED analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); / * dimredVal = min (redVal - maxVal, 255); // redup dimredVal = max (redVal - maxVal, 0); dimgreenVal = min (greenVal - maxVal, 255); dimgreenVal = max (greenVal - maxVal, 0); dimblueVal = min (blueVal - maxVal, 255); dimblueVal = max (blueVal - maxVal, 0); analogWrite (redPin, 255 - dimredVal); // Tuliskan nilai semasa ke pin LED analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / tunggu / = 4; kelewatan (tunggu); // Jeda untuk 'tunggu' milisaat sebelum meneruskan gelung} batal RGBPotMixer () {potVal = analogRead (potPin2); // baca nilai potensiometer pada pin input potVal = potVal / 4; // tukar dari 0-1023 ke 0-255 hue_to_rgb (potVal); // perlakukan potVal sebagai rona dan ubah menjadi rgb vals // "255-" adalah kerana kita mempunyai LED anode biasa, bukan analog-katod biasaWrite (redPin, 255-redVal); // Tuliskan nilai ke pin LED analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } batal Putih () {analogWrite (redPin, maxVal); // Tuliskan nilai ke pin LED analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); } / *

  • Diberi pemboleh ubah hue 'h', yang berkisar antara 0-252,
  • tetapkan nilai warna RGB dengan tepat.
  • Mengandaikan Ketepuan maksimum & Nilai maksimum (kecerahan)
  • Melakukan matematik nombor bulat, tanpa titik terapung.

* / batal hue_to_rgb (byte hue) {if (hue> 252) hue = 252; // kembali ke 252 !! nejo byte hd = rona / 42; // 36 == 252/7, 252 == H_MAX bait hi = hd% 6; // memberikan 0-5 bait f = hue% 42; bait fs = f * 6; tukar (hi) {kes 0: redVal = 252; greenVal = fs; blueVal = 0; rehat; kes 1: redVal = 252-fs; greenVal = 252; blueVal = 0; rehat; kes 2: redVal = 0; greenVal = 252; blueVal = fs; rehat; kes 3: redVal = 0; greenVal = 252-fs; blueVal = 252; rehat; kes 4: redVal = fs; greenVal = 0; blueVal = 252; rehat; kes 5: redVal = 252; greenVal = 0; blueVal = 252-fs; rehat; }} batal isr0 () {Serial.println ("\ n / n tidak berfungsi / n"); buttonState = digitalRead (switchPin); // baca kelewatan keadaan awalMikrodetik (100000); // if (val! = buttonState) {// keadaan butang telah berubah! // if (buttonState == TINGGI) {// periksa apakah butang sekarang ditekan butang Tekan ++; //} // val = buttonState; // simpan keadaan baru dalam pemboleh ubah kami jika (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Peringkat seterusnya adalah pemacu transistor. Saya menggunakan 3 transistor PNP dengan arus maksimum pada 3Ampere. Setelah arus maju dan voltan diatur, LEDemitter berfungsi dengan baik dengan intensiti penuh.

Langkah 6: Dapatkannya Sendiri Dengan Bootloader yang dibakar PonyProg

Dapatkannya Berdiri Dengan Bootloader yang dibakar PonyProg
Dapatkannya Berdiri Dengan Bootloader yang dibakar PonyProg

Cara menggunakan port paralell anda untuk membakar bootloader arduino pada ATmega168 atau ATmega8 untuk menggunakan cip kosong murah dengan persekitaran arduino.com tidak lama lagi….. mungkin pada arahan yang terpisah Berikut juga petunjuk yang baik untuk menggunakan cip mandiri: /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Langkah 7: Jadi Itulah Arduino Moodlamp saya

Jadi Itulah Arduino Moodlamp saya
Jadi Itulah Arduino Moodlamp saya

Sekiranya anda menyukainya, sila nilaikan saya.

Disyorkan: