INHOUDSOPGAWE:

Hue Magic: 4 stappe (met foto's)
Hue Magic: 4 stappe (met foto's)

Video: Hue Magic: 4 stappe (met foto's)

Video: Hue Magic: 4 stappe (met foto's)
Video: Wanneer een douche nemen te duur is... 2024, Junie
Anonim
Image
Image

Welkom towenaars!

'N Paar maande gelede het ek 'n klein towerkissie met towerstaf vir my seuntjie van 3 jaar geskep. As hy die boks met die towerstaf aanraak, begin 'n veranderende gekleurde lig uit die boks uitstraal. As hy 'n kleur sien waarvan hy veral hou, kan hy die towerstaf na die tafellamp wys (met 'n Philips Hue -gloeilamp aan die binnekant), 'n towerspreuk gooi en die kleur uit die boks sal op 'n magiese manier na die lamp spring! Lamp en lig uit die boks het skielik dieselfde kleur …

Na 'n paar sekondes verdwyn die kleur en die tafellamp keer terug na sy toestand voor die spel. Totdat 'n nuwe spel uitgebring word …

Stap 1: wat u nodig het om hierdie projek te skep

Wat u nodig het om hierdie projek te skep
Wat u nodig het om hierdie projek te skep
Wat u nodig het om hierdie projek te skep
Wat u nodig het om hierdie projek te skep
Wat u nodig het om hierdie projek te skep
Wat u nodig het om hierdie projek te skep

Om hierdie projek te skep, benodig u die volgende materiaal:

    • 1 (of meer) Philips Hue -kleurbol en 'n Hue Bridge
    • 1 Wemos D1 mini of soortgelyke mikrobeheerder op esp8266-basis
    • 1 (Arduino) aanraaksensor (bv. TTP223R)
    • 1 (Arduino) kortstondige knoppie
    • 1 10uF kapasitor
    • 1 RGB LED (gewone anode tipe)
    • 5 weerstande (10, 22 en 47 Ohm, 2x 10K Ohm)
    • 2 klein prototipe PCB's (2x3 duim of ongeveer 5x7 cm behoort groot genoeg te wees)
    • sommige (jumper) drade
    • 'n soldeerbout
    • 'n towerstaf (kan gekoop word as klaargemaak in 'n speelgoedwinkel, of jy kan dit self maak)
    • 'n klein boks van karton of hout (kan 'n bestaande boks wees, maar u kan natuurlik ook 'n boks van nuuts af bou)
    • 'n paar band
    • 'n bietjie gom en/of moere en boute om die PCB's in die boks te monteer.
    • opsioneel: inpakpapier vir die boks

LET WEL: 'n Bietjie ervaring met die lees van kringdiagramme is nuttig as u deur hierdie instruksies gaan. My diagram is nie te ingewikkeld nie: as u 'n kapasitor van 'n weerstand kan onderskei, sal dit waarskynlik goed gaan.

Ervaring met Arduino -programmering met behulp van die Arduino IDE is ook nuttig. Eerder basiese ervaring behoort genoeg te wees, aangesien ek die volledige kode vir u kan kopieer/plak. U moet egter 'n paar dinge aanpas om dit in u spesifieke opset te laat werk (byvoorbeeld u netwerkinstellings en 'n paar besonderhede uit u Hue-opset). As dit 'n bietjie intimiderend klink, moenie bekommerd wees nie, ek sal u help om al die nodige inligting op te spoor.

Stap 2: The Box & Wand

The Box & Wand
The Box & Wand
The Box & Wand
The Box & Wand

Die eerste stappe is gewoonlik die moeilikste, maar nie in hierdie instruksies nie! Vir 'n maklike begin, kan u net 'n towerstaf by 'n speelgoedwinkel koop, en vir die boks kan u 'n bestaande klein boks wat u alreeds gelê het, weer gebruik. Maak seker dat die boks nie van metaal is nie, want dit sal die wifi-seine blokkeer en ons het dit nodig vir die magie;-).

As u 'n bestaande boks herbedoel, is die enigste ding wat u hoef te doen om twee gate in die bokant van die boks te maak: 1 klein gaatjie (grootte 5 mm = 0,2 ") vir die RGB-led en 'n groter gat (ongeveer 12- 14 mm of ongeveer 0,5 ") vir die aanraaksensor.

Die presiese plasing van die gate is nie van kritieke belang nie; plaas dit net volgens u gevoel van estetika, maar hou 'n paar dinge in gedagte:

  • Hou 'n afstand tussen albei gate om seker te maak dat die komponente wat onder die gate gemonteer word (die RGB -LED en die aanraaksensor) genoeg ruimte kan inneem vir montering en bedrading.
  • Die grootste gat is vir die raaksensor. Hierdie sensor sal net onder die gat gemonteer word, sodat dit deur die staaf aangeraak (en selfs effens ingedruk) kan word. Maak dus seker dat die towerstaf wat u koop nie te dik is nie!

U kan ook verf of inpakpapier en plastiekbedekking gebruik (spuit) om u boks 'n bietjie mooier te maak en dit te beskerm teen voedselstorting en vuil hande.

As hierdie eerste stap 'n bietjie te onambisieus na u smaak is, moet u 'n boks en towerstaf heeltemal van nuuts af maak! Daar is verskillende instruksies wat u kan help om 'n pragtige towerstaf te maak

Watter pad u ook al kies, dit is nou tyd om die binnekant van die boks te verken.

Stap 3: Die hardeware binne

Die hardeware binne
Die hardeware binne
Die hardeware binne
Die hardeware binne
Die hardeware binne
Die hardeware binne

Gebruik 'n soldeerbout om die elektroniese komponente aan te sluit volgens die stroombaan diagram hierbo. Daar is 'n paar dinge waaraan u veral aandag moet skenk:

  • Die drade tussen die Wemos D1 Mini en die RGB -led moet lank genoeg wees sodat die RGB -LED in die gat wat u in die deksel van die boks gemaak het, gemonteer kan word.
  • Dieselfde geld vir die drade wat aan die oombliklike skakelaar en aanraaksensor gekoppel is, aangesien dit toeganklik moet wees via die ander gaatjie in die deksel.
  • Die knoppie van die oombliklike skakelaar moet aan die onderkant (die nie -sensitiewe kant) van die aanraaksensor vasgeplak word, sodat u die knoppie weer op die oombliklike skakelaar kan plaas met die aanraaksensor bo -op (sien prent). Die raaksensor is bo -op die oombliklike skakelaar gemonteer om die druk van die knoppies met 'n vinger op te spoor, in welke geval die druk op die knoppie geïgnoreer sal word. Slegs as die toorknop ingedruk word deur die towerstaf (wat nie-geleidend moet wees, sodat plastiek en hout goed is), begin die magiese siklus.
  • Monteer die kortstondige knoppie met die aanraaksensor bo -op, nie te diep onder die gat in die deksel nie, want dit moet bereik kan word deur die towerstaf om die magie aan die gang te sit.
  • Let op die polariteit van die kapasitor wanneer u dit soldeer. As u die positiewe en negatiewe leidrade omkeer, sal die kondensator waarskynlik towerrook uitstraal en u kring in die ewige slaap laat slaap.
  • Plak, plak en plak die batteryhouer en PCB (s) vas. Dit hoef nie netjies te wees nie, want dit is nie in sig nie. Dit moet net druppelbestand wees.

Op na die sagteware!

Stap 4: Die sagteware

Maak seker dat u die nuutste (gratis) sagteware -redakteur van Arduino het, wat afgelaai kan word by https://www.arduino.cc/en/Main/Software. Volg die volgende stappe om ondersteuning vir die Wemos D1 mini en ander ESP8266-borde te voeg:

  • Na die installasie, begin die Arduino -sagteware en maak die venster Voorkeure oop.
  • Voer https://arduino.esp8266.com/stable/package_esp8266com_index.json in die veld "Addisionele raadbestuurder -URL's" in. U kan verskeie URL's byvoeg en dit met kommas skei.
  • Maak Boards Manager oop van Tools> Board menu en installeer esp8266 platform (en vergeet nie om u ESP8266 board te kies uit Tools> Board menu na installasie. "LOLIN (WEMOS) D1 R2 & mini" werk die beste vir Wemos D1 mini v2 en v3 borde.

As u meer hulp nodig het met die installering van Arduino en die opstel van die bestuurders, kan u na https://www.instructables.com/id/Wemos-ESP8266-Getting-Started-Guide-Wemos-101/ kyk

Open in die Arduino -redakteur 'n nuwe lêer (lêer> nuut) en kopieer/plak die onderstaande kode in die venster wat pas oopgemaak is. Skryf net die lyne wat reeds in die nuwe venster voorkom (leemte -opstelling en leegte -lus) oor.

Nou is u amper gereed, maar u moet 'n paar stukke van die kode aanpas vir u spesifieke opset.

Die eerste ding om te doen is om die ip -adres op reël 34 te verander (in die Arduino -redakteur is die kodelyne genommer) in die ip -adres van u Hue -brug. As u nie u Hue Bridge -IP -adres ken nie, besoek https://discovery.meethue.com/ en die regte IP -adres verskyn onmiddellik in u blaaier. Die ip -adres is die stippelgetal wat voorafgegaan word deur 'interne adres'.

Om met die Hue -ligte te kommunikeer, moet u 'n Hue API -gebruiker vir die Wemos D1 mini skep, sodat die Wemos via die Hue API met die Hue -lig kan kommunikeer. Om dit te doen, volg die instruksies op https://developers.meethue.com/develop/get-started-2/ en kopieer/plak die gegenereerde (redelik lang) gebruikersnaam in die Arduino-kodevenster. Vervang net elke 'YOUR HUE API USERNAME' met die gegenereerde API -gebruikersnaam.

Dan moet u die regte Hue -lig kies om van kleur te verander. In die Hue API het elke lig 'n nommer, dus moet u die nommer vind wat ooreenstem met die lig wat u vir hierdie projek wil gebruik. Een van die maklikste maniere om uit te vind watter nommer 'n spesifieke lig het, is om die Hue Viewer -app vir Android of iOS af te laai. Vervang die teks "U LIGNOMMER" met die korrekte nommer oral in die Arduino -kodevenster.

Die laaste ding om te doen is om die Wemos op te stel om aan te sluit op u wifi -netwerk. Dit word gedoen deur die kode na die Wemos op te laai en op u skootrekenaar oor te skakel na 'n ander wifi -netwerk: na "AutoConnectAP". U blaaier sal dan 'n bladsy vertoon waarop u die SSID (naam) en wagwoord van u wifi -netwerk kan byvoeg wat die Wemos -beheerder sal gebruik om aan te sluit by u wifi -netwerk (en op die Hue -brug).

NB: as die oplaai van die kode via USB na ons Wemos D1 mini nie werk nie, moet u moontlik 'n bestuurder vir die USB -chip op die Wemos aflaai. 'N Bestuurder vir u platform (Windows, Mac) kan afgelaai word by

Nou is u gereed om u skepping te toets!

// ESP8266 Hue Magic Wand // Richard van Kampen - 2018 // Hierdie kode is getoets op 'n Wemos D1 mini, maar sal waarskynlik ook op ander ESP8266 -gebaseerde ontwikkelingsborde werk // Om ondersteuning by te voeg vir Wemos D1 mini en ander ESP8266 borde na die Arduino -redakteur, neem die volgende stappe: // - Begin Arduino en maak die venster Voorkeure oop. // - Tik https://arduino.esp8266.com/stable/package_esp8266com_index.json in die veld Addisionele bestuurder -URL's. U kan verskeie URL's byvoeg en dit met kommas skei. // - Maak Boards Manager oop in Tools> Board menu en installeer esp8266 platform (en vergeet nie om u ESP8266 board te kies uit Tools> Board menu na installasie). // gebruikte biblioteke: #sluit "ESP8266WiFi.h" // ESP8266 Core WiFi -biblioteek in #insluit "DNSServer.h" // Plaaslike DNS -bediener wat gebruik word om alle versoeke na die WiFiManager -konfigurasieportaal te herlei as daar geen WIFI -instellings (SSID, wagwoord) is nie nog nie vasgestel nie. #include "ESP8266WebServer.h" // Local WebServer used to serve the WiFiManager configuration portal #include "WiFiManager.h" // WiFi Configuration Magic library, as dit nog nie geïnstalleer is nie, verwys na https://github.com/tzapu/WiFiManager #install-through-library-manager #sluit "RestClient.h" // https://github.com/fabianofranca/ESP8266RestClient in, nodig vir die gebruik van die Philips Hue API (sien https://developers.meethue.com/develop/ hue-api/). #sluit "ArduinoJson.h" // https://github.com/bblanchon/ArduinoJson in, wat nodig is om die Hue API -reaksie te ontleed, installeer weergawe 5.x via die biblioteekbestuurder in Arduino (menu "Skets"> Sluit biblioteek in> Bestuur Biblioteke> soek na ArduinoJson en verander die weergawe na die nuutste 5.x). Weergawe 6 (tans in beta) gee 'n fout. // veranderlikes en init: Stringrespons; const int redPin = 13; // op Wemos is dit d7 const int greenPin = 12; // op Wemos is dit d6 const int bluePin = 14; // op Wemos is dit d5 const int touchSensor = 5; // op Wemos hierdie is d1 const int activationPin = 4; // op Wemos is dit d2 bool aktivering = HOOG; bool touch = LOW; const char* aan_restore; int bri_restore; dubbel x_restore; dubbel y_restore; dubbel x_magic; dubbel y_magic; bool eerste = waar; ongetekende lang beginMillis; ongetekende langstroomMillis; ongetekende lang duurMillis; RestClient -kliënt = RestClient ("192.168.178.23"); // "u Hue Bridge IP -adres" // As u nie u Hue Bridge IP -adres ken nie, besoek https://discovery.meethue.com en dit verskyn onmiddellik in u blaaier. Die ip -adres is die stippelgetal wat voorafgegaan word deur die "internalipaddress" leemte -opstelling () {analogWriteRange (255); Serial.begin (9600); // Begin met die LED af. pinMode (activationPin, INPUT_PULLUP); pinMode (touchSensor, INPUT); startMillis = millis (); checkWand (); } void loop () {// niks om hier te doen nie, laat leeg …} void checkWand () {int rgbColour [3]; // RGB -kleurkode deur James Harton, https://gist.github.com/jamesotron/766994 // Begin met rooi. rgbColour [0] = 255; rgbColour [1] = 0; rgbColour [2] = 0; activation = digitalRead (activationPin); // LOW beteken dat 'n towerstaf gebruik word. touch = digitalRead (touchSensor); // HOOG beteken dat vinger in plaas van towerstaf gebruik word, wat nie die geval moet wees nie. terwyl (aktivering == LOW && touch == LOW) {// Kies die kleure om te verhoog en te verminder. vir (int decColour = 0; decColour <3; decColour += 1) {int incColour = decColour == 2? 0: decColour + 1; // = ternêre operator, beteken: int incColour; as (decColour == 2) {incColour = 0;} else {incColour = decColour +1;} // kruisverf die twee kleure. vir (int i = 0; i <255; i += 1) {rgbColour [decColour] -= 1; rgbColour [incColour] += 1; // aangesien ons RGB -LED 'n gemeenskaplike anode in plaas van katode het (dus moet ons met +3.3V in plaas van grond verbind), benodig ons inverse waardes vir RGB: int red = 255 - rgbColour [0]; int groen = 255 - rgbColour [1]; int blou = 255 - rgbColour [2]; analogWrite (redPin, rooi); analogWrite (greenPin, groen); analogWrite (blouPin, blou); vertraging (8); aktivering = digitalRead (activationPin); as (aktivering == HOOG) {// HOOG beteken dat towerstaf gelig word. gaan na stopColorCycling; }}}} stopColorCycling: currentMillis = millis (); durationMillis = (currentMillis - startMillis); if (durationMillis> 1000) {RGBtoxy (rgbColour [0], rgbColour [1], rgbColour [2]); } anders {// sit Wemos in die slaapmodus: ESP.deepSleep (0); }} ongeldig RGBtoxy (int rooi, int groen, int blou) {// sien https://developers.meethue.com/documentation/color-conversions-rgb-xy dubbel R = kaart (rooi, 0, 255, 0, 1000); R /= 1000; dubbel G = kaart (groen, 0, 255, 0, 1000); G /= 1000; dubbel B = kaart (blou, 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); dubbel X = R * 0.649926f + G * 0.103455f + B * 0.197109f; dubbel Y = R * 0.234327f + G * 0.743075f + B * 0.022598f; dubbel Z = R * 0.0000000f + G * 0.053077f + B * 1.035763f; dubbel x = X / (X + Y + Z); dubbel y = Y / (X + Y + Z); // die omskakeling is nie volledig voltooi nie, maar waarskynlik goed genoeg vir wat ons wil bereik, so laat dit staan en stuur XY -waardes na lamp: sendtoHue (x, y); } void sendtoHue (dubbel a, dubbel b) {// werklike kleurverandering van towermag as (eerste) {// eerste pas: kry huidige lampstatus getCurrentValues (); } // stuur dan towerstaf kleure: // wag vir spel: lank wag; x_magie = a; y_magic = b; // lamp aan met towerstaf kleur: response = ""; int temp = random (2, 9); const char* state = "waar"; for (int i = 1; i <= temp; i ++) {// skep char array om na bridge te stuur: String temp_body1 = "{" on / ":" + String (state) + ", \" bri / ": 220, / "xy \": [" + String (x_magic) +", " + String (y_magic) +"], / "oorgangstyd \": 1} "; int str_len1 = temp_body1.length () + 1; char post_body1 [str_len1]; temp_body1.toCharArray (post_body1, str_len1); // nou het ons post_body1 as char array; // maak 'n oproep: int statusCodePut1 = client.put ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body1, and response); wag = ewekansig (100, 600); vertraag (wag); as (staat == "waar") {toestand = "vals"; } anders {toestand = "waar"; }}} // verminder helderheid …: response = ""; temp = ewekansig (4, 17); // skep char array om na bridge te stuur: String temp_body2 = "{" on / ": true, \" bri / ": 154, \" transittime / ":" + String (temp) + "}"; int str_len2 = temp_body2.length () + 1; char post_body2 [str_len2]; temp_body2.toCharArray (post_body2, str_len2); // nou het ons post_body2 as char array; // maak 'n oproep: int statusCodePut2 = client.put ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body2, and response); wag = ewekansig (1000, 2500); vertraag (wag); //..en weer helderder maak: response = ""; temp = ewekansig (4, 17); // skep char array om na bridge te stuur: String temp_body3 = "{" bri_inc / ": 100, \" oorgangstyd / ":}"; int str_len3 = temp_body3.length () + 1; char post_body3 [str_len3]; temp_body3.toCharArray (post_body3, str_len3); // nou het ons post_body3 as char array; // maak 'n oproep: int statusCodePut3 = client.put ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body3, and response); wag = ewekansig (2500, 5000); // wag 2-5 sekondes vertraging (wag); // en vervaag terug na ou waarde: response = ""; // skep char array om na bridge te stuur: String temp_body4 = "{" on / ":" + String (aan_restore) + ", \" bri / ":" + String (bri_restore) + ", \" xy / ": [" + String (x_restore) +", " + String (y_restore) +"], / "oorgangstyd \": " + String (20) +"} "; int str_len4 = temp_body4.length () + 1; char post_body4 [str_len4]; temp_body4.toCharArray (post_body4, str_len4); // nou het ons post_body4 as char array; // maak 'n oproep: int statusCodePut4 = client.put ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body4, and response); ESP.deepSleep (0); // weer gaan slaap … } unsigned int getCurrentValues () {connectWifi (); // maak eers verbinding met Wifi response = ""; // maak 'n oproep: int statusCodeGet = client.get ("/api/U HUE API GEBRUIKERSNAAM/lights/YOUR LIGHT NUMBER", en reaksie); Serial.print ("Statuskode van bediener na GET:"); Serial.println (statusCodeGet); Serial.print ("Antwoordliggaam van bediener:"); Serial.println (reaksie); StaticJsonBuffer jsonBuffer; // Ontleding van Json -reaksie // Wortel van die voorwerpboom. // // Dit verwys na die JsonObject, die werklike grepe is binne die // jsonBuffer met al die ander nodusse van die voorwerpboom. // Geheue word vrygemaak wanneer jsonBuffer buite omvang val. JsonObject & root = jsonBuffer.parseObject (reaksie); JsonObject & state = root ["state"]; // Toets of ontleding slaag. as (! root.success ()) {Serial.println ("parseObject () misluk"); } // Haal waardes. aan_restore = staat ["aan"]; Serial.println (aan_restore); bri_restore = staat ["bri"]; x_restore = toestand ["xy"] [0]; y_restore = toestand ["xy"] [1]; eerste = vals;} ongeldig connectWifi () {// Plaaslike intialisering. As dit eers klaar is, hoef u dit nie by WiFiManager wifiManager te hou nie; // herstel instellings - vir toetsing: //wifiManager.resetSettings (); // stel terugbel wat gebel word wanneer die verbinding met vorige WiFi misluk, en gaan in die toegangspunt -modus wifiManager.setAPCallback (configModeCallback); // haal ssid en pass en probeer om aan te sluit // as dit nie verbind nie, begin dit 'n toegangspunt met die gespesifiseerde naam // hier "AutoConnectAP" // en gaan in 'n blokkeerlus in op die konfigurasie as (! wifiManager.autoConnect ()) {Serial.println ("kon nie koppel nie en raak tydsduur"); // herstel en probeer weer, of sit dit in diepe slaap ESP.reset (); vertraging (1000); } // as u hier kom, het u aan die WiFi Serial.println gekoppel ("verbind … yeey:)"); Serial.print ("Gekoppel aan:"); Serial.println (WiFi. SSID ()); Serial.print ("IP -adres:"); Serial.println (WiFi.localIP ()); // IP -adres wat aan u ESP (Wemos) toegeken is // druk die ontvangde seinsterkte af: lang rssi = WiFi. RSSI (); Serial.print ("seinsterkte (RSSI):"); Serial.println (rssi); } void configModeCallback (WiFiManager * myWiFiManager) {Serial.println ("In die konfigurasiemodus"); Serial.println (WiFi.softAPIP ()); // as u outomaties gegenereerde SSID gebruik het, druk dit Serial.println (myWiFiManager-> getConfigPortalSSID ()); }

Aanbeveel: