Sadržaj:

Stolno svjetlo kontrolirano Arduinom/aplikacijom: 6 koraka (sa slikama)
Stolno svjetlo kontrolirano Arduinom/aplikacijom: 6 koraka (sa slikama)

Video: Stolno svjetlo kontrolirano Arduinom/aplikacijom: 6 koraka (sa slikama)

Video: Stolno svjetlo kontrolirano Arduinom/aplikacijom: 6 koraka (sa slikama)
Video: CS50 2014 - Week 9 2024, Srpanj
Anonim
Image
Image
Arduino/Svjetlo za stol kontrolirano aplikacijom
Arduino/Svjetlo za stol kontrolirano aplikacijom
Arduino/Svjetlo za stol kontrolirano aplikacijom
Arduino/Svjetlo za stol kontrolirano aplikacijom

Za ovaj projekt želio sam nešto što bi mi omogućilo da se naučim više o elektronici/softveru, nešto u što još nisam ušao. Odlučio sam da će svjetlo biti dobra platforma za ovo.

Dizajn koji sam smislio bio je za uplighter koji ima mogućnost podešavanja boje i svjetline. Na proizvodu se temperatura i svjetlina tople do hladne bijele boje kontroliraju pomoću "packa", a njihov položaj i orijentacija mijenjaju se neovisno - prilično jedinstvena/zabavna interakcija.

Slika
Slika

Također sam na kraju stvorio aplikaciju (mogao bih se i sam izazvati) kako bih ih prilagodio, kao i dodao dodatnu funkcionalnost za upravljanje nekim RGB LED diodama i postavio alarm za izlazak sunca. Alarm za izlazak sunca postupno povećava svjetlinu tijekom 30 minuta kako bi se lakše probudili.

Budući da je ovo moj prvi Arduino/App projekt, pretpostavljam da će definitivno biti bolji načini izrade koda, pa mi samo polako! Radi, pa sam sretan. Bilo bi dobro čuti ako imate prijedloge za poboljšanja itd.

Sve datoteke za ovaj projekt (kôd izumitelja arduina/aplikacije, grafika aplikacije itd.) I apk aplikacije. mogu se pronaći na ovoj poveznici.

Upisao sam ovo u natječaje Raspberry Pi i FULL SPECTRUM LASER, pa ako mislite da je vrijedan glasanja, masovno bi se cijenio glas !!

Što trebaš….

Elec. Komponente:

  • Arduino Micro
  • 12 linearnih radiometrijskih osjetnika Hall efekta
  • DC priključak
  • Napajanje 12V
  • 2x 1W hladne bijele LED diode (6000K)
  • 2x 1W topla bijela LED dioda (2800K)
  • 4x Adapruit RGB neopiksela
  • Sparkfun Picobuck 350mA upravljački program konstantne struje
  • HC06 Bluetooth modul
  • Prototipna ploča
  • Priključni blokovi
  • Žice

Materijali:

  • Materijali za izradu kalupa (karton ili silikon itd.)
  • Poliuretanska smola za lijevanje
  • Šperploča

Potrošni materijal:

  • Lem
  • Boja u spreju
  • Šmirgl papir
  • Šalice za miješanje/miješalice

Alati:

  • Lemilica
  • Pištolj za ljepilo
  • Kliješta/odvijači/noževi itd.
  • Laserski rezač

Softver:

  • Arduino
  • MIT App Inventor (besplatno na webu)
  • Photoshop ili nešto za stvaranje grafike aplikacije

Korak 1: Senzori Hall efekta

Za kontrolu/interakciju proizvoda htio sam smisliti nešto malo drugačije, a ne samo brojčanik ili nešto slično.

Nakon malo istraživanja različitih vrsta elektroničkih komponenti, pronašao sam linearne radiometrijske senzore Hall efekta. To su u osnovi senzori na čiji izlaz utječu magnetska polja. Obično je izlaz senzora polovica ulaznog napona. Međutim, kada se magnet približi njemu, izlaz će ili porasti na ulazni napon ili pasti na 0V (granice zasićenja) ovisno o tome je li to njegov sjeverni ili južni pol magneta.

Shvatio sam da bih to mogao iskoristiti kako bih mogao kontrolirati dvije različite postavke na jednom Hall -ovom senzoru - rodila se ideja 'pak'. U pakiranju za lasersko rezanje skriven je magnet koji bi kontrolirao svjetlinu ili temperaturu boje, ovisno o tome koji je kraj bio okrenut prema senzorima. Kasnije ulazim u Arduino kôd, ali u biti čitam te senzore i tražim je li izlaz porastao iznad 'visokog okidača' ili je pao ispod 'niskog okidača'. Koristim više senzora Hallovog efekta kako bih mogao preslikati određenu temperaturu boje i vrijednost svjetline na svaki, koji se aktiviraju dok klizite pak oko luka.

