Obsah:

Hue Magic: 4 kroky (s obrázkami)
Hue Magic: 4 kroky (s obrázkami)

Video: Hue Magic: 4 kroky (s obrázkami)

Video: Hue Magic: 4 kroky (s obrázkami)
Video: ЮЛЯ ФИНЕСС: Как я вышла с 8 этажа! Групповое изнасилование под мефедроном, психиатрическая больница 2024, Jún
Anonim
Image
Image

Vitajte čarodejníci!

Pred pár mesiacmi som pre svojho 3 -ročného syna vytvoril malú kúzelnú škatuľku s prútikom. Keď sa prútikom dotkne škatule, z krabice začne vyžarovať meniace sa farebné svetlo. Akonáhle vidí farbu, ktorá sa mu obzvlášť páči, môže namieriť prútik na stolnú lampu (s žiarovkou Philips Hue vo vnútri), vrhnúť kúzlo a farba z krabice magicky vyskočí na lampu! Lampa a svetlo z krabice majú zrazu rovnakú farbu …

Po niekoľkých sekundách farba zmizne a stolná lampa sa vráti do stavu pred kúzlom. Kým nezačne pôsobiť nové kúzlo …

Krok 1: Čo potrebujete na vytvorenie tohto projektu

Čo potrebujete na vytvorenie tohto projektu
Čo potrebujete na vytvorenie tohto projektu
Čo potrebujete na vytvorenie tohto projektu
Čo potrebujete na vytvorenie tohto projektu
Čo potrebujete na vytvorenie tohto projektu
Čo potrebujete na vytvorenie tohto projektu

Na vytvorenie tohto projektu budete potrebovať nasledujúce materiály:

    • 1 (alebo viac) farebných žiaroviek Philips Hue a mostíka Hue
    • 1 mikrokontrolér Wemos D1 mini alebo podobný esp8266
    • 1 (Arduino) dotykový senzor (napr. TTP223R)
    • 1 Momentálne tlačidlo (Arduino)
    • 1 10uF kondenzátor
    • 1 RGB LED (typ bežnej anódy)
    • 5 odporov (10, 22 a 47 Ohm, 2x 10K Ohm)
    • 2 malé prototypové dosky plošných spojov (2 x 3 palce alebo asi 5 x 7 cm by mali byť dostatočne veľké)
    • niektoré (prepojovacie) vodiče
    • spájkovačka
    • kúzelná palička (dá sa kúpiť ako hotová v obchode s hračkami, alebo si ju môžete vyrobiť sami)
    • malá škatuľka z kartónu alebo dreva (môže ísť o existujúcu škatuľu, ale samozrejme ju môžete postaviť aj od začiatku)
    • nejaká páska
    • nejaké lepidlo a/alebo matice a skrutky na montáž PCB do škatule.
    • voliteľné: baliaci papier do škatule

Poznámka: Trocha skúseností s čítaním schém zapojenia je užitočná pri prechode týmto návodom. Môj diagram nie je príliš zložitý: ak dokážete rozlíšiť kondenzátor od odporu, pravdepodobne budete v poriadku.

Užitočné sú aj určité skúsenosti s programovaním Arduino pomocou Arduino IDE. Na to by mala stačiť základná skúsenosť, pretože poskytnem kompletný kód, ktorý môžete skopírovať/prilepiť. Budete však musieť prispôsobiť niekoľko vecí, aby to fungovalo vo vašom konkrétnom nastavení (napríklad nastavenia siete a niektoré podrobnosti z konfigurácie Hue). Ak to znie trochu zastrašujúco, nebojte sa, pomôžem vám získať všetky potrebné informácie.

Krok 2: Krabica a prútik

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

Prvé kroky sú zvyčajne najťažšie, ale nie v tomto návode! Pre ľahký začiatok si stačí kúpiť čarovnú paličku z hračkárstva a do škatule môžete jednoducho znova použiť existujúcu malú škatuľku, v ktorej ste už ležali. Uistite sa, že krabica nie je kovová, pretože to zablokuje wifi signály a tie potrebujeme na kúzlo;-).

Keď upravíte existujúcu škatuľu, jediné, čo musíte urobiť, je vytvoriť v hornej časti škatule dva otvory: 1 malý otvor (veľkosť 5 mm = 0,2 palca) pre LED diódu RGB a väčší otvor (približne 12- 14 mm alebo asi 0,5 palca) pre dotykový senzor.

Presné umiestnenie otvorov nie je rozhodujúce, umiestnite ich podľa svojho zmyslu pre estetiku, ale pamätajte na niekoľko vecí:

  • Medzi obidvomi otvormi dodržte vzdialenosť, aby ste sa presvedčili, že komponenty, ktoré budú namontované pod otvormi (LED dióda RGB a dotykový senzor), môžu zaberať dostatok miesta na montáž a zapojenie.
  • Najväčší otvor je pre dotykový senzor. Tento senzor bude namontovaný tesne pod otvorom tak, aby sa ho prútik mohol dotknúť (a dokonca ho mierne stlačiť). Uistite sa teda, že kupovaná prútik nie je príliš hrubý!

Voliteľne môžete použiť (sprej) farbu alebo baliaci papier a krycí plast, aby bola škatuľka o niečo krajšia a chrániť ju pred rozliatím jedla a špinavými rukami.

Ak je tento prvý krok príliš málo ambiciózny podľa vašich predstáv, pokračujte a vytvorte škatuľu a prútik úplne od začiatku! Existuje niekoľko návodov, ktoré vám pomôžu vytvoriť krásny prútik

Nech už si vyberiete akúkoľvek cestu, teraz je načase preskúmať vnútro škatule.

Krok 3: Hardvér vo vnútri

Hardvér vo vnútri
Hardvér vo vnútri
Hardvér vo vnútri
Hardvér vo vnútri
Hardvér vo vnútri
Hardvér vo vnútri

Na spájanie elektronických komponentov podľa schémy zapojenia vyššie použite spájkovačku. Existuje niekoľko vecí, ktorým by ste mali venovať osobitnú pozornosť:

  • Vodiče medzi Wemos D1 Mini a RGB LED diódou by mali byť dostatočne dlhé, aby bolo možné LED RGB namontovať do otvoru, ktorý ste urobili vo veku veka krabice.
  • To isté platí pre vodiče pripevnené k dočasnému spínaču a dotykovému senzoru, pretože tieto by mali byť prístupné cez druhý otvor vo veku.
  • Tlačidlo dočasného spínača by malo byť prilepené k spodnej strane (necitlivá strana) dotykového senzora takým spôsobom, aby ste mohli tlačidlo vrátiť späť na momentálny spínač s dotykovým senzorom nalepeným hore (pozri obrázok). Dotykový snímač je namontovaný na vrchu dočasného spínača, aby detekoval stlačenia tlačidiel vykonávané prstom, v takom prípade bude stlačenie tlačidla ignorované. Len vtedy, keď tlačidlo stlačí kúzelná palička (ktorá by mala byť nevodivá, takže plasty a drevo sú v poriadku), začne magický cyklus.
  • Namontujte chvíľkové tlačidlo s dotykovým senzorom hore, nie príliš hlboko pod otvor vo veku, pretože na to, aby sa kúzlo dalo do pohybu, musí byť dosiahnuteľné kúzelnou paličkou.
  • Pri spájkovaní dávajte pozor na polaritu kondenzátora. Ak obrátite kladné a záporné vodiče, kondenzátor pravdepodobne vydá kúzelný dym a váš obvod uvedie do večného spánku.
  • Prilepte, prilepte páskou alebo priskrutkujte držiak batérie a PCB na miesto. Nemusí to byť úhľadné, pretože to nebude v dohľade. Malo by to byť iba odolné voči pádu.

Prejdite na softvér!

Krok 4: Softvér

Uistite sa, že máte najnovší (bezplatný) softvérový editor Arduino, ktorý si môžete stiahnuť na https://www.arduino.cc/en/Main/Software. Ak chcete pridať podporu pre Wemos D1 mini a ďalšie dosky na báze ESP8266, vykonajte nasledujúce kroky:

  • Po inštalácii spustite softvér Arduino a otvorte okno Predvoľby.
  • Do poľa „Ďalšie adresy URL správcu“zadajte https://arduino.esp8266.com/stable/package_esp8266com_index.json. Môžete pridať viacero adries URL a oddeliť ich čiarkami.
  • Otvorte Správcu dosiek z ponuky Nástroje> ponuka Doska a nainštalujte platformu esp8266 (a po inštalácii nezabudnite vybrať dosku ESP8266 z ponuky Nástroje> Ponuka nástenky. „LOLIN (WEMOS) D1 R2 & mini“funguje najlepšie pre Wemos D1 mini v2 a v3 dosky.

Ak potrebujete ďalšiu pomoc s inštaláciou Arduina a nastavením ovládačov, môžete sa pozrieť na

V editore Arduino otvorte nový súbor (Súbor> Nový) a skopírujte/prilepte nižšie uvedený kód do okna, ktoré sa práve otvorilo. Stačí prepísať riadky, ktoré už sú v novom okne (neplatné nastavenie a prázdna slučka).

Teraz ste takmer pripravení, ale budete musieť prispôsobiť niekoľko kúskov kódu pre svoje konkrétne nastavenie.

Prvá vec, ktorú musíte urobiť, je zmeniť adresu IP na riadku 34 (v editore Arduino sú riadky kódu očíslované) na adresu IP vášho mosta Hue. Ak nepoznáte svoju IP adresu Hue Bridge, navštívte stránku https://discovery.meethue.com/ a správna adresa IP sa okamžite zobrazí vo vašom prehliadači. IP adresa je bodkované číslo, pred ktorým je „internalipaddress“.

Ak chcete komunikovať so svetlami Hue, musíte pre Wemos D1 mini vytvoriť používateľa rozhrania Hue API, aby mohol Wemos komunikovať so svetlom Hue prostredníctvom rozhrania Hue API. Ak to chcete urobiť, postupujte podľa pokynov na stránke https://developers.meethue.com/develop/get-started-2/ a skopírujte/prilepte vygenerované (dosť dlhé) používateľské meno do okna kódu Arduino. Stačí nahradiť každé „VAŠE UŽÍVATEĽSKÉ MENO API HUE“vygenerovaným používateľským menom API.

Potom musíte na zmenu farby vybrať správne svetlo Hue. V rozhraní Hue API má každé svetlo číslo, takže musíte zistiť číslo, ktoré zodpovedá svetlu, ktoré chcete použiť pre tento projekt. Jeden z najľahších spôsobov, ako zistiť, ktoré číslo má konkrétne svetlo, je stiahnuť si aplikáciu Hue Viewer pre Android alebo iOS. V okne s kódom Arduino nahraďte text „SVOJE ČÍSLO SVETLA“správnym číslom.

Posledná vec, ktorú musíte urobiť, je nastaviť Wemos na pripojenie k vašej sieti Wi -Fi. To sa deje nahraním kódu na server Wemos a na prenosnom počítači sa prepnite do inej siete Wi -Fi: do „AutoConnectAP“. Váš prehliadač potom zobrazí stránku, kde môžete pridať SSID (názov) a heslo vašej wifi siete, ktorú bude ovládač Wemos používať na pripojenie k vašej wifi sieti (a k mostu Hue).

Poznámka: Ak nahrávanie kódu do nášho Wemos D1 mini cez USB nefunguje, možno budete musieť stiahnuť ovládač Wemos na USB čip. Ovládač pre vašu platformu (Windows, Mac) si môžete stiahnuť na

Teraz ste pripravení otestovať svoju tvorbu!

// ESP8266 Hue Magic Wand // Richard van Kampen - 2018 // Tento kód je testovaný na Wemos D1 mini, ale pravdepodobne bude fungovať aj na iných vývojových doskách založených na ESP8266 // Pridanie podpory pre Wemos D1 mini a ďalšie dosky ESP8266 do editora Arduino, vykonajte nasledujúce kroky: // - Spustite Arduino a otvorte okno Predvoľby. // - Zadajte https://arduino.esp8266.com/stable/package_esp8266com_index.json do poľa Adresy URL doplnkového manažéra. Môžete pridať viacero adries URL a oddeliť ich čiarkami. // - Otvorte Správcu dosiek z ponuky Nástroje> ponuka Doska a nainštalujte platformu esp8266 (a po inštalácii nezabudnite vybrať dosku ESP8266 z ponuky Nástroje> ponuka Doska). // použité knižnice: #include "ESP8266WiFi.h" // ESP8266 Core WiFi Library #include "DNSServer.h" // Miestny server DNS používaný na presmerovanie všetkých požiadaviek na konfiguračný portál WiFiManager, ak nie sú k dispozícii žiadne nastavenia WIFI (SSID, heslo) ešte nebolo nastavené #include "ESP8266WebServer.h" // Miestny webový server slúžiaci na konfiguračný portál WiFiManager #include "WiFiManager.h" // Knižnica konfigurácie WiFi, ak ešte nie je nainštalovaná, navštívte stránku https://github.com/tzapu/WiFiManager #install-through-library-manager #include "RestClient.h" // https://github.com/fabianofranca/ESP8266RestClient, potrebný na používanie rozhrania Philips Hue API (pozri https://developers.meethue.com/develop/ odtieň-api/). #include "ArduinoJson.h" // https://github.com/bblanchon/ArduinoJson, potrebné na analýzu odozvy rozhrania Hue API, nainštalujte si verziu 5.x prostredníctvom správcu knižnice v Arduine (Menu „Skica“> Zahrnúť knižnicu> Spravovať Knižnice> vyhľadajte ArduinoJson a zmeňte verziu na najnovšiu verziu 5.x). Verzia 6 (momentálne v beta verzii) vyvoláva chybu. // premenné a init: odpoveď reťazca; const int redPin = 13; // na Wemose je to d7 const int greenPin = 12; // na Wemose je to d6 const int bluePin = 14; // na Wemose je to d5 const int touchSensor = 5; // na Wemos toto je d1 const int aktiváciaPin = 4; // na Wemos je to d2 bool aktivácia = VYSOKÁ; bool dotyk = NÍZKY; const char* aan_restore; int bri_restore; dvojité x_restore; double y_restore; dvojitý x_magic; dvojitý y_magic; bool prvý = pravda; nepodpísaný dlhý štartMillis; nepodpísaný dlhý prúdMillis; nepodpísané dlhé trvanieMillis; Klient RestClient = RestClient ("192.168.178.23"); // "vaša IP adresa Hue Bridge" // Ak nepoznáte svoju IP adresu Hue Bridge, navštívte stránku https://discovery.meethue.com a hneď sa zobrazí vo vašom prehliadači. IP adresa je bodkované číslo, ktorému predchádza „internalipaddress“void setup () {analogWriteRange (255); Serial.begin (9600); // Začnite vypnutím LED. pinMode (activationPin, INPUT_PULLUP); pinMode (touchSensor, INPUT); startMillis = millis (); checkWand (); } void loop () {// tu nie je čo robiť, nechajte prázdne …} void checkWand () {int rgbColour [3]; // Kód farby RGB od Jamesa Hartona, https://gist.github.com/jamesotron/766994 // Začnite červenou farbou. rgbColour [0] = 255; rgbColour [1] = 0; rgbColour [2] = 0; activation = digitalRead (activationPin); // LOW znamená, že sa používa prútik. touch = digitalRead (touchSensor); // HIGH znamená, že namiesto prútika sa používa prst, čo by tak nemalo byť. while (activation == LOW && touch == LOW) {// Vyberte farby na zvýšenie a zníženie. pre (int decColour = 0; decColour <3; decColour += 1) {int incColour = decColour == 2? 0: decColour + 1; // = ternárny operátor, znamená: int incColour; if (decColour == 2) {incColour = 0;} else {incColour = decColour +1;} // cross-fade the two colors. pre (int i = 0; i <255; i += 1) {rgbColour [decColour] -= 1; rgbColour [incColour] += 1; // keďže naša RGB dióda má namiesto katódy spoločnú anódu (potrebujeme sa teda pripojiť na +3,3 V namiesto zeme), potrebujeme pre RGB inverzné hodnoty: int red = 255 - rgbColour [0]; int zelená = 255 - rgbColour [1]; int modrá = 255 - rgbColour [2]; analogWrite (redPin, červený); analogWrite (greenPin, zelený); analogWrite (bluePin, modrý); oneskorenie (8); aktivácia = digitalRead (activationPin); if (aktivácia == VYSOKÁ) {// VYSOKÁ znamená, že prútik je zdvihnutý. choďte na stopColorCycling; }}}} stopColorCycling: currentMillis = millis (); durationMillis = (currentMillis - startMillis); if (durationMillis> 1000) {RGBtoxy (rgbColour [0], rgbColour [1], rgbColour [2]); } else {// prepnite Wemos do režimu spánku: ESP.deepSleep (0); }} void RGBtoxy (int červená, zelená, modrá modrá) {// pozri https://developers.meethue.com/documentation/color-conversions-rgb-xy double R = mapa (červená, 0, 255, 0, 1 000); R /= 1000; dvojité G = mapa (zelená, 0, 255, 0, 1000); G /= 1000; dvojité B = mapa (modrá, 0, 255, 0, 1000); B /= 1000; R = (R> 0,04045f)? prášok ((R + 0,055f) / (1,0f + 0,055f), 2,4f): (R / 12,92f); G = (G> 0,04045f)? prášok ((G + 0,055f) / (1,0f + 0,055f), 2,4f): (G / 12,92f); B = (B> 0,04045f)? prášok ((B + 0,055f) / (1,0f + 0,055f), 2,4f): (B / 12,92f); dvojnásobok X = R * 0,649926f + G * 0,103455f + B * 0,197109f; dvojnásobok Y = R * 0,234327f + G * 0,743075f + B * 0,022598f; dvojnásobok Z = R * 0,0000000f + G * 0,053077f + B * 1,035763f; dvojnásobok x = X / (X + Y + Z); dvojnásobok y = Y / (X + Y + Z); // prevod nie je úplne dokončený, ale pravdepodobne dosť dobrý na to, čo chceme dosiahnuť, nechajte to tak a pošlite hodnoty XY na lampu: sendtoHue (x, y); } neplatné sendtoHue (dvojité a, dvojité b) {// skutočná zmena farby oproti kúzlu prútika, ak (prvý) {// prvý prechod: zistí aktuálny stav žiarovky getCurrentValues (); } // potom pošli farby čarovnej paličky: // čakaj na kúzlo: dlhé čakanie; x_magic = a; y_magic = b; // lampa svieti farbou čarovného prútika: response = ""; int temp = random (2, 9); const char* state = "true"; for (int i = 1; i <= temp; i ++) {// vytvorte pole char na odoslanie na most: Reťazec temp_body1 = "{" on / ":" + String (stav) + ", \" bri / ": 220, / "xy \": [" + Reťazec (x_magic) +", " + Reťazec (y_magic) +"], / "doba prechodu \": 1} "; int str_len1 = temp_body1.length () + 1; char post_body1 [str_len1]; temp_body1.toCharArray (post_body1, str_len1); // teraz máme post_body1 ako pole char; // zavolajte inak: int statusCodePut1 = client.put ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body1, & response); čakať = náhodne (100, 600); oneskorenie (čakanie); if (state == "true") {state = "false"; } else {state = "true"; }} // znížiť jas …: response = ""; teplota = náhodná (4, 17); // vytvorenie poľa char na odoslanie na most: 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); // teraz máme post_body2 ako pole char; // zavolajte inak: int statusCodePut2 = client.put ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body2, & response); čakať = náhodne (1 000, 2 500); oneskorenie (čakanie); //..a znova zosvetliť: response = ""; teplota = náhodná (4, 17); // vytvorenie poľa char na odoslanie na most: String temp_body3 = "{" bri_inc / ": 100, \" transitiontime / ":}"; int str_len3 = temp_body3.length () + 1; char post_body3 [str_len3]; temp_body3.toCharArray (post_body3, str_len3); // teraz máme post_body3 ako pole char; // zavolajte inak: int statusCodePut3 = client.put ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body3, & response); čakať = náhodne (2500, 5000); // čakanie 2-5 sekúnd oneskorenie (čakanie); // návrat k starej hodnote: response = ""; // vytvorenie poľa char na odoslanie na most: String temp_body4 = "{" on / ":" + String (aan_restore) + ", \" bri / ":" + String (bri_restore) + ", \" xy / ": [" + String (x_restore) +", " + String (y_restore) +"], / "transitiontime \": " + String (20) +"} "; int str_len4 = temp_body4.length () + 1; char post_body4 [str_len4]; temp_body4.toCharArray (post_body4, str_len4); // teraz máme post_body4 ako pole char; // zavolajte inak: int statusCodePut4 = client.put ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body4, & response); ESP.deepSleep (0); // idem znova spat …. } unsigned int getCurrentValues () {connectWifi (); // prvé pripojenie k Wifi response = ""; // zavolajte inak: int statusCodeGet = client.get ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER", & response); Serial.print ("Stavový kód zo servera po GET:"); Serial.println (statusCodeGet); Serial.print ("Telo odpovede zo servera:"); Serial.println (odpoveď); StaticJsonBuffer jsonBuffer; // Analýza odpovede Jsona // Root stromu objektov. // // // Je to odkaz na JsonObject, skutočné bajty sú vo // jsonBuffer so všetkými ostatnými uzlami stromu objektov. // Pamäť sa uvoľní, keď sa jsonBuffer dostane mimo rozsah. JsonObject & root = jsonBuffer.parseObject (odpoveď); JsonObject & state = root ["state"]; // Otestujte, či je analýza úspešná. if (! root.success ()) {Serial.println ("parseObject () zlyhal"); } // Načítanie hodnôt. aan_restore = state ["zapnuté"]; Serial.println (aan_restore); bri_restore = štát ["bri"]; x_restore = stav ["xy"] [0]; y_restore = stav ["xy"] [1]; first = false;} void connectWifi () {// Miestna inicializácia. Akonáhle je jeho činnosť hotová, nie je potrebné ho držať okolo WiFiManager wifiManager; // reset nastavení - na testovanie: //wifiManager.resetSettings (); // nastavenie spätného volania, ktoré sa zavolá pri zlyhaní predchádzajúceho pripojenia WiFi, a prejde do režimu prístupového bodu wifiManager.setAPCallback (configModeCallback); // načíta ssid a prejde a pokúsi sa pripojiť // ak sa nepripojí, spustí prístupový bod so zadaným názvom // tu „AutoConnectAP“// a prejde do blokovacej slučky čakajúcej na konfiguráciu if (! wifiManager.autoConnect ()) {Serial.println ("nepodarilo sa pripojiť a vypršal časový limit"); // resetujte a skúste to znova, alebo ho dajte do hlbokého spánku ESP.reset (); oneskorenie (1000); } // ak sa sem dostanete, ste pripojení k sieti Wi -Fi Serial.println („pripojené … áno:)“); Serial.print ("Pripojené k:"); Serial.println (WiFi. SSID ()); Serial.print ("IP adresa:"); Serial.println (WiFi.localIP ()); // IP adresa priradená vášmu ESP (Wemos) // vytlačte silu prijatého signálu: long rssi = WiFi. RSSI (); Serial.print ("sila signálu (RSSI):"); Serial.println (rssi); } void configModeCallback (WiFiManager * myWiFiManager) {Serial.println ("vstúpil do režimu konfigurácie"); Serial.println (WiFi.softAPIP ()); // ak ste použili automaticky generovaný SSID, vytlačte ho Serial.println (myWiFiManager-> getConfigPortalSSID ()); }

Odporúča: