Lampu malam yang dijadwalkan

gambar

Dengan kelahiran seorang anak, muncul pertanyaan tentang lampu malam. Di suatu tempat mereka membaca bahwa perlu untuk tidur nyenyak. Cepat digunakan untuk tidur dengan cahaya redup. Sangat nyaman untuk bangun dari jeritan dan lolongan di tengah malam dan melihat apa yang dikeluhkan bayi (jika Anda bisa mengerti). Selain itu, dalam cahaya redup, Anda dapat bergoyang, membalik dan terus tidur.

Awalnya, sampel uji lampu dibuat dari sepotong strip LED kuning (12 volt), yang digunakan selama 1,5 tahun.


gambar

Selain desain yang tipis, setiap pagi mulai mengganggu untuk melepas unit catu daya dari stopkontak. Saya bangun di pagi hari, cukup cahaya memasuki ruangan dari jalan. Dengan demikian, lampu terbuang sia-sia selama beberapa jam setiap hari. Sekali lagi, dalam setengah tahun, pengontrol pita RGB Cina melupakan pengaturan saat ini dan perlu mencari panel kontrol untuk mengingatkannya cara bekerja. Saya memutuskan untuk membuat lampu baru dengan shutdown otomatis, dengan penyesuaian warna menggunakan potensiometer dan radio.

Cepat membuat prototipe berdasarkan arduino nano. Fungsi dasar debug.

gambar

Saya mengambil kesempatan ini untuk mencoba Fritzing. Saya tidak menyukainya, tetapi gambarnya jelas dan "lucu". Rupanya tidak ada yang baru ditemukan.

gambar

Mengganti "nano" dengan modul yang sedikit diketahui, kompatibel dengan Arduino dengan transceiver radio built-in (pengontrol 8-bit, kinerja, dan isian sebanding dengan "Nana"). Di rumah, saya sudah memiliki satu perangkat yang beroperasi pada frekuensi 868 MHz, ini akan menjadi yang kedua. Spesifikasi singkat dari situs web pabrikan:

Karakteristik singkat
gambar


gambar

Saya tidak melihat masalah besar melakukan hal yang sama pada ESP8266 (ada kolektor firmware online yang nyaman untuk skrip pada LUA). Sedikit lebih rumit pada Bluetooth (untuk menginstal modul HM-10 Anda membutuhkan programmer yang murah, lingkungan pengembangan dan pemahaman protokol). Meskipun Anda dapat menggunakan modul Bluetooth dengan Arduino. Tapi saya menggunakan ZUNo, karena telah lama dan menunggu saya, dan seluruh infrastruktur siap untuk menghubungkan dan mengelola perangkat serupa ke dalam satu jaringan (saya berbicara tentang pengontrol jaringan rumah pintar).
Untuk semua kaki yang digunakan pada arduino, analog ditemukan dalam modul.

gambar

Untuk bekerja dengan modul dari Arduino IDE, Anda perlu mengkonfigurasinya (deskripsi pengaturan ada di situs web produsen). Tidak ada keajaiban yang terjadi. Ketika mencoba mengkompilasi, saya mendapatkan kesalahan "tidak mendukung" untuk "pernyataan dengan kolom kosong atau tanpa badan!" Saya menggunakan perpustakaan Adafruit_NeoPixel. Saya naik ke dalamnya, melihat berapa banyak siklus di dalamnya dan menutupnya. Saya harus pergi lagi ke situs web produsen dan mencari contoh bekerja dengan LED (sebuah contoh dengan cepat ditemukan). Jadi saya bukan orang pertama yang mengalami masalah serupa.

Agar lampu ini dikendalikan oleh radio dalam kode Arduino, Anda perlu menambahkan makro dan mengimplementasikan beberapa fungsi:

ZUNO_SETUP_CHANNELS( ZUNO_SWITCH_MULTILEVEL(getRed, setRed), ZUNO_SWITCH_MULTILEVEL(getGreen, setGreen), ZUNO_SWITCH_MULTILEVEL(getBlue, setBlue), ZUNO_SWITCH_BINARY(switch_getter, switch_setter) ); 

Makro ini menjelaskan perangkat Z-Wave dengan tiga sakelar multi-level (kontrol RGB) dan satu sakelar sederhana (on / off sederhana).

Saya memiliki implementasi fungsi yang paling sederhana (seperti pada contoh di situs web pabrikan). Anda dapat melihatnya di daftar terlampir.

Pemilihan kasus


Saya sudah punya kasing. Disegel dengan penutup transparan . Di bawah tutupnya pas 25 LED. Tes berhasil. Lampu memiliki margin kecerahan yang besar untuk kamar saya. Penutup case ini transparan, jadi saya memutuskan untuk meredakan sedikit cahaya.

gambar

Manik-manik berwarna sketsa dan kubus akrilik, diisi dengan epoksi transparan. Cat dari manik-manik berwarna larut di bawah pengaruh resin.

gambar

Yang paling menarik adalah tutup dari rumah yang tertutup rapat bocor dan hampir semua resin bocor. Saya tidak tahu di mana saya berhasil mengenai tutupnya, tetapi setelah pengeringan retakan terlihat jelas.

gambar

Papan sirkuit tercetak dibuat dengan metode fotoresistif.

gambar

gambar

Setelah pengawetan dan pengerjaan mesin

gambar

Modul dengan mikrokontroler digantikan oleh prototipe-nya, yang tergeletak di lemari (karena itu tidak disayangkan, tetapi ZUNo perlu dilindungi). Versi pertama ZUNo, tetapi dimensinya lebih besar dan lebih buruk dari antena, dan Anda belum dapat membelinya. Tes kurang lebih berhasil. Segmen terakhir harus disolder ulang. Awalnya disolder ke sisi yang salah. Dan sesuaikan jumlah LED dalam firmware.

gambar

gambar

Inilah yang terjadi:

gambar

Kontrol radio


Jendela utama dengan saluran kontrol lampu

gambar

Sesuaikan kecerahan satu saluran strip LED

gambar

Mengatur mematikan lampu malam di pagi hari

gambar

Kesimpulan


Perangkat berfungsi. Ini kompak dan rapi. Ini didukung oleh pengisian daya ponsel.
Dari masalah yang diperhatikan:

  • selama perakitan, sobek sebagian trek pada resistor variabel, jadi dalam mode manual Anda hanya dapat mengontrol satu saluran.
  • hanya 20 dari 25 LED yang berfungsi normal. Saya punya banyak hal, jadi saya kemungkinan besar akan membiarkannya mengidentifikasi kekurangan yang lebih serius.

Sketsa lampu malam
 #include "ZUNO_NeoPixel.h" #define MAX_PIXELS 20 // NB! Z-Uno can not control more than 25 WS2811 without harming RF communications #define PIXEL_SIZE 3 // Three colors per pixel #define BUFF_SIZE (MAX_PIXELS * PIXEL_SIZE) byte pixel_buff[BUFF_SIZE]; NeoPixel pixels(pixel_buff, BUFF_SIZE); #define B_PRESSED 1 #define BUTTON_PIN 1 // Digital IO pin connected to the button. This will be #define DEF_RED 30 #define DEF_GREEN 20 byte red = DEF_RED; byte green = DEF_GREEN; byte blue = 0; #define POWER_ON 1 #define POWER_OFF 0 byte light_power = POWER_ON; byte last_light_power = POWER_OFF; ZUNO_SETUP_CHANNELS( ZUNO_SWITCH_MULTILEVEL(getRed, setRed), ZUNO_SWITCH_MULTILEVEL(getGreen, setGreen), ZUNO_SWITCH_MULTILEVEL(getBlue, setBlue), ZUNO_SWITCH_BINARY(switch_getter, switch_setter) ); void switch_setter(byte value) { Serial.println("switch"); Serial.print("value= "); Serial.println(value); if(value > 1) light_power = POWER_ON; else light_power = POWER_OFF; } byte switch_getter() { return light_power; } int getRed() { return red/2.56; } int getGreen() { return green/2.56; } int getBlue() { return blue/2.56; } void setRed(byte value) { red = value * 2,56; for(uint8_t i = 0; i < MAX_PIXELS; i++) pixels.setPixelColor(i, pixels.Color(red, green, blue)); pixels.show(); Serial.print("set red = "); Serial.println(value); } void setGreen(byte value) { green = value * 2,56; for(uint8_t i = 0; i < MAX_PIXELS; i++) pixels.setPixelColor(i, pixels.Color(red, green, blue)); pixels.show(); Serial.print("set red = "); Serial.println(value); } void setBlue(byte value) { blue = value * 2,56; for(uint8_t i = 0; i < MAX_PIXELS; i++) pixels.setPixelColor(i, pixels.Color(red, green, blue)); pixels.show(); Serial.print("set red = "); Serial.println(value); } void set_LEDS() { for(uint8_t i = 0; i < MAX_PIXELS; i++) pixels.setPixelColor(i, pixels.Color(red, green, blue)); pixels.show(); } void read_resistors() { red = (analogRead(A0) >> 2) & 0xff; green = (analogRead(A1) >> 2) & 0xff; blue = (analogRead(A3) >> 2) & 0xff; Serial.print(red); Serial.print(" "); Serial.print(green); Serial.print(" "); Serial.print(blue); Serial.print(" "); Serial.println(); set_LEDS(); } #define DEBOUNCE_ACK 10 byte check_button() { static bool oldState = HIGH; byte debounce_cnt = 0; static byte ret = 0; if(digitalRead(BUTTON_PIN) == LOW) { if(ret != B_PRESSED) while(digitalRead(BUTTON_PIN) == LOW) { if(debounce_cnt == DEBOUNCE_ACK) { ret = B_PRESSED; break; } else debounce_cnt++; delay(10); } } else { debounce_cnt = 0; ret = 0; } return ret; } void setup() { Serial.begin(9600); pixels.begin(); pixels.clear(); pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { if(check_button() == B_PRESSED) read_resistors(); if(last_light_power != light_power) { Serial.println("set power"); if(light_power == POWER_OFF) { Serial.println("power off"); red = 0; green = 0; blue = 0; } else { Serial.println("power on"); red = DEF_RED; green = DEF_GREEN; blue = 0; } set_LEDS(); last_light_power = light_power; } } 

Source: https://habr.com/ru/post/id433194/


All Articles