10-02-2013
Op Ebay kan je leuke dingen kopen voor je hobby. Zo heb ik 2x een ACS712 gekocht die volgens de beschrijving zo'n 5 Ampere moeten kunnen meten. Die ACS712 kan die ampere's in een wisselstroom circuit meten of in een gelijkstroom circuit.
Als ik mijn huiswerk goed heb gedaan dan meet je een spanning af op de out pin. Die ACS heeft 3 pinnen en twee schroef aansluitingen. Die schroefaansluitingen zijn de punten die tussen de voeding en de gebruiker komen in één draad. En de drie pinnen zijn voor plus 5 V (VCC) min 5V (Gnd) en de meetwaarde op de out pin.
Om te weten wat ik meet heb ik een verbruiker nodig. Omdat ik twee ACS712 IC's heb, gebruik ik twee motoren.
Die motoren laat ik bedienen via een L293D IC die aangestuurd wordt via I2C door een MCP23017.
Een beetje ingewikkeld als je iets door een Arduino wil laten bedienen maar aangezien ik uiteindelijk een robot wil aansturen lijkt mij de weg via I2C meer mogelijkheden te hebben dan simpel op de pinnetjes van de Arduino.
Die ACS712 wordt dan uitgelezen via een 8591 IC dat 3x analoog kan inlezen en naar I2C kan sturen.
Als laatste wordt de Arduino dan gebruikt om alle data aan te sturen en uit te lezen via de I2C. (IIC lijkt een anderenaam).
Ik heb een 4 regel display aangesloten op de Arduino waar ik de data vanaf kan lezen. Een sketch voor de Arduino die de motoren bediend. Eerst de enable voor het IC L293 pin 1, hoog maken. Daarna motor 1 spanning geven via pootje 2 van L293. Daarna pin 1 en pin 2 spanningloos. Dan enable weer hoog en motor 2 aansturen met pin 7. Motor 2 draait. Weer alles stoppen en daarna beide motoren aansturen.
Dat werkt en ik lees waarden af die de 8591 terug stuurt. De volgende stap is dus kijken wat die waarden moeten zijn. Een omrekening maken.
In rust krijg ik een waarde van 80 H. Bij opgenomen vermogen zakt die waarde naar ongeveer 7F H. Een verschil van 3 H.
Dat is dus mijn volgende klus.
Op het dispay is te zien dat motor 1 aan staat, P1 waarde 7F heeft, P2 waarde FF heeft (nu nog aangesloten aan plus wordt temperatuur meting.) en P3 waarde 7F heeft. Dat laatste is een schoonheidsfoutje. Het bleek dat de 1 verkeerd was beide motoren gingen draaien als 1 aangemeld was.
153 is een interne loop van de Arduino zodat ik kan zien wanneer de motor aan of uitgaat. De 0000 1111 is de ingelezen waarde van het B register van het eerste MCP23017 IC. Die ga ik later gebruiken om te kijken of iets wel of geen spanning heeft.
En tenslotte de ledbalk. Ook daar een fout, de ledbalk links boven laat zien dat enable (1e led) een 1 is. 2e led is gedoofd maar die moet ook een 1 zijn, en 3e led is motor2 die heeft spanning.
2e en 4e ledbalken zijn niet aangesloten. 3e ledbalk toont inhoud van 2e IC MCP23017 A register die elke stap van de Arduino de ledbalk één waarde hoger laat tonen.
De 5e ledbalk toont de waarde van het B register en dat moet omgezete waarde worden van het vermogen dat de motoren verbruiken. Rood betekend dan stoppen.
Onder is ook een ledbalk. Daar komt mijn externe voeding op het bord binnen en wordt daar gelijkgericht, omgezet naar 12 V en daarna nogmaals omgezet naar 5 V. De motoren gebruiken 12 V en de elektronica 5 V.
helaas heb ik mijn Real Time Clock opgeblazen door eventjes met het draadje van de 12 V op de batterij te komen.
Schokkende bedrag van 5 euro kwijt. Een sketch is hier, maar als je even op het internet zoekt kom je alle schema's tegen. Ik heb voor de duidelijkheid maar geen 2e MCP23017 op het schema geplaatst. Ook het LCD en de ledbalken heb ik maar weggelaten. Het geheel werd dan niet erg duidelijk.;-)
En als het bovenstaande een beetje erg kort uit de bocht is.....;-)
Lees dan nog even I2C