Műhely

Intelligens lámpa megépítése: 3 lépés (képekkel)

Demjén Ferenc - Hogyan tudnék élni nélküled (HQ)

Demjén Ferenc - Hogyan tudnék élni nélküled (HQ)

Tartalomjegyzék:

Anonim

Ez az Instructable a saját intelligens lámpájának megépítéséről szól. Ez az Instructable eléggé mély lesz, és mindent átmegyünk, amire szükséged lesz ahhoz, hogy sikeres legyen a saját szép Smart Lámpa kialakítása és építése! Ez az Instructable azt feltételezi, hogy eléggé tudod a Fusion 360-ról, és hogy az elektronikában szerzett tapasztalatod egy kicsit fejlettebb, de ez nagyon alapos lesz, és tartalmazza az összes STL-fájlt, ami a 3D nyomtatóhoz való feltöltéshez és a lámpa nyomtatásához szükséges. mivel az összes vázlat és kód is szerepel! Ezek segítenek a saját intelligens lámpa megépítésében!

A tárgyak internete: „okosabb” lámpa

A tárgyak internete a mai technológiai világban egy szavak. Mindenhol hallod, de senki sem tudja pontosan meghatározni a definícióját. Ez valóban különböző dolgokat jelent a különböző emberek számára. Úgy tűnik, a Tech világ legnagyobb szereplői, a világ Googles és Facebookjai nem értettek egyet a definícióban. Ennek ellenére úgy tűnik, hogy minden vállalatnak van IoT-vel kapcsolatos belső csoportja vagy szervezeti egysége, mivel a statisztikák " 40 milliárd csatlakoztatott eszköz 2020-ig 'és' A vállalatok az elkövetkező 5 évben 6 trillió dollárt költenek a csatlakoztatott eszközmegoldásokra. arra kényszerítik a vállalatokat, hogy újraértékeljék, megengedhetik-e maguknak a potenciális növekedési lehetőségeket. Ez azonban nem akadályozhatja meg az IoT-t. Valójában az IoT hihetetlen. Soha nem volt lehetőségünk arra, hogy ténylegesen kihasználjuk a nagy mennyiségű adatot. Olyan sok érdekes dolgot tudunk megmondani, amit korábban nem tudtunk pontosan ismerni, olyan dolgokból, mint amilyen az autója karbantartása, hogy milyen típusú növények virágzanak az otthoni kertben a környező helyi időjárási körülmények miatt, talajtípusok és telítettségi szintek. Az IoT a találgatásokat a készülékek karbantartásán alapul; Röviden, ez megkönnyítheti az életet. Mindig adataink voltak; mostanáig nem tudtuk, hogy mit csináljunk vele. Az IoT a legelső szakaszában van; óriási ütemben növekszik, és mivel az iparág elkezdi megoldani az IoT növekvő fájdalmát, elkezdjük látni a valóban összekapcsolt eszközöket. Láthatjuk azokat a képeket, amelyekben a kenyérpirító a hűtőszekrénnyel beszél, és mindketten beszélnek a TV-vel. Ezeket a víziókat nem lehet megvalósítani, amíg a hálózati protokollok kérdése nem oldódik meg; azaz bizonyos cégek, mint például a Phillips, a készülék hagyományos kommunikációs módszereihez, például az I²C-hez hasonló másolási jogokkal rendelkeznek (ne aggódj, ha nem tudod, mi ezek, nem befolyásolja a lámpa befejezésének képességét) :)), amely az ott használt nyelv természetéből adódóan sok chipgyártó számára lehetővé tette, hogy e szerzői jogot körülvegyék az adott protokoll variációinak létrehozásával. Ez minden más főbbhez hasonlóan történik, mint például az SPI, az UART, az ANT stb. Ez hatalmas számú permutációt hozott létre a kézfogás között az eszközök között, ami lehetetlenné tette, hogy egy csatlakoztatott eszköz egy cégtől beszéljen egy másik eszközzel. Mindenesetre az IoT még mindig gyermekcipőben van, és sok lehetősége van arra, hogy növekedjen és hasznos legyen mindennapi életében!

Tehát ha még mindig olvasol, félelmetes! Ez azt jelenti, hogy szenvedélyes vagy, vagy igazán tetszett ez a lámpa vagy mindkettő! Akárhogy is, lebontom az intelligens lámpát. Ez egy IoT eszköz, ami azt jelenti, hogy csatlakozik az internethez, és hogy az adatokat érdekes célokra használják (az alábbiakban részletesebben fogok dolgozni). Ez az intelligens lámpa csatlakozik az internethez egy WiFi chip és mikrokontroller segítségével. Emellett kapacitív érintőpanelt használnak az érintőgombos kezelőfelülethez. Opcionálisan felvehet egy környezeti fényérzékelőt is, amely elolvashatja, hogy milyen lámpája van a lámpában (a kód tartalmaz erre vonatkozó támogatást), és használhatja ezeket az adatokat, hogy eldöntse, mikor kívánja bekapcsolni a lámpát. A Lámpa konfigurálható úgy, hogy bármely WPA vagy WPA2 személyes hálózathoz csatlakozzon (sajnos nincs vállalati támogatás) vagy WEP, és az adatokat bármely személyes otthoni szerverre küldhetjük. A lámpa konfigurálva van és egy távoli szerverhez csatlakozik, ahonnan az adatok egy játékmotorba kerülnek. Ez a lámpa sokkal többet kínál, mint néhány internetkapcsolt lámpa.

Az intelligens lámpa célja, hogy teljes mértékben hozzáférjen a lámpához (vagy eszközéhez), és mindig érdekes információt kapjon a rendszeréről. Egy virtuális környezetben, egy játékmotort használva építettünk egy virtuális modellt. A két lámpát összekapcsoltuk, és egymással érintkeztünk. A virtuális modellben be- és kikapcsolhatja a lámpát, és beállíthatja a fényerőt, és a fizikai lámpa azonnal és távolról tükrözi ezeket a változásokat. A másik irányban be- és kikapcsolhatja a lámpát, valamint megváltoztathatja a fényerőt, és a modell pontosan tükrözi ezt. Ezen túlmenően, ha a lámpát egyszerűen nem csatlakoztatja a hálózathoz, a lámpa örökölt üzemmódba lép és visszatér egy normál működő lámpához. Ezen információk virtuális modelljének létrehozása egy játékmotorban teljesen opcionális; könnyedén felépíthet bármilyen front-end web kliens vagy android vagy iOS alkalmazást az adatok küldésének helyszínére, vagy hogy a távirányítóval a játékmotor modellje megadja Önt.

Miért szeretnék WiFi-kapcsolattal rendelkező lámpát?

A projekt valódi értéke nem a fizikai lámpa; míg szépen megtervezett és nagyon szép lámpa, amely képes a csatlakoztatott eszközök hálózatának megfigyelésére és vezérlésére. Vegyünk például egy gyárat. Gyárban jellemzően sok olyan gép létezik, amelyek hasonló feladatokat látnak el. Az ipari gépek hálózatának összekapcsolása segíthet a vezetőknek, hogy távolról üzemeltessék üzemeiket, miközben adatokat gyűjtenek, és felügyelik a gépeik állapotát. A gyűjtött adatok valóban nagyon fontosak és segíthetnek olyan következtetések levonásában, amelyek egyébként nem voltak nyilvánvalóak. Például egy autóval olyan IoT érzékelőket használhat, amelyek figyelemmel kísérik a motor hőmérsékletét, az autó által kifejtett erőt, percenkénti fordulatszámot és kilométert. Ezek az együttesek felhasználhatók arra, hogy bizonyos fokú biztonsággal kitalálják az autó általános egészségét. Ahelyett, hogy tudná, hogy mikor kell megváltoztatni az olajat vagy a gumiabroncsokat, az autó már tudja, és értesíti Önt a telefonon. Ezen túlmenően, az adatkészletnek az autókat tartalmazó adatkészlet hozzáadásával és az átlagos futási idővel a futásteljesítmény tekintetében ez az előrejelzés sokkal pontosabbá tehető. Egy másik példa, hogy egy olyan gyár, amely 3D-nyomtatókat használ az ipari alkatrészek gépeléséhez, nagyban részesülne annak tudatában, hogy az éjszakai munkák befejezése után. Amint ez megtörténik, egy menedzser értesítést kapna telefonján keresztül egy alkalmazáson keresztül, amely lehetővé tenné a kezelő számára, hogy kikapcsolja az összes inaktív nyomtatót, amely megtakarítja a közüzemi költségeket. A kényelem, hogy tudjuk, mi történik a gépeddel, képes az okosabb és távolabbi működésre, és pénzt takaríthat meg a folyamat során, az IoT olyan nagy üzlet a mai technológiai világban. Más szóval, az intelligens lámpák pénzt takarítanak meg?

kellékek:

1. lépés: A lámpa tervezése és közgyűlése

Tervezés

Bármi megtervezése során fontos a korlátok és célok azonosítása. Esetünkben az interfésznek eléggé intuitívnak kellett lennie ahhoz, hogy bárki fel tudjon járni és használni. A nap végén még egy lámpát építettünk, és a technológia hozzáadásával nem lehetett ebből fakadni. A gomboknak a "digitális" lámpa felhasználói bemenetének köszönhetően "hontalannak" kellett maradniuk. A hontalan nélkül értem, hogy el kellett távolítanunk a fizikai állapotú váltókapcsolókat és bemeneteket. Ha szabványos kapcsolókat alkalmaztak, a kapcsoló állapota nem igazodik a fény állapotához, és zavart okozhat a felhasználó számára.

A szerves formát a lámpa testének 3D nyomtatására vonatkozó döntés is befolyásolta. 3D-s nyomtatással csökkentettük a test megmunkálásának idejét, és olyan nehézségeket vezettünk be, amelyek lehetetlenné váltak a kézi gyártás során. A hátránya több nap volt a tisztítás és a felületek befejezése. Azok a durva felületek, amelyeket a 3D-s nyomtatás gyakran előállít, csiszoltak és kitöltöttek, mielőtt a festést megkezdték annak érdekében, hogy a lámpa végső gyártási minőséget nyújtson.

Nyomtatás

Az összes STL fájlnak ki kell nyomtatnia ezt a lámpát a GrabCAD-on.

Fontos megérteni, hogy míg a 3D-s nyomtatók mindegyike elég nagy borítékkal nyomtathatja ezeket a darabokat, a rendelkezésre álló tűrések és anyagok eltérőek lehetnek. A lámpa testét Stratasys Fortus 450mc-re nyomtatták. A gombokat és a diffúzort Stratasys Objet Connex500-ra nyomtatták.

A tájékozódás rendkívül fontos a lámpa testének nyomtatásakor, mivel a fa mintájára a 3D nyomatoknak is van gabona. Biztos lehet benne, hogy a lámpa oldalára van nyomtatva, hogy a maximális nyomatékot nyújtsa. A nyomtatás vizuális ábrázolásához a mellékelt fotókat kell megadni.

Végső

Ezek a következő lépések felvázolják a 3D-s nyomtatás felületének finomításának folyamatát azon a ponton, amelyre már nem "nyomtatott", és minden részre vonatkozik, a diffúzor kivételével.

Míg a 3D-s nyomtatóknak még mindig mindenféle fogalmi hype van a gyártó és a fogyasztói közösségek között, fontos megérteni, hogy ezek elsősorban egy eszköz. Ez lehetővé teszi, hogy közelebb kerüljön fizikai modelljéhez, mint valaha. Bár a sebességet (a legtöbb más módszer felett) szerezheti meg, és csökkenti a költségeket (a fröccsöntéshez képest), tisztességes lehet a tisztítás.

1. lépés: Az összes hordozóanyag eltávolítása / feloldása.
2. lépés: Könnyedén húzza le a nyomtatást közepes (120 grit) csiszolópapírral
3. lépés: A lámpa felső és alsó (nem a sapka) ragasztását a műanyaggal kompatibilis epoxi ragasztóval együtt (5-10 perces epoxi ajánlást javaslom. A ragasztót addig csiszoljuk le, amíg az a többi nyomtatáshoz sima lesz.
4. lépés: Vigyen fel egy vékony Bondo réteget, hogy kitöltse a nyomtatott rétegek által létrehozott gerinceket.
5. lépés: Egyszer megszáradni, Bondo homokját visszahúzni, amíg meg nem jelenik a nyomtatás. Míg a 120 grit még mindig jó, akkor 80 grittel kezdhetjük. Mindig viseljen maszkot és dolgozzon jól szellőző helyen. Ne csiszoljon a nyomtatásba, próbáljuk kitölteni a gerinceket az eredeti geometria módosítása nélkül.
6. lépés: Ha szükséges, addig ismételje meg a 4. és 5. lépést, amíg tökéletesen sima az érintéshez, majd homokba keveredik 220 grittel.
7. lépés: Tisztítsa meg a nyomatot nedves, szöszmentes ronggyal.

Festék a testet

A végső nyomtatást három rétegben festették: Csiszolható alapozó, Zománcfesték (bármilyen szín) és matt tiszta zománc. A feltöltési és festési lépések elválasztásával (és nem a 2-ben az 1-es típusú festékeket használva) lehetővé teszi, hogy az utolsó felszíni hibákat megragadja, mielőtt lefektetné a festéket. Megtaláltam a matt zománcot, amely nem karcolja meg olyan könnyen, mint a fényes. Ne habozzon kipróbálni!

1. lépés: Távolítsa el a belső felületeket (alap és ahol a LED-ek lefekszik a motorháztetőben)
2. lépés: Helyezze be / állítsa be a lámpát úgy, hogy megérinteni tudja azt. Azt javaslom, hogy építsen egy jig-et, amely lehetővé teszi, hogy a belső lapok fejjel lefelé lógjanak. Az alapfedél ugyanazt a festéket kapja
3. lépés: Vigyen fel 2 közeget a primerre. Hagyja száradni egy órán keresztül, majd vizsgálja meg.
4. lépés: Az összes alapozott felületet enyhén homokszórjuk 220 csiszolópapírral. Fókuszban a felszíni hibákkal küzdő területekre, de nem túl sokra; nem próbálunk bele egy gödörbe.
5. lépés: Hajtsa fel és alkalmazzon egy könnyű alapozóréteget. Ha bármilyen durva területet kell kitöltenie, akkor enyhén nehezebb bevonat alkalmazása ezekre a területekre segíthet. Hagyja megszáradni egy órán keresztül.
6. lépés: A végső csiszoláshoz 320 csiszolópapír használható. A hangsúly az éles élek éles megtartása és egyenletes csiszolása.
7. lépés: Most azt szeretnénk, ha vékony, majd közepes rétegű festék-zománcot alkalmazunk. Adjon legalább egy teljes napot, hogy megszáradjon.
8. lépés: Könnyen csiszolja 400 darabos csiszolópapírral és törölje le nedves, megvilágítatlan ronggyal.
9. lépés: A tiszta, matt zománc vékony, majd egy közepes rétegének felvitele és alkalmazása. Hagyja száradni legalább egy napig.

Most befejezte a lámpa testének és alsó sapkájának befejezését. Ezután a gombokhoz hasonló folyamatot fogunk elérni. Nagyon kevés toleranciával modellezték őket, így a 220 illatos csiszolópapírral tökéletesen illeszkednek, majd a festék vastagsága miatt a legkisebb mértékben kicsinyítik.

A gombok festése

A gombok festéséhez szükséges lépések megegyeznek a fentiekkel, kivéve a bekapcsológombon lévő primer lépéseket, mivel a fénynek át kell mennie a LED-ekből. Fókuszáljon arra, hogy ne építsen túl nagy vastagságot a gombokra, mivel azok nem illeszkednek vissza a lámpába.

Telepítse a gombokat

A gombok kis fülekkel rendelkeznek, amelyek segítenek megtalálni a megfelelő mélységet. Ugyanazzal az epoxi ragasztóval, amit a lámpa nyakához használt, ragasszon minden gombot a helyére. Győződjön meg róla, hogy a bázist körülvevő külső területet lezárja, hogy korlátozza az esélyét arra, hogy ragasztással felkavarja a gyönyörű festési munkát.

Szerelje be a környezeti fényérzékelőt

A lámpában használt környezeti fényérzékelő egy Adafruit TSL2561 fényérzékelő. A LED-ek telepítése előtt be kell mennie. Szalagkábelt kell felszerelni az érzékelőtábla alsó részéből, amennyire csak lehetséges. Ezután a lámpa nyakába táplálkoznak extra lazán. A nyomtató / forrasztási munkától függően az illeszkedés kicsit szűk lehet. Egy éles # 11 Exacto kés lesz a kulcs, ha egy kicsit több helyre van szüksége.

Szerelje be a LED szalagokat

A LED-szalagot 3 négy szegmensre kell vágni (és a képen látható). A LED-ekre olyan ragasztó van beépítve, amely elegendő a helyükön tartásához. Mindegyiket ugyanabban az irányban helyezze el, mert könnyebbé teszi a forrasztást. Minden színt és a 12V + -ot párhuzamosan kell forrasztani. Miután a csíkokat telepítették, nyissa ki a nyakot és a forrasztást négy színkódolt vezet a középső csíkhoz. A forró ragasztó szilárdságot ad a forrasztási kötéseknek. Csatlakoztassa a 12V + vezetéket egy tápegységhez és földelje az egyik R, G vagy B vezetéket. Miután megerősítette mind a három világítást, lépjen tovább a következő lépésre.

Telepítse a diffúzort

Készen állunk arra, hogy véglegesítsük a motorháztető egységet és telepítsük a diffúzort. Óvatosan ragadja le a LED-tömböt körülvevő területeket, így nincs esély arra, hogy ragasztót kapjon a festékre. Rögzítse a lámpát hátulján a LED üregszintjével. Egy kis pálcát alkalmazva applikátorként óvatosan adjon hozzá ragasztót a LED üregének mindkét oldalán a felemelt felülethez. Ha a ragasztó mindkét oldalon egyenletesen van, óvatosan helyezze el a diffúzort a monitorozás közben, ha a ragasztó kiugrik. Ha igen, gyorsan törölje le, mielőtt megvan a lehetősége, hogy beállítsa.

2. lépés: Elektronika Rock!

Elektronika: Modern nap varázslat

A technológia ma mágikusnak tűnhet a technológiánk képességeivel; Biztosíthatom azonban, hogy bárki tanulhat vagy végezhet elektronikát. Mindent megszakítunk, hogy srácok, hogy képesek legyenek megismételni ezt a lámpát, és remélhetőleg megtanuljanak egy-két dolgot, valamint megmagyarázzuk az egyes elektronikák mögötti alapelveket.

Alkatrész lista:

Az alábbiakban bemutatjuk mindazokat a dolgokat, amelyekre szükséged van ahhoz, hogy befejezd ezt a lámpát a hálózatban és az elektronikában!

  • 3d nyomtató
  • WINC1500 Breakout tábla az Adafruit-tól
  • 3x N csatorna MOFSETS
  • Adafruit TSL2561 fényérzékelő
  • Adafruit MPR121 Capacitive Touch Board
  • LED-ek a hátsó lámpa számára Főkapcsoló gomb (csak néhány LED-re van szükség)
  • Sodrott maghuzal
  • Drótvágók
  • Huzaleltávolítók
  • Szilárd alaphuzal (a kapacitív érintőgombokhoz)
  • LED-csík
  • Kétirányú kapcsolás rendszeres (12V - 5V)
  • Teensy 3.2 vagy Arduino Mega (bővített memória szükséges)
  • 3x sparkfun protoboards (vagy hasonló méretű - nem nagyobb!)
  • 12V egyenáramú tápegység és 2,1 mm-es hordócsap (mindegyik összekapcsolt!)
  • 3x68 ohmos ellenállás (egy LED-es háttérvilágításnál)
  • Hőzsugorcső 1/8 ''
  • Breadboard (ha először egy nem állandó változat prototípusát szeretné)
  • Hőfegyver
  • Forrasztópáka (a link magában foglalja az összes forrasztóanyagot - a forrasztást is beleértve)
  • forraszt
  • Víz (forrasztópad tisztításához)

1. lépés: Csatlakoztassa a WIFI kitörést a Teensy-hez

Ennek a lámpának a csatlakoztatása 50% -a az eszköz „hűvös” tényezőjének és 100% -a az IoT-nek, így ez nagyon fontos. A fenti képen pontosan megmutatjuk, hogyan csatlakoztassuk az egyes csapokat a Teensy-n lévő megfelelő tűhöz.

Ez a link az Adafruit bemutatója, és lépésről lépésre megmutatja, hogyan kell csatlakoztatni az egyes csapokat a mikrokontrollerhez. Arduino-t használtak, amelyeknek különböző pin-outjai vannak. Mindazonáltal a fenti két vázlatos kép két változatát is felsoroltam, amelyek segítenek bármely személynek, hogy megfelelően csatlakoztassa a WiFi kártyát a Teensy-hez, valamint a többi lámpához tartozó táblát. A több "Advanced Schematic" programban a vázlatos felépítésben az egyes fedélzeti táblák és alárendelt körök funkciói megoszlanak, és megfelelnek a megfelelő méreteknek abban az esetben, ha a fejlett gyártók egy táblára kívánják konszolidálni a táblákat. Az "Alapvető vázlat" alatt a Wi-Fi-kártya ki van vonva, hogy egy fekete doboz legyen, és a csapok kitűnnek. Ezek a csapok mindegyike a címkékkel van ellátva, amelyek megfelelnek a pin-nek, amelyet a Teensy-nél pontos névvel kell összekötni! Ezt a sémát nem szabad a konszolidált fórumtervezés alapjául használni; nem rendelkezik a megfelelő méretekkel és a megfelelő áramkörökkel a fedélzeten.

Ezt kipróbálhatja, ha minden részt tesztelni akar, és ellenőrizni szeretné a kapcsolatokat; ez az instructable feltételezi, hogy jelenleg egy Prototyping Board-on dolgozik. Függetlenül elvégeztük a tesztelést és több kenyérpirító iterációt, így kényelmesen ugorhat egyenesen a forrasztáshoz.

Ez az instructable feltételezi, hogy tudja, hogyan kell forrasztani. Ha még mindig tanul, ellenőrizze ezt a linket!

Először meg kell forrasztania a fejtűket a Teensy-hez. Ha nem biztos benne, hogyan kell ezt megtenni, ellenőrizze ezt a linket!

Miután a fejdobozokat a teensy-hez forrasztottad, tedd a Teensy-t egy SparkFun kártyára, és igazítsd a teensy-t ebben a konkrét orientációban: Két függőleges oszlopot kell biztosítani a teensy oldalán a kvarckristallal (ez egy fényes fém téglalap, amely általában egy számmal van feltöltve). További információ itt! Az ellenkező oldalnak csak három függőleges oszlopának kell lennie. Ez az orientáció a perifériák miatt szükséges. A Capacitive touch tábla, a WIFI kártya és a Lux érzékelők mind kommunikálnak SPI kommunikációs csapokkal. A lámpatestek méretének korlátozása miatt csak az alkatrészlistában megadott prototípuslapok méretét használhatjuk. Ennek eredményeképpen csak két irány van, amely illeszkedik a LED-meghajtó áramkör összes csatlakozásához (a kapu PWM-csapjai), amelyek két vagy három függőleges oszlopot tartalmaznak az egyik oldalon, a másik oldalon pedig az oszlopok száma. nem választottál a másik oldalról (azaz 2 az egyik és 3 a másik, vagy fordítva).

Miután megvan a megfelelő tájékozódás, a kapcsolatokat állandóvá teheti, és a Teensy-t forrasztja a SparkFun Prototípus táblára. A huzalnyíró segítségével kivághatja a fedélzet aljait, ahol a fejrészek ki vannak húzva.

Miután a Teensy-t, a Forrasztófej-csapokat a WIFI-kártyára forrasztotta. Ezeket a csomagolásba be kell illeszteni, amire a WIFI tábla bejött. Miután a fejléceket a WIFI-kártyára forrasztotta, a WIFI-kártyát külön prototípus-táblára kell forrasztania.

Hogy időt takarítson meg, menjen előre, és jelölje ki, mely táblákat fogja használni az adott áramkörökhöz. Az 1-es igazgatóságnak csak a teensy-jének kell lennie, és semmi más. A két fórum csak a wifi kártyával rendelkezik. A 3-as fórumon a LED-meghajtó áramkör, a kétirányú kapcsoló szabályozó, valamint a DC-fali tápegység áramellátásának csatlakozója a LED-ekre / az áramkör többi részére kerül.

Forgassa a WiFi kártyát a prototípus táblához fejjel lefelé (lásd a referenciahoz csatlakoztatott három lap képét) és rögzítse a fejléceket. Ez azért van így, mert ez a tájolás lehetővé teszi, hogy a három lap jól illeszkedjen a lámpa aljzatába.

Az utolsó lépés itt a fenti vázlatos kép használata a kapcsolatok irányításához. Vágjon és csíkjon be egy hosszú sodrott maghuzalt, ami egy kicsit hosszabb, mint a kapcsolat hossza, hogy egy kicsit laza legyen. Ezután forrasztjuk a kapcsolatot mindkét végén.

Általános tanács: Szín Kódolja a vezetékeket és maradjon következetesen az egész áramkörben! Tegye a villamosvezetékeket az összes piros sodrott maghuzalra és a fekete földre. Ez segíti Önt a hibakeresési folyamatban, és segít megőrizni a dolgok rendezettségét.

LED meghajtó áramkör és szinteltolás

Ez a rész több részből áll, így kisebb részekre bontjuk, és mindent itt sétálunk. Kezdjük a hálózati áramkörrel!

A Power áramkörben van egy csatlakozódarab, amely lehetővé teszi a pozitív és negatív vezetékek (vörös és fekete vezetékek) csatlakoztatását az egyenáramú tápegységből (fali tégla). Ezt a darabot az első és a második sor utolsó pontjain átlósan, a tábla felső oldalára kell forrasztani. Ez a képen is látható. Miután ezt megtettük, mozgassuk a hangsúlyt a MOSFET Driver áramkörre.

Először is, adjunk néhány hátteret a MOSFET-ek számára azok számára, akik nem tudják, mi a MOSFET. A MOSFET jelentése Mmunkatársai Oxide Semiconductor Field Effect Transistor. Ennek első része csak az anyag típusára utal, amelyből a tranzisztor készült (erősen leegyszerűsített, mivel a kiválasztott anyag típusára és a tranzisztor eredő tulajdonságaira van hatással). Ennek a kijelentésnek a második fele egy kicsit bonyolultabb; A mezőhatás arra utal, hogy a tranzisztor kapuja a csatornák között mozgó töltéseken keresztül az indukált áramok révén húzódik le (ne aggódj, ha nem érted, de itt több információ!). A tranzisztorok alapvetően csak kapcsolók; a hatalom áramlását a kapukra feszültségek alkalmazásával vezérelheti, hogy az áramkör bizonyos részei áramot kapjanak. A tranzisztorok meglehetősen bonyolultak; Röviden, minden tranzisztornak van kapuja, lefolyása és forrása. A lefolyás és a forrás kezelhető az áramkör bemenete és kimenete. A MOSFET-eknek sokféle fajtájuk van, de megmagyarázzuk a főbbeket, amelyeket a készítőnek fognak találni. Az NMOS és a PMOS a Pozitív és Negatív csatorna MOSFET-et jelöli. A megkülönböztetés azért fontos, mert meghatározza, hogy milyen feszültséget lehet alkalmazni a kapun, hogy az áram a forrásból a csatornába vagy a forrásba áramoljon. Az NMOS kapuk pozitív potenciálfeszültséget igényelnek a kapu és a forrás között. A PMOS negatív potenciált igényel a kapu és a forrás között. Itt mindent megtudhat a MOSFET-ekről!

Miután forrasztottuk a power jack-et, el akarjuk helyezni a MOSFET-eket. Helyezzük őket ugyanazon a táblára, és mindegyiknek egy lyuknak kell lennie. Mindegyiknek egy vonalban kell lennie, függőlegesen, és minden egyes MOSFET azonos irányba néz. Az irány helyes, ha az írással ellátott oldal a fenti képen látható. A képen a MOSFET-eket lefelé hajtották, így csak képzeljük el, hogy nem, ha problémái vannak, és helyesnek kell lennie a helymeghatározásnak. Miután helyes volt az irány, forrasztjon be a csapokba.

A MOSFET-ek vázlatos ábrázolásánál a diódák (vízszintes vonalakkal ellátott háromszögek) a LED-fénycsíkot képviselik. A LED-csík négy fémbetétet tartalmaz (Power, Red, Green, Blue), amelyeket hőforrásként használhat egy forrasztópáztól, és csatlakoztathat egy kicsit a sodrott maghuzalt (természetesen színkódolt) a párnákhoz. Ha szilárd kapcsolat van, a 12 V-os csíkot szállítja. Ez azt jelenti, hogy szeretné csatlakoztatni a tápvezetéket az egyenáramú tápegységről a csatlakozóra, amelyet a táblára forrasztott. Ezt könnyen megtehetjük úgy, hogy a huzalt a Led szalagról forrasztjuk, ami a táblán lévő üres lyukhoz tartozó tápfeszültséget képviseli ugyanabban a sorban, mint a csatlakozódarab tápcsapja. Ez biztosítja a LED-ek áramellátását. Látnia kell, hogy a LED-ek bekapcsolódnak, ha pontosan csatlakoztatta a tápellátást. Most itt az ideje, hogy csatlakoztassa a többi vezetéket a LED-szalagról. Ezeknek a piros, zöld és kék vezérlővezetékeknek kell lenniük. Amit meg kell tennie, csatlakoztassa az egyes vezetékeket a MOSFET középső csapjához csatlakoztatott sorhoz. Három vezetéket kell csatlakoztatni a MOSFET három különböző kapujához. Ezután három vezetékes (piros, zöld és kék) lesz szükség ahhoz, hogy a Teensy digitális csatlakozójához csatlakozzon. A lefolyó a MOSFET bal oldali csapszegének, és mindegyik vezetéket az adott sor egyik szabad nyílásához kell forrasztani.

A LED szalag csatlakoztatása után a kétirányú kapcsoló szabályozót csatlakoztatjuk. A LED-ek 12 voltosan működnek, hogy bekapcsolódhassanak. Azonban a többi áramkör és tábla csak maximum 5 voltos logikával működik, ami azt jelenti, hogy ha nem akarjuk elpusztítani az elektronikát, csökkentenünk kell a feszültséget, ami az áramkör többi része felé megy. Ezt a kapcsoló szabályozón keresztül végezzük! A kapcsolószabályozó olyan eszköz, amely (ebben az esetben 12 volttól 5 voltig) csökkenti a nagyobb feszültséget alacsonyabbra. Most már megkérdezheted, hogy miért ne használjunk csak ellenállást a feszültség vagy a feszültségelosztó áramkör elhagyására ellenállásokkal? Ennek számos problémája van; javasoljuk, hogy ezt tegyék. Miért? Az ellenállások a kívánt feszültséget csökkentik, de sok hőt termelnek! Valójában könnyen elolvadhatod az áramkört, ha ellenállást vagy lineáris szabályozót használsz, ha ismered őket. De nem tudtam csak egy hűtőbordát használni, és töltsem le a hőt az áramkörtől? Igen, lehet, de akkor felmerülünk az energiahatékonyság kérdésében! Ez nagyon hatástalan lenne! Ha felidézünk néhány középiskolai fizikát, a Power az aktuális idők feszültsége vagy az aktuális négyzetes idők ellenállása. A teljesítményt wattban mérjük, és egy nagy ellenállásra van szükséged, hogy 12 volttal 5 volttal csökkenjen. Ez meglehetősen nagy teljesítményt eredményez. Ez rendkívül hatástalanná tenné a lámpát. Ezt a problémát kétirányú kapcsolószabályozó segítségével elkerüljük! Ez a szabályozó könnyen elérhető 85% -os hatékonysággal, 12 voltos és 5 voltos teljesítménycsökkenéssel. Ez segít megőrizni a hőmérsékletet és növeli a lámpa élettartamát!

A kapcsolószabályozó csatlakoztatásához lásd ezt az adatlapot! Egy jó készség az adatlapok olvasása! Minden jó hírű résznek van egy adatlapja, amely megmutatja, hogyan kell használni az eszközt és annak jellemzőit és működési tartományait. Ehhez a szabályozóhoz, a 8. oldalon a 12. oldalon a bal alsó sarokban van a csapok és címkék táblája. Az 1-es csap a bal oldali legtöbb csap, és ez a tápfeszültség. A vezetéket ugyanabban a sorban lévő lyukból kell forrasztani, mint a tápcsatlakozót, az ugyanazon a sorban lévő lyukba, mint az 1. tű. Tehát egy üres lyukból a tápcsatlakozó földelőcsapjának sorában forrasztjon be egy vezetéket egy üres lyukba ugyanabban a sorban, mint a 2-es tű. A 3-as csatlakozó a kimenet. Ez áramkörként szolgál az áramkör többi részére. Mindegyik fórumon létrehoztunk egy külön soros sínt, hogy megkönnyítsük a hibakeresést. Az egyes táblákon a támasztó sínek láthatóak a fenti képen. Egyetlen csatlakozás a földeléshez és a tápellátáshoz a csatlakozó kimenetéből (csak földre) és a kapcsoló szabályozó kimenetére. Minden tábla kisebb ugrást igényel a sorok közötti nagy rés között (a sorok nem kapcsolódnak közvetlenül az egész laphoz) és a prototípuslemez között egy forrasztott kapcsolatra lesz szükség. Tekintse meg a fenti képeket, hogy megkapja a lényeget!

Kapacitív érintés-megszakító tábla

Ez az elektronika utolsó része azok számára, akik nem érdekeltek az elektronika kiterjesztésében, hogy magában foglalja a környezeti fényérzékelőt. Ehhez a részhez nem lesz szükség fejléccsapokra, vagy arra, hogy a táblát Sparkfun prototípus-táblához csatolja. Ezt a táblát végül a lámpa belsejéhez a lehető legközelebb kell ragasztani a gombokhoz, hogy az egyes gombok aktív kapacitív érintővezetékei a lehető legrövidebbek legyenek. Ennek célja, hogy megakadályozza az interferenciát, és lehetővé teszi, hogy tiszta kapacitív érintésolvasást fogadjon. Maga a fórumon több csap található, amelyek megtalálhatók a fenti vázlatos "egyszerű" változatban. Pontosan megmondja, hogy milyen csapokhoz csatlakozzon a teensy-hez, mint a WIFI modul részében. Forgassa össze ezeket a csatlakozásokat, és egy SPI kommunikációs kapcsolatot biztosítson a fórumhoz és az erőhöz.

A következő lépés a gombhoz csatlakozó vezetékek. Amint azt korábban említettük, azt szeretnénk, hogy ezek a vezetékek a lehető legrövidebbek legyenek, hogy a kapacitív érintőgombot a lehető legérzékenyebbé tegye. Ehhez szeretné létrehozni a fentiekben leírtaknak megfelelő kapcsolattartót vezetékkel. Vegyünk egy szilárd maghuzalt, és spirálozzuk a huzalt egy nagy méretű, kör alakú, lapos tekercsbe. A tekercs másik vége a huzal egyenes része, és a csapokba kell forrasztani. Természetesen minden gombhoz 3 gombos érintkezőhuzalra lesz szükség, és ezek a 0, 1, 2 csapokba forrasztásra kerülnek. A 11. érintkezőben egy másik vezetéket forrasztunk, amely a teljesítmény LED-nek lesz. Ez egy GPIO tű (Általános célú bemenet / kimenet), és PWM (impulzusszélesség moduláció) képességekkel is rendelkezik. Ezt a tüskét fogjuk használni annak a LED-nek a logikájának vezérlésére, amely a bekapcsoló gomb háttérvilágításává válik. A programozásról és a kódról szóló szakasz elmagyarázza, hogyan történik ez.

Környezeti fényérzékelő

Ez a rész a környezeti fényérzékelőre vonatkozik, amely egy kitörő fedélzet, amely fényt vesz a környezetéből, és fedélzeti szűréssel rendelkezik, hogy a felhasználó adatait a helyiség fényerejéről, valamint az infravörös és látható fényjelzésekről kapja. Ez a kitörés meglehetősen egyszerű, és nem szerepel a sas vázlatokban, de az Adafruitnak nagyon jó bemutatója van itt! Ez a link lépésről lépésre irányítja Önt, hogy hogyan kell a környezeti fényérzékelőt a teensy-hez vezetni. Van egy kép a kapcsolatok felett; Vettem egy linket, amely megadja a Teensy-t és segíti a vezetékek összekapcsolását. A fedélzeten lévő áramot csatlakoztatni kell ahhoz, hogy a táblán bárhol lehessen. Azt javaslom, hogy csatlakoztassam ezt a kapcsolatot a legkényelmesebb sínhez. A fenti képek közé tartozik a tápcsatlakozás elhelyezése. Ezután csatlakoztatnia kell az SDA és az SCL csapokat a Teensy-hez. Azok a csapok, amelyek a teensy-ben vannak, a sas vázlatosan vannak jelölve, és mindössze annyit kell tennie, hogy a kapcsolat állandó legyen. A teensy SDA tűjéből húzza meg a huzalt a fényérzékelő SDA tűjéhez, és hasonlóképpen csatlakoztassa a vezetéket a teensy SCL érintkezőjéről (13 tű) a teensy SCL csapjához. Ezt követően az utolsó kapcsolat szükséges volt a GND. Csatlakoztassa a földet az áttörő fedélzetről bármely rendelkezésre álló földi sínhez. Ismét próbáljon ki egy olyan helyet, amely megkönnyíti az elektronika forrasztását és összeszerelését. Lásd a fenti képet a verziónkhoz. Az összes föld- és tápvezeték fekete-piros.

3. lépés: Chops programozása: MQTT Hálózat

A Szoftver: A Dumb objektumok készítése Smart

Most már a program szoftver aspektusába került! Ha ilyen messzire tetted, gratulálok! Alapvetően van egy intelligens lámpája, mert ebben az instructable-ban megtalálta a kódot, és készen áll a kód feltöltésére és egy intelligens lámpára! Ha szeretne többet megtudni a kódról, a kódrészletben található megjegyzések részletesek és mindent megmagyaráznak!

Azok számára, akik egyszerűen felkeresik a kódot, nincs szükség további olvasásra. A megtanulható rész ez a része arról beszél, hogyan kell feltölteni a kódot a teensy-be. A háttér esetében a teensy egy mikrokontroller, amelyhez manuális / automatikus bootloader (egy program) szükséges, amely a processzort programozási módba kapcsolja. Azok számára, akik korábban Arduino-t használtak, amikor egy Arduino projekt programját kódolják, a jobb felső sarokban lévő pipa ellenőrzi a vázlatot a hibákért, és ha a kód összeáll, kattintson a nyílra a kód feltöltéséhez. Az Arduino IDE automatikusan átvált az Arduino programozási módba, és új kódot villog a táblára. A Teensy-vel ez a képesség a Teensy bootloader-re került. Minden Teensy felhasználónak le kell töltenie a bootloadert, és ha még nem, töltse le az itt található Arduino IDE-t. Miután befejezte a telepítéseket, töltse le a fenti kódot. Megnyílik az Arduino IDE-ben. Rengeteg könyvtár van benne, és a kód összeállításához szükséges. Az alábbiakban a könyvtárakra mutató hivatkozásokat kell letöltenie a .zip fájlból, és telepítenie kell a könyvtárakba. Ha nem tudod, hogyan kell telepíteni a könyvtárakat egy Arduino vázlatba, itt van egy hivatkozás arra, hogy hogyan lehet ezt megtanulni.

A könyvtárak:

  • Adafruit MQTT könyvtár
  • MPR121 kapacitív érintőpanel
  • WINC1500 wifi kártya
  • Adafruit Lux érzékelő
  • Wire.h (nincs könyvtár, mert előtelepített)
  • String.h (nincs könyvtár, mert előtelepített)
  • SPI.h (nincs könyvtár, mert előtelepített)
  • Adafruit_Sensor.h
  • ArduinoJSON

Miután telepítette ezeket a könyvtárakat, a kódja összeáll. Miután megnyomta az ellenőrző kód gombot (pipa) az arduino IDE-n, nyissa meg a Teensy rendszerbetöltő ablakát. Látnia kell egy kis ablakot, amely a Teensy virtuális verziójával rendelkezik. Kattintson az automatikus gombra, és győződjön meg róla, hogy be van merülve (mintha ténylegesen lenyomott volna egy gombot … nézze meg a teensy rendszerbetöltő linkjét, hogy lássa, mit jelent). Ezután nyomja meg a Teensy fizikai gombját, amely a tábla végén található az USB-vel szemben. Ellenőrizze az arduino IDE-t, ahol megvan a vázlata és kattintson az eszközökre. Győződjön meg róla, hogy a fórum azt mondja, hogy Teensy 3.1 / 3.2, az USB típus soros, a CPU sebessége 96 MHz-re van optimalizálva, és a port "usb, majd néhány hosszú sor és szám". Miután ezt megtette, nyomja meg a feltöltési gombot (oldalra nyíl) az arduino-n. A Teensy-nek LED-je van a táblán, és a kód feltöltésekor villogni kell. Miután befejezte a feltöltést, csak el kell helyeznie az elektronikáját a lámpa alapjába, és mindent megtettél!

Ha érdekli, hogy mi a kód, ellenőrizze az alábbi kódhoz tartozó megjegyzéseket!

#include #include #include #include #include #include #include #include #include
#include #include
#include #define WINC_CS 10 #define WINC_IRQ 7. (s)); míg a (1); } #define LEDPIN 3 #define LED_RED 23 #define LED_GREEN 5 #define LED_BLUE 6 #define touch_pin0 0 #define touch_pin1 1 #define touch_pin2 2 char ssid = ""; // a hálózati SSID (név) char pass = ""; // a hálózati jelszó (használja a WPA-t vagy használja a kulcsot a WEP-hez) int keyIndex = 0; // a hálózati kulcs index száma (csak a WEP-hez szükséges) int állapot = WL_IDLE_STATUS; // wifi állapot const char MQTT_SERVER PROGMEM = AIO_SERVER; const char MQTT_CLIENTID PROGMEM = __TIME__ AIO_USERNAME; const char MQTT_USERNAME PROGMEM = AIO_USERNAME; const char MQTT_PASSWORD PROGMEM = AIO_KEY; const char IOTLAMP_FEED PROGMEM = "/ IoTLampDemo"; // közzététel és előfizetés csatorna neve const char RETURN_FEED PROGMEM = "/ IoTLampDemo"; uint32_t x = 0; // uint8_t POWER_STATE = 0; uint8_t pinNum; uint8_t led_brightness = 100; uint8_t redVal = 0; uint8_t greenVal = 0; uint8_t blueVal = 0; uint16_t lux; bool Network_Mode = false; bool cap_touch_activated = false; const int irqpin = 2; // az aktivitás-indikátor illékony boolean flagIrq számának száma; struct JSON {const char * targetVal; const char * codeVal; int lamponVal; int brightnessVal; }; / * minden nyilatkozat * / Adafruit_WINC1500 WiFi (WINC_CS, WINC_IRQ, WINC_RST); Adafruit_TSL2591 tsl = Adafruit_TSL2591 (2591); // fényérzékelő Adafruit_WINC1500Client kliens; // wifi-chip Adafruit_MQTT_Client mqtt (& kliens, MQTT_SERVER, AIO_SERVERPORT, MQTT_CLIENTID, MQTT_USERNAME, MQTT_PASSWORD); // mqtt nyilatkozat Adafruit_MQTT_Publish IOTLAMP = Adafruit_MQTT_Publish (& mqtt, IOTLAMP_FEED); Adafruit_MQTT_Subscribe VIRTUAL_LAMP = Adafruit_MQTT_Subscribe (& mqtt, RETURN_FEED); / * * Ez a funkció a beállított. A beállítás során inicializáltuk a * LED-ek összes csapját, valamint a gombokhoz kapcsolódó megszakításokat. A wifi kártyát, a kapacitív érintőpanelt és a * helyes témakörre feliratkozó funkciót * nevű függvényt hívtuk. * * / void setup () {pinMode (irqpin, INPUT); Serial.begin (9600); // telepítés megszakítja a Serial.println-t ("start program"); attachInterrupt (irqpin, isrIrqPin, CHANGE); // csatolja az irq pin megszakítást és RISING / HIGH / CHANGE / LOW / FALLING MPR121.setInterruptPin (irqpin); pinMode (LED_RED, OUTPUT); pinMode (LED_BLUE, OUTPUT); pinMode (LED_GREEN, OUTPUT); digitalWrite (LED_RED, LOW); digitalWrite (LED_GREEN, LOW); digitalWrite (LED_BLUE, LOW); capacitiveTouch_Setup (); wifi_module_config (); // A wifi mqtt.subscribe (& VIRTUAL_LAMP) konfigurálása; } / * * Ez a funkció a hurok. Megismétli azt a folyamatot, ami végtelenül történik ebben a függvényben, kivéve, ha egy * megszakítást észlelünk, amely esetben egy másik függvényt végrehajtunk, miközben minden más megáll. * Ez a funkció ellenőrzi, hogy megszakad-e, ha igen, futtassa a resetButton funkciót. * Ha hálózati üzemmódban vagyunk (azaz wifi-kapcsolat van), akkor futtassa a hálózati * funkciót. Ha egyik sem igaz, csak úgy viselkedjen, mint egy rendszeres lámpa. * * / void loop () {if (flagIrq == true) {ResetBUTTONFlag (); // Ha a BUTTON megszakítás történt, állítsa vissza a zászlót. } else {if (Network_Mode) {hálózatépítés (); }}} / * * Ez a függvény hívásra kerül, ha a megszakítás ki van kapcsolva, majd a kapacitív gombfunkciót * hívják, és a zászló boolean értéke igaz.* / void isrIrqPin () {capacitiveTouch_buttons (); flagIrq = igaz; } / * * Ez a funkció csak gondoskodik az államokról: csak akkor kap hívást, ha a megszakítás ki van kapcsolva *, és a jelző logikai logó hamisra fordul, és a kapacitív érintkezési logikai érték igaz. * / void ResetBUTTONFlag () {// visszaállítása BUTTON 1 jelző + jelzi az aktivált indikátort flagIrq = false; cap_touch_activated = igaz; } // Kihagyja ezt a funkciót a kiterjesztett lux-érzékelők olvasásához, és hívja meg, ahol csak kívánja. // void luxSensor_Readout (void) {// sensor_t érzékelő; // tsl.getSensor (& érzékelő); // Serial.println ("------------------------------------"); // Serial.print ("Max. Érték:"); Serial.print (sensor.max_value); Serial.println ("lux"); // Serial.print ("Min Value:"); Serial.print (sensor.min_value); Serial.println ("lux"); // Serial.print ("Felbontás:"); Serial.print (sensor.resolution); Serial.println ("lux"); // Serial.println ("------------------------------------"); // Serial.println (""); // késleltetés (500); //} / * * Ez a funkció beállítja a táblát. A hibakeresési utasítások megadásával kezdjük meg tudni, hogy a * kapacitív érintőpanel megfelelően van-e beállítva. Ezután a gombok és a bekapcsoló gombok számára is magában foglalja a táblán * lévő digitális csapokat. Meghatározza az érzékenységet és kalibrálási adatokat kap *. Ezután bekapcsolja a POWER LED-et. * * / void capacitiveTouch_Setup () {if (! MPR121.begin (0x5A)) {Serial.println ("hiba az MPR121 beállítása"); kapcsoló (MPR121.getError ()) {case NO_ERROR: Serial.println ("nincs hiba"); szünet; eset ADDRESS_UNKNOWN: Serial.println ("helytelen cím"); szünet; READBACK_FAIL eset: Serial.println ("readback hiba"); szünet; OVERCURRENT_FLAG eset: Serial.println ("túláram a REXT pin-nél"); szünet; OUT_OF_RANGE eset: Serial.println ("elektróda hatótávolságon kívül"); szünet; eset NOT_INITED: Serial.println ("nincs inicializálva"); szünet; alapértelmezett: Serial.println ("ismeretlen hiba"); szünet; } míg (1); } Serial.println ("MPR121 megtalálva!"); MPR121.setTouchThreshold (2); // az alapértelmezett érték 40 az MPR121.setReleaseThreshold (1) érintéshez; // az alapértelmezett érték 20 az érintéshez; mindig MINDEN kisebbnek kell lennie az MPR121.setNumDigPins (1) érintési küszöbénél; // LED kimenetek MPR121.pinMode (11, OUTPUT); MPR121.updateTouchData (); // MPR121.digitalWrite (11, HIGH) kezdeti adatfrissítése; } / * * Ez a wifi konfigurációs függvény. Ez ellenőrzi, hogy a * WIFI modulhoz van-e áramellátás, majd beállítja a hálózati booleusokat igaz vagy hamisnak, attól függően, hogy milyen teljesítményt * biztosított. Ha igen, akkor nyomtassa ki, hogy csatlakozik. * * / void wifi_module_config () {Serial.println (F ("Adafruit MQTT demo WINC1500 számára")); Serial.print (F ("A WiFi modulban …")); // Kezdeményezze az Ügyfelet, ha (WiFi.status () == WL_NO_SHIELD) {// ellenőrizze a Serial.println kitörés jelenlétét ("WINC1500 nincs jelen"); // nem folytatódik: Network_Mode = false; míg (igaz); } Serial.println ("ATWINC OK!"); Network_Mode = true; } / * * Ez a funkció hozza létre az RGB értékek leképezését. Mérlegeli, hogy a fehér lámpa maximális hangja legyen. Majd miután létrehoztuk a színeket a piros zöld és kék színekhez, * helper függvénynek nevezzük, hogy beállítsuk a LED-ek aktuális színét * * / void map_white (int new_brightness) {redVal = térkép (new_brightness, 0, 255, 0, 255); // A térkép vörös értékei zöldVal = térkép (új_fényesség, 0, 255, 0, 255); // Térkép zöld értékek blueVal = térkép (new_brightness, 0, 255, 0, 240); // kék értékek beállítása set_leds (redVal, greenVal, blueVal); } / * * Ez a funkció a LED-ek színértékeit állítja be, és bekapcsolja a LED-eket. * * / void set_leds (uint8_t redVal, uint8_t greenVal, uint8_t blueVal) {analogWrite (LED_RED, redVal); // Az aktuális értékek írása az analóg írott LED LED-ek (LED_GREEN, greenVal); analogWrite (LED_BLUE, blueVal); } / * * ez a funkció konfigurálja a fényérzékelőt. Először ellenőrzi, hogy az érzékelő csatlakoztatva van-e a tápellátáshoz. ha ez megtörténik, akkor a nyereséget beállítja. Ez erősíti az initally értékeit *, ha az érzékelőt körülvevő fény alacsony, erősíti a nagy nyereséget. Ezután beállítja az * integrációs időt, amelyik mennyi ideig fog mérni. A függvény többi része * kinyomtatja az Ön által kiválasztott sorozatokról szóló információkat. * / void configureSensor (void) {Serial.println ("Adafruit TSL2591 teszt indítása"); if (tsl.begin ()) {Serial.println ("Talált egy TSL2591 érzékelőt"); } else {Serial.println ("Nincs érzékelő … ellenőrizze a vezetékeket?"); míg (1); } // Módosíthatja a repülés nyereségét, hogy alkalmazkodjon a fényesebb / fényesebb fényhelyzetekhez //tsl.setGain(TSL2591_GAIN_LOW); // 1x erősítés (fényes fény) tsl.setGain (TSL2591_GAIN_MED); // 25x erősítés // tsl.setGain (TSL2591_GAIN_HIGH); // 428x nyereség // Az integrációs idő megváltoztatása hosszabb időt biztosít Önnek, hogy a fényérzékelés // hosszabb időzetek lassabbak legyenek, de nagyon gyenge fényviszonyok esetén jóak! //tsl.setTiming(TSL2591_INTEGRATIONTIME_100MS); // legrövidebb integrációs idő (fényes fény) // tsl.setTiming (TSL2591_INTEGRATIONTIME_200MS); tsl.setTiming (TSL2591_INTEGRATIONTIME_300MS); // tsl.setTiming (TSL2591_INTEGRATIONTIME_400MS); // tsl.setTiming (TSL2591_INTEGRATIONTIME_500MS); // tsl.setTiming (TSL2591_INTEGRATIONTIME_600MS); // leghosszabb integrációs idő (homályos fény)

/ * A hivatkozás kedvéért * / Serial.println ("-------------------------------- ---- "); Serial.print ("Gain:"); tsl2591Gain_t gain = tsl.getGain (); kapcsoló (erősítés) {case TSL2591_GAIN_LOW: Serial.println ("1x (alacsony)"); szünet; eset TSL2591_GAIN_MED: Serial.println ("25x (közepes)"); szünet; eset TSL2591_GAIN_HIGH: Serial.println ("428x (High)"); szünet; eset TSL2591_GAIN_MAX: Serial.println ("9876x (Max)"); szünet; } Serial.print ("Időzítés:"); Serial.print ((tsl.getTiming () + 1) * 100, DEC); Serial.println ("ms"); Serial.println ( "------------------------------------"); Serial.println ( ""); } / * * A gomb megnyomásával ez a funkció elindul. Ezután megtörténik, hogy frissíti az adatokat * a kapacitív táblát. Ezután végigfut az elérhető csapok között (csak 0-2 * -ról indulunk, mert csak 3 csapot csatoltunk a gombokhoz). Ezután visszaadja a * megérintett pin számot. * * / uint8_t capacitiveTouch_pinTouched () {MPR121.updateTouchData (); a (pinNum = 0; pinNum <= 2; pinNum ++) {if (MPR121.isNewTouch (pinNum)) {visszatérő pinNum; }} pinNum = 4; visszatérő pinNum; } / * * A kapacitív érintőgombok tulajdonképpen az összes logikával foglalkoznak, ha egy gombot * megérintettek. Ebből a pontból feltételezzük, hogy egy gombot megérintettek, és most kiderül, hogy mi a teendő az adott gomb megnyomásával. Ez vezérli a * teljesítményt és teljesítmény LED-et, valamint a fényerő-szabályozást. * * / void capacitiveTouch_buttons () {uint8_t touchedPin = kapacitívTouch_pinTouched (); kapcsoló (touchedPin) {case 0: {if (POWER_STATE == 1) {if (led_brightness> 230) {led_brightness = 255; map_white (led_brightness); } más {led_brightness = led_brightness + 25; map_white (led_brightness); }} más {MPR121.digitalWrite (11, LOW); map_white (led_brightness); POWER_STATE = 1; } } szünet; 1. eset: {if (POWER_STATE == 1) {MPR121.digitalWrite (11, HIGH); POWER_STATE = 0; map_white (0); } más {MPR121.digitalWrite (11, LOW); POWER_STATE = 1; map_white (led_brightness); } szünet; 2. eset: {if (POWER_STATE == 1) {if (led_brightness <= 30) {led_brightness = 25; map_white (led_brightness); } other {led_brightness = led_brightness - 25; map_white (led_brightness); }} más {MPR121.digitalWrite (11, LOW); map_white (led_brightness); POWER_STATE = 1; } } szünet; alapértelmezett: {} break; }}} / * * Ez a funkció a fényérzékelő fejlett olvasási funkciója. A fényérzékelő * 32 bitet ad az infravörös és a látható fény spektrumának egyaránt. Megkapja a látható spektrum 16 bitjét *, és a látható spektrum számított lux értékét adja vissza. * * / uint16_t advancedRead (void) {uint32_t lum = tsl.getFullLuminosity (); // Olvasson 32 bitet az első 16 bites IR-vel, alsó 16 bites teljes spektrummal uint16_t ir, full; ir = lum >> 16; teljes = lum & 0xFFFF; lux = tsl.calculateLux (teljes, ir); vissza lux; } / * * Ez a funkció a JSON-ban formázott adatcsomagok továbbítására vonatkozik. Ellenőrzi a * -ot, ha a csatorna neve helyes, és ha igen, akkor közzéteszi a csomagot erre a csatornára * / void mqtt_transmit (char buf ) {// Most tudjuk közzétenni a dolgokat! Serial.print (F ("J JSON küldése")); Serial.print ( "…"); ha (! IOTLAMP.publish (buf)) {Serial.println (F ("Nem sikerült")); } más {Serial.println (F ("OK!")); Serial.println (buf); }} / * * Ez a funkció beállítja az MQTT-t és beállítja azt. A wifi-kapcsolat létrejötte után az időtúllépés és a * kezelésére vonatkozó állítások, a program megpróbál csatlakozni az MQTT-hez. Ha egyszer csatlakozik *, zölden villog és kikapcsol, hogy tudd, hogy csatlakozik. Ha nincs * csatlakoztatva, akkor a wifi folyamatának keresése közben piros marad. * * / void MQTT_connect () {int8_t ret; uint8_t timeout = 10; // várjon 10 másodpercet a kapcsolathoz: bool timedOut = false; míg (WiFi.status ()! = WL_CONNECTED && timedOut == false) {// Wifi-hálózathoz való csatlakozás: digitalWrite (LED_RED, HIGH); Serial.print ("Csatlakozás az SSID-hez"); Serial.println (SSID); status = WiFi.begin (ssid, pass); // Csatlakozás a WPA / WPA2 hálózathoz. Ezt a sort módosítsa, ha nyitott vagy WEP hálózatot használ: timeout--; késleltetés (10); ha (timeout == 0) {timedOut = igaz; digitalWrite (LED_RED, LOW); } Network_Mode = false; } míg (timedOut) {Network_Mode = false; Serial.println ("Belépett örökölt mód"); } if (mqtt.connected ()) {// Állítsa le, ha már csatlakoztatva van. Network_Mode = true; Visszatérés; } Serial.print ("Csatlakozás az MQTT-hez …"); míg ((ret = mqtt.connect ())! = 0) {// connect vissza fog térni a csatlakoztatott Serial.println-re (mqtt.connectErrorString (ret)); Serial.println ("MQTT kapcsolat újraindítása 5 másodperc alatt …"); mqtt.disconnect (); Network_Mode = false; késleltetés (500); // 5 másodperc várakozás} Network_Mode = true; Serial.println ("MQTT Connected!"); digitalWrite (LED_RED, LOW); digitalWrite (LED_GREEN, HIGH); késleltetés (1000); digitalWrite (LED_GREEN, LOW); } / * * Ez a funkció, amely a JSON formátumot formázza. most már egy bizonyos mértékig nehezen kódolt *, amely azonban rugalmatlan, de könnyen megváltoztathatja ezt a paramétert * * / String json_Packet () {String pubString = "{ t "Lámpa", "kód": "lámpa", "; String értékek = "" értékek ": {"; String onOff = "" lámpa ":"; // ints ints maradt ahelyett, hogy idézett volna körülötte JSON formázás String lampState = onOff + POWER_STATE + ","; String brightnessState = "" "lámpaintenzitás": "; String lamp_brightness = fényerőState + led_brightness + ","; String lamp_luminosity = "" fényerő ":"; String kezdeti_string = pubString + értékek + lampState + lamp_brightness + lamp_luminosity; visszatérési_index; } / * * Ez a funkció az előfizetési csatornából érkező adatok logikája. * A LED-es háttérvilágítás bekapcsolása és kikapcsolása a * feliratkozási csatornából küldött értéktől függően változik. Megváltoztatja az aktuális LED fényerőt attól függően is, hogy * * / void subscribe_StateChange (JSON & json) {POWER_STATE = json.lamponVal; led_brightness = json.brightnessVal; ha (POWER_STATE == 1) {MPR121.digitalWrite (11, LOW); map_white (led_brightness); } más {MPR121.digitalWrite (11, HIGH); map_white (0); }} / * * Ez a funkció a magasabb szintű funkció, amely az összes hálózatkezeléssel foglalkozik. A * függvényt az MQTT kapcsolat beállítására hívja. A létrehozás után inicializálja az előfizetés egy példányát *, ahol az adatokat kapja. Ezután készítsünk egy példányt a korábban létrehozott * struktúrából, amely tárolja az előfizetési csomagból elemzett mezőket. Egy * puffert hozunk létre az összes előfizetési adat tárolásához. Ezután ellenőrzi, hogy megérintett-e egy gombot *, ami fényadatok olvasásához, az adatok csomagolásához, majd egy csomag továbbításához vezet. * Ha nem változtatjuk meg a lámpa állapotát (bármely gomb megnyomásával), akkor nézd meg, hogy van-e * olvasható csomagunk. Ha ezt tesszük, elemezzük és feltölthetjük a korábban létrehozott JSON-struktúra mezőit. * * / void networking () {MQTT_connect (); Adafruit_MQTT_Subscribe * előfizetés; JSON json; String basic_string = json_Packet (); StaticJsonBuffer <5000> jsonBuffer; míg (cap_touch_activated) {lux = advancedRead (); // lux értéket kap és egyenlő lux String finalString = basic_string + lux + "}}" értékkel; char buf finalString.length () + 1; finalString.toCharArray (buf, finalString.length () + 1); mqtt_transmit (buf); cap_touch_activated = false; } míg ((előfizetés = mqtt.readSubscription (5000))) {if (előfizetés == & VIRTUAL_LAMP) {JsonObject & root = jsonBuffer.parseObject ((char *) VIRTUAL_LAMP.lastread); ha (! root.success ()) {Serial.println ("parseObject () sikertelen"); Visszatérés; } json.targetVal = root "target"; json.codeVal = gyökér "kód"; json.lamponVal = root "értékek" "lámpa"; json.brightnessVal = root "értékek" "lámpaintenzitás"; subscribe_StateChange (JSON); }}}

HÁLÓZAT: WIFI, MQTT és MQTT.fx

Ez egy olyan rész, amely az MQTT és általában a hálózatépítés elmagyarázására szolgál. Kezdjük el!

Mielőtt belépnénk az MQTT anyagba, be kell állítania a WIFI hálózati hitelesítő adatait erre a diszkrét eszközre. Ez a lámpa a biztonság miatt nem tud csatlakozni a WPA2 vállalati hálózatokhoz. A könyvtárak nem a felhasználói mezők kezelésére szolgálnak. Csak egy hálózati SSID és jelszó, amely jelenleg nem biztosítja a vállalati hálózati támogatást. Jelenleg támogatja a WPA, WPA2 és WEP hálózatok támogatását. Meg kell változtatnia a használni kívánt hálózati hitelesítő adatok SSID-jét és jelszavát. Lásd az alábbi sorokat:

char ssid = ""; // a hálózati SSID (név)
char pass = ""; // a hálózati jelszó (használja a WPA-t vagy használja a kulcsot a WEP-hez) int keyIndex = 0; // a hálózati kulcsod indexszáma (csak a WEP-hez szükséges)

Nem kell módosítania a KeyIndex értéket, kivéve, ha WEP hálózatot használ.

Tehát az MQTT … Az MQTT egy gép-gép csatlakozási protokoll. Mit jelent ez mind? Nos, az MQTT egy olyan módszer, amellyel a készülékek beszélgethetnek egymással anélkül, hogy sok hatalmat kellene igénybe venniük. Nagyon kicsi adatcsomagokkal rendelkezik, így a gyorsabb átvitel is lehetséges. Az MQTT MQ Telemetry Transport néven ismert. Mindenesetre az MQTT közzétételi és előfizetési modellre támaszkodik az adatok küldéséhez és fogadásához.

Az MQTT közzéteszi és feliratkozik az adatok küldésére az eszközök között, és ehhez egy adatközvetítőre van szükség. Ez azt jelenti, hogy szükség van egy közvetítőhelyre olyan adatok küldéséhez, amelyek "témákat" vagy csatornákat állítanak fel, amelyek az adatok közzétételére és előfizetésére szolgálnak. Ez a közvetítő kezeli az adatok küldésének és fogadásának logikáját. Természetesen még mindig olyan funkciókat kell írnod, amelyek pontosan meghatározzák, hogy ebben a közvetítőben milyen adatokat szeretne húzni, vagy adatokat küldeni, de figyelemmel kísérheti a közvetítőtől kapott és elküldött adatokat. A kiadás ugyanaz, mint az adás; az adatokat olyan formátumban csomagolja, amelybe azt szeretné, hogy legyen, majd jelölje ki a közzétenni kívánt csatorna nevét. Miután ezt megtette, használhatja az adafruitból letöltött könyvtárakat, hogy ténylegesen elküldje adatait erre a csatornára, és miután beállította a közvetítőt, láthatja a fogadott adatokat.

Az előfizetés egy kicsit nehezebb, mint a közzététel az adatoknak a készülékre való tényleges fogadása tekintetében. A kiadással egyszerűen át kell adnia. Nem feltétlenül érdekel, hogy az Ön adatait megkapja vagy elemzi a másik végén, az Ön felhasználási esetétől függően. Az előfizetéssel azonban az ügyféloldali (eszközgyártó) feladata, hogy győződjön meg róla, hogy az előfizetéscsatorna témájából az adatokat megfelelően leolvassák, nem veszítettek el csomagokat, nem elemezték az adatokat, és ennek megfelelően reagálnak az adatokra. Az előfizetéssel folyamatosan figyelnie kell, hogy megnézze, hogy kap-e adatokat, és megállítaná az összes többi megjelenését, mert a készülék állapota hamarosan megváltozik a csomag fogadása után. Az előfizetés hasonlóan működik, mint a közzétételi munkák; csatornát hoz létre, és az adafruit MQTT könyvtárból egy függvényhívással (előfizetés *. olvasható leiratkozás (int timeout)) olvassa az adatokat. Folyamatosan átcsomagolhatja a csomagokat és elemezheti azokat, amint megkapja őket, és azonnal megváltoztatja a fizikai lámpa állapotáról szóló dolgokat. Ha valamit csinálsz, amire konkrétan tudnod kell, hogy minden csomag érkezett és milyen minőségben van, van egy további mező a szolgáltatás minőségéhez minden egyes küldött csomaghoz. Ez arra szolgál, hogy értesítse Önt arról, hogy milyen volt az adatátvitel minősége. Ha az összes csomagot megkapta, akkor egy 2-es visszatérésed lesz. Ez azt jelenti, hogy sikeresen küldött egy csomagot, és egy ping csomagot küldött vissza. Ha kapsz egyet, a csomagot elküldtük, de nem lehet biztos benne, hogy bizonyos, hogy visszahívtad őket. A 0-os QoS azt jelzi, hogy elküldte, és nincs további információ arról, hogy kapott-e vagy sem, vagy hogy megkapta az összes csomagot.

Az általunk használt közvetítő az MQTT.fx, amelyet itt kell letölteni. Az MQTT.fx egy ügyfélügynök, amely az összes adatkezeléssel foglalkozik. Használatához be kell állítania. Az első dolog, amit meg kell tennie, az MQTT.fx-hez való csatlakozás megkísérlése előtt kattintson a beállításokhoz. Miután rákattintott rá, meg kell adnia egy URL-címet (brókercím) a kiszolgálónak, amelyre az adatokat elküldi, valamint a port számát. Adja meg magának a profilnevet, amely a dolgokat egyenesen a számunkra tartja, ezt a profilnevet használtuk, és közzétettük a csatornánk nevét és feliratkoztunk a "/" nevet is a profilnév előtt. Miután megadta az összes információt, generáljon egy véletlen kulcsot, és tartsa nyilván a kulcsot. A kódban lévő AIO_KEY értéket a létrehozott új kulcsra cseréli. Az Általános lapra ugorhat, és megadhat egy felhasználónevet és jelszót, bár nem, és nem volt különösebben szükséges. Ezután készen állsz az Alkalmazás gombra, majd az OK gombra, majd nyomja meg a Csatlakozás gombot, és be kell állítanod egy működő kiszolgálót. Ezután írja be a közzétételi és feliratkozási csatorna nevét a legördülő fülbe, és ott kell látnia az adatait, ameddig a csatorna neve elé egy hátlapot ad meg. Ez fontos; az MQTT-ben egy merevlemezes formátumban van, és az adatok nem jelennek meg, ha nincs a kijelölt csatorna neve előtt a hátlap. Ezután mindannyian beállítva!