Inhoudsopgave:

XOD-aangedreven oplaadbare zonnelamp - Ajarnpa
XOD-aangedreven oplaadbare zonnelamp - Ajarnpa

Video: XOD-aangedreven oplaadbare zonnelamp - Ajarnpa

Video: XOD-aangedreven oplaadbare zonnelamp - Ajarnpa
Video: OPLAADBARE ASSAULT RIFLE! - COD: Infinite Warfare 2024, November
Anonim
XOD-aangedreven oplaadbare zonnelamp
XOD-aangedreven oplaadbare zonnelamp

Er zijn goedkope zonne-tuin- / loopbruglampen verkrijgbaar bij de meeste huishoudelijke artikelen en bouwmarkten. Maar zoals het oude gezegde luidt, krijg je meestal waar je voor betaalt. De gebruikelijke oplaad- en verlichtingscircuits die ze gebruiken zijn eenvoudig en goedkoop, maar de lichtopbrengst die je krijgt is allesbehalve indrukwekkend (en nauwelijks genoeg voor iedereen die je loopbrug gebruikt om te zien waar ze naartoe gaan!)

Dit is mijn poging om een off-grid verlichtingsmodule te ontwerpen die een aanzienlijke verbetering is, terwijl het nog steeds relatief goedkoop is om te maken. Door het wat 'hersenen' te geven. XOD.io is een nieuwe IDE die compatibel is met het Arduino embedded ontwikkelingsplatform, waar je grafisch code kunt "schrijven". De omgeving transpileert uw grafische schets naar modern C++, dat opmerkelijk efficiënt is in het genereren van compacte code, en een bron genereert die volledig compatibel is met de standaard Arduino IDE zonder dat er verdere externe afhankelijkheden nodig zijn. Op die manier kunnen zelfs kleine, goedkope microcontrollers met beperkte programma- en gegevensopslagbronnen worden gebruikt om complexe taken op zich te nemen.

Dit project laat zien hoe twee Arduino-compatibele ATTiny85-microcontrollers die samenwerken, kunnen worden gebruikt om de stroomvereisten van de lamp te beheren. De eerste processor verwerkt de omgevingsgegevens van de externe hardware en de tweede probeert overdag zoveel mogelijk energie uit de zon te halen en vervolgens de verlichting van een krachtige LED te regelen wanneer een accu 's nachts ontlaadt. De tweede processor volbrengt zijn werk via een compacte implementatie van "fuzzy logic"-besturing. De software voor beide chips is exclusief ontwikkeld binnen de XOD-omgeving.

Stap 1: Benodigde materialen

Arduino IDE, nieuwste versie, met ATTinyCore-extensie geïnstalleerd vanuit de "Boards" -manager

Sparkfun USBTinyISP ATTiny programmer, 11801 of gelijkwaardige Sparkfun productpagina

Pololu instelbare laagspannings-boost-converter met uitschakelingang, U1V11A of gelijkwaardige Pololu-productpagina

Krachtige witte of RGB-led met koellichaam, gemeenschappelijke anode, Adafruit 2524 of gelijkwaardige Adafruit-productpagina

Microchip ATTiny85 in 8-pins DIP-pakket, 2 Mouser-productpagina's

8-pins DIP IC-aansluitingen, 2

Bulkopslagcondensator, 16 v 220 uF

Uitgangscondensator, 6.3v 47uF

Stroombegrenzende weerstanden, 50 ohm 1/4 watt

i2c pull-up weerstanden, 4.7k, 2

Paneelspanningsdelerweerstanden, 1/4 watt, 100k, 470k

Stroomdetectieweerstand, 10 ohm 1⁄2 watt 1% tolerantie

Bypass condensatoren, 0.1uF keramiek, 2

2 3,7 v 100mAh lithium-ion oplaadbare batterij, PKCELL LP401 of gelijkwaardig

Barrel plug ingang voor paneel, 1

Mini-aansluitblokken 3 "x3" soldeer-pad board en dunne massieve draad voor het maken van verbindingen

Een oscilloscoop, multimeter en bankvoeding zijn vrijwel zeker vereist voor het testen

Stap 2: Omgeving instellen

Omgeving instellen
Omgeving instellen

De XOD-omgeving ondersteunt de ATTiny-reeks processors niet uit de doos, maar met behulp van een paar bibliotheken van derden uit het Arduino-universum is het eenvoudig om ondersteuning voor deze reeks AVR's toe te voegen. De eerste stap is om de "ATTinyCore" -bibliotheek te installeren vanuit het vervolgkeuzemenu "Tools → Board → Board Manager" van de Arduino IDE. Zorg ervoor dat de instellingen zoals weergegeven in de bijgevoegde afbeelding correct zijn - onthoud dat u op "Bootloader branden" moet drukken om de zekeringen van de brownout-spanning en kloksnelheid te wijzigen voordat u een code uploadt!

De broncode voor deze bibliotheek is beschikbaar op:

Een andere nuttige bibliotheek uit de repository is "FixedPoints", een implementatie tijdens het compileren van vaste-punt-wiskunde voor Arduino-ondersteunde processors. De ATTiny heeft een beperkt SRAM- en programmageheugen, en het helpt enorm bij het verkleinen van de uiteindelijke schetsomvang om een geheel getal van 2 bytes te gebruiken voor algemene gegevensopslag, in plaats van een type met drijvende komma, waarvoor 4 bytes op de AVR nodig zijn. De uitvoeringssnelheid moet ook worden verbeterd omdat de ATTiny geen hardware-vermenigvuldigingseenheid heeft, laat staan hardware drijvende komma!

Broncode is beschikbaar op:

De tutorial over het maken, transpileren en implementeren van XOD grafische schetsen op: https://github.com/Pharap/FixedPointsArduino zal veel helpen om te begrijpen hoe de meegeleverde bronbestanden zijn gemaakt.

Stap 3: Ontwerpoverzicht

Ontwerpoverzicht
Ontwerpoverzicht
Ontwerpoverzicht
Ontwerpoverzicht

Op het bord zijn twee ATTiny85-processors verbonden via een i2c-interface, en worden gebruikt om samen te werken om de spanning van het zonnepaneel te detecteren, de stroom die vanuit de boost-converter in de batterij vloeit terwijl het paneel verlicht is, de batterijspanning en de batterij temperatuur.

De boost-converter is een kant-en-klare module op basis van een Texas Instruments TPS6120 IC, die een ingangsspanning van slechts 0,5 volt kan nemen en deze kan verhogen van 2 volt tot 5 volt. De sensorkern bestaat uit meerdere functionele blokken. De hoofdklok begint te lopen zodra de boost-converter van stroom wordt voorzien vanaf de ingang van het zonnepaneel. Dit start de uitvoering van de schets en het eerste ding is om te bepalen of het paneel voldoende verlicht is om de batterij van laadstroom te voorzien.

De spanning van het zonnepaneel wordt door twee digitale filters geleid, en als het boven een bepaalde drempel komt, bepaalt het systeem dat het paneel verlicht is en stuurt het de hoofdklok naar de stroomgevoelige monitor. Dit is een analoog naar digitaal converterkanaal van de chip, differentieel geconfigureerd, dat de spanning detecteert over een 10 ohm 1% tolerantieweerstand die in serie is geschakeld tussen de uitgang van de boost-converter en de batterij-ingang. Wanneer het paneel niet verlicht is, stuurt deze ATTiny een signaal naar de tweede ATTiny om te zeggen dat het de LED-stroom moet controleren in plaats van het laadvermogen, en de boost-converter moet uitschakelen en de ingang isoleren zodat de batterij geen stroom terugstuurt via het paneel.

De tweede ATTiny-kern is waar de LED-controller en het batterijcontrolesysteem worden uitgevoerd. Paneelspanning, batterijspanning en batterijlaadstroomgegevens worden naar deze kern verzonden voor verwerking via een fuzzy-logic-netwerk, dat probeert een geschikt PWM-signaal te genereren dat op de SHTDN-pin wordt toegepast, waardoor de hoeveelheid stroom die naar de batterij wordt gestuurd wordt geregeld om het op te laden wanneer het verlicht is - een basisvorm van maximale power-point tracking (MPPT.) Het ontvangt ook een signaal van de sensorkern die aangeeft of het de LED moet in- of uitschakelen, afhankelijk van de output van de dag / nachtelijke flip-flop.

Wanneer de LED 's nachts actief is, bewaakt deze ATTiny de batterijspanningsgegevens die naar hem worden verzonden door zijn buddy, en zijn eigen on-chip temperatuursensor, om een ruwe schatting te krijgen van hoeveel stroom er in de LED wordt geduwd (de batterijspanning neemt af en de temperatuur van de chip neemt toe met de stroom die uit de pinnen wordt getrokken.) Het fuzzy-logic-netwerk dat is gekoppeld aan de LED PWM-patch probeert een oordeel te vellen over hoeveel batterijvermogen er nog beschikbaar is en de LED-intensiteit te verminderen naarmate de batterij leeg raakt.

Stap 4: Aangepaste patches maken vanuit de XOD-kernbibliotheek

Aangepaste patches maken vanuit de XOD-kernbibliotheek
Aangepaste patches maken vanuit de XOD-kernbibliotheek
Aangepaste patches maken vanuit de XOD-kernbibliotheek
Aangepaste patches maken vanuit de XOD-kernbibliotheek

Voor dit ontwerp zijn verschillende aangepaste patch-knooppunten gebruikt, waarvan sommige eenvoudig volledig kunnen worden opgebouwd uit de meegeleverde XOD-knooppunten en sommige zijn geïmplementeerd in C++.

De eerste van de twee aangepaste patch-knooppunten op de foto's is een implementatie van een exponentieel bewegend gemiddelde filter. Dit is een low-overhead laagdoorlaat digitaal filter dat in serie in de schets wordt gebruikt, eenmaal om de binnenkomende zonnepaneelspanning voor de logische kern te filteren en nogmaals om de trigger te voeden die de omgevingsverlichting op lange termijn bepaalt. Zie het Wikipedia-artikel over exponentiële afvlakking.

De knooppuntstructuur in de afbeelding is slechts een directe grafische weergave van de overdrachtsfunctie in het artikel, met elkaar verbonden via links van de juiste ingangen naar uitgangen. Er is een uitstelknooppunt uit de bibliotheek waarmee een feedbacklus kan worden gemaakt (XOD waarschuwt u als u een feedbacklus maakt zonder een vertraging in de lus in te voegen, zoals beschreven in het XOD-uitvoeringsmodel). patch werkt goed, zo simpel is het.

Het tweede aangepaste patchknooppunt is een variatie op de standaardflip-flop die bij XOD wordt geleverd, die wordt gevoed met de gefilterde paneelspanning. Het wordt hoog of laag vergrendeld, afhankelijk van of het ingangssignaal boven of onder een bepaalde drempel ligt. Cast-knooppunten worden gebruikt om Booleaanse uitvoerwaarden om te zetten naar het pulsgegevenstype om de flip-flop te activeren, terwijl de toestand overgaat van laag naar hoog. Het ontwerp van dit patchknooppunt zou hopelijk enigszins duidelijk moeten zijn uit de schermafbeelding.

Stap 5: Aangepaste patches maken met C++

Aangepaste patches maken met C++
Aangepaste patches maken met C++

Voor speciale vereisten waarbij de benodigde node-functionaliteit te complex zou zijn om gemakkelijk grafisch weer te geven, of die afhankelijk zijn van Arduino-bibliotheken die niet in de standaard Arduino-omgeving voorkomen, maakt XOD het gemakkelijk voor mensen met enige C/C++-kennis om hapklare brokken te schrijven van code die vervolgens op dezelfde manier in een patch kan worden geïntegreerd als elk ander door de gebruiker gemaakt of standaardknooppunt. Door "een nieuwe patch maken" in het bestandsmenu te selecteren, wordt een leeg blad gemaakt om mee te werken, en invoer- en uitvoerknooppunten kunnen worden gesleept vanuit de sectie "knooppunten" van de kernbibliotheek. Vervolgens kan het "niet-geïmplementeerde-in-xod" knooppunt naar binnen worden gesleept, en wanneer erop wordt geklikt, verschijnt een teksteditor waarin de vereiste functionaliteit in C++ kan worden geïmplementeerd. Hoe u met de interne status omgaat en toegang krijgt tot de invoer- en uitvoerpoorten van C++-code, wordt hier behandeld.

Als voorbeeld van het implementeren van aangepaste patches in C++, worden nog twee aangepaste patches voor de drivercore gebruikt om een schatting te maken van de voedingsspanning en de kerntemperatuur van de drivercore. Samen met het fuzzy-netwerk maakt dit een ruwe schatting mogelijk van het resterende batterijvermogen dat beschikbaar is om de LED's van stroom te voorzien als het donker is.

De temperatuursensorpatch wordt ook gevoed met de uitgang van de voedingsspanningssensor om een betere schatting te krijgen - door de kerntemperatuur te meten, kunnen we een ruwe schatting krijgen van hoeveel stroom er in de LED's wordt verbrand, en gecombineerd met de voedingsspanningsmeting wanneer als de batterij leeg raakt, een verdere ruwe schatting van hoeveel batterijvermogen er nog over is. Het hoeft niet supernauwkeurig te zijn; als de kern "weet" dat de LED's veel stroom trekken, maar de batterijspanning snel daalt, is het waarschijnlijk veilig om te zeggen dat de batterij niet veel langer meegaat en dat het tijd is om de lamp uit te schakelen.

Stap 6: constructie

Bouw
Bouw
Bouw
Bouw
Bouw
Bouw

Ik bouwde het project op een klein stukje prototyping-bord met koperen pads voor doorlopende delen. Het gebruik van sockets voor de IC's helpt veel bij het programmeren/modificeren/testen; de USBTiny ISP van Sparkfun heeft een vergelijkbare socket op zijn bord, dus het programmeren van de twee chips bestaat gewoon uit het aansluiten van de programmer op een USB-poort van een pc, het uploaden van de getranspileerde XOD-code uit de meegeleverde Arduino.ino-bestanden met de juiste bord- en programmerinstellingen, en verwijder vervolgens voorzichtig de chips uit de programmer-socket en steek ze in de protoboard-sockets.

De op Pololu TPS6120 gebaseerde boost-convertermodule wordt geleverd op een riserboard dat op pin-headers in het protoboard is gesoldeerd, dus het is mogelijk om ruimte te besparen door enkele componenten eronder te monteren. Op mijn prototype heb ik de twee 4.7k pullup-weerstanden eronder geplaatst. Deze zijn nodig om de i2c-bus tussen de chips correct te laten werken - zonder hen werkt de communicatie niet goed! Aan de rechterkant van het bord bevindt zich de ingang voor de stekker van het zonnepaneel en de ingangsopslagcondensator. Het is het beste om te proberen de jack en deze dop rechtstreeks met elkaar te verbinden via "runs" soldeer, niet aansluitdraad, om een pad met een zo laag mogelijke weerstand te krijgen. Er worden dan vaste soldeerpunten gebruikt om de positieve pool van de opslagcondensator rechtstreeks aan te sluiten op de ingangsspanningsterminal van de boost-module, en de aardingspin van de boost-module rechtstreeks op de aardingspin van de jack.

Rechts en links van de aansluitingen voor de twee ATTinys bevinden zich 0.1uF despike/deglitching condensatoren. Deze componenten zijn ook belangrijk om niet weg te laten en moeten via een zo kort en direct mogelijk pad worden aangesloten op de voedings- en aardingspinnen van de IC's. De stroomdetectieweerstand van 10 ohm bevindt zich aan de linkerkant, deze is verbonden in lijn met de uitgang van de boost-converter en elke kant is verbonden met een sensorkerningangspin - deze pinnen zijn ingesteld om te werken als een differentiële ADC om indirect de stroom in de batterij. Verbindingen tussen IC-pinnen voor de i2c-bus en naar de uitschakelpin van de boost-converter, enz. kunnen worden gemaakt met behulp van aansluitdraad aan de onderkant van het protoboard, een zeer dunne solid-core aansluitdraad werkt hier uitstekend voor. Het maakt het wisselen makkelijker en ziet er ook een stuk netter uit dan het lopen van jumpers tussen de gaten aan de bovenkant.

De LED-module die ik gebruikte was een driekleurige RGB-eenheid, mijn plan was om alle drie de LED's actief te hebben om wit te produceren wanneer de batterij bijna volledig was opgeladen, en de blauwe LED langzaam geel te laten worden naarmate de lading op was. Maar deze functie moet nog worden geïmplementeerd. Een enkele witte LED met één stroombegrenzende weerstand zal ook goed werken.

Stap 7: testen, deel 1

Testen, deel 1
Testen, deel 1

Na het programmeren van beide ATTiny IC's met de meegeleverde schetsbestanden via de USB-programmer uit de Arduino-omgeving, helpt het om te testen of de twee kernen op het prototype goed werken voordat wordt geprobeerd de batterij van het zonnepaneel op te laden. In het ideale geval vereist dit een basis oscilloscoop, multimeter en bankvoeding.

Het eerste dat u moet controleren, is dat er nergens kortsluiting op het bord is voordat u de IC's, de batterij en het paneel in hun stopcontacten steekt om mogelijke schade te voorkomen! De eenvoudigste manier om dit te doen, is door een bankvoeding te gebruiken die in dat geval de uitgangsstroom kan beperken tot een veilige waarde. Ik gebruikte mijn bankvoeding die is ingesteld op 3 volt en een limiet van 100 mA die is aangesloten op de ingangsaansluitingen van het zonnepaneel op de positieve en negatieve voedingskabels. Met niets anders dan de passieve componenten geïnstalleerd, zou er in wezen geen stroomverbruik moeten zijn geregistreerd op de huidige monitor van de voeding om van te spreken. Als er een aanzienlijke stroom vloeit, of als de voeding in stroombegrenzing gaat, is er iets misgegaan en moet het bord worden gecontroleerd om er zeker van te zijn dat er geen verkeerd bekabelde verbindingen of condensatoren met omgekeerde polariteit zijn.

De volgende stap is om ervoor te zorgen dat de boost-converter correct werkt. Er zit een schroefpotentiometer op het bord, met de voeding nog steeds aangesloten en vier van de pinnen van de converter op de juiste manier aangesloten, moet de potentiometer worden gedraaid met een kleine schroevendraaierpunt totdat de spanning op de uitgangsklem van de module ongeveer 3,8 tot 3,9 volt is. Deze DC-waarde verandert niet tijdens bedrijf, de driverkern regelt de gemiddelde uitgangsspanning door de uitschakelpin van de module te pulseren.

Stap 8: testen, deel 2

Testen, deel 2
Testen, deel 2
Testen, deel 2
Testen, deel 2

Het volgende dat u moet controleren, is dat i2c-communicatie goed werkt, met het bord dat van de bankstroom afgaat, kan de sensorkern-IC worden geïnstalleerd. Op een oscilloscoop moeten er pulserende signalen zijn op zowel pin 5 als pin 7 van de fysieke chip, deze i2c-driver op de chip probeert gegevens naar zijn buddy te sturen. Na het uitschakelen kan de driver core worden geïnstalleerd en de verbinding opnieuw worden gecontroleerd met een oscilloscoop, er moet een grotere reeks pulsen zichtbaar zijn op beide lijnen. Dit betekent dat de chips correct communiceren.

Het helpt om de batterij een beetje opgeladen te hebben voor de laatste volledige test. De bankvoeding kan ook worden gebruikt om dit te bereiken, met de stroomlimiet ingesteld op ongeveer 50 mA en de spanning nog steeds op 3,8 volt, waardoor de LiPo-batterij een paar minuten rechtstreeks aangesloten blijft.

De laatste stap is het testen van het volledige systeem - met alles aangesloten als het paneel tien of 15 seconden bedekt is, zou het licht moeten gaan branden en worden aangestuurd via de PWM-uitgang van de drivercore. Als het paneel in fel zonlicht staat, moet de batterij worden opgeladen via de uitgang van de boost-converter. Het fuzzy logic-netwerk kan indirect worden geïnspecteerd om te zien of het correct werkt door te kijken naar de PWM-lijn die de uitschakelpin van de boost-converter aanstuurt; naarmate de verlichting toeneemt met een batterij met een lage laadstatus, zou de pulsbreedte moeten toenemen, wat aantoont dat naarmate er meer stroom beschikbaar komt uit zonlicht, de aandrijfkern aangeeft dat er meer stroom naar de batterij moet worden gestuurd!

Stap 9: Bijlage over Fuzzy Logic

Bijlage over Fuzzy Logic
Bijlage over Fuzzy Logic

Fuzzy logic is een machine learning-techniek die kan worden gebruikt bij de besturing van hardwaresystemen waarbij er onzekerheid is in veel van de parameters van het systeem dat wordt bestuurd, waardoor een expliciete invoer naar de uitvoerbesturingsoplossing voor het doel moeilijk wiskundig op te schrijven is. Dit wordt bereikt door logische waarden te gebruiken die ergens tussen 0 (false) en 1 (true) vallen, onzekerheid uitdrukken in een waarde die meer lijkt op de manier waarop een mens zou doen (“meestal waar” of “niet echt waar”) en een grijs gebied toestaan tussen uitspraken die 100% waar zijn en 100% onwaar. De manier waarop dit wordt bereikt, is door eerst steekproeven te nemen van de invoervariabelen waarop een beslissing moet worden gebaseerd en deze te "fuzzificeren".

Het hart van elk fuzzy logic-systeem is een 'fuzzy associatief geheugen'. Dit doet denken aan een matrix, waar in het geval van het batterijlaadcircuit een 3x3 set waarden tussen 0 en 1 is opgeslagen. De waarden in de matrix kunnen ruwweg worden geassocieerd met hoe een mens zou redeneren over wat de PWM-factor die de SHTDN-pin van de boost-converter bestuurt zou moeten zijn, afhankelijk van hoe de lidmaatschapsfunctie hierboven een bepaalde set ingangen kwalificeert. Als de ingangsspanning van het paneel bijvoorbeeld hoog is, maar de stroom die naar de batterij wordt getrokken laag, betekent dit waarschijnlijk dat er meer stroom kan worden afgenomen en dat de PWM-instelling niet optimaal is en moet worden verhoogd. Omgekeerd, als de paneelspanning laag wordt, maar de lader nog steeds probeert een grote stroom in de batterij te duwen, wordt ook de stroom verspild, dus het is het beste om het PWM-signaal naar de boost-converter te verlagen. Zodra de ingangssignalen zijn "vervaagd" tot een vage set, worden ze vermenigvuldigd met deze waarden, vergelijkbaar met de manier waarop een vector wordt vermenigvuldigd met een matrix, om een getransformeerde set te genereren die representatief is voor hoe zwaar de "kennis" cel bevatte. van de matrix moet worden meegenomen in de uiteindelijke combinatiefunctie.

Met behulp van het "niet-geïmplementeerde-in-xod" knooppunt waarmee XOD-knooppunten die aangepaste functionaliteit implementeren die te ingewikkeld is om redelijk te zijn om te maken van de standaardbouwstenen, en een beetje Arduino-stijl C++, het associatieve geheugen, de weegfunctie en " fuzzifier" vergelijkbaar met de blokken die in deze referentie worden beschreven: https://www.drdobbs.com/cpp/fuzzy-logic-in-c/184408940 zijn eenvoudig te maken en veel gemakkelijker om mee te experimenteren.

Aanbevolen: