Sadržaj:

Arduino/App kontrolisano svjetlo stola: 6 koraka (sa slikama)
Arduino/App kontrolisano svjetlo stola: 6 koraka (sa slikama)

Video: Arduino/App kontrolisano svjetlo stola: 6 koraka (sa slikama)

Video: Arduino/App kontrolisano svjetlo stola: 6 koraka (sa slikama)
Video: Cómo hacer una incubadora casera con termostato ZFX W1012 2024, Novembar
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 bi svjetlo bilo dobra platforma za ovo.

Dizajn koji sam smislio je za uplajter 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 se mijenjaju nezavisno - prilično jedinstvena/zabavna interakcija.

Image
Image

Završio sam i s stvaranjem aplikacije (mogao bih izazvati i sebe) da ih prilagodim, kao i dodavanjem dodatnih funkcija za kontrolu nekih RGB LED dioda i postavljanje alarma za izlazak sunca. Alarm za izlazak sunca postepeno povećava svjetlinu tokom 30 minuta kako bi se lakše probudili.

Budući da je ovo moj prvi Arduino/App projekt, pretpostavljam da će definitivno biti boljih načina za izradu koda, pa me 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. možete pronaći na ovom linku.

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

Sta ti treba….

Elec. Komponente:

  • Arduino Micro
  • 12 linearnih radiometrijskih senzora Hall efekta
  • DC Jack
  • 12V napajanje
  • 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:

  • Solder
  • Boja u spreju
  • Brusni papir
  • Čaše za mešanje/mešalice

Alati:

  • Lemilica
  • Pištolj za ljepilo
  • Kleš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 polovina 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 ovo mogao iskoristiti da bih mogao kontrolirati dvije različite postavke na jednom Hall senzoru - rodila se ideja o "pak" -u. Magnet je skriven u pakiranju za lasersko rezanje i mogao bi kontrolirati svjetlinu ili temperaturu boje ovisno o tome koji je kraj bio okrenut prema senzorima. Kasnije ulazim u Arduino kôd, ali u osnovi čitam ove 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.

Image
Image

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 da koristim više senzora sa Hall efektom kako bih dao dovoljnu rezoluciju za podešavanje postavki. 12V DC napajanje je podijeljeno između napajanja Arduino 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 na pinove A0-> A5 i 4, 6, 8, 9, 10, 12. Imaju 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 spojeni na pinove 3 i 5 Arduina.

Zatim je povezan Bluetooth modul. Bluetooth Rx-> Arduino Tx, Tx-> Rx i 5v.ground.

Image
Image

LED diode su montirane 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

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

Za kreiranje aplikacije koristio sam MIT App Inventor, njen besplatan i prilično jednostavan za učenje/upotrebu. Prvo sam morao stvoriti ekrane aplikacija/grafiku - to se može učiniti u Photoshopu itd. U App Inventoru je lakše ako imate sve komponente koje čine ekrane kao zasebne slike/datoteke.

App Inventor ima dva prikaza, tu je kartica 'Dizajner' za prednje vizualne stvari i kartica 'Blokovi' za kôd.

Pomoću kartice 'Designer' stvorio sam zaslone aplikacija. Jedan problem koji sam otkrio je da bluetooth komponenta ne radi na više ekrana, pa se nakon ekrana „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.

Nakon što 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 su za ekrane za povezivanje. Da bih aplikaciji omogućio automatsko povezivanje s Arduinos bluetooth modulom, kreiram i postavljam varijablu na adresu svog HC06. Koristim tajmer 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 dugme '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 te liste za povezivanje.

Image
Image
Image
Image
Image
Image

Ovi blokovi kontrolišu šta se dešava kada dodirnete svaki taster menija - prelazite između RGB, temperature boje i alarma. Kada se dodirnu, primjenjivi vizuelni slojevi se uključuju i isključuju. Odnosno, kada dodirnete dugme RGB menija, pozadinska slika platna dugmadi prebacuje se na tamnu ikonu, uključuje RGB ekran, a drugu isključuje.

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

Image
Image

Ovaj blok šalje niz (Power)? kad god pritisnete dugme za napajanje.

Image
Image

Ovi blokovi kontroliraju podešavanje temperature boje. Kada dodirnete platno, Y koordinata vaše dodirne tač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) ?.

Image
Image

Slični blokovi kao gore, ali za kontrolu svjetline. Koristeći X koordinatu ovaj put i različite množitelje za postavljanje varijable 'Bright' na vrijednost između 10 i 100.

Image
Image

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 na tome da vrijednost unesem u format (RGBredvalue.greenvalue.bluevalue.)? Opet se ovo šalje Arduinu, ali s RGB -om kao identifikatorom u nizu.

Image
Image

Sljedeći dio blokova je za postavke alarma. Prvi blok kontroliše šta se dešava kada dodirnete/povučete sunce gore -dole. Opet, naredbe 'get current X and Y' se koriste 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 na to je li alarm uključen ili onemogućen, ovo se šalje putem Bluetootha.

Image
Image
Image
Image

Kada dodirnete ili završite sa pomicanjem sunca, prikazuje se birač vremena koji vam omogućava da postavite vrijeme alarma. Glavni dio ovog sljedećeg bloka je korištenje trenutnog vremena za izračunavanje koliko milisekundi ima do postavljanja alarma. Ova vrijednost se zatim šalje u Arduino

Image
Image
Image
Image

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

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. Izlazi 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 kada nema magneta, dakle oko 500. Koristim varijable niskog i visokog okidača kako bih lakše podesite kada zna da je pak iznad senzora.

Image
Image

Neopikselima je potrebna biblioteka tako da je to ovdje definirano.

Image
Image
Image
Image

Postavljanje void pokreće serijske publikacije, za Micro Rx/Tx pinove (bluetooth) koriste Serial1.. Pinovi se tada postavljaju na ulaze ili izlaze, a LED diode se isključuju.

Image
Image

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 da podaci dolaze.

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

Koristim funkciju.readStringUntil za čitanje serijskih podataka do znaka pitanja (Bright100) i postavio varijablu BTstring na ovo. Proveravam da li BTstring završava sa ')' kako bih se uverio da li su primljene potpune komande. Ako jesu, tada se poziva BluetoothProgram petlja … to je opisano dalje u tekstu..

Image
Image

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 koju vrstu LED fade up/down s eksponencijalnom krivuljom, a ne linearnom. Stoga jednadžba pokreće vrijednosti PWM -a …

Image
Image

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 prvo provjerava da li svi senzori emitiraju stabilnu vrijednost (bez magneta), a zatim pokreće mjerač vremena. Kada se završi 5 sekundi, varijabla BTinControl se vraća na false.

Image
Image

Kôd za pak sada. Prvo treba 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 to slučaj, bijele LED diode će nestati do vaše posljednje postavke, bez obzira na to gdje ih postavite.

Image
Image
Image
Image

Da bi LED diode bile postavljene na zadnju postavku umjesto ažuriranja na vrijednosti povezane sa bilo kojim senzorima koje pokreće, varijabla MovedSinceStandby postavljena je na Netačno. Ovaj sljedeći dio koda u osnovi provjerava jeste li pomicali pak s početnog položaja za zadanu količinu …

Image
Image
Image
Image

Ako premještate pak, poziva se 'MainProgram' za ažuriranje svjetline/temp. Boje. Ovo je opisano dalje u tekstu.

Image
Image

Poslednji bit u ovoj glavnoj petlji proverava da li je pak vraćen na rezervno postolje - senzor 12 očitava vrednost iznad/ispod tačke okidanja. U tom slučaju LED svjetlo ponovo gasi.

Image
Image

Bluetooth petlja:

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

Lako se nosi sa svim žicama, osim svjetline, temperature boje i RGB -a. Provjeravate je li BTstring jednak tekstu poslanom iz aplikacije.

Ako se sjećate, kad god promijenite ekrane u aplikaciji, ona će poslati naredbu za bluetooth. 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.

Image
Image
Image
Image

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

Image
Image
Image
Image

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.indexOf naredbu da utvrdim gdje je ')', koji je to znak, a zatim mogu koristiti naredbu.substring za čitanje niza između sedmog znaka i pozicije znaka ')'. Ovo mi ostavlja samo vrijednost svjetline koju mogu koristiti za podešavanje RGB ili bijele LED diode ovisno o ekranu.

Image
Image

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

Image
Image

Za podešavanje RGB -a imamo tri vrijednosti koje možemo izdvojiti iz niza, ali to je opet 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 prve/druge tačke, a vrijednost plave je između druge tačke i ')'.

Kad dobijemo vrijednosti, neopixles se postavljaju u novu boju …

Image
Image

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 ponovo izdvaja iz niza i da bismo mogli provjeriti je li vrijeme za početak izlaska sunca, moramo postaviti varijablu na trenutno vrijeme (milisi).

Image
Image

Kontrole pakova:

Kao što je ranije opisano, ako je pak (magnet) jedan put prema gore, to će pokrenuti izlaz Hall -ovog senzora ispod niskog okidača, a ako će drugi put prema gore iznad visokog okidača.

To omogućava kontrolu i 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 sa senzorom 1 na 100% toplom, 0% hladnim i radeći do 11. na 0% toplom, 100% hladnom.

Image
Image
Image
Image
Image
Image

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 tada se množi s vrijednošću temp. Boje kako bi se dobila ukupna izlazna vrijednost. Omogućava vam da postavite bilo koju temperaturu boje na bilo koju svjetlinu …

Image
Image
Image
Image

Korak 5: Stanovanje

Stanovanje
Stanovanje
Stanovanje
Stanovanje
Stanovanje
Stanovanje
  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 pravilan položaj koji bi se poravnao sa senzorima Hall efekta.
  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 unutrašnji zid od kartona koji mi je omogućio da sipam bočne zidove.
  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 uglom. Ponovo je smola sipana i ostavljena da se stvrdne.
  5. Sada je kućište sve spremno, morao sam izbušiti neke rupe i dobro ga obrisati.
  6. Nanesen je prajmer, 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 DC 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 se zatim pričvršćuje da pokrije dno kućišta.
  6. Konačna stvar je zalijepiti „pak“zajedno, vodeći računa da su polovi magneta orijentirani s ispravnom završnom kapicom „svjetline“ili „temperature boje“.

Sve u svemu, svjetlo radi prilično dobro! U softveru postoji nekoliko grešaka koje treba ispeglati, a RGB LED diode bi mogle biti svjetlije. Mogu dodati i senzor ambijentalnog svjetla za automatsku promjenu temperature boje, započinjući dan sa „hladnim“, a noću sa „toplo“.

Svaka čast za čitanje!

Preporučuje se: