Arduino/sovelluksen ohjaama pöytävalo: 6 vaihetta (kuvilla)
Arduino/sovelluksen ohjaama pöytävalo: 6 vaihetta (kuvilla)
Anonim
Image
Image
Arduino/sovelluksen ohjaama pöytävalaisin
Arduino/sovelluksen ohjaama pöytävalaisin
Arduino/sovelluksen ohjaama pöytävalaisin
Arduino/sovelluksen ohjaama pöytävalaisin

Tätä projektia varten halusin jotain, jonka avulla voisin opettaa itselleni enemmän elektroniikasta/ohjelmistosta, johon en ole vielä oikein perehtynyt.. Päätin, että valo olisi hyvä foorumi tähän.

Suunnittelemani muotoilu oli tarkoitettu korostustyökaluun, jossa on värin ja kirkkauden säätö. Tuotteessa lämmintä ja viileää valkoista värilämpötilaa ja kirkkautta ohjataan kiekon avulla, ja sen sijainti ja suunta muuttavat niitä itsenäisesti - ainutlaatuinen/hauska vuorovaikutus.

Kuva
Kuva

Päätin myös luoda sovelluksen (saatan myös haastaa itseni) näiden säätämiseksi sekä lisätoimintojen avulla joidenkin RGB -LEDien ohjaamiseen ja auringonnousun hälytyksen asettamiseen. Auringonnousun hälytys lisää vähitellen kirkkautta yli 30 minuutin ajan auttaakseen sinua heräämään.

Koska tämä on ensimmäinen Arduino-/sovellusprojektini, oletan, että koodin tekemiseen on varmasti parempia tapoja, joten mene helposti! Se toimii, joten olen onnellinen. Jos sinulla on parannusehdotuksia tms., Olisi mukava kuulla.

Kaikki tämän projektin tiedostot (arduino/sovelluksen keksijäkoodi, sovelluksen grafiikka jne.) Ja sovelluksen apk. löytyy tästä linkistä.

Olen osallistunut tähän Raspberry Pi- ja FULL SPECTRUM LASER -kilpailuihin, joten jos luulet sen ansaitsevan äänestyksen, sitä arvostetaan suuresti !!

Mitä tarvitset….

Elec. Komponentit:

  • Arduino Micro
  • 12 lineaarista radiometristä Hall Effect -anturia
  • DC Jack
  • 12V virtalähde
  • 2x 1 W kylmävalkoinen LED (6000K)
  • 2x 1 W lämmin valkoinen LED (2800K)
  • 4x Adafruit RGB -neopikselit
  • Sparkfun Picobuck 350mA vakiojännite
  • HC06 Bluetooth -moduuli
  • Prototyyppikortti
  • Riviliittimet
  • Johdot

Materiaalit:

  • Muotinvalmistusmateriaalit (pahvi tai silikoni jne.)
  • Polyuretaani valuhartsi
  • Vaneri

Tarvikkeet:

  • Juottaa
  • Spray-maali
  • Hioa
  • Sekoituskupit/sekoittimet

Työkalut:

  • Juotin
  • Liimapistooli
  • Pihdit/ruuvimeisselit/veitset jne.
  • Laserleikkuri

Ohjelmisto:

  • Arduino
  • MIT App Inventor (ilmainen verkkopohjainen)
  • Photoshop tai jotain sovelluksen grafiikan luomiseen

Vaihe 1: Hall Effect -anturit

Tuotteen hallintaa/vuorovaikutusta varten halusin keksiä jotain hieman erilaista, ei vain valitsinta tai jotain.

Tutkittuani hieman erilaisia elektronisia komponentteja, löysin lineaariset radiometriset hallitehosensorit. Nämä ovat pohjimmiltaan anturi, jonka lähtöön vaikuttavat magneettikentät. Yleensä anturien lähtö on puolet tulojännitteestä. Kuitenkin, kun magneetti tuodaan sen lähelle, lähtö joko nousee tulojännitteeseen tai laskee 0 V: iin (kyllästymisrajat) riippuen siitä, onko se magneetin pohjois- vai etelänapa.

Tajusin, että voisin hyödyntää tätä, jotta voin hallita kahta eri asetusta yhdellä hallitunnistimella - kiekkoidea syntyi. Magneetti on piilotettu laserleikattuun kiekkoon ja se säätäisi joko kirkkautta tai värilämpötilaa riippuen siitä, kumpi pää oli kohti antureita. Menen Arduino -koodiin myöhemmin, mutta luen pohjimmiltaan nämä anturit ja etsin, onko ulostulo noussut "korkean laukaisimen" yläpuolelle vai laskenut "matalan laukaisimen" alle. Käytän useita hallitehosteantureita, jotta voin kartoittaa kullekin tietyn värilämpötilan ja kirkkauden arvon, jotka laukeavat, kun kiekko liukuu kaaren ympäri.

Kuva
Kuva

Vaihe 2: Elektroniikkalaitteisto

Elektroniikkalaitteisto
Elektroniikkalaitteisto
Elektroniikkalaitteisto
Elektroniikkalaitteisto
Elektroniikkalaitteisto
Elektroniikkalaitteisto

Tämän projektin ensimmäinen askel oli kytkeä elektroniikkalaitteisto. Päätin käyttää Arduino Micro -laitetta, koska siinä on hyvä määrä analogisia lukutappeja - joten voin käyttää useita hallitehosteantureita riittävän tarkkuuden säätämiseen. 12 V: n tasavirtalähde on jaettu Arduinon ja LED -ohjaimen virtalähteeseen.

Ohjauskaaressa on 11 hall -anturia, joista toinen sammuttaa valon. Nämä liitettiin nastoihin A0-> A5 ja 4, 6, 8, 9, 10, 12. Niillä on yhteinen 5v ja maadoituskisko/-tappi.

LEDit, joita käytin, ovat 1 W ja vaativat vakiovirtaohjaimen. Sparkfun PicoBuckia käytettiin, koska se tuottaa vakiona 350 mA jopa 3 lähtökanavaa. 12 V: n syöttö on kytketty ohjaimen Vin -nastoihin. Ajurissa on tulonapit lähtöjen PWM: n ohjaamiseksi, ne on kytketty Arduinon nastoihin 3 ja 5.

Bluetooth -moduuli liitettiin sitten. Bluetooth Rx-> Arduino Tx, Tx-> Rx ja 5v.maadoitus.

Kuva
Kuva

LEDit asennettiin erilliselle levylle. Kaksi viileää valkoista LEDiä on kytketty sarjaan, samoin kuin lämpimät. Nämä kytketään ohjaimen lähtöihin 1 ja 2. RGB -LEDit ovat Adafruit Neopixels; nämä ovat ketjutettavia moduuleja, joiden avulla voit hallita väriä ja kirkkautta yksitellen yhdestä Arduino -nastasta. Nämä kytketään nastaan 11 ja 5V/maadoitus nastoihin.

Vaihe 3: App Inventor

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

Sovelluksen luomisessa käytin MIT App Inventoria, joka on ilmainen ja melko helppo oppia/käyttää. Minun piti ensin luoda sovellusnäytöt/grafiikka - tämä voidaan tehdä Photoshopissa jne. Se helpottaa App Inventorissa, jos sinulla on kaikki osat, jotka muodostavat näytöt erillisinä kuvina/tiedostoina.

App Inventorilla on kaksi näkymää, siellä on Designer -välilehti käyttöliittymän visuaalisille asioille ja Blocks -välilehti koodille.

Rakensin Sovellus -välilehden avulla sovellusnäytöt. Yksi havaitsemani ongelma on, että bluetooth -komponentti ei toimi useilla näytöillä, joten tervetulonäytön jälkeen kaikki muut (yhteys, RGB, värilämpötila, hälytys) luodaan samalle näytölle - tehokkaasti tasot, jotka otan käyttöön /vinossa.

Tärkeimmät työkalut, joita käytin, ovat 'layout/alignment' ja 'canvas'. Kangas on kosketusherkkä alue, jonka voit näyttää kuvana.

Kun grafiikat on määritetty, on aika siirtyä Lohkot -välilehdelle ja kirjoittaa koodi. Kuvailen sen lyhyesti, mutta se on luultavasti helpompaa, jos tuot tiedostoni App Inventoriin ja pelaat ympärilläsi …

Nämä ensimmäiset lohkot ovat yhteysnäyttöjä varten. Jotta sovellus voisi yrittää muodostaa yhteyden automaattisesti Arduinosin Bluetooth -moduuliin, luon ja asetan muuttujan HC06: n osoitteeseen. Käytän ajastinta taustakuvan muuttamiseen sen muodostamisen aikana. Jos yhteys onnistuu, se lataa värilämpötilan näytön. Jos Bluetooth ei muodosta yhteyttä automaattisesti, sinun on painettava 'Yhdistä laitteeseen' -painiketta. Tämä tuo esiin luettelon kaikista Bluetooth -laitteista, joita puhelimesi voi nähdä. Komento 'bluetoothclient1.connect' muodostaa yhteyden luettelosta valitsemallasi laiteosoitteella.

Kuva
Kuva
Kuva
Kuva
Kuva
Kuva

Nämä lohkot ohjaavat mitä tapahtuu, kun kosketat kutakin valikkopainiketta - vaihda RGB: n, värilämpötilan ja hälytyksen välillä. Kun niitä kosketetaan, soveltuvat visuaaliset kerrokset kytkeytyvät päälle ja pois päältä. Eli kun napautat RGB -valikkopainiketta, se vaihtaa painikkeiden taustakuvan tummaksi kuvakkeeksi, kytkee RGB -näytön päälle ja toisen pois päältä.

Virran ja kirkkauden säätö on jaettu RGB- ja värilämpötilanäytöille. Jotta Arduino tietää, mitä LED -valoja ohjataan, minun on kerrottava, mikä näyttö on ladattu. Tekstimerkkijono muodossa (näyttö)? puhelimesi Bluetooth lähettää komennolla BluetoothClient1. SendText.

Kuva
Kuva

Tämä lohko lähettää merkkijonon (teho)? aina kun virtapainiketta painetaan.

Kuva
Kuva

Nämä lohkot ohjaavat värilämpötilan säätöä. Kun kosketat kangasta, kosketuspisteen Y -koordinaattia käytetään muuttujan "cool" asettamiseen. Y-arvoa ohjaa piirtoalustan pikselikoko, joten minun tapauksessani arvo on välillä 0 ja 450. Muunnan kertoimen käyttökelpoiseksi PWM-arvoksi (0–255). Lähetän sitten merkkijonon, jolla on tämä arvo ja tunniste muodossa (Tempvalue) ?.

Kuva
Kuva

Samanlaisia lohkoja kuin yllä, mutta kirkkauden säätöä varten. Käytä X -koordinaattia tällä kertaa ja eri kertoimia asettaaksesi muuttujan "Kirkas" arvoksi 10-100.

Kuva
Kuva

Nämä lohkot ovat RGB -ohjausta varten. On komento nimeltä GetPixelColor, jonka avulla voit saada sormesi koskettaman pikselin RGB -arvon. Se antaa arvon jostain syystä 255 ylimääräisellä lopussa, joten teen vähän työtä saadaksesi arvon muotoon (RGBredvalue.greenvalue.bluevalue.)? Jälleen tämä lähetetään sitten Arduinolle, mutta RGB tunnisteena merkkijonossa.

Kuva
Kuva

Seuraava lohkojen osa koskee hälytysasetuksia. Ensimmäinen lohko ohjaa mitä tapahtuu, kun kosketat/vedät aurinkoa ylös ja alas. Jälleen "hanki nykyiset X ja Y" -komentoja käytetään saamaan arvo sormesi sijainnista ja muuttamaan taustakuvaa auringon korkeuden mukaan. Auringon asento ohjaa myös sitä, onko hälytys käytössä vai ei, tämä lähetetään Bluetoothin kautta.

Kuva
Kuva
Kuva
Kuva

Kun napautat tai lopetat auringon liikuttamisen, se tuo esiin ajanvalitsimen, jonka avulla voit asettaa hälytysajan. Suurin osa tästä seuraavasta lohkosta käyttää nykyistä aikaa selvittääkseen kuinka monta millisekuntia on hälytyksen asettamiseen. Tämä arvo lähetetään sitten Arduinolle

Kuva
Kuva
Kuva
Kuva

Seuraavassa vaiheessa kerron, miten Arduino lukee ja käyttää merkkijonoja…

Vaihe 4: Arduino -koodi

Kuten sovelluskoodissa, käsittelen tätä lyhyesti….

Ensin asetan kaikki muuttujat ja annan anturit ja LEDit oikeille nastoille. Hall -tehosteanturien lähtö luetaan käyttämällä analogRead -toimintoa, jolloin arvo on välillä 0 ja 1023. Kuten aiemmin kuvattiin, se tuottaa puolet, kun magneetteja ei ole, eli noin 500. Käytän matalan ja korkean laukaisimen muuttujia, jotta voin helposti säädä, kun se tietää kiekon olevan anturin päällä.

Kuva
Kuva

Neopikselit vaativat kirjaston, joten se määritellään täällä.

Kuva
Kuva
Kuva
Kuva

Tyhjäasetus käynnistää sarjat, Micro: n Rx/Tx -nastat (bluetooth) käyttävät Serial1: tä. Nastat asetetaan sitten tuloiksi tai lähtöiksi ja LEDit sammutetaan.

Kuva
Kuva

Nyt se on tärkein silmukka…

Tässä ensimmäisessä osassa tarkistetaan, vastaanotetaanko sovelluksesta tietoja. Serial1.available () lukee sarjaa ja saa merkkijonon tavumäärän. Jos se on> 0, tiedän saapuvan datan.

Jos muistat, kaikki sovelluksesta lähettämäni merkkijonot päättyvät kysymysmerkkiin…. eli (Bright100)?

Käytän toimintoa.readStringUntil sarjatietojen lukemiseen kysymysmerkkiin (Bright100) asti ja asetan muuttujan BTstring tähän. Tarkistan, päättyykö BTstring '' '-merkkiin varmistaakseni, että kaikki komennot vastaanotetaan. Jos ne ovat, BluetoothProgram -silmukkaa kutsutaan … tämä on kuvattu alla.

Kuva
Kuva

Tämä seuraava bitti ohjaa auringonnousun hälytystä. Pohjimmiltaan jos hälytys on käytössä ja aika on oikea, se alkaa himmentää LED -valoja. Koska ihmissilmä havaitsee valon logaritmisesti, on parempi tehdä kaikenlaisia LED -häipymiä ylös/alas eksponentiaalisella käyrällä lineaarisen sijasta. Siksi yhtälö ajaa PWM -arvoja…

Kuva
Kuva

Jotta kiekko ei häiritsisi sovelluksen hallintaa, se poistetaan käytöstä, kun käytät sovellusta. Aktivoidaksesi kiekon uudelleen, sinun on siirrettävä se pois tuotteesta 5 sekunnin ajan. Tämä bitti koodia tarkistaa ensin, antavatko kaikki anturit vakaan tilan arvon (ei magneettia), ja käynnistää sitten ajastimen. Kun 5 sekuntia on kulunut, BTinControl -muuttuja asetetaan takaisin arvoon false.

Kuva
Kuva

Kiekon koodi nyt.. Ensin on luettava anturit.

Jos valo ei ole sammunut, se tarkistaa, onko jokin antureista liipaisupisteiden ylä- tai alapuolella, eli kiekko on asetettu kaaren päälle. Jos näin on, se häivyttää valkoiset LED -valot viimeiseen asetukseesi riippumatta siitä, mihin asetat sen.

Kuva
Kuva
Kuva
Kuva

Jotta LED -valot pysyisivät viimeisessä asetuksessasi sen sijaan, että päivitettäisiin arvoihin, jotka liittyvät mihinkään anturiin, sen laukaisu, MovedSinceStandby -muuttuja on asetettu arvoon false. Tämä seuraava koodibitti tarkistaa periaatteessa, oletko siirtänyt kiekkoa sen alkuperäisestä sijainnista määrätyllä määrällä….

Kuva
Kuva
Kuva
Kuva

Jos siirrät kiekkoa, MainProgram kutsuu päivittämään kirkkauden/värilämpötilan. Tämä kuvataan alempana.

Kuva
Kuva

Tämän pääsilmukan viimeinen bitti tarkistaa, onko kiekko asetettu takaisin valmiustilaan - onko anturi 12 lukemassa liipaisupisteen ylä-/alapuolella olevaa arvoa. Jos näin on, LED sammuu takaisin..

Kuva
Kuva

Bluetooth -silmukka:

Kuten edellä on kuvattu, kun tiedot vastaanotetaan Bluetoothin kautta, merkkijono luetaan. Meidän on nyt tarkistettava, mitä tuo merkkijono sanoo …

Kaikki merkkijonot paitsi kirkkaus, värilämpötila ja RGB ovat melko helppoja käsitellä. Tarkistat, onko BTstring sama kuin sovelluksesta lähetetty teksti.

Jos muistat, se lähettää Bluetooth -komennon aina, kun vaihdat sovelluksen näyttöä. Tässä kyseenalaistamme sen ja asetamme muuttujat tosi- tai epätosi -arvoisiksi, jotta tiedämme, missä näytössä olet.

Huomaa jokaisen osan lopussa, että asetan BTinControl -muuttujan tosi -arvoon ja tyhjennän BTstring -arvon.

Kuva
Kuva
Kuva
Kuva

Kun napautat sovelluksen virtapainiketta, LED -valot himmenevät ylös tai alas. Yllä määritettyjä muuttujia, joilla olet näytössä, käytetään päättämään, ohjataanko RGB- vai valkoisia LED -valoja.

Kuva
Kuva
Kuva
Kuva

Kirkkauden, värilämpötilan ja RGB: n vuoksi joudun lukemaan merkkijonot hieman eri tavalla. Koska merkkijonon numeroosa muuttuu, epäilen, alkaako merkkijono jollakin tunnisteista, ei koko merkkijonolla, joten vain (Kirkas tässä..

Minun täytyy nyt erottaa todellinen kirkkausarvo merkkijonosta. Sovelluksesta lähetetyn merkkijonon muoto on (Brightvalue), joten tiedän, että kirkkausarvo on "t" ja ")". T: n sijainti pysyy vakiona, se on aina merkkijonon seitsemäs merkki. Mutta koska kirkkausarvo voi olla välillä 10 ja 100, ')' -asento muuttuu. Käytän.indexOf -komentoa selvittääksesi, missä ")" on, mikä merkki se on, ja voin sitten käyttää.substring -komentoa merkkijonon lukemiseen seitsemännen merkin ja merkin ")" välillä. Tämä jättää minulle vain kirkkausarvon, jota voin käyttää RGB- tai valkoisten LED -valojen säätämiseen näytön mukaan.

Kuva
Kuva

Värilämpötilan säätö on samanlainen prosessi kuin yllä, mutta arvo on tällä kertaa p ja p) välillä …

Kuva
Kuva

RGB -säätöä varten meillä on kolme arvoa, jotka voidaan poimia merkkijonosta, mutta sama prosessi on jälleen. Saamme sovelluksesta merkkijonoja muodossa (RGBvalue.value.value)

Joten tiedän, että punainen arvo on "B": n ja ensimmäisen pisteen välillä. Vihreä arvo on ensimmäisen ja toisen pisteen välissä ja sininen arvo toisen pisteen ja ')' välissä.

Kun olemme saaneet arvot, neopikselit asetetaan uuteen väriin …

Kuva
Kuva

Täällä tarkistamme, onko hälytys käytössä vai ei. Jos hälytysaikaa muutetaan, meille lähetetään merkkijono millisekuntien määrällä tästä lähtien hälytykseen. Jälleen tämä arvo uutetaan merkkijonosta ja voidaksemme tarkistaa, onko sen aika aloittaa auringonnousu, meidän on asetettava muuttuja nykyiseen aikaan (millis).

Kuva
Kuva

Kiekon hallinta:

Kuten aikaisemmin on kuvattu, kiekko (magneetti) on yhdensuuntainen, se ohjaa Hall -anturin lähdön matalan liipaisimen alle ja toisinpäin korkean liipaisimen yläpuolelle.

Tämä mahdollistaa kirkkauden ja värilämpötilan säätämisen samalla kaarella.

Anturien arvot luetaan. Jos jokin niistä on pienempi kuin matala laukaisuarvo, säädämme värilämpötilaa. Kaarialueen alla on 11 anturia, jotka lähtivät vuorostaan liipaisupisteen alapuolelle, kun kiekko liikkuu niiden yli. Jokaisella anturilla on PWM -arvo viileitä ja lämpimiä LED -valoja vastaan, alkaen anturista 1 100% lämpimänä, 0% viileänä ja toimimalla 11. sijalla 0% lämpimänä, 100% viileänä.

Kuva
Kuva
Kuva
Kuva
Kuva
Kuva

Kirkkauden säätö tehdään samalla tavalla.. tarkistetaan, ovatko anturien lähdöt tällä kertaa korkean liipaisimen yläpuolella ja antavat kullekin anturille kirkkauden painotusarvon.

Tämä kirkkauden painotus kerrotaan sitten värilämpötila -arvolla, jotta saadaan kokonaistulostusarvo. Voit asettaa minkä tahansa värilämpötilan mihin tahansa kirkkauteen…

Kuva
Kuva
Kuva
Kuva

Vaihe 5: Asuminen

Asuminen
Asuminen
Asuminen
Asuminen
Asuminen
Asuminen
  1. Aloitin tekemällä muotin kotelon alaosasta pahvista. Ohjausalueen syvennysten luomiseksi leikattiin vaneripala laserkaareksi kaaren muotoon ja käytin 5p -kolikkoa valmiustila -telakkaan. Nämä liimattiin pahvimuottiin kiinnittäen huomiota siihen, että ne saatiin oikeaan asentoon, joka olisi sopusoinnussa halliefektianturien kanssa.
  2. Seuraavaksi sekoitettiin polyuretaanihartsi. Käyttämälläni aineella on yksinkertainen 1: 1 -suhde ja se kovettuu noin 20 minuutissa.. joten täytyy toimia melko nopeasti!
  3. Ensimmäinen kaataminen täytti muotin pohjan. Tämän sarjan jälkeen lisäsin pahvin sisäseinän, jotta voin kaataa sivuseinät.
  4. Yläosan luomiseksi, jotta LEDit istuisivat sisään, leikkasin ja liimasin jonkin verran muoviputkea/kuppia paikalleen kulmassa. Ja taas hartsi kaadettiin sisään ja annettiin kovettua.
  5. Nyt kotelo oli valmis, minun piti porata joitakin reikiä ja antaa sille hyvä hiekka.
  6. Pohjamaali levitettiin ja ruiskutettiin sitten viimeisellä maalikerroksella.

Vaihe 6: Kokoonpano/johtopäätös

Kokoonpano/johtopäätös
Kokoonpano/johtopäätös
Kokoonpano/johtopäätös
Kokoonpano/johtopäätös
Kokoonpano/johtopäätös
Kokoonpano/johtopäätös
Kokoonpano/johtopäätös
Kokoonpano/johtopäätös
  1. DC -liittimen aukko leikattiin kotelosta. Tuki liimataan sitten kiinni.
  2. LED -kortti voidaan sitten ruuvata kiinni yläosassa siten, että johdot johdetaan alaosaan.
  3. LEDien ja tasavirtaliittimen johdot ruuvattiin sitten oikeisiin riviliittimiin.
  4. Emolevy ruuvataan sitten koteloon
  5. Tämän jälkeen ruuvataan kiinni vaneripala kotelon pohjan peittämiseksi.
  6. Viimeinen asia on liimata 'kiekko' yhteen varmistaen, että magneetin navat on suunnattu oikealla 'kirkkaudella' tai 'värilämpötilalla'.

Kaiken kaikkiaan valo toimii aika hyvin! Ohjelmistossa on muutamia virheitä silitettäväksi ja RGB -LEDit voivat olla kirkkaampia. Voin myös lisätä ympäristön valoanturin muuttamaan automaattisesti värilämpötilaa, jolloin päivä alkaa "viileästä" ja muuttuu "lämpimäksi" yöllä.

Tsemppiä lukemiseen!