Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino Power

Componenten en benodigdheden

Adafruit PowerBoost Charger Shield
× 1
Oplaadbare Lipoly-batterij (algemeen)
3,7 - 4,2V
× 1
Arduino UNO
× 1

Over dit project

Projecten waarbij de Arduino-familie van microcontrollerkaarten betrokken zijn, hebben doorgaans geen speciaal stroombeheercircuit nodig. Je sluit een stroombron aan, het apparaat start op, doet zijn werk en stopt wanneer de stroom wordt losgekoppeld. In tegenstelling tot een Raspberry Pi-systeem is er geen risico op beschadiging van een SD-geheugenkaart.

Maar voor sommige toepassingen wilt u misschien de stroomstatus controleren en op een meer beheerde manier reageren, in plaats van alleen maar af te sluiten.

Denk bijvoorbeeld aan een remote sensing-apparaat dat temperatuurgegevens registreert. Als de batterij leeg raakt terwijl deze onbeheerd is, stoppen de logs gewoon. Er is geen manier om meteen te vertellen dat een bijna lege batterij het probleem was. Het kan een software- of hardwarefout zijn geweest.

Evenzo zou het voor een draagbaar systeem handig zijn om te weten hoe lang de batterij nog meegaat en wanneer deze moet worden opgeladen.

Dit project presenteert verschillende benaderingen van Arduino-energiebeheer met circuits, software en beschrijvingen voor elk van hen. Beginnend met een eenvoudige aan/uit-schakelaar tot een dataloggingsysteem met batterijstatus dat bedoeld is voor bewaking van de omgeving zonder toezicht.

Je kunt kiezen in welke van de subsystemen je geïnteresseerd bent. Ik zal ze allemaal beschrijven in toenemende complexiteit, maar je kunt commentaar geven op de delen waarin je niet geïnteresseerd bent.

Het project is gebaseerd op de ideeën in de LiPoPi- en Pi Power-projecten, die vergelijkbare functionaliteit bieden voor Raspberry Pi-systemen.

Overzicht

Het systeem biedt verschillende functies:

  • In-/uitschakelen met een drukknop
  • Bewaak de batterijspanning met behulp van de Arduino ADC
  • Sluit het systeem af bij lage spanning
  • Neem de batterijspanning en een uitschakelbericht op in een bestand
  • Geef de batterijstatus weer met een rode/groene LED

Ik zal ze allemaal achtereenvolgens introduceren, maar de rode draad bij alle is de combinatie van de Adafruit PowerBoost en de Arduino.

Met elk van deze voegt u twee functies toe en past u deze aan, arduinoPowerSetup() en arduinoPowerMonitor( ) , naar de standaard setup() en loop() functies in uw code.

Adafruit PowerBoost-schild

Het systeem maakt gebruik van een oplaadbare LiPoly-batterij en een Adafruit PowerBoost-opladerschild, die zowel de batterij kunnen opladen als het uitgangsvermogen kunnen verhogen tot 5V.

Adafruit maakt drie versies van de Power Boost - twee breakout-boards en een Arduino Shield. Het meeste werk dat hier wordt beschreven, maakt gebruik van het Power Shield, maar ik zal het later hebben over het gebruik van de breakout-borden.

Lees deze pagina over het configureren van het PowerBoost Shield. Om de Shield-kit voor te bereiden, moet je:

  • Soldeer op de stapelbare kopstrips
  • Maar bevestig de schakelaar niet
  • Soldeer een stuk draad (4 inch, 22AWG massieve kern) aan de activeringspin
  • Overbrug de pads voor analoge pin A0 aan de onderkant van het schild

Stroom aan/uit-circuit

Dit basiscircuit gebruikt de druk op een kortstondige drukknop om het systeem in te schakelen en, wanneer het in werking is, uit te schakelen - vergelijkbaar met de manier waarop mijn telefoon werkt.

Wanneer u een uitgeschakeld systeem ingedrukt houdt, wordt de PowerBoost ingeschakeld en wordt de Arduino van stroom voorzien, die vervolgens opstart en het programma uitvoert dat u erop hebt geladen.

Wanneer u nogmaals op de knop drukt en deze weer loslaat, schakelt de Arduino de PowerBoost uit en omdat deze geen stroom meer levert, wordt de Arduino uitgeschakeld.

Lees deze pagina voor de details. Hier is het schema:

Opmerking: U hebt dit circuit niet nodig om de rest van dit project te gebruiken. U kunt de optionele schakelaar gebruiken die bij het PowerBoost-schild wordt geleverd. Het belangrijkste verschil is dat de basisschakelaar het systeem gewoon uitschakelt zonder dat er een logbericht kan worden opgenomen.

Batterijspanning controleren

De Arduino heeft 6 analoog naar digitaal converters (ADC's) op analoge pinnen 0-5, wat spanningsmeting eenvoudig maakt. Met het PowerBoost-schild kunt u de batterijspanning aansluiten (Vbat ) naar een van deze door de juiste soldeerpads te overbruggen zoals beschreven op de PowerBoost Shield-pagina. In dit voorbeeld heb ik het gekoppeld aan Analog pin 0 .

De spanning van LiPoly-batterijen varieert van ongeveer 4,25V wanneer volledig opgeladen tot ongeveer 3,7V bij ontslag. De ADC converteert het spanningsbereik van 0V naar 5V in het gehele bereik van 0 tot 1023 , en we krijgen toegang tot deze waarde door analogRead() . aan te roepen .

Dit codefragment laat zien hoe u dit kunt doen en berekent de relatieve batterijstatus met behulp van de minimale en maximale batterijspanning.

 float maxVoltage =4.25; vlotter minVoltage =3,75; arduinoPowerVoltage =float (analogRead (arduinoPowerVoltagePin)) / 1024.0 * 5.0; float fractionalVoltage =(arduinoPowerVoltage - minVoltage) / (maxVoltage - minVoltage); 

LiPoly-batterijen verliezen niet lineair spanning als ze ontladen, maar het is dicht genoeg bij dat we de resterende levensduur van de batterij kunnen schatten met behulp van de fractionele spanning.

We kunnen dus de batterijspanning krijgen en de resterende levensduur schatten, maar we hebben een manier nodig om dat aan de gebruiker te communiceren. We zouden een alfanumeriek display kunnen gebruiken en in de volgende sectie zal ik laten zien hoe u dit kunt loggen in een bestand op een SD-kaart. Maar die kunnen voor veel projecten overdreven zijn.

Een eenvoudigere benadering is om RGB te gebruiken en de kleur te wijzigen om de levensduur van de batterij weer te geven. Bijvoorbeeld:

  • Groen - meer dan 50%
  • Geel - 20% tot 50%
  • Rood - minder dan 20% - tijd om op te laden

Om dat te implementeren, voegt u gewoon een RGB-led en twee 1K-weerstanden toe aan het circuit en voegt u een stukje code toe aan arduinoPowerMonitor() .

RGB-LED's gebruiken meestal een Gemeenschappelijke Anode dus dit circuit werkt daarmee:

OPMERKING: In de praktijk gebruik ik de 3.3V voeding met mijn LED's.

OPMERKING: Zoals ik later zal laten zien, kan er een aanzienlijke 'oscillatie' zijn in de gemeten spanning, om redenen die ik niet begrijp. Als de batterij in de buurt komt van een van de waarden waarbij de LED-kleur verandert, ziet u deze mogelijk heen en weer schakelen tussen de twee statussen - erg vervelend. Een snelle oplossing is het plaatsen van een 0.1uF condensator tussen analoge pin A0 en Grond .

Deze breadboard-lay-out toont niet de batterij of de Arduino. De schets arduino_2_voltage_led implementeert Power On/Power Off en LED-spanningsweergave. De code stelt de groene of rode pin in op laag om de led aan te zetten en hoog om het uit te schakelen.

OPMERKING: U kunt de gemeten spanningen controleren en/of debuggen door de opmerkingen naar Serial te verwijderen in de code en het uitvoeren van de Seriële Monitor in de IDE. U ziet de werkelijke en fractionele batterijspanning. Om de een of andere reden is de eerste oproep onjuist.

Accuspanning loggen op een SD-kaart

De LED-indicator voor de spanning is handig voor draagbare, op batterijen werkende Arduino-systemen waar u niet al te veel om de details geeft, maar alleen wilt weten wanneer u de batterij moet opladen.

Maar als u bijvoorbeeld sensoren in een op zichzelf staand systeem bewaakt, wilt u misschien de batterijspanning samen met sensorgegevens registreren om u een beter idee te geven van het stroomverbruik in de loop van de tijd.

Voor dit deel van het project gebruik ik het Adafruit Data Logging Shield dat gegevens kan vastleggen in een CSV formaat bestand op de bijgevoegde SD-kaart, samen met tijdstempels. De Adafruit-gids legt uit hoe de SD en RTC bibliotheken werken en u moet dat begrijpen voordat u aan dit deel van het project gaat werken.

Het circuit is ongewijzigd ten opzichte van het vorige voorbeeld - het is de moeite waard om de LED te behouden, omdat deze onmiddellijke feedback geeft over de batterijstatus, maar dit is niet nodig.

Omdat we gegevens op de kaart loggen, is het belangrijk dat we een afsluitbericht loggen. Op die manier kunnen we zien of het afsluiten opzettelijk was of dat er een fout met het systeem is gebeurd.

Omdat we de spanning bewaken, kunnen we bovendien controleren wanneer de spanning onder een bepaald minimumniveau zakt en het systeem veilig afsluiten. Nogmaals, we kunnen daar vlak voor de shutdown een bericht over loggen.

De schets hiervoor staat in arduino_3_voltage_logging. Dit omvat een paar hulpprogramma-routines om een ​​correct geformatteerde tijdstempelreeks te genereren, enz. en omvat een hack om de rode LED te laten knipperen als u vergeet een SD-kaart te plaatsen, wat ik altijd doe.

De hele stapel Arduino Uno, Data Logging Shield, PowerBoost Shield en breadboard ziet er als volgt uit:

Spanningsgegevens

Hier is een grafiek van de batterijspanning in de loop van de tijd die de geleidelijke afname over een periode van ongeveer 20 uur laat zien. De daling is niet echt lineair, maar om het resterende vermogen te schatten, is het dichtbij genoeg.

Zoals ik eerder al zei, helpt het echt om een ​​0.1uF condensator toe te voegen tussen Analog Pin A0 en Grond . In dit voorbeeld toont de paarse lijn de impact van de condensator in vergelijking met het origineel in blauw.

Omgevingsgegevens loggen op een SD-kaart

Om af te ronden, hier is nog een toevoeging aan het project. Een project dat ik in gedachten heb, is een op zichzelf staande omgevingsmonitor voor mijn tuin - temperatuur, bodemvocht, enz.

Ik zal de Arduino, enz. In een verzegelde doos installeren die enige tijd onbeheerd zal worden achtergelaten. Naast dat de batterij leeg raakt, wil ik ook controleren of er geen vocht in de behuizing komt en dat deze geen extreme temperaturen ervaart die het systeem kunnen beschadigen. Een goedkope en gemakkelijke manier om temperatuur en vochtigheid te meten is de DHT22-sensor - bekijk de handleiding van Adafruit voor meer informatie.

In mijn voorbeeldcode gebruik ik digitale pin 5 in plaats van pin 2, omdat ik die al gebruik voor de onderbreking van de uit-knop.

De code hiervoor staat in arduino_4_voltage_temp_humidity_logging. Toen ik dit eenmaal op een breadboard had werken, heb ik dit aangesloten op een Adafruit Proto Shield. De DHT22-sensor is behoorlijk omvangrijk, maar hij is goedkoop. Bekijk andere breakout-borden van Adafruit, Sparkfun, enz. voor andere alternatieven.

Energiebesparing in Arduino-projecten

De volgende fase in mijn project is het verminderen van het stroomverbruik en het verlengen van de levensduur van de batterij.

Mijn startpunt hiervoor is een uitstekende Adafruit-tutorial over Low Power Datalogging van Tony DiCola.

Code

Github
https://github.com/craic/arduino_powerhttps://github.com/craic/arduino_power
Github
https://github.com/NeonHorizon/lipopihttps://github.com/NeonHorizon/lipopi
Github
https://github.com/craic/pi_powerhttps://github.com/craic/pi_power

Productieproces

  1. Stroomdissipatie
  2. Stroombronnen
  3. Bulldozer
  4. Batterij
  5. Arduino Spybot
  6. FlickMote
  7. Zelfgemaakte tv B-Gone
  8. Hoofdklok
  9. Vind mij
  10. Windkracht
  11. Hoe de bezuiniging op de stroomvoorziening de batterij-industrie beïnvloedt