Slika
Slika

Korak 2: Elektronički hardver

Elektronički hardver
Elektronički hardver
Elektronički hardver
Elektronički hardver
Elektronički hardver
Elektronički hardver

Prvi korak ovog projekta bio je povezivanje elektroničkog hardvera. Odlučio sam se za korištenje Arduino Micro -a jer ima veliki broj analognih pinova za čitanje - što mi je omogućilo korištenje više senzora za Hall efekte kako bih dao dovoljnu razlučivost za podešavanje postavki. 12V DC napajanje je podijeljeno između napajanja Arduina i LED upravljačkog programa.

Upravljački luk koristi 11 Hall -ovih senzora, a još jedan se koristi za gašenje svjetla. Oni su spojeni u pinove A0-> A5 i 4, 6, 8, 9, 10, 12. Dijele zajedničku 5V i uzemljenu šinu/iglu.

LED diode koje sam koristio su 1W i zahtijevaju upravljački program konstantne struje. Korišten je Sparkfun PicoBuck koji isporučuje konstantnih 350 mA na do 3 izlazna kanala. Napajanje od 12 V spojeno je na upravljačke Vin pinove. Upravljački program ima ulazne pinove za kontrolu PWM izlaza, oni su bili spojeni na pinove 3 i 5 Arduina.

Zatim je priključen bluetooth modul. Bluetooth Rx-> Arduino Tx, Tx-> Rx i 5v.ground.

Slika
Slika

LED diode su postavljene na zasebnu ploču. Dvije hladne bijele LED diode spojene su u nizu, kao i tople. Oni se spajaju na izlaz 1 i 2 upravljačkog programa. RGB LED diode su Adafruit neopikseli; ovo su moduli koji se mogu spojiti i možete pojedinačno kontrolirati boju i svjetlinu s jednog Arduino pina. Oni se spajaju na pin 11 i pinove 5V/uzemljenje.

Korak 3: App Inventor

Izumitelj aplikacije
Izumitelj aplikacije
Izumitelj aplikacije
Izumitelj aplikacije
Izumitelj aplikacije
Izumitelj aplikacije

Za izradu aplikacije koristio sam MIT App Inventor, besplatan i jednostavan za učenje/korištenje. Prvo sam morao stvoriti zaslone aplikacija/grafiku - to se može učiniti u Photoshopu itd. Olakšava rad u App Inventoru ako imate sve komponente koje čine zaslone kao zasebne slike/datoteke.

App Inventor ima dva prikaza, tu je kartica "Dizajner" za prednje vizualne sadržaje i kartica "Blokovi" za kôd.

Pomoću kartice 'Dizajner' izradio sam zaslone aplikacija. Jedan problem koji sam otkrio je da bluetooth komponenta ne radi na više ekrana pa se nakon zaslona dobrodošlice sve ostale (veza, RGB, temperatura boje, alarm) stvaraju na istom ekranu - efektivno slojevi koje ja uključim /isključeno.

Glavni alati koje sam koristio su za 'layout/alignment' i 'canvas'. Platno je područje osjetljivo na dodir koje možete prikazati kao sliku.

Kad se vizualni elementi postave, vrijeme je da se prebacite na karticu 'Blokovi' i napišete kôd. Ukratko ću ga opisati, ali vjerojatno je lakše ako uvezete moju datoteku u App Inventor i igrate se oko sebe …

Ovi prvi blokovi služe za zaslone za povezivanje. Da bih aplikaciji omogućio automatsko povezivanje s Arduinos bluetooth modulom, ja stvaram i postavljam varijablu na adresu svog HC06. Koristim mjerač vremena za promjenu pozadinske slike dok se povezuje. Ako je povezivanje uspješno, učitava se zaslon s temperaturom boje. Ako se bluetooth ne uspije automatski povezati, morate pritisnuti gumb 'poveži se s uređajem'. Ovo će prikazati popis svih bluetooth uređaja koje vaš telefon može vidjeti. Naredba 'bluetoothclient1.connect' koristi adresu uređaja koju odaberete s tog popisa za povezivanje.

Slika
Slika
Slika
Slika
Slika
Slika

Ovi blokovi kontroliraju ono što se događa kada dodirnete svaku tipku izbornika - promijenite između RGB, temperature boje i alarma. Dok se dodiruju, primjenjivi vizualni slojevi se uključuju i isključuju. Odnosno, kad dodirnete gumb izbornika RGB, pozadinska slika platna gumba prebacuje se na tamnu ikonu, uključuje RGB zaslon, a drugu isključuje.

Kontrola snage i svjetline dijeli se između zaslona RGB i temp. Boja. Da bi Arduino znao koje LED diode treba kontrolirati, moram mu reći koji je zaslon učitan. Tekstualni niz u formatu (zaslon)? šalje vaš telefon bluetooth pomoću naredbe BluetoothClient1. SendText.

Slika
Slika

Ovaj blok šalje niz (Power)? kad god pritisnete gumb za uključivanje.

Slika
Slika

Ovi blokovi kontroliraju podešavanje temperature boje. Kad dodirnete platno, Y koordinata vaše dodirne točke koristi se za postavljanje varijable 'cool'. Vrijednost Y upravlja veličinom piksela platna, pa je u mom slučaju vrijednost između 0 i 450. Koristim multiplikator da to pretvorim u upotrebljivu vrijednost PWM-a (0-255). Zatim šaljem niz s tom vrijednošću i identifikatorom u obliku (Tempvalue) ?.

Slika
Slika

Slični blokovi kao gore, ali za kontrolu svjetline. Ovaj put pomoću X koordinate i različitih množitelja postavite varijablu 'Bright' na vrijednost između 10 i 100.

Slika
Slika

Ovi blokovi su za RGB kontrolu. Postoji naredba pod nazivom 'GetPixelColor' koja se može koristiti za dobivanje RGB vrijednosti piksela koji vaš prst dodiruje. Iz nekog razloga ispisuje vrijednost s dodatnih 255 na kraju, pa radim malo kako bih vrijednost pretvorio u format (RGBredvalue.greenvalue.bluevalue.)? Ovo se opet šalje na Arduino, ali s RGB -om kao identifikatorom u nizu.

Slika
Slika

Sljedeći odjeljak blokova služi za postavke alarma. Prvi blok kontrolira što se događa kada dodirnete/povučete sunce gore -dolje. Ponovno, naredbe 'get current X and Y' koriste se za dobivanje vrijednosti gdje se nalazi vaš prst i promjenu slike u pozadini ovisno o visini sunca. Položaj sunca također pokreće bez obzira je li alarm omogućen ili onemogućen, to se šalje putem Bluetootha.

Slika
Slika
Slika
Slika

Kada dodirnete ili završite pomicanje sunca, prikazuje se birač vremena koji vam omogućuje postavljanje vremena alarma. Glavni dio ovog sljedećeg bloka je korištenje trenutnog vremena za izračunavanje koliko milisekundi postoji do postavljanja alarma. Ta se vrijednost zatim šalje u Arduino

Slika
Slika
Slika
Slika

U sljedećem koraku obrađujem kako Arduino čita i koristi žice …

Korak 4: Arduino kod

Kao i kod aplikacije, ovo ću ukratko obraditi….

Prvo postavljam sve svoje varijable, dodjeljujući senzore i LED diode ispravnim pinovima. Izlaz s Hall -ovih senzora očitavat će se pomoću funkcije analogRead, dajući vrijednost između 0 i 1023. Kao što je prethodno opisano, daje polovicu kad nema magneta, dakle oko 500. Koristim varijable okidača niske i visoke vrijednosti kako bih lakše prilagodite kad zna da je pak iznad senzora.

Slika
Slika

Neopikselima je potrebna biblioteka tako da je to ovdje definirano.

Slika
Slika
Slika
Slika

Postavljanje void pokreće serijske publikacije, za Micro Rx/Tx pinove (bluetooth) koristite Serial1.. Pinovi se tada postavljaju kao ulazi ili izlazi, a LED diode isključene.

Slika
Slika

Sada je to glavna petlja…

Ovaj prvi odjeljak provjerava primaju li se neki podaci iz aplikacije. Serial1.available () čita serijski broj i dobiva broj bajtova u nizu. Ako je to> 0, znam podatke koji dolaze.

Ako se sjećate, svi nizovi koje pošaljem iz aplikacije završavaju znakom pitanja…. tj. (Bright100)?

Koristim funkciju.readStringUntil za čitanje serijskih podataka do upitnika (Bright100) i postavljanje varijable BTstring na ovo. Provjeravam završava li BTstring s ')' kako bih bio siguran da se primaju potpune naredbe. Ako jesu, tada se poziva petlja BluetoothPrograma … to je opisano dalje u nastavku.

Slika
Slika

Ovaj sljedeći bit kontrolira alarm za izlazak sunca. U osnovi, ako je alarm omogućen i vrijeme je točno, tada će početi gasiti LED diode. Zbog ljudskog oka koje logaritamski percipira svjetlost, bolje je raditi bilo kakve LED fade up/down s eksponencijalnom krivuljom, a ne linearnom. Stoga jednadžba pokreće vrijednosti PWM -a …

Slika
Slika

Kako biste spriječili da pak ometa kontrolu aplikacije, deaktivira se kada koristite aplikaciju. Da biste ponovno aktivirali pak, morate ga pomaknuti s proizvoda na 5 sekundi. Ovaj dio koda najprije provjerava emitiraju li svi senzori vrijednost stabilnog stanja (bez magneta), a zatim pokreće mjerač vremena. Kad se završi 5 sekundi, varijabla BTinControl se vraća na false.

Slika
Slika

Kôd za pak sada. Prvo je potrebno očitati senzore.

Ako je svjetlo trenutno isključeno, provjerit će je li neki od senzora iznad ili ispod okidačkih točaka, tj. Pak je postavljen na luk. Ako je tako, bijele LED diode će nestati do vaše zadnje postavke, bez obzira na to gdje ih postavite.

Slika
Slika
Slika
Slika

Kako bi LED diode bile postavljene na zadnju postavku, umjesto da se ažuriraju na vrijednosti povezane sa bilo kojim senzorima koje pokreće, varijabla MovedSinceStandby postavljena je na false. Ovaj sljedeći dio koda u osnovi provjerava jeste li pomicali pak s početnog položaja za zadani iznos …

Slika
Slika
Slika
Slika

Ako pomičete pak, poziva se 'MainProgram' za ažuriranje svjetline/temp. Boje. Ovo je opisano dalje u tekstu.

Slika
Slika

Posljednji bit u ovoj glavnoj petlji provjerava je li pak vraćen na stražnju bazu - senzor 12 očitava vrijednost iznad/ispod točke okidanja. U tom slučaju LED svjetlo ponovo nestaje.

Slika
Slika

Bluetooth petlja:

Kao što je gore opisano, kada se podaci primaju putem Bluetootha, niz se čita. Sada moramo provjeriti što taj niz kaže …

Sve žice osim svjetline, temperature boje i RGB -a prilično su jednostavne za rukovanje. Provjeravate je li BTstring jednak tekstu poslanom iz aplikacije.

Ako se sjećate, kad god promijenite zaslone u aplikaciji, ona će poslati Bluetooth naredbu. Ovdje postavljamo pitanje za to i postavljamo neke varijable na true ili false tako da znamo na kojem ste ekranu.

Primijetite da na kraju svakog odjeljka postavljam varijablu BTinControl na true i brišem vrijednost BTstring.

Slika
Slika
Slika
Slika

Kada dodirnete gumb za uključivanje u aplikaciji, LED diode će nestati gore ili dolje. Gore navedene varijable za koji ste zaslon korištene za odlučivanje hoće li upravljati RGB ili bijela LED dioda.

Slika
Slika
Slika
Slika

Za svjetlinu, temperaturu boje i RGB moram čitati žice na malo drugačiji način. Budući da će se brojčani dio niza mijenjati, pitam se započinje li niz s jednim od identifikatora, a ne punim nizom, pa samo (Svijetlo ovdje..

Sada moram odvojiti stvarnu vrijednost svjetline od niza. Format niza poslanog iz aplikacije je (Brightvalue) pa stoga znam da će vrijednost svjetline biti između 't' i ')'. Pozicija 't' će ostati konstantna, uvijek će biti sedmi znak u nizu. No, budući da vrijednost svjetline može biti između 10 i 100, položaj ')' će se promijeniti. Koristim naredbu.indexOf da utvrdim gdje je ')', koji je to znak, a zatim mogu koristiti naredbu.substring za čitanje niza između sedmog znaka i pozicije znaka ')'. To mi ostavlja samo vrijednost svjetline koju mogu koristiti za podešavanje RGB ili bijele LED diode ovisno o ekranu.

Slika
Slika

Podešavanje temperature boje sličan je postupak kao gore, ali vrijednost će ovaj put biti između 'p' i ')' …

Slika
Slika

Za podešavanje RGB -a imamo tri vrijednosti koje možemo izdvojiti iz niza, ali opet je sličan postupak. Iz aplikacije primamo nizove u obliku (RGBvalue.value.value)

Tako da znam da će crvena vrijednost biti između 'B' i prve točke. Zelena vrijednost je između 1./2. točke, a vrijednost plave je između 2. točke i ')'.

Kad dobijemo vrijednosti, neopixles se postavljaju u novu boju …

Slika
Slika

Ovdje provjeravamo je li alarm uključen ili onemogućen. Ako se promijeni vrijeme alarma, bit će nam poslan niz s brojem milisekundi od sada do alarma. Ova vrijednost se ponovno izdvaja iz niza i da bismo mogli provjeriti je li vrijeme za početak izlaska sunca, moramo postaviti varijablu na trenutno vrijeme (milisi).

Slika
Slika

Kontrole pakova:

Kao što je prije opisano, ako je pak (magnet) jedan put prema gore, to će dovesti izlaz Hollovog osjetnika ispod niskog okidača, a ako će drugi put prema gore iznad visokog okidača.

To omogućuje kontrolu svjetline i temperature boje na istom luku.

Vrijednosti senzora se očitavaju. Ako je bilo koji od njih manji od niske vrijednosti okidača, prilagođavamo temperaturu boje. Ispod lučnog područja nalazi se 11 senzora, čiji će izlazi zauzvrat ići ispod okidačke točke dok se pak pomiče preko njih. Svaki senzor ima PWM vrijednost za hladne i tople LED diode naspram njega, počevši od senzora 1 na 100% toplom, 0% hladnog i radeći do 11 na 0% toplog, 100% hladnog.

Slika
Slika
Slika
Slika
Slika
Slika

Kontrola svjetline vrši se na isti način.. provjeravajući jesu li izlazi senzora ovaj put iznad visokog okidača i svakom senzoru daje vrijednost ponderiranja svjetline.

Ovo ponderiranje svjetline zatim se množi s vrijednošću temperature boje kako bi se dobila ukupna izlazna vrijednost. Omogućava vam da postavite bilo koju temperaturu boje na bilo koju svjetlinu …

Slika
Slika
Slika
Slika

Korak 5: Stanovanje

Kućište
Kućište
Kućište
Kućište
Kućište
Kućište
  1. Počeo sam s izradom kalupa od kartona za donji dio kućišta. Za izradu udubljenja za kontrolno područje dao sam laserski izrezati komad šperploče u obliku luka i upotrijebio novčić od 5 p za pristanište u stanju pripravnosti. Oni su zalijepljeni na kartonski kalup, pazeći da ih dovedu u ispravan položaj koji bi se poravnao s senzorima Hall učinka.
  2. Slijedilo je miješanje poliuretanske smole. Stvari koje koristim imaju jednostavan omjer 1: 1 i liječe se za otprilike 20 minuta.. pa moraju raditi prilično brzo!
  3. Početno izlijevanje trebalo je napuniti dno kalupa. Nakon ovog seta dodao sam unutarnju stijenku od kartona koja mi je omogućila izlijevanje bočnih stijenki.
  4. Da bih stvorio gornji dio u koji će LED diode sjediti, izrezao sam i zalijepio neku plastičnu cijev/čašu na mjesto pod kutom. I opet je smola ulivena i ostavljena da se stvrdne.
  5. Sad je kućište bilo spremno, morao sam izbušiti neke rupe i dobro ga obrisati.
  6. Nanesen je temeljni premaz, a zatim poprskan završnim završnim slojem boje.

Korak 6: Montaža/zaključak

Skupština/Zaključak
Skupština/Zaključak
Skupština/Zaključak
Skupština/Zaključak
Skupština/Zaključak
Skupština/Zaključak
Skupština/Zaključak
Skupština/Zaključak
  1. Utor za istosmjernu utičnicu izrezan je iz kućišta. Dizalica se zatim lijepi.
  2. LED ploča se tada može uvrnuti u gornji dio, a žice provući do donjeg dijela.
  3. Žice iz LED -a i istosmjerne utičnice zatim su uvijene u odgovarajuće priključne blokove.
  4. Glavna ploča se zatim uvija u kućište
  5. Komad šperploče zatim se privija kako bi pokrio dno kućišta.
  6. Posljednja stvar je zalijepiti "pak" zajedno, vodeći računa da polovi magneta budu orijentirani s ispravnom završnom kapicom "svjetline" ili "temperature boje".

Općenito, svjetlo radi prilično dobro! U softveru postoji nekoliko grešaka koje treba ispeglati, a RGB LED diode mogle bi biti svjetlije. Mogu dodati i senzor ambijentalnog svjetla za automatsku promjenu temperature boje, počevši danju s 'hladnim', a noću s 'toplim'.

Svaka čast za čitanje!

Preporučeni: