Inhoudsopgave:

Digitale voltmeter met CloudX - Ajarnpa
Digitale voltmeter met CloudX - Ajarnpa

Video: Digitale voltmeter met CloudX - Ajarnpa

Video: Digitale voltmeter met CloudX - Ajarnpa
Video: Digital Voltmeter with Rainbow Battery Level Display 2024, November
Anonim
Digitale voltmeter met CloudX
Digitale voltmeter met CloudX

Batterijen leveren een zuiverdere vorm van gelijkstroom (gelijkstroom) wanneer ze in circuits worden gebruikt. Hun lage ruisniveau maakt ze altijd perfect geschikt voor een aantal zeer gevoelige circuits. Echter, op momenten dat hun spanningsniveau onder een bepaald drempelpunt daalt, kunnen de circuits − (die ze van stroom moeten voorzien) een grillig gedrag vertonen; vooral als ze daar niet goed voor zijn ontworpen.

Daarom ontstaat de noodzaak om het batterijvermogen regelmatig te controleren om ons goed te kunnen informeren over wanneer het toe is aan volledige vervanging of opladen −in het geval van een oplaadbare batterij. Daarom moeten we in deze DIY (Do It Yourself) een eenvoudige batterijspanningsmeter ontwerpen met behulp van de CloudX - met het 7Segment als ons display.

Stap 1: Hardwarevereiste

CloudX-microcontrollermodule

CloudX USB

SoftCard

7Segmentweergave

Weerstanden

Voedingseenheid

Breadboard

Jumper (verbindings)draden

Stap 2: CloudX M633 Microcontroller

CloudX M633 Microcontroller
CloudX M633 Microcontroller

CloudX-microcontrollermodule

CloudX-module is een hardware-tool voor elektronica-ontwerp waarmee u op een veel handige en gemakkelijke manier verbinding kunt maken met de fysieke wereld via een eenvoudig microcontroller-bord. Het hele platform is gebaseerd op een open-source fysieke computer. De eenvoud van een IDE (Integrated Development Environment) maakt het echt perfect geschikt voor beginners, maar met voldoende functionaliteit om de gevorderde eindgebruikers er doorheen te laten navigeren. In een notendop, CloudX zorgt voor een sterk vereenvoudigd proces voor het omgaan met de microcontroller - door de normale complexe details die ermee samenhangen weg te abstraheren; terwijl het tegelijkertijd een zeer rijk gebruikerservaringsplatform biedt. Het vindt brede toepassingen over de hele linie: scholen, als een geweldig educatief hulpmiddel; industriële en commerciële producten; en als een geweldig hulpmiddel in de handen van een hobbyist.

Stap 3: Pin-verbindingen

Pin-aansluitingen
Pin-aansluitingen

De 7-segments pinnen: A, B, C, D, E, F, G, 1, 2 en 3 zijn verbonden met de CloudX-MCU's pin1, pin2, pin3, pin4, pin5, pin6, pin7, pin8, pin9, respectievelijk pin10 en pin11.

Stap 4: Schakelschema

Schakelschema
Schakelschema

De microcontrollermodule, die hier centraal staat, kan worden ingeschakeld:

ofwel via de Vin- en de Gnd-punten (d.w.z. door ze aan te sluiten op respectievelijk de +ve- en -ve-aansluitingen van uw externe voedingseenheid) op het bord;

of via uw CloudX USB-softcardmodule

. Bovendien, zoals gemakkelijk te zien is in het bovenstaande schakelschema, is de ingangsbatterijspanning gekoppeld aan de MCU (microcontroller) -module, zodat het -punt van het spanningsdelernetwerk (gevormd door en) is verbonden met A0 van de MCU-pin.

en zijn zo gekozen dat:

beperk de hoeveelheid stroom die door het netwerk stroomt;

limiet binnen een veilig bereik van (0 – 5) V voor de MCU.

Met behulp van de formule: VOUT = (R2/(R1+R2)) * VIN; en kan eenvoudig worden beoordeeld.

Vuitmax = 5V

en voor dit project kiezen we: Vinmax = 50V;

5 = (R2/(R1+R2)) * 50 R1 = 45/5 * R2 Rekening houdend met R2 = 10kΩ bijvoorbeeld; R1 = 45/5 * 10 = 90kΩ

Stap 5: Werkingsprincipe

Wanneer de gemeten ingangsspanning wordt gelezen via het VOUT-punt van het spanningsdelernetwerk, worden de gegevens verder verwerkt in de MCU om te evalueren tot de uiteindelijke werkelijke waarde die wordt weergegeven op de segmenteenheid. Het (het systeemontwerp) is een automatische decimale puntplaatser, in die zin dat het (decimaal punt) de positie op de display-eenheid zelf verschuift in overeenstemming met wat de float-waarde op een bepaald moment in de tijd dicteert. Vervolgens wordt de hele hardware 7-Segment display-eenheid bedraad in de multiplex-modus. Het is een speciale opstelling waarbij dezelfde databus (8-datapinnen) van de MCU de drie actieve 7-segmenten in de display-eenheid voedt. Het verzenden van een gegevenspatroon naar elk van de samenstellende delen wordt bereikt door een proces dat Scannen wordt genoemd. Scannen is een techniek waarbij gegevens naar elk van de 7-segmenten van de componenten worden verzonden; en inschakelen (dwz inschakelen) ze snel achter elkaar wanneer hun respectieve gegevens binnenkomen. De snelheid waarmee ze elk van hen worden aangepakt, is zo gedaan dat het erin slaagt de menselijke visie te misleiden door te geloven dat ze allemaal (de samenstellende delen) tegelijkertijd worden geactiveerd (aangesproken). Het (scannen) maakt in feite gebruik van een fenomeen dat bekend staat als Persistence Of Vision.

Stap 6: Het softwareprogramma

#erbij betrekken

#erbij betrekken

#erbij betrekken

#define segment1 pin9

#define segment2 pin10

#definieer segment3 pin11

vlotter batt_voltage;

int decimalPoint, batt;

/*arrays die het segmentpatroon opslaan voor elk gegeven cijfer*/

char CCathodeDisp = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};

char CAnodeDisp = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};

int disp0, disp1, disp2;

Scherm() {

niet-ondertekende char i;

if(decimaal punt < 10) {

disp0 = (int)batt_voltage /100; //haalt de MSD (meest significante cijfer) op

// de hoogste gewogen zijn

/* haalt het volgende gewogen cijfer op; enzovoort */

disp1 = ((int)batt_voltage % 100)/10;

disp2 = ((int)batt_voltage % 10);

}

anders {

disp0 = (int)batt_voltage /1000;

disp1 = ((int)batt_voltage % 1000)/100;

disp2 = ((int)batt_voltage % 100)/10;

}

/*Patronen worden uitgegoten voor weergave; en 0x80 karakters toevoegen van een decimaalteken

als de bijbehorende voorwaarde waar is*/

voor(i=0; i<50; i++) {

pin9 = pin10 = pin11 = HOOG;

if (decimaal punt < 10)

portWrite(1, CCathodeDisp[disp0] | 0x80);

else portWrite(1, CCathodeDisp[disp0]);

segment1 = LAAG;

segment2 = HOOG;

segment3 = HOOG;

vertragingMs(5);

pin9 = pin10 = pin11 = HOOG;

if((decimaal punt >= 10) && (decimaal punt < 100))

portWrite(1, CCathodeDisp[disp1] | 0x80);

else portWrite(1, CCathodeDisp[disp1]);

segment1 = HOOG;

segment2 = LAAG;

segment3 = HOOG;

vertragingMs(5);

pin9 = pin10 = pin11 = HOOG;

if (decimaal punt >= 100)

portWrite(1, CCathodeDisp[disp2] | 0x80);

else portWrite(1, CCathodeDisp[disp2]);

segment1 = HOOG;

segment2 = HOOG;

segment3 = LAAG;

vertragingMs(5);

}

}

setup(){ // setup hier

analoge instelling(); //analoge poort geïnitialiseerd

portMode (1, UITGANG); //Pins 1 tot en met 8 geconfigureerd als uitgangspinnen

/* scanpinnen geconfigureerd als uitvoerpinnen */

pin9Mode = UITGANG;

pin10Mode = UITGANG;

pin11Mode = UITGANG;

portWrite(1, LAAG);

pin9 = pin10 = pin11 = HOOG; // scan pinnen (die actief-laag zijn)

// zijn uitgeschakeld bij het begin

loop(){ //Programmeer hier

batt_voltage = analoog lezen (A0); // neemt de gemeten waarde in

batt_voltage = ((batt_voltage * 5000)/1024); //conversiefactor voor 5Vin

batt_voltage = (batt_voltage * 50)/5000; //conversiefactor voor 50Vin

decimalPoint = batt_voltage; // markeert waar de komma verschijnt in

// de oorspronkelijke waarde vóór gegevensmanipulatie

Scherm();

}

}

Aanbevolen: