Innholdsfortegnelse:

XOD-drevet oppladbar sollampe: 9 trinn (med bilder)
XOD-drevet oppladbar sollampe: 9 trinn (med bilder)

Video: XOD-drevet oppladbar sollampe: 9 trinn (med bilder)

Video: XOD-drevet oppladbar sollampe: 9 trinn (med bilder)
Video: Benzin Rasenmäher kaufen 2023 ☀️ Die 7 besten Benzinrasenmäher im Vergleich 2024, Desember
Anonim
XOD-drevet oppladbar sollampe
XOD-drevet oppladbar sollampe

Det er rimelige hage-/gangvei -lamper tilgjengelig på de fleste hjemmevarer og maskinvarebutikker. Men som det gamle ordtaket sier, får du vanligvis det du betaler for. De vanlige lade- og belysningskretsene de bruker er enkle og billige, men lysstyrken du får er alt annet enn imponerende (og knapt nok til at alle som bruker gangveien din kan se hvor de skal!)

Dette er mitt forsøk på å designe en belysningsmodul uten nett som er en betydelig forbedring, samtidig som den er relativt billig å lage. Ved å gi den noen "hjerner". XOD.io er en ny IDE kompatibel med Arduino innebygde utviklingsplattform, der du kan "skrive" kode grafisk. Miljøet transpilerer den grafiske skissen din til moderne C ++, som er bemerkelsesverdig effektiv til å generere kompakt kode, og genererer kilde som er fullt kompatibel med Arduino IDE uten å kreve ytterligere eksterne avhengigheter. På den måten kan selv små, rimelige mikrokontrollere med begrensede program- og datalagringsressurser brukes til å påta seg komplekse oppgaver.

Dette prosjektet viser hvordan to Arduino-kompatible ATTiny85 mikrokontrollere som arbeider sammen kan brukes til å håndtere strømkravene til lampen. Den første prosessoren håndterer sensing av miljødata fra den eksterne maskinvaren, og den andre prøver å høste mest mulig energi fra solen den kan i løpet av dagen, og deretter kontrollere belysningen av en LED med høy effekt når et lagringsbatteri lades ut om natten. Den andre prosessoren utfører jobben sin via en kompakt implementering av "fuzzy logic" -kontroll. Programvaren for begge brikkene ble utviklet utelukkende i XOD -miljøet.

Trinn 1: Nødvendig materiale

Arduino IDE, siste versjon, med ATTinyCore -utvidelse installert fra "Boards" -lederen

Sparkfun USBTinyISP ATTiny programmerer, 11801 eller tilsvarende Sparkfun produktside

Pololu justerbar lavspennings boost-omformer med nedstengningsinngang, U1V11A eller tilsvarende Pololu produktside

Høy effekt hvit eller RGB LED med kjøleribbe, felles anode, Adafruit 2524 eller tilsvarende Adafruit produktside

Microchip ATTiny85 i 8-pinners DIP-pakke, 2 Mousers produktside

8 -pinners DIP IC -kontakter, 2

Masselagringskondensator, 16 v 220 uF

Utgangskondensator, 6.3v 47uF

Strømbegrensende motstander, 50 ohm 1/4 watt

i2c pull-up motstander, 4.7k, 2

Panelspenningssensivdeler motstander, 1/4 watt, 100k, 470k

Strømfølsom motstand, 10 ohm 1⁄2 watt 1% toleranse

Bypass -kondensatorer, 0.1uF keramikk, 2

2 3,7 v 100mAh litium-ion oppladbart batteri, PKCELL LP401 eller tilsvarende

Tønne plugg inngangskontakt for panel, 1

Mini-rekkeklemmer 3”x3” loddeplate og tynn, solid kjernetråd for tilkobling

Et oscilloskop, multimeter og benk strømforsyning vil nesten helt sikkert være nødvendig for testing

Trinn 2: Miljøoppsett

Miljøoppsett
Miljøoppsett

XOD-miljøet støtter ikke ATTiny-serien av prosessorer ut av esken, men ved å bruke et par tredjepartsbiblioteker fra Arduino-universet er det greit å legge til støtte for denne serien AVR-er. Det første trinnet er å installere "ATTinyCore" -biblioteket fra Arduino IDEs "Tools → Board → Board Manager" rullegardinmeny. Sørg for at innstillingene som vist i det medfølgende bildet er riktige - husk at du må trykke på "Burn bootloader" for å endre sikringene for bruningsspenning og klokkehastighet før du laster opp noen kode!

Kildekoden for dette biblioteket er tilgjengelig på:

Et annet nyttig bibliotek å ha fra depotet er "FixedPoints", som er en kompileringstid-implementering av fastpunktmatematikk for Arduino-støttede prosessorer. ATTiny har begrenset SRAM og programminne, og det hjelper mye med å krympe den endelige skissestørrelsen for å bruke et 2 byte heltall for generell datalagring, i stedet for en flytende punkttype, som krever 4 byte på AVR. Utførelseshastigheten bør også forbedres ettersom ATTiny ikke har en maskinvaremultiplikasjonsenhet, mye mindre maskinvareflytpunkt!

Kildekoden er tilgjengelig på:

Opplæringen om hvordan du lager, transpilerer og distribuerer XOD grafiske skisser på: https://github.com/Pharap/FixedPointsArduino vil hjelpe mye med å forstå hvordan de inkluderte kildefilene ble opprettet.

Trinn 3: Designoversikt

Designoversikt
Designoversikt
Designoversikt
Designoversikt

På brettet er to ATTiny85 -prosessorer koblet til via et i2c -grensesnitt, og brukes sammen for å kontrollere spenningen til solcellepanelet, strømmen som strømmer inn i batteriet fra boost -omformeren mens panelet er opplyst, batterispenningen og batteriet temperatur.

Boost-omformeren er en hylle-modul basert på en Texas Instruments TPS6120 IC, som kan ta en inngangsspenning så lav som 0,5 volt og øke den til alt fra 2 volt til 5 volt. Sensorkjernen består av flere funksjonelle blokker. Hovedklokken starter å løpe så snart strøm tilføres boost -omformeren fra solcellepanelinngang. Dette starter skissen, og det første er å avgjøre om panelet er opplyst nok til å gi ladestrøm til batteriet.

Solpanelets spenning passeres gjennom to digitale filtre, og hvis det er over en viss terskel, bestemmer systemet at panelet er opplyst og porter hovedklokken inn i strømføleren. Dette er en analog til digital omformerskanal for brikken, konfigurert differensielt, som registrerer spenningen over en 10 ohm 1% toleransemotstand koblet i serie mellom boost -omformerens utgang og batteriinngangen. Når panelet ikke er opplyst, sender denne ATTiny et signal til den andre ATTiny som forteller at den skal overvåke LED -strøm i stedet for ladestrøm, og slå av boost -omformeren og isolere inngangen slik at batteriet ikke sender strøm ut igjen gjennom panelet.

Den andre ATTiny -kjernen er der LED -kontrolleren og batteriladingsovervåkingssystemet utføres. Panelspenning, batterispenning og batteriladestrømdata sendes til denne kjernen for behandling gjennom et fuzzy-logisk nettverk, som prøver å generere et passende PWM-signal for å gjelde SHTDN-pinnen, og dermed kontrollere mengden strøm som sendes til batteriet å lade den når den er opplyst-en grunnleggende form for maksimal power-point-sporing (MPPT.) Den mottar også et signal fra sensorkjernen som forteller den om den skal slå LED-en på eller av, avhengig av utgangen på sensorkjernen/ flip -flop om natten.

Når LED-en er aktiv om natten, overvåker denne ATTiny batterispenningsdataene som sendes til den fra kameraten og sin egen temperatursensor på brikken, for å få et grovt estimat på hvor mye strøm som skyves inn i LED-en (batterispenningen synker og chip-temperaturen øker med strømmen trukket ut av pinnene.) Fuzzy-logic-nettverket som er forbundet med LED PWM-lappen, prøver å vurdere hvor mye batteristrøm som fremdeles er tilgjengelig, og redusere LED-intensiteten etter hvert som batteriet er utladet.

Trinn 4: Opprette tilpassede oppdateringer fra XOD Core Library

Opprette tilpassede oppdateringer fra XOD Core Library
Opprette tilpassede oppdateringer fra XOD Core Library
Opprette tilpassede oppdateringer fra XOD Core Library
Opprette tilpassede oppdateringer fra XOD Core Library

Flere tilpassede patchnoder ble brukt til dette designet, hvorav noen enkelt kan konstrueres helt fra inkluderte XOD -noder, og noen som ble implementert i C ++.

Den første av de to tilpassede oppdateringsnodene på bildene en implementering av et eksponentielt glidende gjennomsnittsfilter. Dette er et lavoverliggende lavpass digitalt filter som brukes i serie i skissen, en gang for å filtrere den innkommende solcellepanelspenningen for den logiske kjernen, og nok en gang for å mate utløseren som bestemmer langsiktig omgivelsesbelysning. Se Wikipedia -oppføringen om eksponentiell utjevning.

Nodestrukturen i bildet er bare en direkte grafisk fremstilling av overføringsfunksjonen i artikkelen, koblet sammen ved hjelp av koblinger fra de riktige inngangene til utgangene. Det er en utsettelsesnode fra biblioteket som gjør at en tilbakemeldingssløyfe kan opprettes (XOD vil advare deg hvis du oppretter en tilbakemeldingssløyfe uten å sette inn en forsinkelse i løkken, som beskrevet i XOD -utførelsesmodellen.) Med den detaljen tatt vare på oppdateringen fungerer bra, det er enkelt.

Den andre tilpassede oppdateringsnoden er en variant av aksjeflikken som følger med XOD, som mates med den filtrerte panelspenningen. Det låses høyt eller lavt avhengig av om inngangssignalet er over eller under en viss terskel. Cast -noder brukes til å konvertere boolske utgangsverdier til pulsdatatypen for å utløse flip -floppen, ettersom staten går over fra lav til høy. Utformingen av denne oppdateringsnoden skal forhåpentligvis være noe selvforklarende fra skjermbildet.

Trinn 5: Opprette tilpassede oppdateringer ved hjelp av C ++

Opprette tilpassede oppdateringer ved hjelp av C ++
Opprette tilpassede oppdateringer ved hjelp av C ++

For spesielle krav der nodefunksjonaliteten som trengs ville være for kompleks til lett å skildre grafisk, eller som er avhengige av Arduino-biblioteker som ikke er hjemmehørende i Arduino-miljøet, gjør XOD det enkelt for de med litt C/C ++ kunnskap å skrive biter i størrelse kode som deretter kan integreres i en oppdatering på samme måte som alle andre brukeropprettede eller lagernoder. Ved å velge "opprett en ny oppdatering" fra filmenyen, opprettes et tomt ark å jobbe med, og input- og output -noder kan dras inn fra kjernebibliotekets "noder" -del. Deretter kan "ikke-implementert-i-xod" -noden dras inn, og når den klikkes, vil den få frem et tekstredigeringsprogram hvor den nødvendige funksjonaliteten kan implementeres i C ++. Her behandles hvordan du håndterer intern tilstand og får tilgang til inngangs- og utgangsportene fra C ++ - koden.

Som et eksempel på implementering av tilpassede oppdateringer i C ++, brukes ytterligere to tilpassede oppdateringer for driverkjernen for å sette et estimat av driverkjernens forsyningsspenning og kjernetemperatur. Sammen med det uklare nettverket tillater dette et grovt estimat av den gjenværende batteristrømmen som er tilgjengelig for å drive lysdiodene når det er mørkt.

Temperatursensorplasteret mates også med utgangen fra forsyningsspenningssensoren for å oppnå et bedre estimat - kjennetemperaturen gjør at vi kan få et grovt estimat av hvor mye strøm som brennes i lysdiodene, og kombinert med forsyningsspenning når Hvis batteriet går tapt, er det et grovt estimat av hvor mye batteristrøm som gjenstår. Det trenger ikke å være supernøyaktig; Hvis kjernen "vet" at lysdiodene trekker mye strøm, men batterispenningen faller raskt, er det sannsynligvis trygt å si at batteristrømmen ikke kommer til å vare veldig lenge, og det er på tide å slå av lampen.

Trinn 6: Konstruksjon

Konstruksjon
Konstruksjon
Konstruksjon
Konstruksjon
Konstruksjon
Konstruksjon

Jeg bygde prosjektet på et lite stykke prototypebrett med kobberputer for gjennomgående hull. Å bruke stikkontakter for IC -ene hjelper mye på programmering/modifisering/testing; USBTiny ISP fra Sparkfun har en lignende kontakt på brettet, så programmering av de to brikkene består bare i å koble programmereren til en PC -USB -port, laste opp den transponerte XOD -koden fra de medfølgende Arduino.ino -filene med de riktige kort- og programmeringsinnstillingene, og fjern deretter brikkene forsiktig fra programmeringsstikkontakten og sett dem inn i protoboardkontaktene.

Den Pololu TPS6120 -baserte boost -omformermodulen kommer på et stigerørskort loddet inn i protoboardet på pinhoder, så det er mulig å spare plass ved å montere noen komponenter under. På prototypen min la jeg de to 4,7k pullup -motstandene under. Disse kreves for at i2c -bussen mellom brikkene skal fungere korrekt - kommunikasjon fungerer ikke som den skal uten dem! På høyre side av brettet er inngangskontakten for solcellepanelets plugg og inngangslagerkondensatoren. Det er best å prøve å koble kontakten og denne hetten direkte sammen via "løp" av loddetinn, ikke tilkoblingstråd, for å få en så lav motstandsvei som mulig. Kjøringer av solid loddetinn brukes deretter til å koble den positive terminalen til lagringskondensatoren direkte til inngangsspenningsterminalen til boostmodulen, og boostmodulens jordpinne direkte til jackens jordpinne.

Til høyre og venstre for kontaktene for de to ATTinys er 0.1uF despike/deglitching kondensatorer. Disse komponentene er også viktige for ikke å utelate, og bør kobles til ICs strøm og jordpinner gjennom en så kort og direkte vei som mulig. 10 ohm strømfølelsesmotstanden er til venstre, denne er koblet i tråd med utgangen fra boost -omformeren og hver side er koblet til en sensorkjerneinngangsstift - disse pinnene er satt opp til å fungere som en differensial ADC for å indirekte måle strøm inn i batteriet. Tilkoblinger mellom IC-pinner for i2c-bussen og til boost-omformerens avstengningspinne, etc. kan gjøres ved hjelp av tilkoblingstråd på undersiden av protoboardet, veldig tynn solid-core-tilkoblingstråd fungerer utmerket for dette. Det gjør endringer enklere og ser også mye ryddigere ut enn å løpe hoppere mellom hullene på toppen.

LED-modulen jeg brukte var en trefarget RGB-enhet, planen min var å ha alle tre lysdiodene aktive for å produsere hvitt når batteriet var nesten fulladet, og langsomt blekne den blå LED-en til gul når ladningen var oppbrukt. Men denne funksjonen er ennå ikke implementert. En enkelt hvit LED med en strømbegrensende motstand vil også fungere OK.

Trinn 7: Testing, del 1

Testing, del 1
Testing, del 1

Etter å ha programmert begge ATTiny IC -er med de medfølgende skissefilene via USB -programmereren fra Arduino -miljøet, hjelper det å teste at de to kjernene på prototypen fungerer som de skal før du prøver å lade batteriet fra solcellepanelet. Ideelt sett krever dette et grunnleggende oscillskop, multimeter og benk strømforsyning.

Det første du må sjekke er at det ikke er noen kortslutninger noe sted på brettet før du setter inn IC -er, batteri og panel i stikkontaktene for å unngå mulig skade! Den enkleste måten å gjøre dette på er å bruke en benkstrømforsyning som kan begrense utgangsstrømmen til en sikker verdi i en slik situasjon. Jeg brukte min benkforsyning satt til 3 volt og 100 mA grense koblet til solcellepanelets inngangskontakter til de positive og negative strømforsyningsledningene. Med ingenting annet enn de passive komponentene installert, bør det i hovedsak ikke være registrert strømtrekk på strømforsyningens strømmonitor å snakke om. Hvis det er betydelig strømstrøm, eller forsyningen går i strømbegrensning, har noe gått galt, og kortet bør sjekkes for å sikre at det ikke er noen feilkoblede tilkoblinger eller kondensatorer med omvendt polaritet.

Det neste trinnet er å sikre at boost -omformeren fungerer som den skal. Det er et skruepotensiometer på brettet, med strømforsyningen fremdeles tilkoblet og fire av omformerens pinner riktig tilkoblet, bør potensiometeret dreies med en liten skrutrekkerspiss til spenningen ved utgangsterminalen på modulen viser rundt 3,8 til 3,9 volt. Denne likestillingsverdien vil ikke endres under drift, driverkjernen vil kontrollere gjennomsnittlig utgangsspenning ved å pulsere modulens avstengningspinne.

Trinn 8: Testing, del 2

Testing, del 2
Testing, del 2
Testing, del 2
Testing, del 2

Neste ting å sjekke er at i2c communicaton fungerer OK, med kortet som går fra benkestrøm, kan sensorens kjerne IC installeres. På et oscilloskop bør det være pulserende signaler på både pinne 5 og pinne 7 på den fysiske brikken, denne i2c -driveren på brikken prøver å sende data til kameraten. Etter at driverkjernen kan slås av og forbindelsen kontrolleres med et oscilloskop igjen, bør det være en større sekvens av pulser som er synlige på begge linjene. Dette betyr at sjetongene kommuniserer riktig.

Det hjelper å ha batteriet litt ladet for den siste fullstendige testen. Benkforsyningen kan også brukes til å oppnå dette, med nåværende grense satt til omtrent 50 mA og spenningen fortsatt på 3,8 volt, slik at LiPo -batteriet er tilkoblet direkte i noen minutter.

Det siste trinnet er å teste hele systemet - med alt tilkoblet hvis panelet er dekket i ti eller 15 sekunder, skal lyset tennes når det kjøres via driverkjernens PWM -utgang. Med panelet i sterkt sollys, bør batteriet lades fra boost -omformerens utgang. Det uklare logiske nettverket kan indirekte inspiseres for å se om det fungerer som det skal ved å se på PWM -linjen som driver boost -omformerens avstengningspinne; ettersom belysningen øker med batteri med lav ladetilstand, bør pulsbredden øke, noe som viser at etter hvert som mer strøm blir tilgjengelig fra sollys, signaliserer førerkjernen at mer strøm skal sendes inn i batteriet!

Trinn 9: Vedlegg om Fuzzy Logic

Vedlegg om Fuzzy Logic
Vedlegg om Fuzzy Logic

Fuzzy logic er en maskinlæringsteknikk som kan brukes til kontroll av maskinvaresystemer der det er usikkerhet i mange av parameterne i systemet som blir kontrollert, noe som gir en eksplisitt input til output -kontrollløsning for målet som er vanskelig å skrive ned matematisk. Dette oppnås ved å bruke logiske verdier som faller et sted mellom 0 (usant) og 1 (sant), og uttrykker usikkerhet i en verdi som mer ligner måten et menneske ville ("stort sett sant" eller "egentlig ikke sant") og tillater et grått område mellom påstander som er 100% sanne og 100% usanne. Måten dette oppnås på er ved først å ta prøver av inndatavariablene som en beslutning må baseres på og "fuzzifisere" dem.

Hjertet i ethvert uklart logisk system er et "uklart assosiativt minne." Dette minner om en matrise, hvor det for batteriladningskretsen er lagret et 3x3 sett med verdier mellom 0 og 1. Verdiene i matrisen kan grovt henge sammen med hvordan et menneske ville resonnere om hva PWM -faktoren som styrer SHTDN -pinnen til boost -omformeren skal være, avhengig av hvordan medlemsfunksjonen ovenfor kvalifiserer et gitt sett med innganger. For eksempel hvis panelets inngangsspenning er høy, men strømmen som trekkes inn i batteriet er lav, betyr det sannsynligvis at mer strøm kan trekkes og PWM -innstillingen ikke er optimal og bør økes. Motsatt, hvis panelspenningen går lavt, men laderen fortsatt prøver å skyve en stor strøm inn i batteristrømmen, vil det også være bortkastet, så det er best å redusere PWM -signalet til boost -omformeren. Når inngangssignalene er "fuzzified" til et uklart sett, multipliseres de med disse verdiene, på samme måte som en vektor multipliseres med en matrise, for å generere et transformert sett som er representativt for hvor tung "kunnskapen" inneholdt cellen av matrisen bør tas med i den endelige kombinasjonsfunksjonen.

Ved å bruke "ikke-implementert-i-xod" -noden som tillater XOD-noder som implementerer tilpasset funksjonalitet for komplisert til å være rimelig å lage fra lagerblokkene, og litt Arduino-stil C ++, det assosiative minnet, vektingsfunksjonen og " fuzzifier "som ligner blokkene beskrevet i denne referansen: https://www.drdobbs.com/cpp/fuzzy-logic-in-c/184408940 er enkle å lage, og mye lettere å eksperimentere med.

Anbefalt: