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

Geoptimaliseerde Voedingsoplossingen voor Arduino Projecten

Onderdelen en Benodigdheden

OnderdeelAantal
Adafruit PowerBoost Charger Shield1
Herlaadbare LiPo-accu (generiek) 3.7 - 4.2V1
Arduino UNO1

Over Dit Project

Projecten met de Arduino-familie van microcontroller-boards hebben doorgaans geen speciale voedingsbeheercircuitry nodig. Je sluit een voedingsbron aan, het apparaat start op, doet zijn werk en stopt wanneer de voeding wordt ontkoppeld. In tegenstelling tot een Raspberry Pi-systeem is er geen risico op corruptie van een SD-geheugenkaart.

Maar voor sommige toepassingen wil je de voedingsstatus monitoren en op een meer beheerde manier reageren, in plaats van gewoon af te sluiten.

Overweeg een remote sensing-apparaat dat temperatuurdata logt. Als de accu op is terwijl het onbeheerd is, stoppen de logs simpelweg. Er is geen directe manier om te weten dat lage accu het probleem was. Het zou een software- of hardwarestoring kunnen zijn.

Evenzo, voor een draagbaar systeem, zou het handig zijn om te weten hoeveel acculeven er nog over is en wanneer het opgeladen moet worden.

Dit project presenteert verschillende benaderingen voor Arduino-energiebeheer met circuits, software en beschrijvingen voor elk. Beginnend met een simpele aan/uit-schakelaar tot een datalogging-systeem dat accustatus omvat, bedoeld voor onbeheerde omgevingsmonitoring.

Je kunt kiezen welke subsysteem je interesseert. Ik beschrijf ze allemaal in toenemende complexiteit, maar je kunt de delen die je niet nodig hebt, uitcommentariëren.

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:

  • Aan/Uit schakelen met een drukknop
  • Accuspanning monitoren via de Arduino ADC
  • Systeem afsluiten bij lage spanning
  • Accuspanning en afsluitbericht vastleggen in bestand
  • Accustatus weergeven met Rood/Groene LED

Ik zal elk van deze functies introduceren, maar de gemeenschappelijke draad is de combinatie van de Adafruit PowerBoost en de Arduino.

Bij elk voeg je twee functies toe en pas je ze aan: arduinoPowerSetup() en arduinoPowerMonitor(), aan de standaard setup() en loop() functies in je code.

Adafruit PowerBoost Shield

Het systeem gebruikt een herlaadbare LiPo-accu en een Adafruit PowerBoost Charger Shield, die de accu zowel kan opladen als de uitgang naar 5V kan boosten.

Adafruit maakt drie versies van de PowerBoost: twee breakout-boards en een Arduino Shield. Het meeste werk hier beschreven gebruikt de Power Shield, maar ik zal later over de breakout-boards spreken.

Lees deze pagina over hoe je de PowerBoost Shield configureert. Om de Shield-kit voor te bereiden moet je:

  • Stacking header strips insolderen
  • Maar de schakelaar niet bevestigen
  • Een draad (4 inch, 22AWG massief) insolderen op de Enable-pin
  • De solderpads voor Analoge pin A0 op de onderzijde van de shield verbruggen

Aan/Uit Schakelcircuit

Deze basiscircuit gebruikt een momentane drukknop om het systeem aan te zetten en, wanneer het draait, uit te zetten – vergelijkbaar met hoe een telefoon werkt.

Wanneer je op een uitgezet systeem indrukt en vasthoudt, wordt de PowerBoost ingeschakeld en levert stroom aan de Arduino, die vervolgens opstart en het geladen programma uitvoert.

Wanneer je de knop opnieuw indrukt en loslaat, schakelt de Arduino de PowerBoost uit en, omdat deze geen stroom meer levert, gaat de Arduino uit.

Lees deze pagina voor details. Hier is het schema:

Geoptimaliseerde Voedingsoplossingen voor Arduino Projecten

Let op: Je hebt deze circuit niet nodig voor de rest van het project. Je kunt de optionele schakelaar gebruiken die bij de PowerBoost shield hoort. Het primaire verschil is dat de basisschakelaar het systeem uitschakelt zonder mogelijkheid om een logbericht vast te leggen.

Accuspanning Monitoren

De Arduino heeft 6 Analog-to-Digital Converters (ADC's) op analoge pinnen 0-5, wat spanningsmeting eenvoudig maakt. De PowerBoost shield stelt je in staat de accuspanning (Vbat) aan één van deze te koppelen door de juiste solderpads te verbruggen zoals beschreven op de PowerBoost Shield-pagina. In dit voorbeeld is het gekoppeld aan Analoge pin 0.

De spanning van LiPo-accu's varieert van ongeveer 4,25V bij volgeladen tot ongeveer 3,7V bij leeg. De ADC converteert het spanningsbereik 0V tot 5V naar het gehele bereik 0 tot 1023, en we lezen deze waarde met analogRead().

Deze code-fragment laat zien hoe je dit doet en de relatieve accustatus berekent met de min- en max-accuspanning.

float maxVoltage = 4.25;
float minVoltage = 3.75;
arduinoPowerVoltage = float(analogRead(arduinoPowerVoltagePin)) / 1024.0 * 5.0;
float fractionalVoltage = (arduinoPowerVoltage - minVoltage) / (maxVoltage - minVoltage);

LiPo-accu's verliezen niet lineair spanning tijdens ontladen, maar het is voldoende dichtbij om de resterende acculevensduur te schatten met de fractionele spanning.

We kunnen dus de accuspanning meten en het resterende leven schatten, maar we hebben een manier nodig om dat aan de gebruiker te communiceren. We kunnen een alfanumeriek display gebruiken en in de volgende sectie laat ik zien hoe je dit logt naar een bestand op een SD-kaart. Maar dat kan overkill zijn voor veel projecten.

Een eenvoudigere aanpak is een RGB-led te gebruiken en de kleur te laten afhangen van de accustatus. Bijvoorbeeld:

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

Om dit te implementeren voeg je gewoon een RGB-led en twee 1k-weerstanden toe aan de circuit en voegt een beetje code toe aan arduinoPowerMonitor().

RGB-leds gebruiken doorgaans een Common Anode, dus deze circuit werkt daarmee:

Geoptimaliseerde Voedingsoplossingen voor Arduino Projecten

LET OP: In de praktijk gebruik ik de 3,3V-voeding voor mijn leds.

LET OP: Zoals ik later zal tonen, kan er een significante 'trilling' in de gemeten spanning zitten, om redenen die ik niet begrijp. Als de accu dicht bij een van de waarden is waar de LED-kleur verandert, zie je het mogelijk heen en weer schakelen tussen de twee toestanden – erg irritant. Een snelle fix is een 0,1uF condensator tussen analoge pin A0 en Ground te plaatsen.

Geoptimaliseerde Voedingsoplossingen voor Arduino Projecten

Deze breadboard-layout toont niet de accu of de Arduino. De sketch arduino_2_voltage_led implementeert Aan/Uit en LED-spanningsweergave. De code zet de groene of rode pin op laag om de led aan te zetten en hoog om hem uit te zetten.

LET OP: Je kunt de gemeten spanningen controleren en/of debuggen door de aanroepen naar Serial in de code te uncommentariëren en de Seriële Monitor in de IDE te draaien. Je ziet de werkelijke en fractionele accuspanning. De eerste aanroep is om een of andere reden onjuist.

Accuspanning Loggen naar SD-kaart

De LED-indicator van spanning is handig voor draagbare, accu-gevoede Arduino-systemen waar je niet zoveel om de details geeft, je wilt gewoon weten wanneer je moet opladen.

Maar als je sensoren in een zelfstandig systeem monitoret, wil je misschien de accuspanning samen met sensordata vastleggen om een beter beeld van stroomverbruik over te tijd te krijgen.

Voor dit deel gebruik ik de Adafruit Data Logging Shield die data in CSV-formaat op de bijgevoegde SD-kaart kan vastleggen, met timestamps. De Adafruit Handleiding legt uit hoe de SD en RTC bibliotheken werken en je moet dat begrijpen voordat je aan dit deel begint.

De circuit is ongewijzigd ten opzichte van het vorige voorbeeld – het is de moeite waard om de LED te behouden omdat het directe feedback geeft over de accustatus, maar dit is niet noodzakelijk.

Omdat we data loggen naar de kaart, is het belangrijk dat we een afsluitbericht loggen. Zo kunnen we zien of het afsluiten bewust was of of er een fout in het systeem is opgetreden.

Daarnaast, omdat we de spanning monitoren, kunnen we controleren wanneer de spanning onder een minimumniveau daalt en het systeem veilig afsluiten. Ook daar kunnen we een bericht over loggen net voor het afsluiten.

De sketch hiervoor is in arduino_3_voltage_logging. Deze bevat een paar hulproutines om een correct geformatteerde timestamp-string te genereren, enz., en bevat een hack om de rode LED te laten knipperen als je vergeet een SD-kaart te plaatsen, wat ik constant doe.

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

Geoptimaliseerde Voedingsoplossingen voor Arduino Projecten

Spanningsdata

Hier is een grafiek van de accuspanning over de tijd die de geleidelijke daling over een periode van ongeveer 20 uur toont. De daling is niet echt lineair, maar voor het schatten van de resterende stroom is het voldoende dichtbij.

Geoptimaliseerde Voedingsoplossingen voor Arduino Projecten

Zoals eerder gezegd, helpt het echt om een 0,1uF condensator tussen Analoge Pin A0 en Ground te plaatsen. In dit voorbeeld toont de paarse lijn de impact van de condensator vergeleken met de oorspronkelijke in blauw.

Geoptimaliseerde Voedingsoplossingen voor Arduino Projecten

Omgevingsdata Loggen naar SD-kaart

Om af te ronden, hier is nog een toevoeging aan het project. Een project dat ik in gedachten heb is een zelfstandige omgevingsmonitor voor mijn tuin – temperatuur, grondvochtigheid, etc.

Ik zal de Arduino, etc., in een afgedichte doos installeren die voor een bepaalde tijd onbeheerd blijft. Naast de accu die opraakt, wil ik controleren dat geen vocht binnenkomt en dat het geen extreme temperaturen ervaart die het systeem kunnen beschadigen. Een goedkope en makkelijke manier om temperatuur en vochtigheid te meten is de DHT22-sensor – bekijk de Adafruit Tutorial voor details.

In mijn voorbeeldcode gebruik ik digitale pin 5 in plaats van pin 2, omdat ik die al gebruik voor de Aan/Uit-knop interrupt.

De code hiervoor is in arduino_4_voltage_temp_humidity_logging. Zodra dit op een breadboard werkte, heb ik het op een Adafruit Proto Shield bedraad. De DHT22-sensor is best wat groot – maar het is goedkoop. Bekijk andere breakout-boards van Adafruit, Sparkfun, etc. voor alternatieven.

Energiebesparing in Arduino-projecten

De volgende stap in mijn project is het verminderen van het stroomverbruik en het verlengen van de acculevensduur.

Mijn uitgangspunt hiervoor is de uitstekende Adafruit-tutorial over Low Power Datalogging van Tony DiCola.

Code

GitHub Repositories

Productieproces

  1. Bulldozer Technologie: Ontwerp, Productie en Toekomstige Innovaties
  2. Batterijen: Van Volta's Stap tot Moderne Lithiumcellen
  3. Bluetooth-gecontroleerde Arduino Spybot bouwen
  4. FlickMote: Gebarengecontroleerde IR-afstandsbediening voor Slimme Huizen
  5. DIY Arduino TV-B-Gone: Universele TV-uit-schakelaar
  6. Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter
  7. Find Me: Slimme Item Locator met Arduino en Bluetooth
  8. Windenergie: Omzetten van Luchtbeweging in Schone Elektriciteit
  9. Impact van Subsidieverlaging op China's Voertuigbatterijindustrie
  10. Vermogensdissipatie in weerstanden meten: Hands-on experiment met Joules Wet
  11. Stroombronnen: AC en DC Uitgelegd