Tartalomjegyzék:

XOD-alapú újratölthető napelemes lámpa: 9 lépés (képekkel)
XOD-alapú újratölthető napelemes lámpa: 9 lépés (képekkel)

Videó: XOD-alapú újratölthető napelemes lámpa: 9 lépés (képekkel)

Videó: XOD-alapú újratölthető napelemes lámpa: 9 lépés (képekkel)
Videó: Arduino Servo Control: How to Make a Laser Turret with XOD 2024, November
Anonim
XOD hajtású újratölthető napelemes lámpa
XOD hajtású újratölthető napelemes lámpa

A legtöbb háztartási és hardverboltban olcsó, napelemes kerti/sétáló lámpák állnak rendelkezésre. De ahogy a régi mondás tartja, általában azt kapod, amiért fizetsz. Az általuk használt szokásos töltő- és megvilágító áramkörök egyszerűek és olcsók, de a kapott fénykibocsátás nem más, mint lenyűgöző (és alig elég ahhoz, hogy bárki is használja a sétányát, hogy lássa, merre tart!)

Ezzel próbálkozom egy hálózaton kívüli világítási modul megtervezésével, amely jelentős javulás, ugyanakkor viszonylag olcsó. Azáltal, hogy némi "agyat" ad neki. Az XOD.io egy új IDE, amely kompatibilis az Arduino beágyazott fejlesztői platformjával, ahol grafikusan "írhat" kódot. A környezet a grafikus vázlatot a modern C ++ nyelvre fordítja, amely rendkívül hatékony a kompakt kód generálásában, és az Arduino IDE készlettel teljesen kompatibilis forrást hoz létre további külső függőségek nélkül. Így még a kicsi, olcsó, korlátozott program- és adattárolási erőforrásokkal rendelkező mikrovezérlők is alkalmazhatók komplex feladatok elvégzésére.

Ez a projekt bemutatja, hogyan használható két, Arduino-kompatibilis ATTiny85 mikrokontroller a lámpa teljesítményigényének kezelésére. Az első processzor kezeli a külső hardverről származó érzékelő környezeti adatokat, a második pedig megpróbálja a lehető legtöbb energiát begyűjteni a napsütésből nappal, majd szabályozni tudja a nagy teljesítményű LED megvilágítását, miközben az akkumulátor éjszaka lemerül. A második processzor a „fuzzy logika” vezérlés kompakt megvalósításával látja el feladatát. Mindkét chip szoftverét kizárólag az XOD környezetben fejlesztették ki.

1. lépés: Szükséges anyagok

Arduino IDE, legújabb verzió, ATTinyCore kiterjesztéssel a "Boards" kezelőből

Sparkfun USBTinyISP ATTiny programozó, 11801 vagy azzal egyenértékű Sparkfun termékoldal

Pololu állítható kisfeszültségű erősítő átalakító leállítási bemenettel, U1V11A vagy azzal egyenértékű Pololu termékoldal

Nagy teljesítményű fehér vagy RGB LED hűtőbordával, közös anóddal, Adafruit 2524 vagy azzal egyenértékű Adafruit termékoldal

Microchip ATTiny85 8 tűs DIP csomagban, 2 Mouser termékoldalon

8 tűs DIP IC aljzat, 2

Tömeges tároló kondenzátor, 16 v 220 uF

Kimeneti kondenzátor, 6.3v 47uF

Áramkorlátozó ellenállások, 50 ohm 1/4 watt

i2c felhúzó ellenállások, 4.7k, 2

Panel feszültség érzékelő osztó ellenállások, 1/4 watt, 100k, 470k

Áramérzékelő ellenállás, 10 ohm 1⁄2 watt 1% tűrés

Bypass kondenzátorok, 0,1uF kerámia, 2

2 3,7 v 100mAh újratölthető lítium-ion akkumulátor, PKCELL LP401 vagy ezzel egyenértékű

Hordó dugó bemeneti csatlakozó a panelhez, 1

Mini sorkapocs 3”x3” forrasztópáka-tábla és vékony tömör huzal a csatlakozásokhoz

A teszteléshez szinte biztos, hogy oszcilloszkóp, multiméter és asztali tápegység szükséges

2. lépés: Környezet beállítása

Környezet beállítása
Környezet beállítása

Az XOD környezet nem támogatja az ATTiny sorozatú processzorokat, de néhány, az Arduino univerzumból származó harmadik féltől származó könyvtár használatával egyszerű hozzáadni ezt az AVR sorozatot. Az első lépés az „ATTinyCore” könyvtár telepítése az Arduino IDE „Eszközök → Tábla → Fórumkezelő” legördülő menüjéből. Győződjön meg arról, hogy a mellékelt képen látható beállítások helyesek - ne feledje, hogy bármilyen kód feltöltése előtt meg kell nyomnia a "Burn bootloader" gombot, hogy megváltoztassa a lekapcsolási feszültséget és az órajel -beállítást.

A könyvtár forráskódja elérhető:

Egy másik hasznos könyvtár a tárolóból a „FixedPoints”, amely az Arduino által támogatott processzorok fixpontos matematikai fordítási idejű megvalósítása. Az ATTiny korlátozott SRAM- és programmemóriával rendelkezik, és sokat segít a vázlat végső méretének csökkentésében, ha 2 bájtos egész számot használ az általános adattároláshoz, nem pedig lebegőpontos típust, ami 4 bájtot igényel az AVR -n. A végrehajtási sebességet is javítani kell, mivel az ATTiny nem rendelkezik hardver-szorzó egységgel, még kevésbé hardveres lebegőponttal!

A forráskód elérhető:

Az XOD grafikus vázlatok létrehozásának, átvitelének és telepítésének bemutatója: https://github.com/Pharap/FixedPointsArduino sokat segít a mellékelt forrásfájlok létrehozásának megértésében.

3. lépés: Tervezési áttekintés

Tervezési áttekintés
Tervezési áttekintés
Tervezési áttekintés
Tervezési áttekintés

Az alaplapon két ATTiny85 processzor van csatlakoztatva egy i2c interfészen keresztül, és együtt dolgoznak a napelem feszültségének, az erősítő átalakítóból az akkumulátorba áramló áram érzékelésén, miközben a panel világít, az akkumulátor feszültségét és az akkumulátort hőfok.

A boost konverter egy készenléti modul, amely a Texas Instruments TPS6120 IC-n alapul, és képes akár 0,5 voltos bemeneti feszültséget leemelni, és 2 és 5 volt között bárhová növelni. Az érzékelő mag több funkcionális blokkot tartalmaz. A fő óra akkor kezd működni, amikor a napelem bemenetről áramellátást kap a boost konverter. Ez elindítja a vázlat végrehajtását, és először is meg kell határoznia, hogy a panel eléggé meg van -e világítva ahhoz, hogy töltőáramot biztosítson az akkumulátor számára.

A napelem feszültsége két digitális szűrőn keresztül halad át, és ha egy bizonyos küszöbérték felett van, a rendszer megállapítja, hogy a panel meg van világítva, és átkapcsolja a főórát az áramérzékelőbe. Ez a chip analóg -digitális átalakító csatornája, külön konfigurálva, amely érzékeli a feszültséget a 10 ohmos 1% -os tűrésellenálláson, amely sorosan van csatlakoztatva a boost konverter kimenete és az akkumulátor bemenete között. Ha a panel nem világít, ez az ATTiny jelet küld a második ATTiny -nek, és azt mondja, hogy a LED -et figyelje a töltési teljesítmény helyett, és kapcsolja ki a boost -átalakítót, és izolálja a bemenetet, hogy az akkumulátor ne küldje vissza az áramot a panelen keresztül.

A második ATTiny mag a LED vezérlő és az akkumulátor töltöttségét ellenőrző rendszer működése. A panel feszültségét, az akkumulátor feszültségét és az akkumulátor töltési áramadatait elküldik erre a magra feldolgozásra egy fuzzy-logikai hálózaton keresztül, amely megpróbálja létrehozni a megfelelő PWM jelet, amelyet az SHTDN érintkezőre kell alkalmazni, ezáltal szabályozva az akkumulátorra küldött áram mennyiségét felvillanáskor tölteni-a maximális teljesítménypont-követés (MPPT.) alapvető formája. Az érzékelő magjától egy jelet is kap, amely azt jelzi, hogy be kell-e kapcsolnia vagy ki kell kapcsolnia a LED-et, az érzékelőmag napjának kimenetétől függően/ éjszakai flip flop.

Amikor a LED éjszaka aktív, ez az ATTiny figyeli a haverja által neki küldött akkumulátor feszültség adatait és saját chipen lévő hőmérséklet-érzékelőjét, hogy nagyjából megbecsülje, mennyi energiát tolnak a LED-be (az akkumulátor feszültsége csökken és a forgács hőmérséklete növekszik a csapokból kihúzott árammal.) A LED PWM patch-hez társított fuzzy-logikai hálózat megpróbálja megítélni, hogy mennyi akkumulátor van még rendelkezésre, és csökkenti a LED intenzitását, amint az akkumulátor lemerül.

4. lépés: Egyedi javítások létrehozása az XOD Core Library -ből

Egyéni javítások létrehozása az XOD Core Library -ből
Egyéni javítások létrehozása az XOD Core Library -ből
Egyéni javítások létrehozása az XOD Core Library -ből
Egyéni javítások létrehozása az XOD Core Library -ből

Ehhez a tervezéshez több egyedi javítócsomópontot használtak, amelyek közül néhány könnyen elkészíthető a mellékelt XOD csomópontokból, néhány pedig C ++ nyelven valósult meg.

A két egyéni javítócsomópont közül az első egy exponenciális mozgóátlag szűrő megvalósítása. Ez a vázlatban sorozatosan használt alacsony fejű, aluláteresztő digitális szűrő, egyszer a logikai mag bejövő napelemes feszültségének szűrésére, és még egyszer a hosszú távú környezeti megvilágítást meghatározó trigger elindítására. Lásd a Wikipédia bejegyzését az exponenciális simításról.

A kép csomópontstruktúrája csak a cikkben található átviteli függvény közvetlen grafikus ábrázolása, amely a megfelelő bemenetek és kimenetek közötti hivatkozások segítségével kapcsolódik egymáshoz. Van egy halasztási csomópont a könyvtárból, amely lehetővé teszi a visszacsatolási hurok létrehozását (az XOD figyelmeztet, ha visszacsatolási ciklust hoz létre anélkül, hogy késleltetést írna be a ciklusba, az XOD végrehajtási modellben leírtak szerint.) Ezzel a részlettel gondoskodik a A patch jól működik, ez egyszerű.

A második egyedi patch csomópont az XOD-hoz mellékelt flip-flop egyik változata, amelyet a szűrt panelfeszültség táplál. Magasan vagy alacsonyan reteszel attól függően, hogy a bemeneti jel egy bizonyos küszöb felett vagy alatt van -e. A Cast csomópontok segítségével a Boole -kimeneti értékeket impulzus adattípusokká alakítják, hogy kiválthassák a flip flopot, miközben az állapot alacsonyról magasra vált. Ennek a javítócsomópontnak a tervezése remélhetőleg kissé magától értetődő lesz a képernyőkép alapján.

5. lépés: Egyéni javítások létrehozása a C ++ használatával

Egyéni javítások létrehozása a C ++ használatával
Egyéni javítások létrehozása a C ++ használatával

Különleges követelmények esetén, ahol a szükséges csomópont-funkciók túl bonyolultak ahhoz, hogy könnyen grafikusan ábrázolhassák őket, vagy olyan Arduino-könyvtárakra támaszkodnak, amelyek nem az Arduino-környezetben őshonosak, az XOD megkönnyíti a C/C ++ ismeretekkel rendelkezők számára a harapott méretű darabok írását. kódot, amelyet ezután ugyanolyan javításba lehet integrálni, mint bármely más felhasználó által létrehozott vagy készlet csomópontot. Az "új javítás létrehozása" lehetőség kiválasztása a fájlmenüből egy üres lapot hoz létre, amellyel dolgozni lehet, és a bemeneti és kimeneti csomópontok behúzhatók az alapkönyvtár "csomópontok" részéből. Ezután a "nem implementált-in-xod" csomópont behúzható, és ha rákattint, megjelenik egy szövegszerkesztő, ahol a szükséges funkciók megvalósíthatók a C ++ nyelven. A belső állapot kezeléséről és a be- és kimeneti portok C ++ kódból való eléréséről itt olvashat.

Példaként az egyéni javítások C ++ nyelven történő megvalósítására, a meghajtómag további két egyedi javítását használják a meghajtómag tápfeszültségének és maghőmérsékletének becslésére. A homályos hálózattal együtt ez lehetővé teszi a LED -ek sötétben való táplálásához rendelkezésre álló akkumulátorkapacitás hozzávetőleges becslését.

A hőmérséklet -érzékelő foltja a tápfeszültség -érzékelő kimenetével is táplálkozik a jobb becslés érdekében - az érzékelő maghőmérséklet lehetővé teszi, hogy hozzávetőleges becslést kapjunk arról, hogy mennyi energiát égetnek a LED -ek, és kombinálják a tápfeszültség leolvasásával, amikor az akkumulátor lemerülése további hozzávetőleges becslés arra vonatkozóan, hogy mennyi akkumulátor van még hátra. Nem kell szuperpontosnak lennie; ha a mag „tudja”, hogy a LED -ek nagy áramot fogyasztanak, de az akkumulátor feszültsége gyorsan csökken, akkor valószínűleg nyugodtan kijelenthetjük, hogy az akkumulátor nem tart tovább sokáig, és ideje lekapcsolni a lámpát.

6. lépés: Építés

Építkezés
Építkezés
Építkezés
Építkezés
Építkezés
Építkezés

A projektet egy kis prototípus-táblára építettem, rézpárnákkal az átmenő lyukakhoz. Az aljzatok használata az IC -khez sokat segít a programozás/módosítás/tesztelés során; a Sparkfun USBTiny internetszolgáltatójának hasonló aljzata van az alaplapon, így a két chip programozása csak a programozó PC -porthoz való csatlakoztatásáról, a mellékelt Arduino.ino fájlokból feltöltött XOD -kód feltöltéséről a megfelelő alaplapi és programozói beállításokkal, és majd óvatosan távolítsa el a chipeket a programozó aljzatból, és helyezze be a protoboard foglalatokba.

A Pololu TPS6120 alapú erősítő átalakító modul egy felszálló táblán van, amely a protoboardba van forrasztva a csapok fejlécein, így helyet takaríthat meg, ha egyes alkatrészeket alatta szerel. A prototípusomon a két 4,7 k felhúzó ellenállást tettem alá. Ezek szükségesek ahhoz, hogy a chipek közötti i2c busz megfelelően működjön - nélkülük nem működik a kommunikáció! A panel jobb oldalán található a napelem csatlakozójának bemeneti csatlakozója és a bemeneti tároló kondenzátor. A legjobb, ha megpróbáljuk az aljzatot és ezt a kupakot közvetlenül összekapcsolni a forrasztás "futásain" keresztül, nem pedig a bekötőhuzalon, hogy a lehető legkisebb ellenállást biztosítsuk. A tömör forrasztás során a tároló kondenzátor pozitív kivezetését közvetlenül a boost modul bemeneti feszültségcsatlakozójához, a boost modul földelőcsapját pedig közvetlenül az aljzat földelőcsapjához csatlakoztatják.

A két ATTinys aljzatától jobbra és balra 0,1uF despike/deglitching kondenzátor található. Ezek az alkatrészek szintén fontosak, hogy ne maradjanak ki, és a lehető legrövidebb és közvetlen úton kell csatlakoztatni őket az IC tápellátásához és a földelőcsapokhoz. A 10 ohmos áramérzékelő ellenállás a bal oldalon található, ez a erősítő átalakító kimenetével összhangban van csatlakoztatva, és mindkét oldal egy érzékelőmag bemeneti csapjához van csatlakoztatva - ezek a csapok úgy vannak beállítva, hogy differenciális ADC -ként működjenek, hogy közvetve mérjék a áramot az akkumulátorba. Az i2c busz IC csapjai és a boost konverter leállító csapjai, stb. Között a protoboard alsó oldalán található csatlakozóhuzal segítségével lehet csatlakozni, erre a célra nagyon vékony, tömör magos csatlakozóhuzal működik. Könnyebbé teszi a változtatásokat, és sokkal tisztábban is néz ki, mint a jumperek futása a tetején lévő lyukak között.

Az általam használt LED modul egy háromszínű RGB egység volt, a tervem az volt, hogy mindhárom LED aktív legyen, hogy fehéret termeljenek, amikor az akkumulátor majdnem teljesen fel van töltve, és lassan elhalványul a kék LED sárgára, amint a töltés lemerült. De ezt a funkciót még meg kell valósítani. Egyetlen fehér LED egy áramkorlátozó ellenállással is rendben fog működni.

7. lépés: Tesztelés, 1. rész

Tesztelés, 1. rész
Tesztelés, 1. rész

Miután mindkét ATTiny IC -t a mellékelt vázlatfájlokkal beprogramozta az Arduino környezetből származó USB programozó segítségével, segít tesztelni, hogy a prototípus két magja megfelelően működik, mielőtt megpróbálná feltölteni az akkumulátort a napelemről. Ideális esetben ehhez alapvető oszcilloszkóp, multiméter és asztali tápegység szükséges.

Az első dolog, amit ellenőrizni kell, hogy az IC -k, az akkumulátor és a panel aljzataiba történő csatlakoztatása előtt sehol nincs rövidzárlat a táblán, hogy elkerülje az esetleges sérüléseket! Ennek legegyszerűbb módja egy padon lévő tápegység használata, amely adott esetben a kimenő áramát biztonságos értékre korlátozhatja. Az asztali tápegységet 3 volton és 100 mA -es határon használtam, a napelem bemeneti jack csatlakozóihoz csatlakoztatva a pozitív és negatív tápvezetékekhez. Ha a passzív komponenseken kívül semmi más nincs telepítve, akkor a tápegység jelenlegi monitorán lényegében semmilyen áramfelvétel nem regisztrálható. Ha jelentős áramlást tapasztal, vagy a tápfeszültség áramkorlátozóba kerül, akkor valami hiba történt, és ellenőrizni kell a kártyát, hogy nincsenek-e rosszul csatlakoztatott csatlakozók vagy fordított polaritású kondenzátorok.

A következő lépés annak biztosítása, hogy a boost konverter megfelelően működjön. A táblán van egy csavaros potenciométer, a tápegység továbbra is csatlakoztatva, és az átalakító négy csapja megfelelően csatlakoztatva, a potenciométert egy kis csavarhúzó hegyével kell forgatni, amíg a modul kimeneti csatlakozóján lévő feszültség 3,8-3,9 volt körül van. Ez a DC érték működés közben nem változik, a meghajtó mag a modul leállító csapjának pulzálásával szabályozza az átlagos kimeneti feszültséget.

8. lépés: Tesztelés, 2. rész

Tesztelés, 2. rész
Tesztelés, 2. rész
Tesztelés, 2. rész
Tesztelés, 2. rész

A következő dolog az, hogy ellenőrizze, hogy az i2c kommunikáció megfelelően működik -e, és ha a tábla lemerül a padról, az érzékelőmag IC telepíthető. Egy oszcilloszkópon pulzáló jeleknek kell lenniük a fizikai chip 5. és 7. lábán is, ez az i2c meghajtó a chipen adatokat próbál küldeni a haverjának. Az illesztőprogram leállítása után a vezetőmag telepíthető, és a kapcsolatot ismét oszcilloszkóppal ellenőrizni kell, és mindkét vonalon nagyobb impulzus -sorozatnak kell megjelennie. Ez azt jelenti, hogy a chipek megfelelően kommunikálnak.

Segít, ha az akkumulátor kissé fel van töltve a végső teljes teszthez. Ehhez a padon lévő tápegység is használható, az áramkorlát körülbelül 50 mA -re van állítva, és a feszültség továbbra is 3,8 volt, így a LiPo akkumulátor közvetlenül csatlakoztatva marad néhány percre.

Az utolsó lépés a teljes rendszer kipróbálása - ha minden csatlakoztatva van, ha a panelt tíz vagy 15 másodpercig lefedik, a fénynek a vezetőmag PWM kimenetén keresztül kell világítania. Ha a panelt erős napfény éri, az akkumulátornak a boost konverter kimenetéről kell töltenie. A fuzzy logikai hálózat közvetett módon ellenőrizhető, hogy megfelelően működik -e, ha megnézzük a PWM vonalat, amely a boost konverter leállító csapját hajtja; ahogy a megvilágítás növekszik az alacsony töltöttségi állapotú akkumulátorral, az impulzusszélességnek növekednie kell, ami azt mutatja, hogy ahogy egyre több energiát kap a napfény, a vezető magja azt jelzi, hogy több energiát kell küldeni az akkumulátorba!

9. lépés: Függelék a fuzzy logikához

Függelék a Fuzzy Logic -ról
Függelék a Fuzzy Logic -ról

A fuzzy logika egy gépi tanulási technika, amely hardveres rendszerek vezérlésére használható, ahol a vezérlő rendszer számos paramétere bizonytalan, és kifejezetten hozzájárul a kimeneti vezérlő megoldáshoz a célhoz, amelyet nehéz matematikailag leírni. Ez úgy érhető el, hogy a logikai értékeket valahol 0 (hamis) és 1 (igaz) közé esik, bizonytalanságot fejezve ki egy olyan értékben, mint az ember („többnyire igaz” vagy „nem igazán igaz”), és lehetővé teszi a szürke területet 100% -ban igaz és 100% -ban hamis állítások között. Ezt úgy lehet elérni, hogy először mintákat veszünk azokból a bemeneti változókból, amelyek alapján döntést kell hozni, és ezeket „elfuseráljuk”.

Minden fuzzy logikai rendszer szíve egy „fuzzy asszociatív memória”. Ez egy mátrixra emlékeztet, ahol az akkumulátor töltő áramkör esetében 3x3 értékkészlet tárolódik 0 és 1 között. A mátrix értékei nagyjából összefüggésbe hozhatók azzal, hogy az ember mit gondolna arról, hogy a PWM tényezőnek, amely a boost konverter SHTDN érintkezőjét vezérli, milyennek kell lennie, attól függően, hogy a fenti tagsági függvény hogyan minősíti az adott bemeneti készletet. Például, ha a panel bemeneti feszültsége magas, de az akkumulátorba vett áram alacsony, ez valószínűleg azt jelenti, hogy több energiát lehet lehívni, és a PWM beállítás nem optimális, és növelni kell. Ezzel szemben, ha a panel feszültsége lecsökken, de a töltő továbbra is nagy áramot próbál bevinni az akkumulátorba, akkor az is kárba vész, ezért a legjobb lenne a PWM jelet a boost konverterre csökkenteni. Miután a bemeneti jeleket fuzzy halmazsá alakították, ezeket megszorozzák ezekkel az értékekkel, hasonlóan ahhoz, ahogyan a vektort egy mátrixszal megszorozzák, hogy olyan transzformált halmazt hozzanak létre, amely reprezentálja, hogy a „tudás” cella mennyire erősen tartalmazta a mátrix elemeit be kell számítani a végső kombinációs függvénybe.

A „nem implementált-in-xod” csomópont használata, amely lehetővé teszi, hogy az egyéni funkciókat túl bonyolult XOD csomópontok túl bonyolulttá tegyék ahhoz, hogy ésszerű legyen a készlet építőelemekből, és egy kis Arduino-stílusú C ++, az asszociatív memória, súlyozási funkció és fuzzifier , hasonlóan az ebben a hivatkozásban leírt blokkokhoz: https://www.drdobbs.com/cpp/fuzzy-logic-in-c/184408940 egyszerű elkészíteni, és sokkal könnyebb kísérletezni velük.

Ajánlott: