Obsah:

Stolní světlo ovládané Arduino/aplikací: 6 kroků (s obrázky)
Stolní světlo ovládané Arduino/aplikací: 6 kroků (s obrázky)

Video: Stolní světlo ovládané Arduino/aplikací: 6 kroků (s obrázky)

Video: Stolní světlo ovládané Arduino/aplikací: 6 kroků (s obrázky)
Video: Zavřete oči a poslouchejte 😂😂😂 2024, Listopad
Anonim
Image
Image
Stolní světlo ovládané Arduino/aplikací
Stolní světlo ovládané Arduino/aplikací
Stolní světlo ovládané Arduino/aplikací
Stolní světlo ovládané Arduino/aplikací

Pro tento projekt jsem chtěl něco, co by mi umožnilo naučit se více o elektronice/softwaru, něco, do čeho jsem se ještě nedostal. Rozhodl jsem se, že světlo bude pro to dobrá platforma.

Přišel jsem s návrhem pro podpalovač, který nabízí nastavení barev a jasu. U produktu je teplota a jas teplé až studené bílé barvy řízena pomocí 'puku', jeho poloha a orientace je mění nezávisle - zcela jedinečná/zábavná interakce.

obraz
obraz

Také jsem skončil s vytvářením aplikace (mohl bych se také sám sobě postavit), abych je upravil, a také přidáním dalších funkcí pro ovládání některých RGB LED a nastavení alarmu východu slunce. Alarm východu slunce postupně zvyšuje jas po dobu 30 minut, což vám pomůže probudit se.

Jelikož se jedná o můj první projekt Arduino/App, předpokládám, že určitě budou lepší způsoby, jak tento kód udělat, takže se na mě snadno pusťte! Funguje to, takže jsem šťastný. Pokud máte návrhy na vylepšení atd., Bylo by dobré si to poslechnout.

Všechny soubory pro tento projekt (arduino/app inventor code, grafika aplikace atd.) A APK aplikace. najdete na tomto odkazu.

Zadal jsem to do soutěží Raspberry Pi a FULL SPECTRUM LASER, takže pokud si myslíte, že je to hodné hlasování, bude to velmi oceněno !!

Co potřebuješ….

Elec. Složky:

  • Arduino Micro
  • 12 lineárních radiometrických snímačů s Hallovým efektem
  • DC Jack
  • Napájení 12V
  • 2x 1W studené bílé LED (6000K)
  • 2x 1W teplá bílá LED (2800K)
  • 4x Neopixely Adafruit RGB
  • Sparkfun Picobuck 350mA ovladač konstantního proudu
  • Modul Bluetooth HC06
  • Prototypová deska
  • Svorkovnice
  • Dráty

Materiály:

  • Materiály pro výrobu forem (lepenka nebo silikon atd.)
  • Polyuretanová licí pryskyřice
  • Překližka

Spotřební materiál:

  • Pájka
  • Barva ve spreji
  • Smirkový papír
  • Míchací šálky/míchadla

Nástroje:

  • Páječka
  • Tavná pistole
  • Kleště/šroubováky/nože atd.
  • Laserová řezačka

Software:

  • Arduino
  • MIT App Inventor (web zdarma)
  • Photoshop nebo něco k vytvoření grafiky aplikace

Krok 1: Senzory s Hallovým efektem

Pro kontrolu/interakci produktu jsem hledal něco trochu jiného, nejen číselník nebo tak něco.

Po trochu výzkumu různých typů elektronických součástek jsem našel lineární senzory radiometrického Hallova jevu. Jedná se v podstatě o snímač, jehož výstup je ovlivněn magnetickými poli. Obvykle je výstup čidel poloviční než vstupní napětí. Když je však magnet přiblížen, výstup buď stoupne na vstupní napětí, nebo klesne na 0 V (meze nasycení) v závislosti na tom, zda jde o severní nebo jižní pól magnetu.

Uvědomil jsem si, že toho mohu využít k tomu, abych mohl ovládat dvě různá nastavení na jediném Hallově senzoru - zrodil se nápad 'puk'. V laserem řezaném puku je skryt magnet, který by ovládal buď jas, nebo barevnou teplotu podle toho, který konec směřoval ke snímačům. Později přejdu do kódu Arduino, ale v podstatě čtu tyto senzory a hledám, zda výstup stoupl nad 'vysokou spoušť' nebo spadl pod 'nízkou spoušť'. Používám několik senzorů s Hallovým efektem, které mi umožňují mapovat konkrétní teplotu barev a hodnotu jasu na každou z nich, která se spustí, když posunete puk kolem oblouku.

obraz
obraz

Krok 2: Elektronický hardware

Elektronický hardware
Elektronický hardware
Elektronický hardware
Elektronický hardware
Elektronický hardware
Elektronický hardware

Prvním krokem tohoto projektu bylo připojení elektronického hardwaru. Rozhodl jsem se použít Arduino Micro, protože má dobrý počet analogových pinů pro čtení - což mi umožňuje použít několik senzorů s Hallovým efektem, abych poskytl dostatečné rozlišení pro úpravu nastavení. Napájení 12V DC je rozděleno mezi napájení ovladače Arduino a LED.

Řídicí oblouk využívá 11 Hallových senzorů, přičemž další 1 slouží k vypnutí světla. Ty byly spojeny do pinů A0-> A5 a 4, 6, 8, 9, 10, 12. Sdílejí společnou 5v a zemní lištu/pin.

LED diody, které jsem použil, jsou 1W a vyžadují ovladač konstantního proudu. Byl použit Sparkfun PicoBuck, který dodává konstantní 350mA až do 3 výstupních kanálů. Napájení 12V je připojeno k pinům Vin Vin. Ovladač má vstupní piny pro ovládání PWM výstupů, ty byly připojeny k pinům 3 a 5 Arduina.

Poté byl připojen modul bluetooth. Bluetooth Rx-> Arduino Tx, Tx-> Rx a 5v. Zem.

obraz
obraz

LED diody byly namontovány na samostatné desce. Dvě chladné bílé LED jsou zapojeny do série, stejně jako teplé. Ty se připojují k výstupu 1 a 2 ovladače. RGB LED diody jsou Neopixely Adafruit; jedná se o řetězitelné moduly, které můžete ovládat barvu a jas jednotlivě z jednoho pinu Arduino. Ty se připojují na pin 11 a 5V/zemnící piny.

Krok 3: App Inventor

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

K vytvoření aplikace jsem použil MIT App Inventor, je to zdarma a docela snadno se to učí/používá. Nejprve jsem musel vytvořit obrazovky/grafiku aplikace - to lze provést ve Photoshopu atd. V aplikaci App Inventor to usnadňuje, pokud máte všechny součásti, které tvoří obrazovky, jako samostatné obrázky/soubory.

App Inventor má dvě zobrazení, záložku „Designer“pro vizuální obsah front -endu a kartu „Blocks“pro kód.

Pomocí karty „Designer“jsem vytvořil obrazovky aplikací. Jeden problém, který jsem našel, je, že komponenta bluetooth nefunguje na více obrazovkách, takže po "uvítací" obrazovce jsou všechny ostatní (připojení, RGB, teplota barev, alarm) vytvořeny na stejné obrazovce - efektivně vrstvy, které zapnu /vypnuto.

Hlavní nástroje, které jsem použil, jsou pro 'rozložení/zarovnání' a 'plátno'. Plátno je oblast citlivá na dotek, kterou můžete zobrazit jako obrázek.

Jakmile jsou vizuály nastaveny, je čas přepnout na kartu „Bloky“a napsat kód. Popíšu to stručně, ale je to pravděpodobně jednodušší, pokud importujete můj soubor do App Inventoru a zahrajete si kolem sebe…

Tyto první bloky jsou pro obrazovky připojení. Aby se aplikace mohla pokusit automaticky připojit k bluetooth modulu Arduinos, vytvořím a nastavím proměnnou na adresu svého HC06. Během připojení používám časovač ke změně obrázku na pozadí. Pokud je připojení úspěšné, načte barevnou dočasnou obrazovku. Pokud se bluetooth nepodaří automaticky připojit, musíte stisknout tlačítko „připojit k zařízení“. Zobrazí se seznam všech zařízení bluetooth, která váš telefon vidí. Příkaz 'bluetoothclient1.connect' používá ke spojení adresu zařízení, kterou jste vybrali z tohoto seznamu.

obraz
obraz
obraz
obraz
obraz
obraz

Tyto bloky ovládají, co se stane, když se dotknete každého z tlačítek nabídky - přepnete mezi RGB, barevnou teplotou a alarmem. Při dotyku se příslušné vizuální vrstvy zapínají a vypínají. Tzn. Když klepnete na tlačítko nabídky RGB, přepne se obrázek pozadí plátna tlačítek na tmavou ikonu, zapne se obrazovka RGB a druhá se vypne.

