Stolné svetlo ovládané Arduino/aplikáciou: 6 krokov (s obrázkami)
Stolné svetlo ovládané Arduino/aplikáciou: 6 krokov (s obrázkami)
Anonim
Image
Image
Stolné svetlo ovládané Arduino/aplikáciou
Stolné svetlo ovládané Arduino/aplikáciou
Stolné svetlo ovládané Arduino/aplikáciou
Stolné svetlo ovládané Arduino/aplikáciou

Pre tento projekt som chcel niečo, čo by mi umožnilo naučiť sa viac o elektronike/softvéri, niečo, do čoho som sa ešte nedostal. Rozhodol som sa, že svetlo bude na to dobrou platformou.

Prišiel som s návrhom pre zapaľovač, ktorý ponúka úpravu farieb a jasu. Na výrobku je teplota a jas teplej až studenej bielej farby ovládaná pomocou 'puku', pričom jeho poloha a orientácia ich nezávisle menia - celkom jedinečná/zábavná interakcia.

Obrázok
Obrázok

Tiež som skončil s vytváraním aplikácie (mohol by som sa tiež popierať), aby som ich upravil, a tiež s pridaním ďalších funkcií na ovládanie niektorých RGB LED diód a nastavenie alarmu východu slnka. Alarm východu slnka postupne zvyšuje jas počas 30 minút, aby ste sa mohli prebudiť.

Pretože je to môj prvý projekt Arduino/App, predpokladám, že určite budú existovať lepšie spôsoby vytvárania kódu, takže mi to uľahčite! Funguje to, takže som šťastný. Ak máte návrhy na vylepšenia atď., Bolo by dobré počuť ich.

Všetky súbory pre tento projekt (arduino/kód vynálezcu aplikácie, grafika aplikácie atď.) A súbor APK aplikácie. nájdete na tomto odkaze.

Zapísal som to do súťaží Raspberry Pi a FULL SPECTRUM LASER, takže ak si myslíte, že je to hodné hlasovania, bude to obrovská vďaka!

Čo potrebuješ….

Elec. Komponenty:

  • Arduino Micro
  • 12 lineárnych rádiometrických senzorov s Hallovým efektom
  • DC Jack
  • Napájanie 12V
  • 2x 1W studené biele LED (6000K)
  • 2x 1W teplá biela LED (2800K)
  • 4x Neopixely Adafruit RGB
  • Sparkfun Picobuck 350mA ovládač konštantného prúdu
  • Modul Bluetooth HC06
  • Prototypová doska
  • Svorkovnice
  • Drôty

Materiály:

  • Materiály na výrobu foriem (lepenka alebo silikón atď.)
  • Polyuretánová odlievacia živica
  • Preglejka

Spotrebný materiál:

  • Spájka
  • Farba v spreji
  • Brúsny papier
  • Miešacie šálky/miešadlá

Náradie:

  • Spájkovačka
  • Lepiaca pištoľ
  • Kliešte/skrutkovače/nože atď.
  • Laserová rezačka

Softvér:

  • Arduino
  • MIT App Inventor (bezplatný web)
  • Photoshop alebo niečo na vytváranie grafiky aplikácií

Krok 1: Senzory s Hallovým efektom

Pre kontrolu/interakciu produktu som hľadal niečo trochu iné, nielen číselník alebo niečo.

Po troche výskumu rôznych typov elektronických súčiastok som našiel lineárne snímače rádiometrického Hallovho efektu. V zásade ide o snímač, ktorého výstup je ovplyvnený magnetickými poľami. Výstup senzorov je zvyčajne polovičný ako vstupné napätie. Keď sa však magnet priblíži k nemu, výstup buď stúpne na vstupné napätie, alebo klesne na 0 V (limity nasýtenia) v závislosti od toho, či ide o severný alebo južný pól magnetu.

Uvedomil som si, že to môžem využiť na to, aby som mohol ovládať dve rôzne nastavenia na jednom Hallovom senzore - zrodil sa nápad „puk“. V laserom rezanom puku je skrytý magnet, ktorý môže ovládať jas alebo farebnú teplotu podľa toho, ktorý koniec smeruje k senzorom. Neskôr prejdem na kód Arduino, ale v zásade čítam tieto senzory a hľadám, či výstup stúpol nad „vysoký spúšť“alebo pod „nízky spúšť“. Používam niekoľko senzorov s Hallovým efektom, ktoré mi umožňujú mapovať na konkrétne hodnoty konkrétnej teploty farby a jasu, ktoré sa spustia pri posúvaní puku po oblúku.

Obrázok
Obrázok

Krok 2: Elektronický hardvér

Elektronický hardvér
Elektronický hardvér
Elektronický hardvér
Elektronický hardvér
Elektronický hardvér
Elektronický hardvér

Prvým krokom tohto projektu bolo pripojenie hardvéru elektroniky. Rozhodol som sa použiť Arduino Micro, pretože má dobrý počet analógových pinov na čítanie - čo mi umožňuje používať viac senzorov s Hallovým efektom, aby poskytli dostatočné rozlíšenie na úpravu nastavenia. Napájanie 12V DC je rozdelené medzi napájanie ovládača Arduino a LED.

Riadiaci oblúk používa 11 Hallových senzorov, pričom ďalší 1 slúži na vypnutie svetla. Tieto boli spojené do kolíkov A0-> A5 a 4, 6, 8, 9, 10, 12. Majú spoločnú 5v a uzemňovaciu lištu/kolík.

LED diódy, ktoré som použil, majú 1W a vyžadujú budič s konštantným prúdom. Bol použitý Sparkfun PicoBuck, pretože dodáva konštantných 350 mA až do 3 výstupných kanálov. Napájanie 12V je zapojené do pinov Vin ovládača. Ovládač má vstupné piny na ovládanie PWM výstupov, ktoré boli pripojené k pinom 3 a 5 Arduina.

Potom bol pripojený modul bluetooth. Bluetooth Rx-> Arduino Tx, Tx-> Rx a 5v.zem.

Obrázok
Obrázok

LED diódy boli namontované na samostatnej doske. Dve chladné biele LED diódy sú zapojené do série, rovnako ako teplé. Tieto sa pripájajú k výstupu 1 a 2 ovládača. RGB LED diódy sú Adafruit Neopixely; jedná sa o reťaziteľné moduly, pomocou ktorých môžete ovládať farbu a jas jednotlivo z jedného pinu Arduino. Tieto sa pripájajú na kolíky 11 a 5V/uzemňovacie kolíky.

Krok 3: App Inventor

App Inventor
App Inventor
App Inventor
App Inventor
App Inventor
App Inventor

Na vytvorenie aplikácie som použil MIT App Inventor, je zadarmo a veľmi ľahko sa učí/používa. Najprv som musel vytvoriť obrazovky/grafiku aplikácií - to je možné vykonať vo Photoshope atď. V aplikácii App Inventor je to jednoduchšie, ak máte všetky komponenty, ktoré tvoria obrazovky, ako samostatné obrázky/súbory.

Aplikácia App Inventor má dve zobrazenia: kartu „Návrhár“pre vizuálne prvky klientskeho rozhrania a kartu „Bloky“pre kód.

Pomocou karty „Designer“som vytvoril obrazovky aplikácií. Jeden problém, ktorý som zistil, je, že komponent bluetooth nefunguje na viacerých obrazovkách, takže po "uvítacej" obrazovke sú všetky ostatné (pripojenie, RGB, teplota farby, alarm) všetky vytvorené na tej istej obrazovke - efektívne vrstvy, ktoré zapnem /vypnuté.

Hlavné nástroje, ktoré som použil, sú na „rozloženie/zarovnanie“a „plátno“. Plátno je oblasť citlivá na dotyk, ktorú môžete zobraziť ako obrázok.

Po nastavení vizuálov je čas prejsť na kartu „Bloky“a napísať kód. Stručne to popíšem, ale je to pravdepodobne jednoduchšie, ak importujete môj súbor do aplikácie App Inventor a budete sa hrať sami so sebou …

Tieto prvé bloky sú pre obrazovky pripojenia. Aby sa aplikácia mohla pokúsiť automaticky pripojiť k bluetooth modulu Arduinos, vytvorím a nastavím premennú na adresu svojej HC06. Počas pripájania používam časovač na zmenu obrázku na pozadí. Ak je pripojenie úspešné, načíta sa farebná dočasná obrazovka. Ak sa bluetooth nepodarí automaticky pripojiť, musíte stlačiť tlačidlo „pripojiť k zariadeniu“. Zobrazí sa zoznam všetkých zariadení bluetooth, ktoré môže váš telefón vidieť. Príkaz „bluetoothclient1.connect“používa na pripojenie adresu zariadenia, ktorú vyberiete zo zoznamu.

Obrázok
Obrázok
Obrázok
Obrázok
Obrázok
Obrázok

Tieto bloky určujú, čo sa stane, keď sa dotknete každého z tlačidiel ponuky - prepínanie medzi RGB, teplotou farby a budíkom. Keď sa ich dotknete, príslušné vizuálne vrstvy sa zapnú a vypnú. Keď klepnete na tlačidlo ponuky RGB, prepne sa obrázok na pozadí plátna tlačidiel na tmavú ikonu, zapne sa obrazovka RGB a ostatné sa vypne.

Ovládanie výkonu a jasu je zdieľané medzi obrazovkami RGB a farebnými teplotami. Aby Arduino vedel, ktoré diódy LED má ovládať, musím mu povedať, ktorá obrazovka je načítaná. Textový reťazec vo formáte (obrazovka)? odosielajú vaše telefóny bluetooth pomocou príkazu BluetoothClient1. SendText.

Obrázok
Obrázok

Tento blok posiela reťazec (Power)? kedykoľvek klepnete na tlačidlo napájania.

Obrázok
Obrázok

Tieto bloky riadia úpravu teploty farby. Keď sa dotknete plátna, súradnica Y vášho dotykového bodu sa použije na nastavenie premennej „chladno“. Hodnota Y je riadená veľkosťou pixelov plátna, takže v mojom prípade je to hodnota medzi 0 a 450. Na premenu na použiteľnú hodnotu PWM (0-255) používam multiplikátor. Potom pošlem reťazec s touto hodnotou a identifikátorom vo forme (Tempvalue) ?.

Obrázok
Obrázok

Podobné bloky ako vyššie, ale na ovládanie jasu. Tentoraz pomocou súradnice X a rôznych multiplikátorov nastavte premennú „Bright“na hodnotu medzi 10 a 100.

Obrázok
Obrázok

Tieto bloky slúžia na ovládanie RGB. Existuje príkaz s názvom „GetPixelColor“, ktorý je možné použiť na získanie hodnoty RGB pixelu, ktorého sa dotýkate prstom. Z nejakého dôvodu vydáva hodnotu s dodatočnými 255 na konci, takže sa trochu snažím dostať hodnotu do formátu (RGBredvalue.greenvalue.bluevalue.)? Toto sa potom znova odošle do Arduina, ale s RGB ako identifikátorom v reťazci.

Obrázok
Obrázok

Ďalšia časť blokov je pre nastavenia budíka. Prvý blok určuje, čo sa stane, keď sa dotknete/potiahnete slnka hore a dole. Príkazy „Získať aktuálne X a Y“sa opäť používajú na získanie hodnoty miesta, kde sa nachádzate prstom, a na zmenu obrázku na pozadí v závislosti od výšky slnka. Poloha Slnka tiež riadi, či je alarm zapnutý alebo vypnutý, to je odoslané prostredníctvom bluetooth.

Obrázok
Obrázok
Obrázok
Obrázok

Keď klepnete alebo dokončíte pohyb slnka, vyvolá sa výber času, ktorý vám umožní nastaviť čas budíka. Hlavnou časťou tohto nasledujúceho bloku je využitie aktuálneho času na zistenie, koľko milisekúnd zostáva do nastavenia alarmu. Táto hodnota je potom odoslaná do Arduina

Obrázok
Obrázok
Obrázok
Obrázok

V ďalšom kroku sa zaoberám tým, ako Arduino číta a používa reťazce …

Krok 4: Arduino kód

Rovnako ako pre kód aplikácie, aj tu sa stručne pozriem….

Najprv nastavím všetky svoje premenné a priradím senzory a diódy LED k správnym kolíkom. Výstup zo senzorov s Hallovým efektom bude odčítaný pomocou funkcie analogRead, pričom hodnota bude medzi 0 a 1023. Ako bolo uvedené vyššie, výstup je polovičný, keď nie sú prítomné žiadne magnety, teda okolo 500. Používam spúšťacie premenné Low a High, aby som mohol ľahko upravte, keď vie, že puk je nad senzorom.

Obrázok
Obrázok

Neopixely vyžadujú knižnicu, ktorá je definovaná tu.

Obrázok
Obrázok
Obrázok
Obrázok

Zrušením nastavenia sa začnú série, pre Micro piny Rx/Tx (bluetooth) používajú Serial1.. Piny sa potom nastavia ako vstupy alebo výstupy a diódy LED sa vypnú.

Obrázok
Obrázok

Teraz je to hlavná slučka …

Táto prvá časť kontroluje, či sa z aplikácie dostávajú nejaké údaje. Serial1.available () číta seriál a získava počet bajtov v reťazci. Ak je to> 0, viem, že prichádzajú údaje.

Ak si pamätáte, všetky reťazce, ktoré odosielam z aplikácie, končia otáznikom …. tj. (Bright100)?

Na prečítanie sériových údajov až po otáznik (Bright100) používam funkciu.readStringUntil a nastavím na to premennú BTstring. Skontrolujem, či BTstring končí znakom ')', aby som sa ubezpečil, že sú prijímané úplné príkazy. Ak sú, potom sa slučka BluetoothProgram volá … toto je popísané nižšie.

Obrázok
Obrázok

Tento ďalší bit ovláda alarm východu slnka. V zásade, ak je alarm povolený a je správny čas, začne zhasínať diódy LED. Vzhľadom na to, že ľudské oko vníma svetlo logaritmicky, je lepšie vykonať akýkoľvek druh zvýšenia/zníženia jasu LED s exponenciálnou krivkou, a nie s lineárnym. Preto rovnica riadi hodnoty PWM …

Obrázok
Obrázok

Aby sa zabránilo tomu, že puk bude zasahovať do ovládania aplikácie, pri použití aplikácie sa deaktivuje. Na opätovnú aktiváciu puku ho musíte presunúť z produktu na 5 sekúnd. Tento kúsok kódu najskôr skontroluje, či všetky snímače vydávajú hodnotu ustáleného stavu (bez magnetu), a potom spustí časovač. Po dokončení 5 sekúnd sa premenná BTinControl nastaví späť na hodnotu false.

Obrázok
Obrázok

Kód pre puk teraz.. Najprv je potrebné prečítať senzory.

Ak je svetlo momentálne vypnuté, skontroluje, či je niektorý zo senzorov nad alebo pod spúšťacími bodmi, tj. Puk bol umiestnený na oblúku. Ak je, potom zmizne z bielych LED diód na vaše posledné nastavenie bez ohľadu na to, kam ich umiestnite.

Obrázok
Obrázok
Obrázok
Obrázok

Aby premenná MovedSinceStandby zostala nastavená na hodnotu False, aby namiesto aktualizácie na hodnoty súvisiace s akýmikoľvek snímačmi, ktoré spúšťajú, zostali na vašom poslednom nastavení. Tento ďalší bit kódu v zásade kontroluje, či ste puk posunuli z počiatočnej polohy o stanovenú sumu ….

Obrázok
Obrázok
Obrázok
Obrázok

Ak posúvate puk, na aktualizáciu jasu/teploty farieb sa zavolá „hlavný program“. Toto je popísané nižšie.

Obrázok
Obrázok

Posledný bit v tejto hlavnej slučke kontroluje, či bol puk umiestnený späť do pohotovostného doku - je snímač 12, ktorý číta hodnotu nad/pod spúšťacím bodom. Ak je to tak, LED zhasne.

Obrázok
Obrázok

Slučka bluetooth:

Ako je popísané vyššie, pri príjme údajov cez bluetooth sa reťazec načíta. Teraz musíme skontrolovať, čo tento reťazec hovorí …

So všetkými reťazcami okrem jasu, farebnej teploty a RGB je celkom ľahké sa vyrovnať. Skontrolujete, či sa reťazec BTstring rovná textu odoslanému z aplikácie.

Ak si spomínate, pri každej zmene obrazovky v aplikácii odošle príkaz bluetooth. Tu za to kladieme otázky a nastavujeme niektoré premenné na hodnotu true alebo false, aby sme vedeli, na ktorej obrazovke sa nachádzate.

Všimnite si na konci každej časti, že som nastavil premennú BTinControl na true a vymazal hodnotu BTstring.

Obrázok
Obrázok
Obrázok
Obrázok

Keď v aplikácii klepnete na tlačidlo napájania, kontrolky LED zhasnú nahor alebo nadol. Vyššie uvedené premenné, na ktorých obrazovke sa nachádzate, slúžia na rozhodovanie, či sa majú ovládať RGB alebo biele LED diódy.

Obrázok
Obrázok
Obrázok
Obrázok

Čo sa týka jasu, teploty farby a RGB, musím reťazce čítať trochu iným spôsobom. Pretože sa číselná časť reťazca zmení, pýtam sa, či reťazec začína jedným z identifikátorov, nie celým reťazcom, takže stačí (tu je jasné)

Teraz musím oddeliť skutočnú hodnotu jasu od reťazca. Formát reťazca odoslaného z aplikácie je (Brightvalue), takže viem, že hodnota jasu bude medzi „t“a „)“. Poloha písmena „t“zostane konštantná, vždy to bude 7. znak v reťazci. Pretože však hodnota jasu môže byť medzi 10 a 100, poloha ')' sa zmení. Pomocou príkazu.indexOf zistím, kde je ')', čo je to za znak, a potom môžem použiť príkaz.substring na prečítanie reťazca medzi 7. znakom a pozíciou znaku ')'. Zostáva mi tak iba hodnota jasu, ktorú môžem použiť na úpravu RGB alebo bielych LED v závislosti od obrazovky.

Obrázok
Obrázok

Úprava teploty farby je podobný procesu ako vyššie, ale tentokrát bude hodnota medzi „p“a „)“…

Obrázok
Obrázok

Na úpravu RGB máme k dispozícii tri hodnoty na extrahovanie z reťazca, ale je to opäť podobný proces. Z aplikácie dostávame reťazce vo forme (RGBvalue.value.value)

Takže viem, že červená hodnota bude medzi „B“a prvou bodkou. Zelená hodnota je medzi 1./2. bodkou a modrá hodnota je medzi 2. bodkou a ')'.

Akonáhle budeme mať hodnoty, novotvary budú nastavené na novú farbu …

Obrázok
Obrázok

Tu skontrolujeme, či je alarm aktivovaný alebo deaktivovaný. Ak sa zmení čas alarmu, odteraz až do alarmu bude odoslaný reťazec s počtom milisekúnd. Táto hodnota je opäť extrahovaná z reťazca a aby sme mohli skontrolovať, či je čas na východ slnka, musíme nastaviť premennú na aktuálny čas (mil.).

Obrázok
Obrázok

Ovládanie puku:

Ako je popísané vyššie, ak je puk (magnet) jedným smerom hore, bude poháňať výstup Hallovho senzora pod dolnú spúšť a ak naopak naopak nad vysokú spúšť.

To umožňuje ovládať jas aj teplotu farby v rovnakom oblúku.

Hodnoty senzorov sa načítajú. Ak je niektorý z nich nižší ako dolná spúšťacia hodnota, upravujeme teplotu farby. Pod oblasťou oblúka je 11 senzorov, ktorých výstupy sa zasa dostanú pod spúšťací bod, keď sa nad nimi puk pohybuje. Každý snímač má hodnotu PWM pre chladné a teplé diódy LED, počnúc senzorom 1 pri 100% teplom, 0% chladom a pracuje až po 11. miesto pri 0% teplom, 100% chlade.

Obrázok
Obrázok
Obrázok
Obrázok
Obrázok
Obrázok

Regulácia jasu sa vykonáva rovnakým spôsobom. Kontrola, či sú výstupy senzorov tentoraz nad vysokou spúšťou, a každému senzoru pridelí hodnotu váhy.

Toto váženie jasu sa potom vynásobí hodnotou farebnej teploty, aby sa získala celková výstupná hodnota. Umožňuje vám nastaviť akúkoľvek teplotu farby na akýkoľvek jas …

Obrázok
Obrázok
Obrázok
Obrázok

Krok 5: Bývanie

Bývanie
Bývanie
Bývanie
Bývanie
Bývanie
Bývanie
  1. Začal som výrobou formy z kartónu pre spodnú časť krytu. Aby som vytvoril vybrania pre kontrolnú oblasť, nechal som laserom vyrezať kus preglejky do oblúkového tvaru a na „pohotovostný“dok použiť mincu 5p. Tieto boli prilepené k lepenkovej forme a dávali pozor, aby boli v správnej polohe, ktorá by bola v súlade so snímačmi Hallovho efektu.
  2. Ďalej bolo potrebné zmiešať polyuretánovú živicu. Látky, ktoré používam, majú jednoduchý pomer 1: 1 a vytvrdzujú asi do 20 minút.. takže musíte pracovať pomerne rýchlo!
  3. Počiatočné nalievanie malo vyplniť dno formy. Po tejto sade som pridal vnútornú stenu z lepenky, aby som mohol naliať bočné steny.
  4. Aby som vytvoril hornú časť, v ktorej by LED diódy sedeli, odrezal som a na šikmo nalepil na miesto plastovú trubičku/pohár. A opäť sa naliala živica a nechala stuhnúť.
  5. Teraz bolo puzdro pripravené, potreboval som vyvŕtať niekoľko otvorov a poriadne ho pieskovať.
  6. Bol nanesený základný náter a potom bol nastriekaný konečný vrchný náter farby.

Krok 6: Zostavenie/záver

Zostavenie/záver
Zostavenie/záver
Zostavenie/záver
Zostavenie/záver
Zostavenie/záver
Zostavenie/záver
Zostavenie/záver
Zostavenie/záver
  1. Z krytu bol vyrezaný slot pre konektor DC. Potom sa zdvihák zalepí.
  2. Dosku LED je potom možné v hornej časti priskrutkovať a drôty previesť do spodnej časti.
  3. Vodiče z LED diódy a DC konektora boli potom zaskrutkované do správnych svorkovníc.
  4. Hlavná doska je potom priskrutkovaná k puzdru
  5. Potom sa priskrutkuje kus preglejky, aby sa zakryla spodná časť krytu.
  6. Posledná vec je prilepiť „puk“k sebe a uistiť sa, že póly magnetu sú orientované správnym koncovým uzáverom „jasu“alebo „farebnej teploty“.

Celkovo svetlo funguje celkom dobre! V softvéri je niekoľko chýb, ktoré je potrebné odstrániť, a LED diódy RGB môžu byť jasnejšie. Môžem tiež pridať snímač okolitého svetla na automatickú zmenu teploty farieb, pričom počas dňa začne „chladno“a v noci sa zmení na „teplé“.

Hurá na čítanie!