Geplantes Nachtlicht

Bild

Mit der Geburt eines Kindes stellte sich die Frage nach einer Nachtlampe. Irgendwo lesen sie, dass es für einen ruhigen Schlaf notwendig ist. Schnell verwendet, um mit einem schwachen Licht zu schlafen. Es ist sehr praktisch, mitten in der Nacht von Schreien und Heulen aufzuwachen und zu sehen, worüber sich das Baby beschwert (wenn Sie verstehen können). Bei schwachem Licht können Sie auch rocken, sich umdrehen und weiter schlafen.

Zunächst wurde eine Testprobe der Lampe aus einem Stück gelbem LED-Streifen (12 Volt) hergestellt, der 1,5 Jahre lang verwendet wurde.


Bild

Zusätzlich zu dem fadenscheinigen Design wurde es jeden Morgen ärgerlich, das Netzteil aus der Lampensteckdose zu ziehen. Ich stehe morgens auf, genug Licht kommt von der Straße in den Raum. Somit wird die Lampe jeden Tag mehrere Stunden lang verschwendet. In einem halben Jahr vergaß der chinesische RGB-Bandcontroller erneut die aktuelle Einstellung und es musste nach einem Bedienfeld gesucht werden, um ihn an die Arbeitsweise zu erinnern. Ich entschied mich für eine neue Lampe mit automatischer Abschaltung und Farbanpassung sowohl mit Potentiometern als auch mit Radio.

Schneller Zusammenbau eines Prototyps basierend auf Arduino Nano. Grundfunktionalität debuggen.

Bild

Ich nutzte diese Gelegenheit, um Fritzing auszuprobieren. Es hat mir nicht gefallen, aber die Bilder sind klar und "lustig". Anscheinend wurde nichts Neues erfunden.

Bild

"Nano" wurde durch ein wenig bekanntes, Arduino-kompatibles Modul mit integriertem Funk-Transceiver ersetzt (8-Bit-Controller, Leistung und Füllung sind vergleichbar mit "Nana"). Zu Hause habe ich bereits ein Gerät, das mit einer Frequenz von 868 MHz arbeitet. Dies ist das zweite. Kurze Angaben auf der Website des Herstellers:

Kurze Eigenschaften
Bild


Bild

Ich sehe keine großen Probleme bei ESP8266 (es gibt einen praktischen Online-Firmware-Collector für Skripte auf LUA). Etwas komplizierter bei Bluetooth (zum Flashen des HM-10-Moduls benötigen Sie einen kostengünstigen Programmierer, eine Entwicklungsumgebung und ein Verständnis des Protokolls). Obwohl Sie das Bluetooth-Modul mit dem Arduino verwenden können. Aber ich habe ZUNo verwendet, weil es lange gelogen und auf mich gewartet hat und die gesamte Infrastruktur bereit ist, ähnliche Geräte in einem Netzwerk zu verbinden und zu verwalten (ich spreche vom Smart-Home-Netzwerkcontroller).
Für alle verwendeten Beine auf Arduino wurden Analoga im Modul gefunden.

Bild

Um mit dem Modul aus der Arduino IDE arbeiten zu können, müssen Sie es konfigurieren (die Beschreibung der Einstellungen finden Sie auf der Website des Herstellers). Es geschah kein Wunder. Beim Versuch zu kompilieren wurde der Fehler "unterstützt nicht" für "Anweisung mit leeren Spalten oder ohne Text!" Ich habe die Adafruit_NeoPixel-Bibliothek verwendet. Ich stieg hinein, sah, wie viele Zyklen darin waren und schloss es. Ich musste erneut auf die Website des Herstellers gehen und nach Beispielen für die Arbeit mit LEDs suchen (ein Beispiel wurde schnell gefunden). Ich bin also nicht der erste, der auf ein ähnliches Problem stößt.

Damit diese Lampe im Arduino-Code per Funk gesteuert werden kann, müssen Sie ein Makro hinzufügen und mehrere Funktionen implementieren:

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) ); 

Dieses Makro beschreibt ein Z-Wave-Gerät mit drei mehrstufigen Schaltern (RGB-Steuerung) und einem einfachen Schalter (einfaches Ein- / Ausschalten).

Ich habe die einfachste Implementierung von Funktionen (wie in den Beispielen auf der Website des Herstellers). Sie können es in der beigefügten Liste sehen.

Fallauswahl


Ich hatte schon einen Fall. Versiegelt mit einer transparenten Abdeckung . Unter den Deckel passen 25 LEDs. Die Tests waren erfolgreich. Die Lampe hat einen großen Helligkeitsspielraum für mein Zimmer. Die Abdeckung dieses Gehäuses ist transparent, daher habe ich beschlossen, das Licht etwas zu streuen.

Bild

Skizziert farbige Perlen und Acrylwürfel, gefüllt mit transparentem Epoxid. Die Farbe der farbigen Perlen löste sich unter dem Einfluss des Harzes auf.

Bild

Das Interessanteste ist, dass die Kappe aus dem versiegelten Gehäuse undicht ist und fast das gesamte Harz durchgesickert ist. Ich weiß nicht, wo ich den Deckel getroffen habe, aber nach dem Trocknen ist der Riss deutlich sichtbar.

Bild

Die Leiterplatte wurde nach dem photoresistiven Verfahren hergestellt.

Bild

Bild

Nach dem Beizen und Bearbeiten

Bild

Das Modul mit dem Mikrocontroller wurde durch seinen Prototyp ersetzt, der im Schrank lag (weil es nicht schade ist, aber ZUNo muss geschützt werden). Die erste Version von ZUNo, aber die Abmessungen sind größer und schlechter als bei der Antenne, und Sie können sie noch nicht kaufen. Die Tests waren mehr oder weniger erfolgreich. Das letzte Segment musste neu verlötet werden. Es wurde ursprünglich auf die falsche Seite gelötet. Und passen Sie die Anzahl der LEDs in der Firmware an.

Bild

Bild

Folgendes ist passiert:

Bild

Funksteuerung


Hauptfenster mit Lampensteuerkanälen

Bild

Stellen Sie die Helligkeit eines Kanals des LED-Streifens ein

Bild

Einstellen der morgendlichen Abschaltung des Nachtlichts

Bild

Fazit


Das Gerät funktioniert. Es ist kompakt und ordentlich. Es wird durch Aufladen eines Mobiltelefons mit Strom versorgt.
Aus den festgestellten Problemen:

  • Während der Montage einen Teil der Spuren an variablen Widerständen abreißen, sodass Sie im manuellen Modus nur einen Kanal steuern können.
  • Nur 20 von 25 LEDs funktionieren normal. Ich habe viel davon, daher überlasse ich es höchstwahrscheinlich, um schwerwiegendere Mängel zu identifizieren

Nachtlichtskizze
 #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/de433194/


All Articles