Ovládání výkonu a jasu je sdíleno mezi obrazovkami RGB a barevnými teplotami. Aby Arduino vědělo, které LED diody má ovládat, musím mu říct, která obrazovka je načtena. Textový řetězec ve formátu (obrazovka)? je odesíláno vašimi telefony bluetooth pomocí příkazu BluetoothClient1. SendText.

obraz
obraz

Tento blok odešle řetězec (Power)? kdykoli klepnete na tlačítko napájení.

obraz
obraz

Tyto bloky ovládají úpravu teploty barev. Když se dotknete plátna, souřadnice Y vašeho dotykového bodu se použije k nastavení proměnné „cool“. Hodnota Y je dána velikostí pixelu plátna, takže v mém případě hodnota mezi 0 a 450. Pomocí multiplikátoru to převedu na použitelnou hodnotu PWM (0-255). Poté pošlu řetězec s touto hodnotou a identifikátorem ve formě (Tempvalue) ?.

obraz
obraz

Podobné bloky jako výše, ale pro ovládání jasu. Pomocí souřadnic X tentokrát a různých multiplikátorů nastavte proměnnou 'Bright' na hodnotu mezi 10 a 100.

obraz
obraz

Tyto bloky jsou pro ovládání RGB. Existuje příkaz nazvaný 'GetPixelColor', který lze použít k získání hodnoty RGB pixelu, kterého se dotýká váš prst. Z nějakého důvodu vydává hodnotu s přídavkem 255 na konci, takže dělám trochu práce, abych dostal hodnotu do formátu (RGBredvalue.greenvalue.bluevalue.)? Opět je to odesláno do Arduina, ale s RGB jako identifikátorem v řetězci.

obraz
obraz

Další část bloků je pro nastavení alarmu. První blok určuje, co se stane, když se dotknete/přetáhnete slunce nahoru a dolů. Opět platí, že příkazy „získat aktuální X a Y“se používají k získání hodnoty pro váš prst a ke změně obrázku na pozadí v závislosti na výšce slunce. Poloha slunce také řídí, zda je alarm aktivován nebo deaktivován, to je odesíláno přes bluetooth.

obraz
obraz
obraz
obraz

Když klepnete nebo skončíte s pohybem slunce, vyvolá se výběr času, který vám umožní nastavit čas budíku. Hlavní částí tohoto dalšího bloku je využití aktuálního času k určení, kolik milisekund zbývá do nastavení alarmu. Tato hodnota je poté odeslána do Arduina

obraz
obraz
obraz
obraz

V dalším kroku se zabývám tím, jak Arduino čte a používá řetězce …

Krok 4: Arduino kód

Stejně jako u kódu aplikace to stručně proberu….

Nejprve nastavím všechny své proměnné a přiřadím senzory a diody LED ke správným kolíkům. Výstup ze snímačů s Hallovým efektem bude odečten pomocí funkce analogRead, přičemž hodnota bude mezi 0 a 1023. Jak již bylo popsáno, vydává polovinu, když nejsou přítomny žádné magnety, takže kolem 500. Používám nízké a vysoké spouštěcí proměnné, které mi umožňují snadno upravte, když ví, že je puk nad senzorem.

obraz
obraz

Neopixely vyžadují knihovnu, která je definována zde.

obraz
obraz
obraz
obraz

Nastavení neplatnosti spustí seriál, pro Micro piny Rx/Tx (bluetooth) použijte Serial1.. Piny jsou pak nastaveny jako vstupy nebo výstupy a LED diody jsou vypnuty.

obraz
obraz

Nyní je to hlavní smyčka …

Tato první část kontroluje, zda jsou z aplikace přijímána nějaká data. Serial1.available () čte seriál a získává počet bajtů v řetězci. Pokud je to> 0, vím, že přicházejí data.

Pokud si pamatujete, všechny řetězce, které odesílám z aplikace, končí otazníkem…. tj. (Bright100)?

Používám funkci.readStringUntil, abych přečetl sériová data až k otazníku (Bright100) a nastavil na to proměnnou BTstring. Zkontroluji, zda BTstring končí znakem ')', abych se ujistil, že jsou přijímány úplné příkazy. Pokud jsou, pak se smyčka BluetoothProgram nazývá … toto je popsáno níže..

obraz
obraz

Tento další bit ovládá alarm východu slunce. V zásadě, pokud je alarm aktivován a čas je správný, začne blikat LED diody. Vzhledem k tomu, že lidské oko vnímá světlo logaritmicky, je lepší provést jakýkoli druh LED fade ups/down s exponenciální křivkou spíše než lineární. Rovnice tedy řídí hodnoty PWM …

obraz
obraz

Aby se zabránilo tomu, že puk bude zasahovat do ovládání aplikace, bude při používání aplikace deaktivován. K opětovné aktivaci puku je třeba jej na 5 sekund přesunout z produktu. Tento bit kódu nejprve zkontroluje, zda všechna čidla vydávají hodnotu ustáleného stavu (bez magnetu), a poté spustí časovač. Po dokončení 5 sekund se proměnná BTinControl nastaví zpět na hodnotu false.

obraz
obraz

Kód pro puk hned.. Nejprve je potřeba přečíst senzory.

Pokud je světlo aktuálně zhasnuté, zkontroluje, zda je některý ze senzorů nad nebo pod spouštěcími body, tj. Puk byl umístěn na oblouk. Pokud ano, vybledne bílé LED na vaše poslední nastavení bez ohledu na to, kam jej umístíte.

obraz
obraz
obraz
obraz

Aby se LED diody udržely na vašem posledním nastavení místo aktualizace na hodnoty spojené s jakýmikoli senzory, které spouští, je proměnná MovedSinceStandby nastavena na hodnotu false. Tento další kousek kódu v podstatě kontroluje, zda jste puk přesunuli z jeho počáteční polohy o stanovenou částku….

obraz
obraz
obraz
obraz

Pohybujete -li s pukem, je vyvolán 'MainProgram' pro aktualizaci jasu/teploty barev. Toto je popsáno níže.

obraz
obraz

Poslední bit v této hlavní smyčce kontroluje, zda byl puk umístěn zpět do pohotovostního doku - je snímač 12, který čte hodnotu nad/pod spouštěcím bodem. Pokud ano, LED zhasne.

obraz
obraz

Smyčka bluetooth:

Jak je popsáno výše, když jsou data přijímána přes bluetooth, je řetězec načten. Nyní musíme zkontrolovat, co tento řetězec říká …

Se všemi řetězci kromě jasu, teploty barev a RGB je docela snadné se vypořádat. Zkontrolujete, zda se BTstring rovná textu odeslanému z aplikace.

Pokud si vzpomenete, při každé změně obrazovky v aplikaci odešle příkaz bluetooth. Zde se ptáme a nastavíme některé proměnné na true nebo false, abychom věděli, na které obrazovce jste.

Všimněte si na konci každé sekce, že jsem nastavil proměnnou BTinControl na true a vymazal hodnotu BTstring.

obraz
obraz
obraz
obraz

Když v aplikaci klepnete na tlačítko napájení, kontrolky LED zhasnou nahoru nebo dolů. Proměnné nastavené výše, na které obrazovce se nacházíte, se používají k rozhodování, zda se má ovládat RGB nebo bílá LED.

obraz
obraz
obraz
obraz

Pro jas, barevnou teplotu a RGB musím číst řetězce trochu jiným způsobem. Protože se bude měnit číselná část řetězce, ptám se, zda řetězec začíná jedním z identifikátorů, nikoli celým řetězcem, takže stačí (zde je jasno …

Nyní potřebuji oddělit skutečnou hodnotu jasu od řetězce. Formát řetězce odeslaného z aplikace je (Brightvalue), takže vím, že hodnota jasu bude mezi 't' a ')'. Poloha 't' zůstane konstantní, vždy to bude 7. znak v řetězci. Ale protože hodnota jasu může být mezi 10 a 100, poloha ')' se změní. Pomocí příkazu.indexOf zjistím, kde je ')', jaký znak to je, a poté mohu použít příkaz.substring ke čtení řetězce mezi 7. znakem a pozicí znaku ')'. To mi ponechává pouze hodnotu jasu, kterou mohu použít k nastavení RGB nebo bílých LED v závislosti na obrazovce.

obraz
obraz

Nastavení teploty barev je podobný proces jako výše, ale hodnota bude tentokrát mezi 'p' a ')' …

obraz
obraz

Pro úpravu RGB máme tři hodnoty k extrahování z řetězce, ale je to opět podobný proces. Z aplikace dostáváme řetězce ve tvaru (RGBvalue.value.value)

Takže vím, že červená hodnota bude mezi 'B' a první tečkou. Zelená hodnota je mezi 1./2. tečkou a modrá hodnota je mezi 2. tečkou a ')'.

Jakmile máme hodnoty, novotvary jsou nastaveny na novou barvu…

obraz
obraz

Zde kontrolujeme, zda je alarm aktivován nebo deaktivován. Pokud se změní čas alarmu, odešleme ode dneška do alarmu řetězec s počtem milisekund. Tato hodnota je opět extrahována z řetězce a abychom mohli zkontrolovat, zda je čas spustit východ slunce, musíme nastavit proměnnou na aktuální čas (milisekund).

obraz
obraz

Ovládání puku:

Jak bylo popsáno dříve, pokud je puk (magnet) jedním směrem nahoru, bude řídit výstup Hallova senzoru pod dolní spoušť a pokud naopak naopak nad vysokou spoušť.

To umožňuje ovládat jas i teplotu barev ve stejném oblouku.

Hodnoty senzorů jsou načteny. Pokud je některý z nich nižší než dolní spouštěcí hodnota, upravujeme teplotu barev. Pod oblastí oblouku je 11 senzorů, jejichž výstupy se zase pohybují pod spouštěcím bodem, když se puk přes ně pohybuje. Každý senzor má hodnotu PWM pro studené a teplé LED diody, počínaje senzorem 1 při 100% teplém, 0% chladném a pracuje až do 11. při 0% teplém, 100% chladném.

obraz
obraz
obraz
obraz
obraz
obraz

Ovládání jasu se provádí stejným způsobem. Kontrola, zda jsou výstupy senzorů tentokrát nad vysokou spouští, a každému senzoru přiřadí hodnotu vážení jasu.

Toto vážení jasu se pak vynásobí hodnotou teploty barev, čímž se získá celková výstupní hodnota. Umožňuje vám nastavit libovolnou teplotu barev na jakýkoli jas…

obraz
obraz
obraz
obraz

Krok 5: Bydlení

Bydlení
Bydlení
Bydlení
Bydlení
Bydlení
Bydlení
  1. Začal jsem tím, že jsem vyrobil z lepenky formu pro spodní část pouzdra. Abych vytvořil prohlubně pro kontrolní oblast, nechal jsem laserem vyřezat kus překližky do tvaru oblouku a pro „pohotovostní“dok použít minci 5p. Ty byly přilepeny ke kartonové formě a dávaly pozor, aby byly ve správné poloze, která by odpovídala snímačům s Hallovým efektem.
  2. Následovalo promíchání polyuretanové pryskyřice. Materiál, který používám, má jednoduchý poměr 1: 1 a vytvrzuje přibližně za 20 minut … takže musíte pracovat poměrně rychle!
  3. Počáteční nalévání mělo zaplnit dno formy. Po této sadě jsem přidal vnitřní stěnu z lepenky, abych mohl nalít boční stěny.
  4. Abych vytvořil horní část, ve které by LED diody seděly, nařízl jsem a nalepil šikmo nějakou plastovou trubičku/kelímek. A znovu se pryskyřice nalila a nechala zatuhnout.
  5. Nyní bylo pouzdro připraveno, potřeboval jsem vyvrtat několik děr a pořádně jej opískovat.
  6. Byl nanesen základní nátěr a poté nastříkán konečným vrchním nátěrem barvy.

Krok 6: Sestavení/závěr

Montáž/Závěr
Montáž/Závěr
Montáž/Závěr
Montáž/Závěr
Montáž/Závěr
Montáž/Závěr
Montáž/Závěr
Montáž/Závěr
  1. Z pouzdra byl vyříznut slot pro DC konektor. Poté se zvedák zalepí.
  2. Desku LED lze poté v horní části přišroubovat a vodiče protáhnout do spodní části.
  3. Vodiče z LED diod a DC konektoru pak byly našroubovány do správných svorkovnic.
  4. Hlavní deska se poté přišroubuje do pouzdra
  5. Poté se přišroubuje kus překližky, aby zakryl spodní část pouzdra.
  6. Poslední věcí je slepit „puk“dohromady a ujistit se, že póly magnetu jsou orientovány správným koncovým uzávěrem „jas“nebo „barevná teplota“.

Celkově světlo funguje docela dobře! V softwaru je několik chyb k vyžehlení a RGB LED diody mohou být jasnější. Můžu také přidat senzor okolního světla, který automaticky změní teplotu barev, počínaje dnem „chladno“a v noci se změní na „teplo“.

Hurá na čtení!

Doporučuje: