Smart lampa

From Digitálne technológie výroby
Jump to: navigation, search
Tento projekt Sleduje vývoj a fabrikáciu prototypu Smart lampy. Výsledný produkt by som nazval ako prvú verziu prototypu, pretože má ešte pár chýb ktoré sa musia opraviť.
lamp first prototype finished
Smart Lamp


Členovia

  • Michal Mihálik (hlavný dizajnér) - mihalik63@uniba.sk
  • Frederik Kohár (pomocná sila)

Opis Vývoja

Nápad

Tento nápad vzišiel z potreby mať lampu ktorá by bola flexibilná na použitie v mnohých situáciách. Funkcionality ako zapnutie pri západe slnka,flexibilné rameno ktoré sa dá nastaviť do požadovaných uhlov, mobilná hlava lampy a pripojenie na IoT sú súčasťou tejto flexibility.

Výskum súčiastok

Po vytvorení nápadu a spísaní chcených aj možných funkcionalít sa začal výskum súčiastok. Ako prvý som našiel vhodný mikrokontrolér. Hľadal som niečo s WiFi a možnosťou integrácie niektorej IoT služby. Tak som našiel Arduino MKR WiFi 1010. Potom som začal hľadať svetlá, najlepšie niečo lacné. Najprv som sa pozrel na firmu Adafruit, ktorá vyrába a predáva rôzne komponenty kompatibilné s Arduinom. Ale keďže firma bola z USA, ceny poštovného boli astronomické. Nakoniec som po nejakom čase našiel obchod GM Electronic, kde mali všetky súčiastky, ktoré som potreboval. Okrem súčiastok som nakúpil aj pár nástrojov ktoré som pri skladaní potreboval.

Dizajn kostry

Dizajn kostry som mal viac-menej hotový už na začiatku. Prototypovanie som robil vo free a open source programe Blender. Rameno lampy som plánoval vytvoriť z viacerých, do seba zapadajúcich dielov ktoré by sa dali natáčať do rôznych uhlov, teda niečo na spôsob flexibilného ramena stojanov fotoaparátov.
rameno fotoaparatu
Ukážka stojanu fotoaparátu

Cez stred by pre pevnosť išlo duté kovové ohybné jadro.

hlinikova trubicka
Ukážka hliníkovej trubičky

Vybral som si hliníkovú trubicu ako jadro, pretože hliník je dosť pevný aby udržal váhu lampy a zároveň je dosť ohybný pre tieto účely. Túto trubičku som v závere projektu zamenil za pletený oceľový drôt, ktorý mal oveľa lepšiu pevnosť a flexibilitu.

pleteny drot
Ukážka pleteného drôtu

Hlava lampy začala ako kocka,

stvorcova hlava lampy
Ukážka štvorcovej hlavy lampy

dokým som nezistil že elektroniku zmestím do okrúhlej krabičky. Samotný stojan je vlastne držiak lampy z IKEA obchodu,

stojan lampy
Stojan na lampu z IKEA obchodu

do ktorého sa zasúva koncová súčiastka ramena. Táto súčiastka by mala fungovať na väčšinu podobných stojanov, poprípade sa dá ľahko navrhnúť nová koncová súčiastka. Chcel som mať moderne a minimalisticky vyzerajúcu lampu, tak som si vyberal medzi bielou a čiernou farbou. Nakoniec som zvolil čiernu, lebo tú som pužíval aj pri prototypovaní modelov.

Testovanie 3D modelov kostry

Vývoj modelov na 3D tlač trval dlho, a modely prešli viacerými variantami a verziami kým som bol spokojný. Najprv som začal modelovať rameno, lebo to som mohol vytvárať bez poznania rozmerov súčiastok. Rozmer som odhadol tak, aby súčiastka nebola príliš malá, ani veľká. Tento model prešiel viacerými verziami, dokým som nedostal dobrý pomer pevnosti, flexibility a trenia, aby lampa dokázala ostať v pozícii.

verzie dielov ramena
Verzie dielov ramena aj s prierezom

Hlavu som tlačil k záveru projektu, takže som ju moc netestoval. Musel som pomocou vŕtačky upraviť pár dier, ale našťastie súčiastky nemali závažnú vadu. Súbory modelov som si upravil podľa nájdených chýb.

Elektronika

Od začiatku som vedel že dve hlavné súčiastky budú LED svetlá a mikrokontrolér. Mikrokontrolér bol na výber najľahší, ostatné trvalo trochu dlhšie. Niektoré súčiastky neboli vyhotovené s pinmi, tak som sa musel naučiť spájkovať. Tu sa vyskytol prvý problém, keď som zistil že mám porúchanú LED maticu, takže som ju musel vymeniť. Stále neviem či taká už bola, alebo sa mi ju podarilo pokaziť. Postupne som testoval ako fungujú tlačítka a matica. Tiež som rozmýšlaľ nad spôsobom napájania lampy. Jeden spôsob napájania ktorý som chcel implementovať bol pomocou USB-C, čoho som sa nakoniec vzdal pre zložitosť prevedenia. Po výmene LED matice som zistil že zdroj mikrokontroléra stačí na základné napájanie, ale ak chcem lepšiu svietivosť, potrebujem lepší zdroj. Preto som si ku koncu časového zadania projektu zaobstaral konektor na adaptér. Žiaľ na samotný adaptér už som nemal financie, takže som stále používal Micro-USB alebo batériu. Batéria, ktorú som kúpil mala trochu iný typ konektoru aký malo Arduino, takže som ho musel trochu zmenšiť aby sa zmestil.

Programovanie

Programovanie Arduina som sa učil od základu. Najprv iba ako používať Serial port, piny a k nim pripojené súčiastky a pod. Potom ako som už obstojne zvládal základy, som začal hľadať nástroje a knižnice na vytvorenie programu lampy. Začal som s už existujúcim Arduino IoT Cloud-om, Kde som si po hodine tápania nakonfiguroval a pripravil Arduino na IoT použitie. Ďalej som pripojil k programu knižnicu na prácu s LED maticami, čo mi veľmi uľahčilo celkovú prácu. Takto som pomocou ovládača v cloude mohol priamo ovládať farbu a jas LED svetiel. Potom som pripojil pár knižníc ktoré mi umožnili zisťovať aktuálny čas napojením na Network Time Protocol (NTP), a vypočítať východ a západ slnka pre daný deň. S nimi som vytvoril funkciu automatického zapnutia lampy keď zapadne slnko a zhasnutia lampy keď slnko vychádza. Nakoniec som pridal funkciu posielania textových príkazov ktoré zapínajú niektoré nastavenia lampy.
nastavenia lampy
Ukážka nastavení lampy

Finalizovanie prototypu

Keď som mal už všetky časti hotové, prišiel čas zložiť celú lampu. Vytlačil som modely, pospájal elektroniku, všetko otestoval a zmotnoval dokopy. S konečným výsledkom nie som celkom spokojný, jadro ramena nezvládlo ohýbanie a následne zlomilo na jednom mieste. Konektor ramena do stojanu sa tiež musí ešte vylepšiť. Minimálny kód na fungovanie mám, ale chcel by som v neskorších verziách pridať viacero funkcií, hlavne módy osvetlenia a tiež lepšie napájanie elektroniky.


Súčiastky

  • Arduino MKR WiFi 1010
  • 3,7 V Li-Po batéria (voliteľná kapacita, ale min. 1024 mAh, s menšou kapacitou to nebude fungovať)
  • 8x8 LED matica
  • kábliky (čím tenšie, tým lepšie, tiež pomôžu káble s dupont konektormi)
  • rezistory (1x 370 Ohm)
  • mikrospínač (môj má hlavičku výšky 3,5mm) (1x spínač https://www.gme.sk/mikrospinac-tc-0104-t)
  • Vytlačené súčiastky z materiálu PLA
  • Oceľový drôt (potrebná dĺžka závisí od dĺžky ramena, na 1m ramena treba 16m drôtu plus rezerva)
  • Stojan na lampu z IKEA obchodu (použitý stojan z lampy TERTIAL, fungoval by hocijaký podobný stojan s priemerom 1,3cm)
  • kapacitátory (2x 1k μF)
  • 5,5/2,1 konektor na adaptér
  • 5V 4A adaptér

Postup výroby

V tejto časti je vysvetlený postup výroby krok po kroku.

Kostra lampy

Na zostrojenie kostry je potrebné vytlačiť jeden z každej časti hlavy lampy, niekoľko kusov súčiastok flexibilného ramena (odporúčaných 10ks) a koncový kus ramena. Spodný kus hlavy sa vsunie zo spodu do strednej časti hlavy lampy. Mal by tam držať aj bez vlepenia, poprípade sa môže prilepiť sekundovým lepidlom. Jadro je tvorené pleteným drôtom. Drôt sa postupne splieta, dokým nie je 16 vlákien hrubý. Súčiastky ramena sa pospájajú dokopy a pretiahne sa nimi jadro. Možno bude potrebné trochu súčiastky rozšíriť aby sa zmestilo jadro. Na začiatok sa pripojí hlava lampy a na koniec koncová súčiastka. Popri alebo cez jadro sa zavedú vodiče na napájanie a uzemnenie.

Elektronika

Na nasledujúcom diagrame je zobrazené zapojenie elektroniky. Niektoré spoje bude treba spájkovať, na niektoré môžete tiež použiť breadboard.

diagram elektrického obvodu
Diagram obvodu

Inštalácia softvéru

Na začiatok si vytvorte konto na stránke Arduino. Potom môžete začať využívať Arduino IoT Cloud. Otvorte si stránku https://create.arduino.cc/iot. Kliknite na položku Devices a pridajte vaše zariadenie. Postupujte podľa príkazov z okna. Na konci by ste mali mať nastavené Arduino. Kliknite na položku Things a vytvorte si nový Thing. Pridajte tri premenné:

  • jednu typu CloudColoredLight s názvom color;
  • druhú typu bool s názvom dayLightSwitch;
  • poslednú typu String commands;

Môžete si zadať aj vlastné názvy, ale musíte ich potom pomeniť v celom priloženom programe. Pridajte svoj Device a nastavte si sieť. Otvorte si kartu s názvom Sketch a vložte tam kód zo súboru nižšie... Nahrajte kód na Arduino. Otvorte položku Dashboards. Kliknite BUILD DASHBOARD. Vľavo na lište kliknite na ikonu papiera a pera, to vám umožní meniť rozloženie a pridávať widgety. Vedľa kliknite na ADD a potom kliknite na Things. Označte všetky premenné a automaticky sa vám vytvoria widgety na ovládanie premenných.

Tu je tiež video s návodom: (vložiť video)

Toto je všetko!

Záverečné zloženie

Káble LED modulu zasuňte cez dieru v spodnej časti hlavy lampy a pripevnite modul drôtom cez okrúhle dierky. Zapojte do seba diely ramena a stredom pretiahnite jadro a káble napájania a uzemnenia. Zapojte elektroniku do Arduina podľa diagramu uvedenom vyššie a pripevnite arduino na podstavce v lampe, celkom fungujú špendlíky. Mikrospínač zastrčte do diery na boku lampy a prilepte. Môžete, ale nemusíte zapojiť Li-Po batériu do Arduina. vložte matice do otvorov po bokoch a priložte viečko a zaskrutkujte ho. Teraz ešte pripojte modul s konektorom na adaptér. Pripojte do siete a ste hotoví!

svietiaca lampa
Fungujúci prototyp

Dokumentácia programu

Použité knižnice:

  • ArduinoIoTCloud.h - umiestnené v súbore thingProperties.h, tento súbor sa vám automaticky vytvorí pri nastavovaní Cloudu.
  • Arduino_ConnectionHandler.h - umiestnené v súbore thingProperties.h, tento súbor sa vám automaticky vytvorí pri nastavovaní Cloudu.
  • Adafruit_NeoMatrix.h - knižnica zodpovedná za nastavenie a operovanie LED matice.
  • gamma.h - knižnica potrebná k správnemu fungovaniu knižnice Adafruit_NeoMatrix.h.
  • WiFiNINA.h - knižnica na operovanie vstavanej WiFi
  • WiFiUdp.h - knižnica zabezpečujúca UDP pripojenie cez WiFi
  • SPI.h - knižnica je potrebná pre správne fungovanie knižnice WiFiNINA.h.
  • TimeLib.h - knižnica zodpovedná za spravovanie nastaveného času.
  • sunset.h - knižnica zodpovedná za výpočet západu a východu slnka pre daný dátum.

Funkcie:

  • void setup()
    • pri spustení Arduina nastaví Serial port, Arduino Cloud, WiFi pripojenie k NTP serveru, synchronizuje čas s NTP serverom, inicializuje triedu na výpočet východu a západu slnka, inicializuje premenné RGB farby, nastaví pin pre spínač na INPUT a inicializuje LED maticu
  • void loop()
    • opakovane aktualizuje dáta z cloudu, zisťuje stlačenie tlačidla a kontroluje východ a západ slnka, ak je funkcia dayLightSwitch zapnutá
  • void onColorChange()
    • pri zmene nastavení v cloude spustí funkciu setColor()
  • void setColor()
    • nastaví LED maticu podľa aktuálnych cloudových nastavení
  • void onCommandsChange()
    • zodpovedá za čítanie a vykonávanie textových príkazov. Manuál v sekcii nižšie.
  • void fxRainbow()
    • zatiaľ neimplementovaná funkcia. Má spustiť efekt posúvajúcich sa dúhových farieb na LED matici
  • void fxDim()
    • zatiaľ neimplementovaná funkcia. Má spustiť efekt postupne tmavnúcich, opakujúcich sa farieb na LED matici
  • void fxWrite(String text)
    • zatiaľ neimplementovaná funkcia. Má vypisovať opakujúci sa zadaný text na LED matici
  • void setRGB(uint8_t R, uint8_t G, uint8_t B)
    • nastaví zadanú farbu na LED matici
  • void getSunTime()
    • vypočíta čas západu a východu slnka v hodinách a minútach
  • time_t getNtpTime()
    • funkcia dostane paket s informáciou o aktuálnom čase od NTP servera a vráti aktuálny čas vzhľadom na nastavenú časovú zónu v premennej timeZone. Ak nastane chyba, vráti nulu.
  • unsigned long sendNTPpacket(IPAddress& address)
    • funkcia vytvorí a pošle NTP paket pre danú IP adresu NTP servera.
  • void printWifiStatus()
    • vypíše na Serial port základné info o WiFi sieti ku ktorej je Arduino pripojené.

Nastavenia v Dashboarde

  • Widget na nastavenie farby:
    • Tu môžete nastaviť farbu, jas a zapnutie/vypnutie LED matice
  • Widget na posielanie textových správ:
    • Slúži ako command line. Implementované príkazy:
      • /help - vráti link na túto sekciu s príkazmy
      • /FXrainbow - zatiaľ neimplementované. Zobrazí dúhový efekt
      • /FXdimmingColors - zatiaľ neimplementované. Zobrazí efekt s blednúcimi, opakujúcimi farbami
      • /FXwrite=[text] - zatiaľ neimplementované. Zobrazí zadaný [text] na LED matici.
      • /brightWhite - nastaví svetlo na jasnú bielu.
      • /time - vráti aktuálny čas. Mení sa vzhľadom na letný čas.
      • /ST - mení letný čas na zimný a naopak.
      • /turnOff - vypne svetlo
      • /turnOn - zapne svetlo
      • /setRGB=[R][G][B] - nastaví farbu svetla podľa zadaných farieb. Hodnoty sa zapisujú v rozsahu 000-255.
  • Widget spínač na zapnutie/vypnutie funkcie:
    • Zapína/vypína funkciu dayLight

Galéria

Fotky

Video

Linky na súbory

Wikifactory - Smart Lamp project