Obsah:

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

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

Video: Hue Magic: 4 kroky (s obrázky)
Video: Sensational Door Illusion - Magic Perspective With Pencil - Trick Art Drawing 2024, Listopad
Anonim
Image
Image

Vítejte čarodějové!

Před pár měsíci jsem vytvořil malou kouzelnou krabičku s hůlkou pro svého 3letého syna. Když se hůlkou dotkne krabice, začne z krabice vyzařovat měnící se barevné světlo. Když vidí barvu, která se mu obzvláště líbí, může namířit hůlku na stolní lampu (s žárovkou Philips Hue uvnitř), vrhnout kouzlo a barva z krabice magicky přeskočí na lampu! Lampa a světlo z krabice mají najednou stejnou barvu …

Po několika sekundách barva zmizí a stolní lampa se vrátí do stavu před kouzlem. Dokud nebude sesláno nové kouzlo …

Krok 1: Co potřebujete k vytvoření tohoto projektu

Co potřebujete k vytvoření tohoto projektu
Co potřebujete k vytvoření tohoto projektu
Co potřebujete k vytvoření tohoto projektu
Co potřebujete k vytvoření tohoto projektu
Co potřebujete k vytvoření tohoto projektu
Co potřebujete k vytvoření tohoto projektu

K vytvoření tohoto projektu budete potřebovat následující materiály:

    • 1 (nebo více) barevná žárovka Philips Hue a most Hue
    • 1 Wemos D1 mini nebo podobný mikrořadič na bázi esp8266
    • 1 (Arduino) dotykový senzor (např. TTP223R)
    • 1 (Arduino) momentální tlačítko
    • 1 10uF kondenzátor
    • 1 RGB LED (běžný typ anody)
    • 5 rezistorů (10, 22 a 47 Ohm, 2x 10K Ohm)
    • 2 malé prototypové desky plošných spojů (2x3 palce nebo asi 5x7 cm by měly být dostatečně velké)
    • některé (propojovací) vodiče
    • páječka
    • kouzelná hůlka (lze koupit jako hotovou v hračkářství, nebo si ji můžete vyrobit sami)
    • malá krabice z lepenky nebo dřeva (může to být stávající krabice, ale samozřejmě si můžete postavit krabici od nuly)
    • nějaká páska
    • nějaké lepidlo a/nebo matice a šrouby pro montáž desek plošných spojů do krabice.
    • volitelně: balicí papír pro krabici

Poznámka: Při procházení tohoto instrukce je užitečné malé množství zkušeností se čtením schémat zapojení. Můj diagram není příliš složitý: pokud dokážete odlišit kondenzátor od rezistoru, pravděpodobně budete v pořádku.

Užitečné jsou také určité zkušenosti s programováním Arduino pomocí Arduino IDE. Měly by stačit spíše základní zkušenosti, protože poskytnu kompletní kód, který můžete zkopírovat/vložit. Budete však muset upravit několik věcí, aby to fungovalo ve vašem konkrétním nastavení (např. Nastavení sítě a některé podrobnosti z konfigurace Hue). Pokud to zní trochu zastrašující, nebojte se, pomůžu vám získat všechny potřebné informace.

Krok 2: Box a hůlka

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

První kroky jsou obvykle nejtěžší, ale ne v tomto návodu! Pro snadný začátek si můžete koupit kouzelnou hůlku v hračkářství a pro krabici můžete jednoduše znovu použít stávající malou krabičku, ve které jste už leželi. Jen se ujistěte, že krabice není vyrobena z kovu, protože to zablokuje signály wifi a potřebujeme je pro magii;-).

Když upravíte stávající krabici, jediné, co musíte udělat, je vytvořit v horní části krabice dva otvory: 1 malý otvor (velikost 5 mm = 0,2 ") pro LED diodu RGB a větší otvor (přibližně 12- 14 mm nebo asi 0,5 ") pro dotykový senzor.

Přesné umístění otvorů není rozhodující, umístěte je podle svého smyslu pro estetiku, ale mějte na paměti několik věcí:

  • Mezi oběma otvory udržujte určitou vzdálenost, abyste se ujistili, že součásti, které budou namontovány pod otvory (LED dioda RGB a dotykový senzor), budou moci zabírat dostatek místa pro montáž a zapojení.
  • Největší otvor je pro dotykový senzor. Tento senzor bude namontován těsně pod otvor takovým způsobem, aby se ho hůlka mohla dotknout (a dokonce ho i mírně přitlačit). Ujistěte se tedy, že kupovaná hůlka není příliš tlustá!

Volitelně můžete použít (sprej) barvu nebo balicí papír a krycí plast, aby byla vaše krabice o něco hezčí a chráněna před rozlitím jídla a špinavými rukama.

Pokud je tento první krok příliš málo ambiciózní podle vašich představ, pokračujte a vytvořte krabici a hůlku úplně od začátku! Existuje několik instrukcí, které vám pomohou vytvořit krásnou hůlku

Ať už si vyberete jakoukoli cestu, nyní je čas prozkoumat vnitřek krabice.

Krok 3: Hardware uvnitř

Hardware uvnitř
Hardware uvnitř
Hardware uvnitř
Hardware uvnitř
Hardware uvnitř
Hardware uvnitř

Pomocí páječky připojte elektronické součástky podle výše uvedeného schématu zapojení. Existuje několik věcí, kterým je třeba věnovat zvláštní pozornost:

  • Vodiče mezi Wemos D1 Mini a RGB LED diodou by měly být dostatečně dlouhé, aby bylo možné LED RGB namontovat do otvoru, který jste vytvořili ve víku krabice.
  • To samé platí pro vodiče připojené k momentálnímu spínači a dotykovému senzoru, protože ty by měly být přístupné přes druhý otvor ve víku.
  • Tlačítko dočasného spínače by mělo být nalepeno na spodní stranu (necitlivá strana) dotykového senzoru takovým způsobem, abyste mohli tlačítko vrátit zpět na momentální spínač s dotykovým senzorem nalepeným nahoře (viz obrázek). Dotykový senzor je namontován v horní části dočasného spínače, aby detekoval stisknutí tlačítka provedené prstem, v takovém případě bude stisknutí tlačítka ignorováno. Pouze když tlačítko stiskne kouzelná hůlka (která by měla být nevodivá, takže plasty a dřevo jsou v pořádku), začne magický cyklus.
  • Namontujte chvilkové tlačítko s dotykovým senzorem nahoru, ne příliš hluboko pod otvor ve víku, protože k uvedení kouzla do pohybu musí být dosažitelné kouzelnou hůlkou.
  • Při pájení dbejte na polaritu kondenzátoru. Pokud obrátíte kladné a záporné vodiče, kondenzátor pravděpodobně vydá kouzelný kouř a váš obvod uvede do věčného spánku.
  • Přilepte, nalepte pásku nebo přišroubujte držák baterie a desky plošných spojů na místo. Nemusí to být úhledné, protože to nebude na dohled. Mělo by to být jen odolné proti pádu.

Přejít na software!

Krok 4: Software

Ujistěte se, že máte nejnovější (bezplatný) softwarový editor Arduino, který lze stáhnout na https://www.arduino.cc/en/Main/Software. Chcete-li přidat podporu pro Wemos D1 mini a další desky založené na ESP8266, proveďte následující kroky:

  • Po instalaci spusťte software Arduino a otevřete okno Předvolby.
  • Do pole „Další adresy URL správce tabule“zadejte https://arduino.esp8266.com/stable/package_esp8266com_index.json. Můžete přidat více adres URL a oddělit je čárkami.
  • Otevřete Správce desek v nabídce Nástroje> Nabídka desky a nainstalujte platformu esp8266 (a nezapomeňte po instalaci vybrat desku ESP8266 z nabídky Nástroje> Nabídka desky. „LOLIN (WEMOS) D1 R2 & mini“funguje nejlépe pro Wemos D1 mini v2 a v3 desky.

Pokud potřebujete další pomoc s instalací Arduina a nastavením ovladačů, můžete se podívat na

V editoru Arduino otevřete nový soubor (Soubor> Nový) a zkopírujte/vložte níže uvedený kód do okna, které se právě otevřelo. Stačí přepsat řádky, které jsou již v novém okně (neplatné nastavení a prázdná smyčka).

Nyní jste téměř připraveni, ale budete muset přizpůsobit několik částí kódu pro vaše konkrétní nastavení.

První věcí, kterou musíte udělat, je změnit adresu IP na řádku 34 (v editoru Arduino jsou řádky kódu očíslovány) na adresu IP vašeho mostu Hue. Pokud neznáte svoji IP adresu Hue Bridge, navštivte https://discovery.meethue.com/ a správná IP adresa se objeví hned ve vašem prohlížeči. IP adresa je tečkované číslo, kterému předchází „internalipaddress“.

Abyste mohli komunikovat se světly Hue, musíte pro uživatele Wemos D1 mini vytvořit uživatele Hue API, aby mohl Wemos komunikovat se světlem Hue prostřednictvím rozhraní Hue API. Chcete-li to provést, postupujte podle pokynů na https://developers.meethue.com/develop/get-started-2/ a zkopírujte/vložte vygenerované (docela dlouhé) uživatelské jméno do okna kódu Arduino. Stačí nahradit každé „VAŠE UŽIVATELSKÉ JMÉNO API API“vygenerovaným uživatelským jménem API.

Poté musíte pro změnu barvy vybrat správné světlo Hue. V rozhraní Hue API má každé světlo číslo, takže musíte zjistit číslo, které odpovídá světlu, které chcete pro tento projekt použít. Jedním z nejjednodušších způsobů, jak zjistit, jaké číslo má konkrétní světlo, je stáhnout si aplikaci Hue Viewer pro Android nebo iOS. V okně kódu Arduino nahraďte text „SVÉ ČÍSLO SVĚTLA“správným číslem.

Poslední věc, kterou musíte udělat, je nastavit Wemos pro připojení k vaší síti Wi -Fi. To se provádí nahráním kódu na Wemos a na vašem notebooku přepněte do jiné wifi sítě: na „AutoConnectAP“. Váš prohlížeč poté zobrazí stránku, kde můžete přidat SSID (název) a heslo vaší wifi sítě, kterou bude ovladač Wemos používat k připojení k vaší wifi síti (a k mostu Hue).

Poznámka: Pokud odesílání kódu do našeho Wemos D1 mini přes USB nefunguje, možná budete muset stáhnout ovladač pro USB čip na Wemos. Ovladač pro vaši platformu (Windows, Mac) lze stáhnout na adrese

Nyní jste připraveni otestovat svůj výtvor!

// ESP8266 Hue Magic Wand // Richard van Kampen - 2018 // Tento kód je testován na Wemos D1 mini, ale pravděpodobně bude fungovat i na dalších vývojových deskách založených na ESP8266 // Přidání podpory pro Wemos D1 mini a další desky ESP8266 do editoru Arduino, proveďte následující kroky: // - Spusťte Arduino a otevřete okno Předvolby. // - Do pole Adresy URL dalších správců zadejte https://arduino.esp8266.com/stable/package_esp8266com_index.json. Můžete přidat více adres URL a oddělit je čárkami. // - Otevřete Správce desek v nabídce Nástroje> Nabídka Deska a nainstalujte platformu esp8266 (a nezapomeňte po instalaci vybrat desku ESP8266 z nabídky Nástroje> Nabídka Deska). // použité knihovny: #include "ESP8266WiFi.h" // ESP8266 Core WiFi Library #include "DNSServer.h" // Místní server DNS používaný k přesměrování všech požadavků na konfigurační portál WiFiManager, pokud nemá žádné nastavení WIFI (SSID, heslo) ještě nebylo nastaveno. #include "ESP8266WebServer.h" // Místní webový server sloužící k obsluze konfiguračního portálu WiFiManager #include "WiFiManager.h" // Kouzelná knihovna konfigurace WiFi, pokud ještě není nainstalována, podívejte se na https://github.com/tzapu/WiFiManager #install-through-library-manager #include "RestClient.h" // https://github.com/fabianofranca/ESP8266RestClient, potřebný pro použití API Philips Hue (viz https://developers.meethue.com/develop/ hue-api/). #include "ArduinoJson.h" // https://github.com/bblanchon/ArduinoJson, potřebné k analýze odezvy rozhraní Hue API, nainstalujte prosím verzi 5.x prostřednictvím správce knihovny v Arduinu (Nabídka "Skica"> Zahrnout knihovnu> Spravovat Knihovny> vyhledejte ArduinoJson a změňte verzi na nejnovější 5.x). Verze 6 (aktuálně v beta verzi) vyvolá chybu. // proměnné a init: Odpověď řetězce; const int redPin = 13; // na Wemos to je d7 const int greenPin = 12; // na Wemos to je d6 const int bluePin = 14; // na Wemos toto je d5 const int touchSensor = 5; // na Wemos toto je d1 const int aktivace Pin = 4; // na Wemos to je d2 bool aktivace = VYSOKÁ; bool touch = LOW; const char* aan_restore; int bri_restore; dvojité x_restore; double y_restore; double x_magic; double y_magic; bool první = pravda; nepodepsaný dlouhý startMillis; nepodepsaný dlouhý proud Millis; nepodepsané dlouhé trvání Millis; Klient RestClient = RestClient ("192.168.178.23"); // "vaše IP adresa Hue Bridge" // Pokud neznáte svoji IP adresu Hue Bridge, navštivte https://discovery.meethue.com a hned se zobrazí ve vašem prohlížeči. IP adresa je tečkované číslo, kterému předchází „internalipaddress“void setup () {analogWriteRange (255); Serial.begin (9600); // Začněte s vypnutou LED. pinMode (activationPin, INPUT_PULLUP); pinMode (touchSensor, INPUT); startMillis = millis (); checkWand (); } void loop () {// zde není co dělat, ponechte prázdné …} void checkWand () {int rgbColour [3]; // Barevný kód RGB od Jamese Hartona, https://gist.github.com/jamesotron/766994 // Začněte červenou barvou. rgbColour [0] = 255; rgbColour [1] = 0; rgbColour [2] = 0; aktivace = digitalRead (activationPin); // LOW znamená, že se používá hůlka. touch = digitalRead (touchSensor); // HIGH znamená, že místo hůlky se používá prst, což by nemělo být. while (aktivace == LOW && touch == LOW) {// Vyberte barvy pro zvýšení a snížení. pro (int decColour = 0; decColour <3; decColour += 1) {int incColour = decColour == 2? 0: decColour + 1; // = ternární operátor, znamená: int incColour; if (decColour == 2) {incColour = 0;} else {incColour = decColour +1;} // cross-fade the two colors. pro (int i = 0; i <255; i += 1) {rgbColour [decColour] -= 1; rgbColour [incColour] += 1; // jelikož naše RGB dioda má místo katody společnou anodu (potřebujeme tedy připojit místo +3,3 V místo uzemnění), potřebujeme pro 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ý); zpoždění (8); aktivace = digitalRead (activationPin); if (aktivace == VYSOKÁ) {// VYSOKÁ znamená zvednutí hůlky. přejít na stopColorCycling; }}}} stopColorCycling: currentMillis = millis (); durationMillis = (currentMillis - startMillis); if (durationMillis> 1000) {RGBtoxy (rgbColour [0], rgbColour [1], rgbColour [2]); } else {// uveďte Wemose do spánkového režimu: ESP.deepSleep (0); }} void RGBtoxy (int červená, zelená zelená, modrá modrá) {// viz https://developers.meethue.com/documentation/color-conversions-rgb-xy double R = mapa (červená, 0, 255, 0, 1000); R /= 1000; dvojité G = mapa (zelená, 0, 255, 0, 1000); G /= 1000; double B = mapa (modrá, 0, 255, 0, 1000); B /= 1000; R = (R> 0,04045f)? prášek ((R + 0,055f) / (1,0f + 0,055f), 2,4f): (R / 12,92f); G = (G> 0,04045f)? prášek ((G + 0,055f) / (1,0f + 0,055f), 2,4f): (G / 12,92f); B = (B> 0,04045f)? prášek ((B + 0,055f) / (1,0f + 0,055f), 2,4f): (B / 12,92f); dvojnásobek X = R * 0,649926f + G * 0,103455f + B * 0,197109f; dvojnásobek Y = R * 0,234327f + G * 0,743075f + B * 0,022598f; dvojnásobek Z = R * 0,0000000f + G * 0,053077f + B * 1,035763f; dvojnásobek x = X / (X + Y + Z); dvojité y = Y / (X + Y + Z); // převod není zcela dokončen, ale pravděpodobně dost dobrý na to, čeho chceme dosáhnout, takže toho nechte a odešlete hodnoty XY na lampu: sendtoHue (x, y); } void sendtoHue (double a, b) {// skutečná změna barvy kouzlem hůlky if (first) {// first pass: get current state state getCurrentValues (); } // pak odešlete barvy kouzelné hůlky: // čekejte na kouzlo: dlouhé čekání; x_magic = a; y_magic = b; // lampa v kouzelné hůlce barva: response = ""; int temp = random (2, 9); const char* state = "true"; for (int i = 1; i <= temp; i ++) {// vytvoření pole char pro odeslání na můstek: String temp_body1 = "{" on / ":" + String (state) + ", \" bri / ": 220, / "xy \": [" + String (x_magic) +", " + String (y_magic) +"], / "transitiontime \": 1} "; int str_len1 = temp_body1.length () + 1; char post_body1 [str_len1]; temp_body1.toCharArray (post_body1, str_len1); // nyní máme post_body1 jako char pole; // volání rest: int statusCodePut1 = client.put ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body1, & response); čekat = náhodně (100, 600); zpoždění (čekání); if (state == "true") {state = "false"; } else {state = "true"; }} // snížit jas …: response = ""; temp = náhodný (4, 17); // vytvoření pole char k odeslání na můstek: 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); // nyní máme post_body2 jako char pole; // volání rest: int statusCodePut2 = client.put ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body2, & response); čekat = náhodně (1000, 2500); zpoždění (čekání); //..a znovu zesvětlit: response = ""; temp = náhodný (4, 17); // vytvoření pole char pro odeslání na můstek: 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); // nyní máme post_body3 jako char pole; // volání rest: int statusCodePut3 = client.put ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body3, & response); čekat = náhodně (2500, 5000); // čekání 2-5 sekund zpoždění (čekání); // a návrat na starou hodnotu: response = ""; // vytvoření pole char k odeslání na můstek: 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); // nyní máme post_body4 jako char pole; // volání rest: int statusCodePut4 = client.put ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body4, & response); ESP.deepSleep (0); // zase spát … } unsigned int getCurrentValues () {connectWifi (); // první připojení k Wifi response = ""; // zavolejte zbytek: int statusCodeGet = client.get ("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER", & response); Serial.print ("Stavový kód ze serveru po GET:"); Serial.println (statusCodeGet); Serial.print ("Tělo odpovědi ze serveru:"); Serial.println (odpověď); StaticJsonBuffer jsonBuffer; // Analýza odpovědi JSON // Kořen stromu objektů. // // // Je to odkaz na JsonObject, skutečné bajty jsou uvnitř // jsonBuffer se všemi ostatními uzly stromu objektů. // Paměť se uvolní, když se jsonBuffer dostane mimo rozsah. JsonObject & root = jsonBuffer.parseObject (odpověď); JsonObject & state = root ["state"]; // Otestujte, zda je analýza úspěšná. if (! root.success ()) {Serial.println ("parseObject () failed"); } // Načíst hodnoty. aan_restore = state ["on"]; Serial.println (aan_restore); bri_restore = state ["bri"]; x_restore = stav ["xy"] [0]; y_restore = stav ["xy"] [1]; first = false;} void connectWifi () {// Místní inicializace. Jakmile je jeho podnikání hotové, není třeba jej udržovat kolem WiFiManager wifiManager; // reset nastavení - pro testování: //wifiManager.resetSettings (); // nastavení zpětného volání, které se zavolá při selhání předchozího připojení WiFi, a přejde do režimu přístupového bodu wifiManager.setAPCallback (configModeCallback); // načte ssid a projde a pokusí se připojit // pokud se nepřipojí, spustí přístupový bod se zadaným názvem // zde „AutoConnectAP“// a přejde do blokovací smyčky čekající na konfiguraci if (! wifiManager.autoConnect ()) {Serial.println ("nepodařilo se připojit a vypršel časový limit"); // reset a zkus to znovu, nebo to dej do hlubokého spánku ESP.reset (); zpoždění (1000); } // pokud se sem dostanete, připojili jste se k WiFi Serial.println ("připojeno … jo:)"); Serial.print ("Připojeno k:"); Serial.println (WiFi. SSID ()); Serial.print ("IP adresa:"); Serial.println (WiFi.localIP ()); // IP adresa přiřazená vašemu ESP (Wemos) // vytiskne sílu přijímaného signálu: long rssi = WiFi. RSSI (); Serial.print ("síla signálu (RSSI):"); Serial.println (rssi); } void configModeCallback (WiFiManager * myWiFiManager) {Serial.println ("Vstup do konfiguračního režimu"); Serial.println (WiFi.softAPIP ()); // pokud jste použili automaticky generovaný SSID, vytiskněte jej Serial.println (myWiFiManager-> getConfigPortalSSID ()); }

Doporučuje: