INHOUDSOPGAWE:

XOD-aangedrewe herlaaibare sonlamp: 9 stappe (met foto's)
XOD-aangedrewe herlaaibare sonlamp: 9 stappe (met foto's)

Video: XOD-aangedrewe herlaaibare sonlamp: 9 stappe (met foto's)

Video: XOD-aangedrewe herlaaibare sonlamp: 9 stappe (met foto's)
Video: Сделайте водяной насос с приводом от двигателя постоянного тока 12 В 2024, November
Anonim
XOD-aangedrewe herlaaibare sonlamp
XOD-aangedrewe herlaaibare sonlamp

Daar is goedkoop son-/loopplante by die meeste huishoudelike goedere en hardewarewinkels. Maar soos die ou gesegde lui, kry u gewoonlik waarvoor u betaal. Die gewone laai- en verligtingskringe wat hulle gebruik, is eenvoudig en goedkoop, maar die ligopbrengs wat u kry, is allesbehalwe indrukwekkend (en skaars genoeg vir almal wat u loopbrug gebruik om te sien waarheen hulle op pad is!)

Dit is my poging om 'n beligtingsmodule buite die netwerk te ontwerp, wat 'n aansienlike verbetering is, terwyl dit nog relatief goedkoop is. Deur dit 'n paar "breins" te gee. XOD.io is 'n nuwe IDE wat versoenbaar is met die ingeboude ontwikkelingsplatform van Arduino, waar u grafies kode kan "skryf". Die omgewing transponeer u grafiese skets na moderne C ++, wat opvallend doeltreffend is om kompakte kode te genereer, en 'n bron genereer wat volledig versoenbaar is met die voorraad Arduino IDE sonder om verdere eksterne afhanklikes te vereis. Op hierdie manier kan selfs klein, goedkoop mikrobeheerders met beperkte program- en data -bergingshulpbronne gebruik word om komplekse take aan te pak.

Hierdie projek wys hoe twee Arduino-versoenbare ATTiny85-mikrobeheerders wat saamwerk, gebruik kan word om die kragbehoeftes van die lamp te bestuur. Die eerste verwerker hanteer die opsporing van omgewingsdata van die eksterne hardeware, en die tweede probeer om gedurende die dag die meeste energie uit die son te put, en beheer dan die verligting van 'n hoë-krag LED as 'n opbergbattery snags ontlaai. Die tweede verwerker verrig sy werk deur 'n kompakte implementering van 'fuzzy logic' -beheer. Die sagteware vir beide skyfies is uitsluitlik binne die XOD -omgewing ontwikkel.

Stap 1: Vereiste materiaal

Arduino IDE, nuutste weergawe, met ATTinyCore -uitbreiding geïnstalleer vanaf die 'Boards' bestuurder

Sparkfun USBTinyISP ATTiny programmeerder, 11801 of ekwivalente produkblad van Sparkfun

Pololu verstelbare laespanning boost converter met afsluit ingang, U1V11A of ekwivalente Pololu produkbladsy

Wit of RGB LED met hoë krag met koellichaam, gewone anode, Adafruit 2524 of ekwivalente Adafruit -produkbladsy

Microchip ATTiny85 in 'n 8-pins DIP-pakket, 2 Mouser-produkbladsy

8 -pins DIP IC -voetstukke, 2

Grootopbergingskondensator, 16 v 220 uF

Uitgangskondensator, 6.3v 47uF

Stroombeperkende weerstande, 50 ohm 1/4 watt

i2c optrekweerstands, 4.7k, 2

Weerstands vir paneelspanningverdelers, 1/4 watt, 100k, 470k

Huidige sinweerstand, 10 ohm 1⁄2 watt 1% verdraagsaamheid

Omseilkondensators, 0.1uF keramiek, 2

2 3,7 v 100 mAh litium-ion herlaaibare battery, PKCELL LP401 of ekwivalent

Vat -invoeraansluiting vir paneel, 1

Mini-aansluitblokke 3 "x3" soldeerplaat en dun, soliede kerndraad om verbindings te maak

'N Osilloskoop-, multimeter- en bankvoeding sal byna seker nodig wees vir die toetsing

Stap 2: Omgewingsopset

Omgewing opstel
Omgewing opstel

Die XOD-omgewing ondersteun nie die ATTiny-reeks verwerkers nie, maar met behulp van 'n paar derdeparty-biblioteke uit die Arduino-heelal is dit eenvoudig om ondersteuning vir hierdie reeks AVR's by te voeg. Die eerste stap is om die "ATTinyCore" -biblioteek te installeer vanuit die keuselys "Tools → Board → Board Manager" van die Arduino IDE. Maak seker dat die instellings soos aangedui in die prentjie korrek is. Onthou dat u op 'Brand selflaaiprogram' moet druk om die outomatiese versmeltingspanning en kloksnelheidsversekerings te verander voordat u 'n kode oplaai!

Die bronkode vir hierdie biblioteek is beskikbaar op:

'N Ander nuttige biblioteek wat u uit die bewaarplek moet kry, is' FixedPoints ', wat 'n tydsimplementering van vaste punt wiskunde is vir verwerkers wat deur Arduino ondersteun word. Die ATTiny het 'n beperkte SRAM- en programgeheue, en dit help baie met die krimp van die finale sketsgrootte om 'n heelgetal van 2 byte te gebruik vir algemene data -berging, eerder as 'n drywende punt, wat 4 grepe op die AVR benodig. Die uitvoeringsnelheid moet ook verbeter word, aangesien die ATTiny nie 'n hardeware-vermenigvuldigingseenheid het nie, nog minder die dryfpunt van die hardeware!

Bronkode is beskikbaar by:

Die handleiding oor hoe om XOD grafiese sketse te skep, te transpileer en te implementeer op: https://github.com/Pharap/FixedPointsArduino sal baie help om te verstaan hoe die ingeslote bronlêers geskep is.

Stap 3: Ontwerpoorsig

Ontwerpoorsig
Ontwerpoorsig
Ontwerpoorsig
Ontwerpoorsig

Op die bord is twee ATTiny85 -verwerkers verbind via 'n i2c -koppelvlak en word saam gebruik om die spanning van die sonpaneel te bepaal, stroom wat uit die boost -omskakelaar in die battery vloei terwyl die paneel verlig word, die batteryspanning en die battery temperatuur.

Die boost-omskakelaar is 'n op-die-rak-module gebaseer op 'n Texas Instruments TPS6120 IC, wat 'n ingangsspanning van so laag as 0,5 volt kan neem en dit tot 2 volt tot 5 volt kan verhoog. Die sensorkern bestaan uit verskeie funksionele blokke. Die hoofklok begin hardloop sodra die kragopwekker van die inset van die sonpaneel ingevoer word. Dit begin met die uitvoering van die skets, en die eerste ding is om vas te stel of die paneel genoeg verlig is om die battery laaistroom te gee.

Die spanning van die sonpaneel word deur twee digitale filters oorgedra, en as dit bo 'n sekere drempel is, bepaal die stelsel dat die paneel verlig is en sluit die hoofklok in die stroom-sensor. Dit is 'n analoog -na -digitale omskakelingskanaal van die chip, wat differensieel gekonfigureer is, wat die spanning oor 'n 10 ohm 1% -verdraagsaamheidsweerstand waarneem wat in serie gekoppel is tussen die uitset van die hupstootskakelaar en die battery -inset. As die paneel nie verlig is nie, stuur hierdie ATTiny 'n sein na die tweede ATTiny wat sê dat dit LED -krag moet monitor in plaas van laadkrag, en die boost -omskakelaar afskakel en die ingang kan isoleer sodat die battery nie stroom deur die paneel stuur nie.

Die tweede ATTiny -kern is waar die LED -beheerder en die moniteringstelsel vir batterylading uitgevoer word. Panelspanning, batteryspanning en laaistroomdata van die battery word na hierdie kern gestuur vir verwerking via 'n fuzzy-logic netwerk, wat probeer om 'n gepaste PWM-sein te genereer om op die SHTDN-pen van toepassing te wees, en sodoende die hoeveelheid stroom wat na die battery gestuur word, te beheer om dit op te laai as dit verlig is-'n basiese vorm van maksimum kragpuntopsporing (MPPT.) Dit ontvang ook 'n sein van die sensorkern wat dit aandui of dit die LED moet aan- of uitskakel, afhangende van die uitset van die sensorkern se dag/ nag flip flop.

As die LED snags aktief is, monitor hierdie ATTiny die batteryspanningsdata wat van sy maat en sy eie temperatuur-sensor op die chip gestuur word, om 'n rowwe skatting te kry van hoeveel krag in die LED ingedruk word (die batteryspanning neem af en die temperatuur van die chip styg namate die stroom uit die penne getrek word.) Die fuzzy-logic netwerk wat verband hou met die LED PWM-pleister, probeer 'n oordeel neem oor hoeveel batterykrag nog beskikbaar is, en die LED-intensiteit verminder namate die battery leeg is.

Stap 4: Maak aangepaste pleisters uit die XOD -kernbiblioteek

Pasgemaakte pleisters uit die XOD -kernbiblioteek skep
Pasgemaakte pleisters uit die XOD -kernbiblioteek skep
Pasgemaakte pleisters uit die XOD -kernbiblioteek skep
Pasgemaakte pleisters uit die XOD -kernbiblioteek skep

Verskeie pasgemaakte pleisterknope is vir hierdie ontwerp gebruik, waarvan sommige maklik volledig opgebou kan word uit ingeslote XOD -nodusse, en sommige wat in C ++ geïmplementeer is.

Die eerste van die twee pasgemaakte pleisterknope op die foto's, 'n implementering van 'n eksponensiële bewegende gemiddelde filter. Dit is 'n lae-oorhoofse laagdoorlaat digitale filter wat in serie in die skets gebruik word, een keer om die inkomende sonpaneel spanning vir die logiese kern te filter, en nogmaals om die sneller te voed wat langtermyn verligting bepaal. Sien die Wikipedia -inskrywing oor eksponensiële gladstryking.

Die knoopstruktuur in die beeld is slegs 'n direkte grafiese voorstelling van die oordragfunksie in die artikel, wat met mekaar verbind is met behulp van skakels van die toepaslike insette na uitsette. Daar is 'n uitstelknooppunt uit die biblioteek waarmee 'n terugvoerlus gemaak kan word (XOD sal u waarsku as u 'n terugvoerlus maak sonder om 'n vertraging in die lus in te voeg, soos beskryf in die XOD -uitvoeringsmodel.) Met die detail aandag gegee aan die patch werk goed, dit is eenvoudig.

Die tweede pasgemaakte pleisterknoop is 'n variasie op die voorraad-flip-flop wat by XOD ingesluit is, wat gevoed word met die gefiltreerde paneelspanning. Dit hang hoog of laag, afhangende van of die insetsein bo of onder 'n sekere drempel is. Gietknope word gebruik om Boole -uitsetwaardes om te skakel na die tipe pulsdata om die flipflop te aktiveer, namate die toestand van laag na hoog oorgaan. Die ontwerp van hierdie pleisterknoop behoort hopelik ietwat vanselfsprekend te wees vanaf die skermkiekie.

Stap 5: Maak persoonlike pleisters met behulp van C ++

Maak persoonlike pleisters met behulp van C ++
Maak persoonlike pleisters met behulp van C ++

Vir spesiale vereistes waar die nodige funksionaliteit wat nodig is, te ingewikkeld sou wees om maklik grafies uit te beeld, of wat staatmaak op Arduino-biblioteke wat nie in die Arduino-omgewing is nie, maak XOD dit vir diegene met 'n mate van C/C ++ kennis maklik om bytgrootte stukke te skryf kode wat dan in 'n pleister geïntegreer kan word, dieselfde as enige ander gebruikersgeskepte of voorraadknooppunt. As u 'skep 'n nuwe pleister' in die lêermenu kies, word 'n leë vel geskep waarmee u kan werk, en invoer- en uitvoerknoppies kan ingesleep word uit die 'nodes' afdeling van die kernbiblioteek. Dan kan die "nie-geïmplementeerde-in-xod" -knoop ingesleep word, en as u daarop klik, sal 'n teksredigeerder verskyn waar die vereiste funksies in C ++ geïmplementeer kan word. Hier word behandel hoe u die interne toestand hanteer en toegang tot die invoer- en uitvoerpoort vanaf die C ++ - kode kry.

As 'n voorbeeld van die implementering van aangepaste pleisters in C ++, word twee verdere aangepaste pleisters vir die bestuurderkern gebruik om 'n skatting van die dryfkern se voedingsspanning en kerntemperatuur op te stel. Saam met sy fuzzy netwerk kan dit 'n rowwe skatting gee van die oorblywende batterykrag wat beskikbaar is om die LED's aan te dryf as dit donker is.

Die temperatuursensorvlek word ook gevoed met die uitset van die voedingspanningsensor om 'n beter skatting te verkry - met die kerntemperatuur kan ons 'n ruwe skatting kry van hoeveel krag in die LED's verbrand word, en gekombineer word met die lesing van die voedingsspanning wanneer 'n Verdere skatting van die hoeveelheid batterykrag wat oorbly. Dit hoef nie super-akkuraat te wees nie; As die kern 'weet' dat die LED's baie stroom trek, maar die batteryspanning vinnig daal, is dit waarskynlik veilig om te sê dat die batterykrag nie baie langer sal hou nie, en dit is tyd om die lamp af te skakel.

Stap 6: Konstruksie

Konstruksie
Konstruksie
Konstruksie
Konstruksie
Konstruksie
Konstruksie

Ek het die projek gebou op 'n klein stukkie prototipe bord met koperblokkies vir dele deur die gat. Die gebruik van voetstukke vir die IC's help baie om te programmeer/wysig/toets; die USBTiny ISP van Sparkfun het 'n soortgelyke aansluiting op die bord, sodat die programmering van die twee skyfies net bestaan uit die aansluiting van die programmeerder op 'n rekenaar -USB -poort, die oplaai van die getransponeerde XOD -kode van die meegeleverde Arduino.ino -lêers met die toepaslike kaart- en programmeerderinstellings, en verwyder dan die skyfies saggies uit die programmeerderaansluiting en steek dit in die protoboard -voetstukke.

Die Pololu TPS6120 -gebaseerde boost -omvormermodule kom op 'n riser board wat in die protobord gesoldeer is op penkoppe, sodat dit moontlik is om ruimte te bespaar deur 'n paar komponente daaronder te monteer. Op my prototipe sit ek die twee 4,7k pullup -weerstande onder. Dit is nodig om die i2c -bus tussen die skyfies korrek te laat funksioneer - sonder hulle werk kommunikasie nie reg nie! Aan die regterkant van die bord is die ingangsaansluiting vir die prop van die sonpaneel en die ingangstoorkapasitor. Dit is die beste om die domkrag en die kap direk met mekaar te verbind via 'lopies' van soldeer, nie 'n aansluitdraad nie, om 'n so min as moontlik weerstand te kry. Lopies soliede soldeersel word dan gebruik om die positiewe aansluiting van die opbergingskondensator direk aan die ingangsspanningsklem van die hupstootmodule te koppel, en die grondpen van die hupstootmodule direk op die aansluiting se grondpen.

Regs en links van die voetstukke vir die twee ATTinys is 0.1uF afvoer-/afbreekkapasitors. Hierdie komponente is ook belangrik om nie uit te laat nie, en moet aan die IC's -krag en grondpenne gekoppel word deur 'n so kort en direkte pad as moontlik. Die 10 ohm stroomgevoeligweerstand is aan die linkerkant, dit word gekoppel in ooreenstemming met die uitset van die hupstootomskakelaar en elke kant is gekoppel aan 'n sensorkern -invoerpen - hierdie penne is opgestel om as 'n differensiële ADC te werk om die indirekte meting van die stroom in die battery. Verbindings tussen IC-penne vir die i2c-bus en die afsluitpen van die boost-omskakelaar, ens., Kan gemaak word met behulp van aansluitdraad aan die onderkant van die protobord, baie dun soliede kern aansluitdraad werk uitstekend hiervoor. Dit maak veranderinge makliker en lyk ook baie netjieser as om springers tussen gate aan die bokant te hardloop.

Die LED-module wat ek gebruik het, was 'n driekleurige RGB-eenheid; my plan was om al drie die LED's aktief te hê om wit te produseer wanneer die battery amper vol was, en die blou LED stadig in geel te verdof namate die lading leeg is. Maar hierdie funksie moet nog geïmplementeer word. 'N Enkele wit LED met een stroombeperkende weerstand werk ook goed.

Stap 7: Toetsing, deel 1

Toets, deel 1
Toets, deel 1

Na die programmering van beide ATTiny IC's met die meegeleverde sketslêers via die USB -programmeerder uit die Arduino -omgewing, help dit om te toets dat die twee kerns op die prototipe behoorlik funksioneer voordat u die battery van die sonpaneel probeer laai. Ideaal gesproke benodig dit 'n basiese ossilloskoop, multimeter en bankvoeding.

Die eerste ding wat u moet kontroleer, is dat daar geen kortsluitings op die bord is voordat u die IC's, die battery en die paneel in hul voetstukke aansluit om moontlike skade te voorkom nie! Die maklikste manier om dit te doen, is om 'n bankvoeding te gebruik wat die uitsetstroom tot 'n veilige waarde kan beperk in hierdie situasie. Ek gebruik my bankvoeding wat ingestel is op 3 volt en 'n limiet van 100 mA wat gekoppel is aan die ingangsklemme van die sonpaneel op die positiewe en negatiewe kragtoevoer. Met niks anders as die passiewe komponente geïnstalleer nie, behoort daar in wese geen stroomopname op die huidige monitor van die kragtoevoer te wees nie. As daar 'n aansienlike stroomvloei is, of as die toevoer in die stroombeperking gaan, het iets verkeerd gegaan en die bord moet nagegaan word om seker te maak dat daar geen verkeerd bedrade verbindings of kapasitors met omgekeerde polariteit is nie.

Die volgende stap is om te verseker dat die boost -omskakelaar korrek werk. Daar is 'n skroefpotensiometer op die bord, met die kragtoevoer nog steeds verbind en vier van die penne van die omskakelaar is behoorlik gekoppel, moet die potensiometer met 'n klein skroewedraaierpunt gedraai word totdat die spanning by die uitgangsklem van die module ongeveer 3,8 tot 3,9 volt is. Hierdie GS -waarde verander nie tydens werking nie; die bestuurderkern beheer die gemiddelde uitsetspanning deur die module se afsluitpen te pols.

Stap 8: Toets, Deel 2

Toets, deel 2
Toets, deel 2
Toets, deel 2
Toets, deel 2

Die volgende ding wat u moet kontroleer, is dat i2c -kommunikasie goed werk, terwyl die bord van die bank afloop, kan die sensorkern -IC geïnstalleer word. Op 'n ossilloskoop behoort daar seine op beide pen 5 en pen 7 van die fisiese chip te wees; hierdie i2c -bestuurder op die chip probeer data na sy maat stuur. Nadat die bestuurder se kern afgesluit is en die verbinding weer met 'n ossilloskoop nagegaan kan word, behoort daar 'n groter reeks pulse op beide lyne te wees. Dit beteken dat die skyfies korrek kommunikeer.

Dit help om die battery effens gelaai te hê vir die laaste volledige toets. Die banktoevoer kan ook gebruik word om dit te bereik, met die huidige limiet op ongeveer 50 mA en die spanning steeds op 3,8 volt, wat die LiPo -battery vir 'n paar minute direk laat aansluit.

Die laaste stap is om die volledige stelsel uit te toets - met alles aangeskakel as die paneel tien of 15 sekondes bedek is, moet die lig aangeskakel word via die PWM -uitset van die bestuurderkern. As die paneel in helder sonlig is, moet die battery laai vanaf die versterkingsomskakelaar se uitvoer. Die vaag logiese netwerk kan indirek ondersoek word om te sien of dit korrek werk deur na die PWM -lyn te kyk wat die afsluitpen van die boost -converter aandryf; Namate die beligting toeneem met die battery met 'n lae laaitoestand, behoort die pulswydte te vergroot, wat toon dat namate meer krag deur sonlig verkry word, die bestuurder se kern aandui dat meer krag na die battery gestuur moet word!

Stap 9: Bylae oor Fuzzy Logic

Bylae oor Fuzzy Logic
Bylae oor Fuzzy Logic

Fuzzy logic is 'n masjienleertegniek wat gebruik kan word in die beheer van hardeware -stelsels, terwyl die onsekerheid in baie van die parameters van die stelsel wat beheer word, 'n eksplisiete oplossing vir uitvoerbeheer bied vir die doel wat moeilik wiskundig neergeskryf kan word. Dit word bewerkstellig deur gebruik te maak van logiese waardes wat êrens tussen 0 (onwaar) en 1 (waar) val, om onsekerheid uit te druk in 'n waarde wat meer is soos 'n mens ("meestal waar" of "nie regtig waar nie") en 'n grys gebied toelaat tussen stellings wat 100% waar en 100% onwaar is. Die manier waarop dit bereik word, is deur eers monsters te neem van die invoerveranderlikes waarop 'n besluit gebaseer moet word en dit te "fuzzify".

Die hart van enige vaag logiese stelsel is 'n 'vaag assosiatiewe geheue'. Dit herinner aan 'n matriks, waar 'n 3x3 stel waardes tussen 0 en 1 gestoor word in die geval van die laaikring van die battery. Die waardes in die matriks kan rofweg verband hou met hoe 'n mens sou redeneer oor wat die PWM -faktor wat die SHTDN -pen van die boost -omskakelaar moet beheer, afhangend van hoe die lidmaatskapfunksie hierbo 'n gegewe stel insette kwalifiseer. As die insetspanning van die paneel byvoorbeeld hoog is, maar die stroom wat in die battery getrek word, laag is, beteken dit waarskynlik dat meer krag getrek kan word en die PWM -instelling nie optimaal is nie en dat dit verhoog moet word. Omgekeerd, as die panelspanning laag word, maar die laaier steeds probeer om 'n groot stroom in die batterykrag te druk, sal dit ook vermors word, dus is dit die beste om die PWM -sein na die hupstootomskakelaar te verminder. Sodra die insetseine in 'n fuzzy stel "gefuseer" is, word dit vermenigvuldig met hierdie waardes, soortgelyk aan die manier waarop 'n vektor met 'n matriks vermenigvuldig word, om 'n getransformeerde stel te genereer wat verteenwoordigend is van hoe swaar die "kennis" sel bevat van die matriks moet in die finale kombinasie funksie ingereken word.

Gebruik die 'nie-geïmplementeerde-in-xod'-knooppunt waarmee XOD-nodusse wat aangepaste funksies te ingewikkeld implementeer, te ingewikkeld is om redelik te wees uit die voorraadblokke, en 'n bietjie C ++ in Arduino-styl, die assosiatiewe geheue, weegfunksie en " fuzzifier "soortgelyk aan die blokke wat in hierdie verwysing beskryf word: https://www.drdobbs.com/cpp/fuzzy-logic-in-c/184408940 is eenvoudig om te maak en baie makliker om mee te eksperimenteer.

Aanbeveel: