Sadržaj:

Hue Magic: 4 koraka (sa slikama)
Hue Magic: 4 koraka (sa slikama)

Video: Hue Magic: 4 koraka (sa slikama)

Video: Hue Magic: 4 koraka (sa slikama)
Video: СВИСТОК СМЕРТИ ночью НА КЛАДБИЩЕ / Призрак ребёнка в видео / Aztec Death Whistle 2024, Jun
Anonim
Image
Image

Dobro došli čarobnjaci!

Prije par mjeseci stvorio sam malu čarobnu kutiju sa štapićem za svog trogodišnjeg sina. Kad dodirne kutiju štapićem, svjetlost u promjeni u boji će početi emitirati iz kutije. Kad vidi boju koja mu se posebno sviđa, može usmjeriti štapić prema stolnoj svjetiljci (sa sijalicom Philips Hue unutra), baciti čini i boja iz kutije će magično skočiti do lampe! Lampa i svjetlo iz kutije odjednom imaju istu boju …

Nakon nekoliko sekundi boja nestaje i stolna lampa se vraća u stanje prije čarolije. Dok se ne baci nova čarolija …

Korak 1: Šta vam je potrebno za kreiranje ovog projekta

Šta vam je potrebno za kreiranje ovog projekta
Šta vam je potrebno za kreiranje ovog projekta
Šta vam je potrebno za kreiranje ovog projekta
Šta vam je potrebno za kreiranje ovog projekta
Šta vam je potrebno za kreiranje ovog projekta
Šta vam je potrebno za kreiranje ovog projekta

Za izradu ovog projekta trebat će vam sljedeći materijali:

    • 1 (ili više) sijalica u boji Philips Hue i most Hue
    • 1 Wemos D1 mini ili sličan mikrokontroler zasnovan na esp8266
    • 1 (Arduino) senzor dodira (npr. TTP223R)
    • 1 (Arduino) trenutno dugme
    • 1 10uF kondenzator
    • 1 RGB LED (uobičajena anoda)
    • 5 otpornika (10, 22 i 47 Ohm, 2x 10K Ohm)
    • 2 male prototipne štampane ploče (2x3 inča ili oko 5x7 cm trebale bi biti dovoljno velike)
    • neke (kratkospojne) žice
    • lemilicu
    • čarobni štapić (može se kupiti kao gotov u trgovini igračkama ili ga možete sami napraviti)
    • mala kutija od kartona ili drveta (može biti postojeća kutija, ali možete napraviti i kutiju od nule, naravno)
    • neku traku
    • malo ljepila i/ili matica i vijaka za postavljanje PCB -a u kutiju.
    • opcionalno: papir za omatanje kutije

Napomena: Malo iskustva u čitanju dijagrama kola korisno je prilikom prolaska kroz ovo uputstvo. Moj dijagram nije pretjerano složen: ako možete razlikovati kondenzator od otpornika, vjerojatno ćete biti u redu.

Neko iskustvo s Arduino programiranjem pomoću Arduino IDE -a je također korisno. Umjesto toga, osnovno iskustvo bi trebalo biti dovoljno, jer ću vam pružiti potpuni kod za kopiranje/lijepljenje. Morat ćete ipak prilagoditi nekoliko stvari kako bi funkcionirao u vašim postavkama (npr. Vaše mrežne postavke i neke pojedinosti iz konfiguracije Hue). Ako ovo zvuči pomalo zastrašujuće, ne brinite, pomoći ću vam da pronađete sve potrebne informacije.

Korak 2: Kutija i štapić

Kutija i štapić
Kutija i štapić
Kutija i štapić
Kutija i štapić

Prvi koraci su obično najteži, ali ne u ovom uputstvu! Za lak početak, možete jednostavno kupiti čarobni štapić u trgovini igračkama, a za kutiju možete jednostavno ponovno upotrijebiti postojeću malu kutiju oko koje ste već ležali. Samo pazite da kutija nije od metala jer će to blokirati wifi signale, a oni su nam potrebni za magiju;-).

Kada ponovo namjeravate postojeću kutiju, jedino što trebate učiniti je napraviti dvije rupe na vrhu kutije: 1 mala rupa (veličina 5 mm = 0,2 ") za RGB LED i veća rupa (oko 12- 14 mm ili oko 0,5 ") za senzor za dodir.

Tačan položaj rupa nije kritičan, samo ih postavite prema svom osjećaju za estetiku, ali imajte na umu nekoliko stvari:

  • Držite određenu udaljenost između obje rupe kako biste bili sigurni da komponente koje će biti postavljene ispod rupa (RGB LED dioda i osjetnik na dodir) mogu zauzeti dovoljno prostora za montažu i ožičenje.
  • Najveća rupa je za senzor dodira. Ovaj će senzor biti postavljen odmah ispod rupe, na takav način da ga može dodirnuti (pa čak i lagano pritisnuti) štapićem. Zato pazite da štapić koji kupite nije previše gust!

Po želji možete upotrijebiti (raspršiti) boju ili papir za omatanje i pokriti plastiku kako biste kutiju učinili malo ljepšom i zaštitili je od prosipanja hrane i prljavih ruku.

Ako vam je ovaj prvi korak previše neambiciozan po želji, nastavite i stvorite kutiju i štapić u potpunosti od nule! Postoji nekoliko instrukcija koje vam mogu pomoći da stvorite prekrasan štapić

Koji god put odabrali, vrijeme je da istražite unutrašnjost kutije.

Korak 3: Hardver iznutra

Hardver iznutra
Hardver iznutra
Hardver iznutra
Hardver iznutra
Hardver iznutra
Hardver iznutra

Za spajanje elektroničkih komponenti koristite lemilicu prema gornjoj shemi kola. Postoji nekoliko stvari na koje treba obratiti posebnu pažnju:

  • Žice između Wemos D1 Mini i RGB LED diode trebale bi biti dovoljno dugačke da se RGB LED može montirati u rupu koju ste napravili na poklopcu kutije.
  • Isto se računa i za žice pričvršćene na trenutni prekidač i osjetnik na dodir jer bi im trebale biti pristupačne kroz drugu rupu na poklopcu.
  • Dugme trenutnog prekidača treba zalepiti na donju stranu (neosetljivu stranu) senzora za dodir, na način da možete vratiti dugme na trenutni prekidač sa senzorom za dodir zalepljenim na vrhu (vidi sliku). Senzor dodira je montiran na vrhu trenutnog prekidača kako bi otkrio pritiske tastera prstom, u tom slučaju se pritisak na dugme zanemaruje. Čarobni ciklus započinje tek kada čarobni štapić pritisne dugme (koje bi trebalo biti neprovodljivo, pa su plastika i drvo u redu).
  • Postavite trenutno dugme sa senzorom dodira na vrh, ne previše duboko ispod otvora na poklopcu, jer mora biti dostupno pomoću čarobnog štapića da bi se magija pokrenula.
  • Prilikom lemljenja pazite na polaritet kondenzatora. Ako preokrenete pozitivne i negativne vodiče, kondenzator će vjerojatno ispustiti malo čarobnog dima i staviti vaš krug u vječni san.
  • Zalijepite, zalijepite i / ili pričvrstite držač baterije i PCB -ove na mjesto. Ne mora biti uredno jer se neće vidjeti. To bi trebao biti samo dokaz ispuštanja.

Naprijed na softver!

Korak 4: Softver

Provjerite imate li najnoviji (besplatni) uređivač softvera Arduino, koji se može preuzeti na https://www.arduino.cc/en/Main/Software. Da biste dodali podršku za Wemos D1 mini i druge ploče zasnovane na ESP8266, poduzmite sljedeće korake:

  • Nakon instalacije pokrenite Arduino softver i otvorite prozor Preferences.
  • Unesite https://arduino.esp8266.com/stable/package_esp8266com_index.json u polje "Dodatni URL -ovi upravitelja odbora". Možete dodati više URL -ova, odvajajući ih zarezima.
  • Otvorite Boards Manager iz Tools> Board menu i instalirajte esp8266 platformu (i ne zaboravite izabrati svoju ESP8266 ploču iz Tools> Menu Board nakon instalacije. "LOLIN (WEMOS) D1 R2 & mini" najbolje funkcionira za Wemos D1 mini v2 i v3 daske.

Ako vam je potrebna dodatna pomoć pri instaliranju Arduina i postavljanju upravljačkih programa, možete pogledati na

U Arduino uređivaču otvorite novu datoteku (Datoteka> Novo) i kopirajte/zalijepite donji kôd u prozor koji se upravo otvorio. Samo prepišite redove koji su već prisutni u novom prozoru (void setup i void loop).

Sada ste skoro spremni, ali ćete morati prilagoditi nekoliko dijelova koda za vaše određeno postavljanje.

Prvo što trebate učiniti je promijeniti IP adresu u retku 34 (u Arduino uređivaču redovi koda su numerirani) u IP adresu vašeg Hue mosta. Ako ne znate svoju Hue Bridge IP adresu, posjetite https://discovery.meethue.com/ i desna IP adresa odmah će se pojaviti u vašem pregledniku. IP adresa je tačkasti broj kojem prethodi "internalipaddress".

Da biste komunicirali s Hue svjetlima, morat ćete stvoriti korisnika Hue API -ja za Wemos D1 mini, tako da Wemos može komunicirati s Hue svjetlom putem Hue API -ja. Da biste to učinili, slijedite upute na https://developers.meethue.com/develop/get-started-2/ i kopirajte/zalijepite generirano (prilično dugo) korisničko ime u prozor Arduino koda. Samo zamijenite svaki "VAŠ HUE API USERNAME" generiranim korisničkim imenom za API.

Zatim morate odabrati pravo svjetlo Hue za promjenu boje. U Hue API -ju svako svjetlo ima broj, pa morate saznati broj koji odgovara svjetlu koje želite koristiti za ovaj projekt. Jedan od najjednostavnijih načina da saznate koji broj ima određena svjetlost je preuzimanje Hue Viewer aplikacije za Android ili iOS. Zamijenite tekst "VAŠ SVJETLOSNI BROJ" ispravnim brojem svugdje u prozoru Arduino koda.

Posljednja stvar koju trebate učiniti je postaviti Wemos za povezivanje s vašom WiFi mrežom. To se postiže postavljanjem koda na Wemos i na prijenosnom računaru prebacite se na drugu WiFi mrežu: na "AutoConnectAP". Vaš preglednik će tada prikazati stranicu na kojoj možete dodati SSID (naziv) i lozinku svoje WiFi mreže koju će Wemos kontroler koristiti za povezivanje na vašu WiFi mrežu (i na Hue most).

Napomena: Ako učitavanje koda na naš Wemos D1 mini putem USB -a ne funkcionira, možda ćete morati preuzeti upravljački program za USB čip na Wemosu. Upravljački program za vašu platformu (Windows, Mac) možete preuzeti na

Sada ste spremni za isprobavanje svoje kreacije!

// ESP8266 Hue Magic Wand // Richard van Kampen - 2018 // Ovaj kôd je testiran na Wemos D1 mini, ali će vjerojatno raditi i na drugim razvojnim pločama zasnovanim na ESP8266 // Za dodavanje podrške za Wemos D1 mini i druge ESP8266 ploče do Arduino uređivača, poduzmite sljedeće korake: // - Pokrenite Arduino i otvorite prozor Postavke. // - Unesite https://arduino.esp8266.com/stable/package_esp8266com_index.json u polje Dodatni URL -ovi upravitelja odbora. Možete dodati više URL -ova, odvajajući ih zarezima. // - Otvorite Boards Manager iz Tools> Board menu i instalirajte esp8266 platformu (i ne zaboravite odabrati svoju ESP8266 ploču iz Tools> Menu izbornika nakon instalacije). // korištene biblioteke: #include "ESP8266WiFi.h" // ESP8266 Core WiFi Library #include "DNSServer.h" // Lokalni DNS poslužitelj koji se koristi za preusmjeravanje svih zahtjeva na konfiguracijski portal WiFiManager ako nema postavki WIFI -a (SSID, lozinka) još nije postavljeno. #include "ESP8266WebServer.h" // Lokalni WebServer korišten za posluživanje konfiguracijskog portala WiFiManager #include "WiFiManager.h" // Magična biblioteka za konfiguraciju WiFi -a, ako još nije instalirana, pogledajte https://github.com/tzapu/WiFiManager #install-through-library-manager #include "RestClient.h" // https://github.com/fabianofranca/ESP8266RestClient, potrebno za korištenje Philips Hue API-ja (pogledajte https://developers.meethue.com/develop/ hue-api/). #include "ArduinoJson.h" // https://github.com/bblanchon/ArduinoJson, potrebno za analizu odgovora Hue API -ja, instalirajte verziju 5.x putem upravitelja biblioteke u Arduinu (Meni "Sketch"> Include Library> Manage Knjižnice> potražite ArduinoJson i promijenite verziju na najnoviji 5.x). Verzija 6 (trenutno u beta verziji) prikazuje grešku. // varijable i init: String response; const int redPin = 13; // na Wemosu ovo je d7 const int greenPin = 12; // na Wemosu ovo je d6 const int bluePin = 14; // na Wemosu je ovo d5 const int touchSensor = 5; // na Wemosu ovo je d1 const int aktivacijaPin = 4; // na Wemosu je ovo d2 bool aktivacija = HIGH; bool touch = LOW; const char* aan_restore; int bri_restore; dvostruko x_restore; double y_restore; double x_magic; double y_magic; bool first = true; nepotpisani dugi startMillis; nepotpisana duga strujaMillis; nepotpisano dugo trajanjeMillis; RestClient klijent = RestClient ("192.168.178.23"); // "vaša IP adresa Hue Bridgea" // Ako ne znate svoju Hue Bridge IP adresu, posjetite https://discovery.meethue.com i ona će se odmah pojaviti u vašem pregledniku. IP adresa je tačkasti broj kojem prethodi "internalipaddress" void setup () {analogWriteRange (255); Serial.begin (9600); // Počnite s isključenim LED -om. pinMode (activationPin, INPUT_PULLUP); pinMode (senzor dodira, ulaz); startMillis = millis (); checkWand (); } void loop () {// nema šta da se radi, ostavite prazno…} void checkWand () {int rgbColour [3]; // RGB kod boje James Harton, https://gist.github.com/jamesotron/766994 // Počnite crvenom bojom. rgbColour [0] = 255; rgbColour [1] = 0; rgbColour [2] = 0; activation = digitalRead (activationPin); // LOW znači da se štapić koristi. touch = digitalRead (touchSensor); // HIGH znači da se umjesto štapića koristi prst, što ne bi trebao biti slučaj. while (aktivacija == LOW && touch == LOW) {// Odaberite boje za povećanje i smanjivanje. for (int decColour = 0; decColour <3; decColour += 1) {int incColour = decColour == 2? 0: decColour + 1; // = trojni operater, znači: int incColour; if (decColour == 2) {incColour = 0;} else {incColour = decColour +1;} // ukrštamo dvije boje. za (int i = 0; i <255; i += 1) {rgbColour [decColour] -= 1; rgbColour [incColour] += 1; // pošto naš RGB LED ima zajedničku anodu umjesto katode (tako da se moramo spojiti na +3,3 V umjesto uzemljenja), potrebne su nam inverzne vrijednosti za RGB: int red = 255 - rgbColour [0]; int zelena = 255 - rgbColour [1]; int plava = 255 - rgbColour [2]; analogWrite (redPin, crveno); analogWrite (greenPin, zeleno); analogWrite (bluePin, plavo); kašnjenje (8); activation = digitalRead (activationPin); if (aktivacija == HIGH) {// HIGH znači da je štapić podignut. goto stopColorCycling; }}}} stopColorCycling: currentMillis = millis (); durationMillis = (currentMillis - početakMillis); if (durationMillis> 1000) {RGBtoksi (rgbColour [0], rgbColour [1], rgbColour [2]); } else {// stavimo Wemos u stanje mirovanja: ESP.deepSleep (0); }} void RGBtoxy (int red, int green, int blue) {// vidi https://developers.meethue.com/documentation/color-conversions-rgb-xy double R = map (crveno, 0, 255, 0, 1000); R /= 1000; dvostruki G = karta (zelena, 0, 255, 0, 1000); G /= 1000; dupla B = karta (plava, 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); dvostruki X = R * 0,649926f + G * 0,103455f + B * 0,197109f; dvostruki Y = R * 0,234327f + G * 0,743075f + B * 0,022598f; dvostruki Z = R * 0.0000000f + G * 0.053077f + B * 1.035763f; dvostruko x = X / (X + Y + Z); dupli y = Y / (X + Y + Z); // konverzija nije u potpunosti dovršena, ali je vjerojatno dovoljno dobra za ono što želimo postići, pa ostavite to na ovom mjestu i pošaljite XY vrijednosti lampi: sendtoHue (x, y); } void sendtoHue (double a, double b) {// stvarna promjena boje iz štapića magic if (prvi) {// prvi prolaz: dobivanje trenutnog stanja lampe getCurrentValues (); } // zatim pošaljite čarobne boje štapića: // čekajte čaroliju: long wait; x_magic = a; y_magic = b; // lampica uključena u boji čarobnog štapića: response = ""; int temp = slučajno (2, 9); const char* stanje = "istina"; for (int i = 1; i <= temp; i ++) {// kreira niz znakova za slanje na most: String temp_body1 = "{" on / ":" + String (stanje) + ", \" bri / ": 220, / "xy \": [" + String (x_magic) +", " + String (y_magic) +"], / "tranzicijsko vrijeme \": 1} "; int str_len1 = temp_body1.length () + 1; char post_body1 [str_len1]; temp_body1.toCharArray (post_body1, str_len1); // sada imamo post_body1 kao niz znakova; // uputite poziv na odmor: int statusCodePut1 = client.put ("/api/VAŠ HUE API KORISNIK/svjetla/VAŠ BROJ SVJETLA/stanje", post_body1, & odgovor); wait = random (100, 600); kašnjenje (čekanje); if (state == "true") {state = "false"; } else {state = "true"; }} // smanji svjetlinu …: response = ""; temp = random (4, 17); // kreira niz nizova za slanje na most: String temp_body2 = "{" on / ": true, \" bri / ": 154, \" tranzitionntime / ":" + String (temp) + "}"; int str_len2 = temp_body2.length () + 1; char post_body2 [str_len2]; temp_body2.toCharArray (post_body2, str_len2); // sada imamo post_body2 kao niz polja; // uputite poziv na odmor: int statusCodePut2 = client.put ("/api/VAŠ HUE API KORISNIK/svjetla/VAŠ BROJ SVJETLA/stanje", post_body2, & odgovor); wait = random (1000, 2500); kašnjenje (čekanje); //..i ponovo posvijetliti: response = ""; temp = random (4, 17); // kreira niz znakova za slanje na most: String temp_body3 = "{" bri_inc / ": 100, \" tranzitionmentime / ":}"; int str_len3 = temp_body3.length () + 1; char post_body3 [str_len3]; temp_body3.toCharArray (post_body3, str_len3); // sada imamo post_body3 kao niz znakova; // uputite poziv na odmor: int statusCodePut3 = client.put ("/api/VAŠ HUE API KORISNIK/svjetla/VAŠ BROJ SVJETLA/stanje", post_body3, & odgovor); wait = random (2500, 5000); // čekanje 2-5 sekundi kašnjenja (čekanje); // i povratak na staru vrijednost: response = ""; // kreira niz znakova za slanje na most: String temp_body4 = "{" on / ":" + String (aan_restore) + ", \" bri / ":" + String (bri_restore) + ", \" xy / ": [" + String (x_restore) +", " + String (y_restore) +"], / "tranzitiontime": " + String (20) +"} "; int str_len4 = temp_body4.length () + 1; char post_body4 [str_len4]; temp_body4.toCharArray (post_body4, str_len4); // sada imamo post_body4 kao niz polja; // uputite poziv na odmor: int statusCodePut4 = client.put ("/api/VAŠ HUE API KORISNIK/svjetla/VAŠ BROJ SVJETLA/stanje", post_body4, & odgovor); ESP.deepSleep (0); // ponovno zaspati…. } unsigned int getCurrentValues () {connectWifi (); // prvo se povežite na Wifi odgovor = ""; // uputite poziv na odmor: int statusCodeGet = client.get ("/api/VAŠ HUE API USERNAME/lights/YOUR LIGHT NUMBER", & response); Serial.print ("Statusni kôd sa servera nakon GET:"); Serial.println (statusCodeGet); Serial.print ("Tijelo odgovora sa servera:"); Serial.println (odgovor); StaticJsonBuffer jsonBuffer; // Raščlanjivanje Json odgovora // Korijen stabla objekta. // // To je referenca na JsonObject, stvarni bajtovi su unutar // jsonBuffer sa svim ostalim čvorovima stabla objekata. // Memorija se oslobađa kada jsonBuffer izađe iz opsega. JsonObject & root = jsonBuffer.parseObject (odgovor); JsonObject & state = root ["state"]; // Testiramo je li raščlanjivanje uspješno. if (! root.success ()) {Serial.println ("parseObject () nije uspio"); } // Dohvaćanje vrijednosti. aan_restore = stanje ["uključeno"]; Serial.println (aan_restore); bri_restore = stanje ["bri"]; x_restore = stanje ["xy"] [0]; y_restore = stanje ["xy"] [1]; first = false;} void connectWifi () {// Lokalna inicijalizacija. Nakon što posao završi, nema potrebe držati ga u blizini WiFiManager wifiManager; // resetiranje postavki - za testiranje: //wifiManager.resetSettings (); // postavlja povratni poziv koji se poziva pri povezivanju na prethodni WiFi ne uspije i ulazi u način pristupne tačke wifiManager.setAPCallback (configModeCallback); // dohvaća ssid i pass i pokušava se povezati // ako se ne poveže pokreće pristupnu točku sa navedenim imenom // ovdje "AutoConnectAP" // i odlazi u petlju blokiranja koja čeka konfiguraciju if (! wifiManager.autoConnect ()) {Serial.println ("povezivanje nije uspjelo i vremensko ograničenje je hit"); // resetirajte i pokušajte ponovo, ili možda prebacite u duboki san ESP.reset (); kašnjenje (1000); } // ako ste ovdje, povezali ste se sa WiFi Serial.println ("povezano … yeey:)"); Serial.print ("Povezano sa:"); Serial.println (WiFi. SSID ()); Serial.print ("IP adresa:"); Serial.println (WiFi.localIP ()); // IP adresa dodijeljena vašem ESP -u (Wemos) // ispisuje jačinu primljenog signala: long rssi = WiFi. RSSI (); Serial.print ("jačina signala (RSSI):"); Serial.println (rssi); } void configModeCallback (WiFiManager * myWiFiManager) {Serial.println ("Unesen način konfiguracije"); Serial.println (WiFi.softAPIP ()); // ako ste koristili automatski generirani SSID, ispišite ga Serial.println (myWiFiManager-> getConfigPortalSSID ()); }

Preporučuje se: