Innehållsförteckning:

XOD-driven uppladdningsbar sollampa: 9 steg (med bilder)
XOD-driven uppladdningsbar sollampa: 9 steg (med bilder)

Video: XOD-driven uppladdningsbar sollampa: 9 steg (med bilder)

Video: XOD-driven uppladdningsbar sollampa: 9 steg (med bilder)
Video: Великобритания: забытая корона 2024, November
Anonim
XOD-driven laddningsbar sollampa
XOD-driven laddningsbar sollampa

Det finns billiga solar trädgård/gångväg lampor tillgängliga på de flesta hem varor och järnaffärer. Men som det gamla ordspråket säger får du oftast vad du betalar för. De vanliga laddnings- och belysningskretsarna de använder är enkla och billiga, men ljusutgången du får är allt annat än imponerande (och knappt tillräckligt för alla som använder din gångväg för att se vart de ska!)

Detta är mitt försök att designa en belysningsmodul utan nät som är en betydande förbättring, samtidigt som den är relativt billig att göra. Genom att ge den några "hjärnor". XOD.io är en ny IDE kompatibel med Arduino inbäddade utvecklingsplattform, där du kan "skriva" kod grafiskt. Miljön omvandlar din grafiska skiss till moderna C ++, vilket är anmärkningsvärt effektivt för att generera kompakt kod och genererar en källa som är helt kompatibel med Arduino IDE utan att behöva ytterligare externa beroenden. På så sätt kan även små, billiga mikrokontroller med begränsade program- och datalagringsresurser användas för komplexa uppgifter.

Detta projekt visar hur två Arduino-kompatibla ATTiny85 mikrokontroller som arbetar tillsammans kan användas för att hantera lampans effektbehov. Den första processorn hanterar avkänningsmiljödata från den externa hårdvaran, och den andra försöker få ut mest energi från solen den kan under dagen och sedan styra belysningen av en högeffekts-LED när ett lagringsbatteri laddas ur på natten. Den andra processorn utför sitt jobb via en kompakt implementering av "fuzzy logic" -kontroll. Programvaran för båda chipsen utvecklades uteslutande inom XOD -miljön.

Steg 1: Obligatoriskt material

Arduino IDE, senaste versionen, med tillägget ATTinyCore installerat från "Boards" -hanteraren

Sparkfun USBTinyISP ATTiny programmerare, 11801 eller motsvarande produktsida för Sparkfun

Pololu justerbar lågspännings boost-omvandlare med avstängningsingång, U1V11A eller motsvarande Pololu produktsida

Hög effekt vit eller RGB LED med kylfläns, gemensam anod, Adafruit 2524 eller motsvarande Adafruit produktsida

Microchip ATTiny85 i 8-stifts DIP-paket, 2 Mousers produktsida

8 -stifts DIP IC -uttag, 2

Bulklagringskondensator, 16 v 220 uF

Utgångskondensator, 6.3v 47uF

Strömbegränsande motstånd, 50 ohm 1/4 watt

i2c uppdragningsmotstånd, 4,7k, 2

Panelspänningssensoravdelningsmotstånd, 1/4 watt, 100k, 470k

Strömavkänningsmotstånd, 10 ohm 1⁄2 watt 1% tolerans

Bypass -kondensatorer, 0.1uF keramik, 2

2 3,7 v 100mAh uppladdningsbart litiumjonbatteri, PKCELL LP401 eller motsvarande

Fatkontaktingång för panel, 1

Mini-plintar 3”x3” lödplatta och tunn tunn kärna för anslutningar

Ett oscilloskop, en multimeter och en strömförsörjning för bänkar kommer nästan säkert att krävas för testning

Steg 2: Miljöinställning

Miljöinställning
Miljöinställning

XOD-miljön stöder inte ATTiny-serien av processorer ur lådan, men med hjälp av ett par tredjepartsbibliotek från Arduino-universum är det enkelt att lägga till stöd för denna serie AVR. Det första steget är att installera "ATTinyCore" -biblioteket från Arduino IDE: s "Verktyg → Board → Board Manager" rullgardinsmeny. Se till att inställningarna som visas i den medföljande bilden är korrekta - kom ihåg att du måste trycka på "Burn bootloader" för att ändra inställningarna för brytningsspänning och klockhastighet innan du laddar upp någon kod!

Källkoden för detta bibliotek är tillgänglig på:

Ett annat användbart bibliotek att ha från förvaret är "FixedPoints", som är en sammanställningstid-implementering av fixpunktsmatematik för Arduino-stödda processorer. ATTiny har begränsat SRAM- och programminne, och det hjälper mycket med att krympa den slutliga skissstorleken för att använda ett 2 bytes heltal för allmän datalagring, snarare än en flytande punkttyp, som kräver 4 byte på AVR. Exekveringshastigheten bör också förbättras eftersom ATTiny inte har en hårdvarumultiplikationsenhet, mycket mindre maskinvaruflöde!

Källkoden är tillgänglig på:

Handledningen om hur du skapar, transpilerar och distribuerar XOD -grafiska skisser på: https://github.com/Pharap/FixedPointsArduino hjälper mycket med att förstå hur de medföljande källfilerna skapades.

Steg 3: Designöversikt

Designöversikt
Designöversikt
Designöversikt
Designöversikt

På kortet är två ATTiny85 -processorer anslutna via ett i2c -gränssnitt och används tillsammans för att hantera avkänning av solpanelens spänning, ström som strömmar in i batteriet från boost -omvandlaren medan panelen är belyst, batterispänningen och batteriet temperatur.

Boostomvandlaren är en hyllmodul baserad på en Texas Instruments TPS6120 IC, som kan ta en ingångsspänning så låg som 0,5 volt och öka den till allt från 2 volt till 5 volt. Sensorkärnan består av flera funktionella block. Huvudklockan börjar gå så snart strömmen tillföres boost -omvandlaren från solpanelens ingång. Detta startar skissen, och det första är att avgöra om panelen är tillräckligt upplyst för att ge laddningsström till batteriet.

Solpanelspänningen passeras genom två digitala filter, och om det är över en viss tröskel bestämmer systemet att panelen är upplyst och grindar huvudklockan till strömavkänningsmonitorn. Detta är en analog till digital omvandlarkanal för chipet, konfigurerad differentiellt, som känner av spänningen över ett 10 ohm 1% toleransmotstånd anslutet i serie mellan boost -omvandlarens utgång och batteriingången. När panelen inte är upplyst skickar denna ATTiny en signal till den andra ATTiny som säger att den ska övervaka LED -ström istället för laddning, och stänga av boost -omvandlaren och isolera ingången så att batteriet inte skickar ut ström genom panelen.

Den andra ATTiny -kärnan är där LED -styrenheten och övervakningssystemet för batteriladdning körs. Panelspänning, batterispänning och batteriladdningsströmdata skickas till denna kärna för bearbetning via ett suddigt logiskt nätverk, som försöker generera en lämplig PWM-signal för att tillämpa SHTDN-stiftet, och därigenom styra mängden ström som skickas till batteriet för att ladda den när den är upplyst-en grundläggande form av maximal power-point-spårning (MPPT.) Den tar också emot en signal från sensorkärnan som berättar om den ska slå på eller av lysdioden, beroende på utsignalen från sensorkärnans dag/ natt flip flop.

När lysdioden är aktiv på natten övervakar denna ATTiny batterispänningsdata som skickas till den från sin kompis och sin egen temperatursensor på chip för att få en grov uppskattning av hur mycket ström som trycks in i lysdioden (batterispänningen minskar och chiptemperaturen ökar när strömmen dras ut ur stiften.) Det suddiga logiska nätverket som är associerat med LED PWM-patchen försöker göra en bedömning av hur mycket batterikraft som fortfarande är tillgänglig och minska LED-intensiteten när batteriet är urladdat.

Steg 4: Skapa anpassade patchar från XOD Core Library

Skapa anpassade patchar från XOD Core Library
Skapa anpassade patchar från XOD Core Library
Skapa anpassade patchar från XOD Core Library
Skapa anpassade patchar från XOD Core Library

Flera anpassade patchnoder användes för denna design, varav några enkelt kan konstrueras helt från inkluderade XOD -noder, och några som implementerades i C ++.

Den första av de två anpassade patchnoderna i bilderna en implementering av ett exponentiellt filter för glidande medelvärde. Detta är ett lågt överliggande lågpass digitalt filter som används i serie i skissen, en gång för att filtrera den inkommande solpanelspänningen för logikkärnan, och ännu en gång för att mata utlösaren som bestämmer långsiktig omgivningsbelysning. Se Wikipedia -posten om exponentiell utjämning.

Nodstrukturen i bilden är bara en direkt grafisk framställning av överföringsfunktionen i artikeln, sammankopplad med hjälp av länkar från lämpliga ingångar till utgångar. Det finns en uppskjutningsnod från biblioteket som gör att en återkopplingsslinga kan skapas (XOD varnar dig om du skapar en återkopplingsslinga utan att infoga en fördröjning i slingan, enligt beskrivningen i XOD -körningsmodellen.) Med den detaljen tas hand om patch fungerar bra, det är så enkelt.

Den andra anpassade patchnoden är en variant på lager flip-flop som ingår i XOD, som matas med den filtrerade panelspänningen. Den låser högt eller lågt beroende på om insignalen är över eller under ett visst tröskelvärde. Gjutna noder används för att konvertera booleska utgångsvärden till pulsdatatypen för att utlösa vippan, eftersom tillståndet övergår från låg till hög. Utformningen av denna patchnod bör förhoppningsvis vara något självförklarande från skärmdumpen.

Steg 5: Skapa anpassade patchar med C ++

Skapa anpassade patchar med C ++
Skapa anpassade patchar med C ++

För speciella krav där nodfunktionen skulle vara för komplex för att enkelt kunna avbilda grafiskt, eller som förlitar sig på Arduino-bibliotek som inte är infödda i Arduino-miljön, gör XOD det enkelt för dem med viss C/C ++ -kunskap att skriva bitar av bitar kod som sedan kan integreras i en patch på samma sätt som alla andra användarskapade eller lagernoder. Genom att välja "skapa en ny patch" från filmenyn skapas ett tomt ark att arbeta med, och in- och utgångsnoder kan dras in från kärnbibliotekets "noder" -avsnitt. Därefter kan "inte-implementerad-i-xod" -noden dras in, och när du klickar kommer den att visa en textredigerare där den nödvändiga funktionaliteten kan implementeras i C ++. Här behandlas hur man hanterar det interna tillståndet och får tillgång till in- och utgångsportarna från C ++ - koden.

Som ett exempel på implementering av anpassade patchar i C ++ används ytterligare två anpassade patchar för drivkärnan för att göra en uppskattning av drivkärnans matningsspänning och kärntemperatur. Tillsammans med sitt suddiga nätverk tillåter detta en grov uppskattning av den återstående batteriströmmen som är tillgänglig för att driva lysdioderna när det är mörkt.

Temperatursensorplåstret matas också med utgången från matningsspänningssensorn för att få en bättre uppskattning - avkännande kärntemperatur gör att vi kan få en grov uppskattning av hur mycket effekt som bränns i lysdioderna och kombineras med matningsspänningen när batteriet körs ytterligare en grov uppskattning av hur mycket batterikraft som återstår. Det behöver inte vara superprecist; om kärnan "vet" att lysdioderna drar mycket ström men batterispänningen sjunker snabbt är det förmodligen säkert att säga att batteriet inte kommer att hålla mycket längre och det är dags att stänga av lampan.

Steg 6: Konstruktion

Konstruktion
Konstruktion
Konstruktion
Konstruktion
Konstruktion
Konstruktion

Jag byggde projektet på en liten bit prototypplatta med kopparkuddar för genomgående hål. Att använda uttag för IC: er hjälper mycket för programmering/modifiering/testning; USBTiny ISP från Sparkfun har ett liknande uttag på sitt kort så programmering av de två chipsen består bara av att ansluta programmeraren till en PC USB -port, ladda upp den transponerade XOD -koden från de medföljande Arduino.ino -filerna med lämpliga kort och programmeringsinställningar, och ta sedan försiktigt bort chipsen från programmeringsuttaget och sätt in dem i protoboard -uttagen.

Den Pololu TPS6120 -baserade boost -omvandlarmodulen kommer på ett stigarkort lödt i protoboardet på stifthuvuden, så det är möjligt att spara utrymme genom att montera några komponenter under. På min prototyp satte jag de två 4,7k pullup -motstånden under. Dessa krävs för att i2c -bussen mellan chipsen ska fungera korrekt - kommunikation fungerar inte rätt utan dem! På den högra sidan av kortet finns ingången för solpanelens kontakt och ingångskondensatorn. Det är bäst att försöka ansluta uttaget och locket direkt via "löpningar" av lödning, inte anslutningstråd, för att få en så låg motståndsväg som möjligt. Körningar av fast lod används sedan för att ansluta den positiva terminalen på lagringskondensatorn direkt till ingångsspänningsterminalen på boostmodulen och boostmodulens jordstift direkt till jackens jordstift.

Till höger och vänster om uttagen för de två ATTinysna finns 0.1uF kondensatorer för kondensering/avfasning. Dessa komponenter är också viktiga för att inte lämna ut, och bör anslutas till IC: s ström och jordstift genom en så kort och direkt väg som möjligt. Strömavkänningsmotståndet på 10 ohm är till vänster, detta är anslutet i linje med utmatningen från boost -omvandlaren och varje sida är ansluten till en sensor -kärningångsstift - dessa stift är konfigurerade för att fungera som en differentiell ADC för att indirekt mäta ström i batteriet. Anslutningar mellan IC-stiften för i2c-bussen och till boost-omvandlarens avstängningsstift, etc. kan göras med anslutningskabel på undersidan av protoboardet, mycket tunn solid-core-anslutningstråd fungerar utmärkt för detta. Det gör förändringar enklare och ser också mycket snyggare ut än att springa hoppare mellan hålen på toppen.

LED-modulen jag använde var en trefärgad RGB-enhet, min plan var att ha alla tre lysdioder aktiva för att producera vitt när batteriet var nästan fulladdat och långsamt blekna den blå lysdioden till gul när laddningen var uttömd. Men den här funktionen har ännu inte implementerats. En enda vit lysdiod med ett strömbegränsande motstånd fungerar också.

Steg 7: Testning, del 1

Testning, del 1
Testning, del 1

Efter att ha programmerat båda ATTiny IC: erna med de medföljande skissfilerna via USB -programmeraren från Arduino -miljön hjälper det att testa att de två kärnorna på prototypen fungerar korrekt innan man försöker ladda batteriet från solpanelen. Helst kräver detta ett grundläggande oscillskop, multimeter och strömförsörjning för bänk.

Det första du ska kontrollera är att det inte finns några kortslutningar någonstans på kortet innan du sätter i IC: erna, batteriet och panelen i deras uttag för att undvika eventuella skador! Det enklaste sättet att göra detta är att använda en bänkströmförsörjning som kan begränsa dess utström till ett säkert värde i den situationen. Jag använde min bänkmatning inställd på 3 volt och 100 mA gräns ansluten till solpanelens ingångskontakter till de positiva och negativa strömförsörjningsledningarna. Med inget annat än de passiva komponenterna installerade borde det i princip inte finnas någon strömdragning på strömförsörjningens strömmonitor att tala om. Om det finns ett betydande strömflöde, eller om strömförsörjningen går in i strömbegränsning, har något gått fel och kortet bör kontrolleras för att se till att det inte finns några felkopplade anslutningar eller kondensatorer med omvänd polaritet.

Nästa steg är att se till att boost -omvandlaren fungerar korrekt. Det finns en skruvpotentiometer på kortet, med strömförsörjningen fortfarande ansluten och fyra av omvandlarens stift anslutna på rätt sätt ska potentiometern vridas med en liten skruvmejselspets tills spänningen vid modulens utgång uppgår till cirka 3,8 till 3,9 volt. Detta DC -värde ändras inte under drift, drivkärnan kommer att styra den genomsnittliga utspänningen genom att pulsa modulens avstängningsstift.

Steg 8: Testning, del 2

Testning, del 2
Testning, del 2
Testning, del 2
Testning, del 2

Nästa sak att kontrollera är att i2c communicaton fungerar OK, med kortet som går från bänkströmmen kan sensorns kärna IC installeras. På ett oscilloskop ska det finnas pulssignaler på både stift 5 och stift 7 på det fysiska chipet, denna i2c -drivrutin på chippet försöker skicka data till sin kompis. Efter avstängning kan drivkärnan installeras och anslutningen kontrolleras med ett oscilloskop igen, det borde finnas en större sekvens av pulser som är synliga på båda linjerna. Det betyder att chipsen kommunicerar korrekt.

Det hjälper att ha batteriet något laddat för det sista hela testet. Bänkmatningen kan också användas för att åstadkomma detta, med strömgränsen inställd på cirka 50 mA och spänningen fortfarande på 3,8 volt, vilket gör att LiPo -batteriet är anslutet direkt i några minuter.

Det sista steget är att testa hela systemet - med allt anslutet om panelen är täckt i tio eller 15 sekunder ska lampan tändas via drivkärnans PWM -utgång. Med panelen i starkt solljus bör batteriet laddas från boost -omvandlarens utgång. Det suddiga logiska nätverket kan indirekt inspekteras för att se om det fungerar korrekt genom att titta på PWM -linjen som driver boost -omvandlarens avstängningsstift; eftersom belysningen ökar med batteri med lågt laddningstillstånd bör pulsbredden öka, vilket visar att när mer ström blir tillgänglig från solljus, signalerar förarkärnan att mer ström ska skickas in i batteriet!

Steg 9: Bilaga om Fuzzy Logic

Bilaga om Fuzzy Logic
Bilaga om Fuzzy Logic

Fuzzy logic är en maskininlärningsteknik som kan användas vid kontroll av hårdvarusystem där det finns osäkerhet i många av parametrarna i systemet som styrs, vilket gör en tydlig ingång till utdatakontrolllösning för målet svårt att skriva ner matematiskt. Detta uppnås genom att använda logiska värden som faller någonstans mellan 0 (falskt) och 1 (sant), vilket uttrycker osäkerhet i ett värde som mer liknar en människas sätt ("mestadels sant" eller "inte riktigt sant") och tillåter ett grått område mellan påståenden som är 100% sanna och 100% falska. Sättet detta uppnås är genom att först ta prover av inmatningsvariablerna som ett beslut måste baseras på och "fuzzifiera" dem.

Hjärtat i alla suddiga logiksystem är ett”otydligt associerat minne”. Detta påminner om en matris, där för batteriladdningskretsen en 3x3 uppsättning värden som ligger mellan 0 och 1 lagras. Värdena i matrisen kan grovt associeras med hur en människa skulle resonera om vad PWM -faktorn som styr SHTDN -stiftet i boost -omvandlaren ska vara, beroende på hur medlemsfunktionen ovan kvalificerar en given uppsättning ingångar. Till exempel om panelens ingångsspänning är hög, men strömmen som dras in i batteriet är låg, betyder det förmodligen att mer ström kan dras och PWM -inställningen inte är optimal och bör ökas. Omvänt, om panelspänningen blir låg men laddaren fortfarande försöker pressa in en stor ström i batteriet kommer det också att gå till spillo, så det är bäst att minska PWM -signalen till boost -omvandlaren. När insignalerna "fuzzifieras" till en luddig uppsättning multipliceras de med dessa värden, på samma sätt som en vektor multipliceras med en matris, för att generera en transformerad uppsättning som är representativ för hur tungt "kunskapen" innehöll cellen av matrisen bör räknas in i den slutliga kombinationsfunktionen.

Med hjälp av "inte-implementerad-i-xod" -noden som tillåter XOD-noder som implementerar anpassad funktionalitet som är för komplicerad för att vara rimlig att göra från byggblocken och lite Arduino-stil C ++, det associerade minnet, viktningsfunktionen och " fuzzifier "liknande de block som beskrivs i denna referens: https://www.drdobbs.com/cpp/fuzzy-logic-in-c/184408940 är enkla att göra och mycket lättare att experimentera med.

Rekommenderad: