Indholdsfortegnelse:

Hue Magic: 4 trin (med billeder)
Hue Magic: 4 trin (med billeder)

Video: Hue Magic: 4 trin (med billeder)

Video: Hue Magic: 4 trin (med billeder)
Video: Как придать Объём волосам Пошагово дома | 4 способа Укладки волос! Как научиться укладывать волосы! 2024, Juni
Anonim
Image
Image

Velkommen troldmænd!

For et par måneder siden lavede jeg en lille magisk kasse med tryllestav til min søn på 3 år. Når han rører kassen med tryllestaven, begynder et farvestrålende lys at udsende fra kassen. Når han ser en farve, han især kan lide, kan han pege staven mod bordlampen (med en Philips Hue -pære indeni), fremlægge en trylleformular, og farven fra æsken springer magisk til lampen! Lampe og lys fra æsken har pludselig samme farve …

Efter et par sekunder forsvinder farven, og bordlampen vender tilbage til sin tilstand før magien. Indtil en ny stave er kastet …

Trin 1: Hvad du har brug for for at oprette dette projekt

Hvad du har brug for for at oprette dette projekt
Hvad du har brug for for at oprette dette projekt
Hvad du har brug for for at oprette dette projekt
Hvad du har brug for for at oprette dette projekt
Hvad du har brug for for at oprette dette projekt
Hvad du har brug for for at oprette dette projekt

For at oprette dette projekt skal du bruge følgende materialer:

    • 1 (eller flere) Philips Hue farvepærer og en Hue Bridge
    • 1 Wemos D1 mini eller lignende esp8266-baseret mikrokontroller
    • 1 (Arduino) berøringssensor (f.eks. TTP223R)
    • 1 (Arduino) øjeblikkelig knap
    • 1 10uF kondensator
    • 1 RGB -led (almindelig anodetype)
    • 5 modstande (10, 22 og 47 Ohm, 2x 10K Ohm)
    • 2 små prototyper PCB'er (2x3 inch eller ca. 5x7 cm burde være store nok)
    • nogle (jumper) ledninger
    • et loddejern
    • en tryllestav (kan købes som færdig i en legetøjsbutik, eller du kan lave den selv)
    • en lille æske lavet af pap eller træ (kan være en eksisterende kasse, men du kan selvfølgelig også bygge en kasse fra bunden)
    • noget tape
    • lidt lim og/eller møtrikker og bolte til montering af printkortene i æsken.
    • valgfrit: indpakningspapir til æsken

NB: En lille erfaring med at læse kredsløbsdiagrammer er nyttig, når du går igennem dette instruerbare. Mit diagram er ikke alt for komplekst: Hvis du kan differentiere en kondensator fra en modstand, har du det sandsynligvis fint.

Nogle erfaringer med Arduino -programmering ved hjælp af Arduino IDE er også nyttige. Ganske grundlæggende erfaring burde være nok, da jeg giver den komplette kode, så du kan kopiere/indsætte. Du skal dog tilpasse et par ting for at få det til at fungere i din særlige opsætning (f.eks. Dine netværksindstillinger og nogle detaljer fra din Hue-konfiguration). Hvis dette lyder lidt skræmmende, skal du ikke bekymre dig, jeg hjælper dig med at hente alle de oplysninger, du har brug for.

Trin 2: Kassen og tryllestaven

Kassen og tryllestaven
Kassen og tryllestaven
Kassen og tryllestaven
Kassen og tryllestaven

De første trin er normalt de sværeste, men ikke i dette instruerbare! For en let start kan du bare købe en tryllestav fra en legetøjsbutik, og til boksen kan du simpelthen genbruge en eksisterende lille kasse, som du allerede har ligget. Bare sørg for, at boksen ikke er lavet af metal, da dette vil blokere wifi-signalerne, og vi har brug for dem til magien;-).

Når du omformulerer en eksisterende boks, er det eneste, du skal gøre, at lave to huller i toppen af kassen: 1 lille hul (størrelse 5 mm = 0,2 ") til RGB-led og et større hul (omkring 12- 14 mm eller ca. 0,5 ") til berøringsføleren.

Den nøjagtige placering af hullerne er ikke kritisk, bare placer dem i henhold til din sans for æstetik, men husk et par ting:

  • Hold afstand mellem begge huller for at sikre, at de komponenter, der monteres under hullerne (RGB -lysdioden og berøringssensoren) begge må optage nok plads til montering og ledninger.
  • Det største hul er for berøringsføleren. Denne sensor monteres lige under hullet på en sådan måde, at den kan røres (og endda let presses) af staven. Så sørg for at staven du køber ikke er for tyk!

Du kan eventuelt bruge (spray) maling eller indpakningspapir og dække plast til at gøre din æske lidt smukkere og for at beskytte den mod madspild og beskidte hænder.

Hvis dette første trin er lidt for uambitiøst efter din smag, skal du gå videre og oprette en kasse og tryllestav helt fra bunden! Der er flere instruktioner derude, der hjælper dig med at skabe en smuk tryllestav

Uanset hvilken vej du vælger, er det nu tid til at udforske indersiden af kassen.

Trin 3: Hardware inde

Hardwaren indeni
Hardwaren indeni
Hardwaren indeni
Hardwaren indeni
Hardwaren indeni
Hardwaren indeni

Brug et loddejern til at forbinde de elektroniske komponenter i henhold til kredsløbsdiagrammet ovenfor. Der er et par ting at være særlig opmærksom på:

  • Ledningerne mellem Wemos D1 Mini og RGB -led skal være lange nok, så RGB -led kan monteres i det hul, du har lavet i æsken.
  • Det samme gælder for ledningerne, der er knyttet til den momentane kontakt og berøringssensor, da disse skal være tilgængelige via det andet hul i låget.
  • Knappen på den øjeblikkelige kontakt skal limes til undersiden (den ikke -følsomme side) af berøringssensoren, på en sådan måde, at du kan sætte knappen tilbage på momentkontakten med berøringsføleren limet ovenpå (se billede). Berøringssensoren er monteret oven på den momentane kontakt for at registrere tryk på en knap, der foretages med en finger, i hvilket tilfælde knappen tryk vil blive ignoreret. Først når knappen trykkes af tryllestaven (som skal være ikke-ledende, så plast og træ er fine), begynder den magiske cyklus.
  • Monter den øjeblikkelige knap med berøringssensor oven på ikke for dybt under hullet i låget, fordi den skal kunne nås med tryllestaven for at sætte magien i gang.
  • Sørg for at observere kondensatorens polaritet, når den loddes. Hvis du vender de positive og negative afledninger, vil kondensatoren sandsynligvis udsende noget magisk røg og sætte dit kredsløb i en evig søvn.
  • Lim, tape og eller skru batteriholderen og printkortene på plads. Det behøver ikke at være pænt, da det ikke vil være i sigte. Det skal bare være faldsikkert.

Videre til softwaren!

Trin 4: Softwaren

Sørg for at have den nyeste (gratis) Arduino software editor, som kan downloades på https://www.arduino.cc/en/Main/Software. Følg disse trin for at tilføje understøttelse af Wemos D1 mini og andre ESP8266-baserede kort:

  • Efter installationen skal du starte Arduino -softwaren og åbne vinduet Indstillinger.
  • Indtast https://arduino.esp8266.com/stable/package_esp8266com_index.json i feltet "Yderligere webadresser til bestyrelsesleder". Du kan tilføje flere webadresser og adskille dem med kommaer.
  • Åbn Boards Manager fra Værktøjer> Board menu og installer esp8266 platform (og glem ikke at vælge dit ESP8266 board fra Tools> Board menu efter installationen. "LOLIN (WEMOS) D1 R2 & mini" fungerer bedst til Wemos D1 mini v2 og v3 brædder.

Hvis du har brug for mere hjælp til at installere Arduino og opsætte driverne, kan du kigge på

I Arduino -editoren skal du åbne en ny fil (Fil> Ny) og kopiere/indsætte koden herunder i vinduet, der lige åbnede. Bare overskriv de linjer, der allerede er til stede i det nye vindue (tomrumsopsætning og hulrum).

Nu er du næsten klar, men du skal tilpasse et par stykker af koden til din særlige opsætning.

Den første ting at gøre er at ændre ip -adressen på linje 34 (i Arduino -editoren er kodelinjerne nummererede) til ip -adressen på din Hue -bro. Hvis du ikke kender din Hue Bridge IP -adresse, skal du besøge https://discovery.meethue.com/ og den rigtige IP -adresse vises med det samme i din browser. IP -adressen er det prikkede nummer, der går forud for "internadresse".

For at kommunikere med Hue -lysene skal du oprette en Hue API -bruger til Wemos D1 mini, så Wemos kan kommunikere til Hue -lyset via Hue API. For at gøre det skal du følge instruktionerne på https://developers.meethue.com/develop/get-started-2/ og kopiere/indsætte det genererede (ret lange) brugernavn i Arduino-kodevinduet. Bare udskift hvert "DIN HUE API -BRUGERNAVN" med det genererede API -brugernavn.

Derefter skal du vælge det rigtige farvetone lys for at ændre farve. I Hue API har hvert lys et tal, så du skal finde ud af det nummer, der svarer til det lys, du vil bruge til dette projekt. En af de nemmeste måder at finde ud af, hvilket nummer et bestemt lys har, er at downloade Hue Viewer -appen til Android eller iOS. Erstat teksten "DIT LYSNUMMER" med det korrekte nummer overalt i Arduino -kodevinduet.

Den sidste ting at gøre er at konfigurere Wemos til at oprette forbindelse til dit wifi -netværk. Dette gøres ved at uploade koden til Wemos og på din bærbare computer skifte til et andet wifi -netværk: til "AutoConnectAP". Din browser viser derefter en side, hvor du kan tilføje SSID (navn) og adgangskode til dit wifi -netværk, som Wemos -controlleren vil bruge til at oprette forbindelse til dit wifi -netværk (og til Hue -broen).

NB: Hvis upload af koden til vores Wemos D1 mini via USB ikke virker, skal du muligvis downloade en driver til USB -chippen på Wemos. En driver til din platform (Windows, Mac) kan downloades på

Nu er du klar til at teste din skabelse!

// ESP8266 Hue Magic Wand // Richard van Kampen - 2018 // Denne kode er testet på en Wemos D1 mini, men vil sandsynligvis også fungere på andre ESP8266 -baserede udviklingstavler // For at tilføje understøttelse af Wemos D1 mini og andre ESP8266 boards til Arduino editor, tag følgende trin: // - Start Arduino og åbn vinduet Indstillinger. // - Indtast https://arduino.esp8266.com/stable/package_esp8266com_index.json i feltet Yderligere bestyrelsesleder -URL'er. Du kan tilføje flere webadresser og adskille dem med kommaer. // - Åbn Boards Manager fra Værktøjer> Board menu og installer esp8266 platform (og glem ikke at vælge dit ESP8266 board fra Tools> Board menu efter installation). // brugte biblioteker: #include "ESP8266WiFi.h" // ESP8266 Core WiFi Library #include "DNSServer.h" // Lokal DNS -server bruges til at omdirigere alle anmodninger til WiFiManager -konfigurationsportalen, hvis der ikke er WIFI -indstillinger (SSID, adgangskode) ikke er sat endnu. #include "ESP8266WebServer.h" // Lokal WebServer, der bruges til at betjene WiFiManager -konfigurationsportalen #include "WiFiManager.h" // WiFi Configuration Magic -bibliotek, hvis det ikke er installeret endnu, henvises til https://github.com/tzapu/WiFiManager #install-through-library-manager #inkluder "RestClient.h" // https://github.com/fabianofranca/ESP8266RestClient, der er nødvendig for at bruge Philips Hue API (se https://developers.meethue.com/develop/ hue-api/). #include "ArduinoJson.h" // https://github.com/bblanchon/ArduinoJson, nødvendig for at analysere Hue API -svar, installer venligst version 5.x via bibliotekschefen i Arduino (menu "Skitse"> Inkluder bibliotek> Administrer Biblioteker> søg efter ArduinoJson og skift version til seneste 5.x). Version 6 (i øjeblikket i beta) udsender en fejl. // variabler og init: String respons; const int redPin = 13; // på Wemos er dette d7 const int greenPin = 12; // på Wemos er dette d6 const int bluePin = 14; // på Wemos er dette d5 const int touchSensor = 5; // på Wemos dette er d1 const int activationPin = 4; // på Wemos er dette d2 bool aktivering = HIGH; bool touch = LAV; const char* aan_restore; int bri_restore; dobbelt x_restore; dobbelt y_restore; dobbelt x_magic; dobbelt y_magic; bool først = sandt; usigneret lang startMillis; usigneret langstrømMillis; usigneret lang varighedMillis; RestClient -klient = RestClient ("192.168.178.23"); // "din Hue Bridge IP -adresse" // Hvis du ikke kender din Hue Bridge IP -adresse, skal du besøge https://discovery.meethue.com, og den vises med det samme i din browser. IP -adressen er det prikkede nummer, der er forud for "internalipaddress" void setup () {analogWriteRange (255); Serial.begin (9600); // Start med LED'en slukket. pinMode (activationPin, INPUT_PULLUP); pinMode (touchSensor, INPUT); startMillis = millis (); checkWand (); } void loop () {// intet at gøre her, lad være tomt …} void checkWand () {int rgbColour [3]; // RGB -farvekode af James Harton, https://gist.github.com/jamesotron/766994 // Start med rødt. rgbColour [0] = 255; rgbColour [1] = 0; rgbColour [2] = 0; aktivering = digitalRead (activationPin); // LOW betyder, at tryllestaven bruges. touch = digitalRead (touchSensor); // HIGH betyder at finger bruges i stedet for tryllestav, hvilket ikke burde være tilfældet. mens (aktivering == LAV && tryk == LAV) {// Vælg de farver, der skal øges og sænkes. for (int decColour = 0; decColour <3; decColour += 1) {int incColour = decColour == 2? 0: decColour + 1; // = ternary operator, betyder: int incColour; if (decColour == 2) {incColour = 0;} else {incColour = decColour +1;} // krydsfade de to farver. for (int i = 0; i <255; i += 1) {rgbColour [decColour] -= 1; rgbColour [incColour] += 1; // da vores RGB -LED har en fælles anode i stedet for katode (så vi skal oprette forbindelse til +3.3V i stedet for jord), har vi brug for inverse værdier for RGB: int red = 255 - rgbColour [0]; int green = 255 - rgbColour [1]; int blue = 255 - rgbColour [2]; analogWrite (redPin, rød); analogWrite (greenPin, grøn); analogWrite (bluePin, blå); forsinkelse (8); aktivering = digitalRead (activationPin); hvis (aktivering == HIGH) {// HIGH betyder, at tryllestaven er løftet. gå til stopColorCycling; }}}} stopColorCycling: currentMillis = millis (); durationMillis = (currentMillis - startMillis); hvis (durationMillis> 1000) {RGBtoxy (rgbColour [0], rgbColour [1], rgbColour [2]); } ellers {// sætte Wemos i dvaletilstand: ESP.deepSleep (0); }} ugyldig RGBtoxy (int rød, int grøn, int blå) {// se https://developers.meethue.com/documentation/color-conversions-rgb-xy double R = map (rød, 0, 255, 0, 1000); R /= 1000; dobbelt G = kort (grønt, 0, 255, 0, 1000); G /= 1000; dobbelt B = kort (blå, 0, 255, 0, 1000); B /= 1000; R = (R> 0,04045f)? pow ((R + 0,055f) / (1,0f + 0,055f), 2,4f): (R / 12,92f); G = (G> 0,04045f)? pow ((G + 0,055f) / (1,0f + 0,055f), 2,4f): (G / 12,92f); B = (B> 0,04045f)? pow ((B + 0,055f) / (1,0f + 0,055f), 2,4f): (B / 12,92f); dobbelt X = R * 0,649926f + G * 0,103455f + B * 0,1997109f; dobbelt Y = R * 0,234327f + G * 0,743075f + B * 0,022598f; dobbelt Z = R * 0,0000000f + G * 0,053077f + B * 1,035763f; dobbelt x = X / (X + Y + Z); dobbelt y = Y / (X + Y + Z); // konvertering ikke fuldstændigt gennemført, men sandsynligvis god nok til det, vi ønsker at opnå, så lad det stå ved dette og send XY -værdier til lampe: sendtoHue (x, y); } void sendtoHue (dobbelt a, dobbelt b) {// faktisk farveændring fra tryllestavsmagi hvis (første) {// første pas: få den aktuelle lampestatus getCurrentValues (); } // send derefter tryllestavens farver: // vent på stave: lang ventetid; x_magic = a; y_magic = b; // lampe tændt i tryllestav farve: respons = ""; int temp = tilfældig (2, 9); const char* state = "true"; for (int i = 1; i <= temp; i ++) {// opret char array til at sende til bridge: String temp_body1 = "{" on / ":" + String (state) + ", \" bri / ": 220, / "xy \": [" + String (x_magic) +", " + String (y_magic) +"], / "overgangstid \": 1} "; int str_len1 = temp_body1.length () + 1; char post_body1 [str_len1]; temp_body1.toCharArray (post_body1, str_len1); // nu har vi post_body1 som char array; // lav hvileopkald: int statusCodePut1 = client.put ("/api/YOUR HUE API BRUGERNAVN/lyser/DIT LYSNUMMER/tilstand", post_body1 og svar); vent = tilfældig (100, 600); forsinkelse (vent); hvis (tilstand == "sand") {tilstand = "falsk"; } ellers {tilstand = "sand"; }}} // reducer lysstyrken…: response = ""; temp = tilfældig (4, 17); // opret char array, der skal sendes til bridge: String temp_body2 = "{" on / ": true, \" bri / ": 154, \" transitiontime / ":" + String (temp) + "}"; int str_len2 = temp_body2.length () + 1; char post_body2 [str_len2]; temp_body2.toCharArray (post_body2, str_len2); // nu har vi post_body2 som char array; // lav hvileopkald: int statusCodePut2 = client.put ("/api/DIN HUE API BRUGERNAVN/lyser/DIT LYSNUMMER/tilstand", post_body2 og svar); vent = tilfældig (1000, 2500); forsinkelse (vent); //..og gør lysere igen: response = ""; temp = tilfældig (4, 17); // opret char array, der skal sendes til bridge: String temp_body3 = "{" bri_inc / ": 100, \" overgangstid / ":}"; int str_len3 = temp_body3.length () + 1; char post_body3 [str_len3]; temp_body3.toCharArray (post_body3, str_len3); // nu har vi post_body3 som char array; // lav hvileopkald: int statusCodePut3 = client.put ("/api/DIN HUE API BRUGERNAVN/lyser/DIT LYSNUMMER/tilstand", post_body3 og svar); vent = tilfældig (2500, 5000); // vent 2-5 sekunders forsinkelse (vent); // og falm tilbage til gammel værdi: response = ""; // opret char array for at sende til bridge: String temp_body4 = "{" on / ":" + String (aan_restore) + ", \" bri / ":" + String (bri_restore) + ", \" xy / ": [" + String (x_restore) +", " + String (y_restore) +"], / "overgangstid \": " + String (20) +"} "; int str_len4 = temp_body4.length () + 1; char post_body4 [str_len4]; temp_body4.toCharArray (post_body4, str_len4); // nu har vi post_body4 som char array; // lav hvileopkald: int statusCodePut4 = client.put ("/api/DIN HUE API BRUGERNAVN/lyser/DIT LYSNUMMER/tilstand", post_body4 og svar); ESP.deepSleep (0); // skal sove igen …. } usigneret int getCurrentValues () {connectWifi (); // første forbindelse til Wifi -svar = ""; // lav hvileopkald: int statusCodeGet = client.get ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER", & response); Serial.print ("Statuskode fra server efter GET:"); Serial.println (statusCodeGet); Serial.print ("Svartekst fra server:"); Serial.println (svar); StaticJsonBuffer jsonBuffer; // Parsing Json -svar // Root af objekttræet. // // Det er en reference til JsonObject, de faktiske bytes er inde i // jsonBuffer med alle de andre noder i objekttræet. // Hukommelse frigøres, når jsonBuffer går uden for anvendelsesområdet. JsonObject & root = jsonBuffer.parseObject (svar); JsonObject & state = root ["state"]; // Test om parsing lykkes. hvis (! root.success ()) {Serial.println ("parseObject () mislykkedes"); } // Hent værdier. aan_restore = tilstand ["on"]; Serial.println (aan_restore); bri_restore = tilstand ["bri"]; x_restore = tilstand ["xy"] [0]; y_restore = tilstand ["xy"] [1]; first = false;} void connectWifi () {// Lokal intialisering. Når virksomheden er færdig, er det ikke nødvendigt at holde den i nærheden af WiFiManager wifiManager; // nulstil indstillinger - til test: //wifiManager.resetSettings (); // indstil tilbagekald, der bliver kaldt, når forbindelse til tidligere WiFi mislykkes, og går ind i Access Point -tilstand wifiManager.setAPCallback (configModeCallback); // henter ssid og pass og forsøger at oprette forbindelse // hvis det ikke opretter forbindelse, starter det et adgangspunkt med det angivne navn // her "AutoConnectAP" // og går ind i en blokeringssløjfe, der afventer konfiguration, hvis (! wifiManager.autoConnect ()) {Serial.println ("kunne ikke oprette forbindelse og hit timeout"); // nulstil og prøv igen, eller måske sætte den i dyb søvn ESP.reset (); forsinkelse (1000); } // hvis du kommer hertil, har du oprettet forbindelse til WiFi Serial.println ("tilsluttet … yeey:)"); Serial.print ("Tilsluttet:"); Serial.println (WiFi. SSID ()); Serial.print ("IP -adresse:"); Serial.println (WiFi.localIP ()); // IP -adresse tildelt din ESP (Wemos) // udskriv den modtagne signalstyrke: lang rssi = WiFi. RSSI (); Serial.print ("signalstyrke (RSSI):"); Serial.println (rssi); } void configModeCallback (WiFiManager * myWiFiManager) {Serial.println ("Angivet konfigurationstilstand"); Serial.println (WiFi.softAPIP ()); // hvis du brugte automatisk genereret SSID, skal du udskrive det Serial.println (myWiFiManager-> getConfigPortalSSID ()); }

Anbefalede: