Spisu treści:

Woltomierz cyfrowy z CloudX: 6 kroków
Woltomierz cyfrowy z CloudX: 6 kroków

Wideo: Woltomierz cyfrowy z CloudX: 6 kroków

Wideo: Woltomierz cyfrowy z CloudX: 6 kroków
Wideo: Miernik woltomierz i amperomierz 0-100V 10A - 0,56" w obudowie 2024, Listopad
Anonim
Woltomierz cyfrowy z CloudX
Woltomierz cyfrowy z CloudX

Baterie zapewniają czystszą formę prądu stałego (prądu stałego), gdy są stosowane w obwodach. Ich niski poziom hałasu sprawia, że zawsze idealnie pasują do niektórych bardzo wrażliwych obwodów. Jednak w chwilach, gdy ich poziom napięcia spadnie poniżej pewnego punktu progowego, obwody (które mają zasilać) mogą wejść w nieprawidłowe zachowanie; zwłaszcza, gdy nie są dobrze zaprojektowane, aby sobie z tym poradzić.

W związku z tym pojawia się potrzeba regularnego monitorowania poziomu naładowania akumulatora, aby właściwie wskazać nam, kiedy należy go całkowicie wymienić lub naładować – w przypadku akumulatora. Dlatego w tym DIY (Zrób to sam) mamy zaprojektować prosty miernik napięcia baterii przy użyciu CloudX – wykorzystując 7Segment jako nasz wyświetlacz.

Krok 1: Wymagania sprzętowe

Moduł mikrokontrolera CloudX

CloudX USB

Karta miękka

Wyświetlacz 7-segmentowy

Rezystory

Zasilacz

Deska do krojenia chleba

Przewody połączeniowe (łączące)

Krok 2: Mikrokontroler CloudX M633

Mikrokontroler CloudX M633
Mikrokontroler CloudX M633

Moduł mikrokontrolera CloudX

Moduł CloudX to narzędzie do projektowania elektroniki, które pozwala w bardzo wygodny i łatwy sposób komunikować się ze światem fizycznym za pomocą prostej płytki mikrokontrolera. Cała platforma oparta jest na fizycznym przetwarzaniu open-source. Jego prostota IDE (zintegrowanego środowiska programistycznego) naprawdę sprawia, że jest to idealne rozwiązanie dla początkujących, zachowując jednocześnie wystarczającą funkcjonalność, aby umożliwić zaawansowanym użytkownikom końcowym nawigację. W skrócie, CloudX zapewnia znacznie uproszczony proces obsługi mikrokontrolera −poprzez wyabstrahowanie normalnych złożonych szczegółów z nim związanych; oferując jednocześnie bardzo bogatą platformę user-experience. Znajduje szerokie zastosowanie we wszystkich dziedzinach: w szkołach, jako doskonałe narzędzie edukacyjne, produkty przemysłowe i komercyjne oraz jako doskonałe narzędzie użytkowe w rękach hobbystów.

Krok 3: Połączenia pinowe

Połączenia pinowe
Połączenia pinowe

7-segmentowe piny: A, B, C, D, E, F, G, 1, 2 i 3 są podłączone do pin1, pin2, pin3, pin4, pin5, pin6, pin7, pin8, pin9 w CloudX-MCU, odpowiednio pin10 i pin11.

Krok 4: Schemat obwodu

Schemat obwodu
Schemat obwodu

Moduł mikrokontrolera, będący tutaj centralnym elementem, może być zasilany:

albo przez punkty Vin i Gnd (tj. podłączając je odpowiednio do zacisków +ve i –ve zewnętrznego zasilacza) na płycie;

lub przez moduł karty softcard USB CloudX

. Co więcej, jak można łatwo zauważyć na powyższym schemacie obwodu, napięcie akumulatora wejściowego jest połączone z modułem MCU (mikrokontrolera) w taki sposób, że punkt sieci dzielnika napięcia (utworzony przez i) jest podłączony do A0 pinu MCU.

i są dobierane w taki sposób, aby:

ograniczyć ilość prądu przepływającego przez sieć;

limit w bezpiecznym zakresie (0 – 5) V dla MCU.

Korzystając ze wzoru: VOUT = (R2/(R1+R2)) * VIN; i można je łatwo ocenić.

Voutmax = 5V

a do tego projektu wybieramy: Vinmax = 50V;

5 = (R2/(R1+R2)) * 50 R1 = 45/5 * R2 Przyjmując na przykład R2 = 10kΩ; R1 = 45/5 * 10 = 90kΩ

Krok 5: Zasada działania

Gdy zmierzone napięcie wejściowe jest odczytywane przez punkt VOUT sieci dzielnika napięcia, dane są dalej przetwarzane w MCU w celu oceny końcowej wartości rzeczywistej wyświetlanej na jednostce segmentu. To (projekt systemu) jest automatycznym układem przecinka dziesiętnego, ponieważ (przecinek dziesiętny) faktycznie przesuwa pozycję na samym wyświetlaczu zgodnie z tym, co dyktuje wartość zmiennoprzecinkowa w danym momencie. Następnie cały sprzętowy 7-segmentowy wyświetlacz jest okablowany w trybie multipleksowym. Jest to specjalny układ, w którym ta sama magistrala danych (8 pinów danych) z MCU zasila trzy aktywne 7-segmenty na wyświetlaczu. Wysyłanie wzorca danych do każdej z części składowych odbywa się w procesie zwanym skanowaniem. Skanowanie to technika polegająca na przesyłaniu danych do każdego z 7-segmentów składowych; i włączanie (tj. włączanie) ich w krótkim odstępie czasu, gdy nadejdą ich odpowiednie dane. Tempo adresowania każdego z nich odbywa się w taki sposób, że udaje się oszukać ludzką wizję w przekonaniu, że wszystkie z nich (części składowe) są włączone (zaadresowane) w tym samym czasie. Po prostu (skanowanie) wykorzystuje zjawisko znane jako Persistence Of Vision.

Krok 6: Oprogramowanie

#włączać

#włączać

#włączać

#definiuj segment1 pin9

#definiuj segment2 pin10

#definiuj segment3 pin11

pływak batt_napięcie;

int dziesiętnyPoint, batt;

/*tablice przechowujące wzór segmentu dla każdej podanej cyfry*/

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;

wyświetlacz() {

znak bez znaku i;

jeśli (punkt dziesiętny < 10) {

disp0 = (int)batt_napięcie /100; //pobiera MSD (najbardziej znaczącą cyfrę)

//być najwyższą wagą

/* pobiera następną cyfrę ważoną; i tak dalej */

disp1 = ((int)batt_napięcie % 100)/10;

disp2 = ((int)batt_napięcie % 10);

}

w przeciwnym razie {

disp0 = (int)batt_napięcie /1000;

disp1 = ((int)batt_napięcie % 1000)/100;

disp2 = ((int)batt_napięcie % 100)/10;

}

/*Wzory są wylewane do wyświetlenia; oraz znak 0x80 dodając kropkę dziesiętną

jeśli skojarzony warunek jest prawdziwy*/

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

pin9 = pin10 = pin11 = WYSOKI;

if (Punkt Dziesiętny < 10)

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

w przeciwnym razie portWrite(1, CCathodeDisp[disp0]);

segment1 = NISKI;

segment2 = WYSOKI;

segment3 = WYSOKI;

opóźnienieMs(5);

pin9 = pin10 = pin11 = WYSOKI;

if((Punkt Dziesiętny >= 10) && (Punkt Dziesiętny < 100))

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

w przeciwnym razie portWrite(1, CCathodeDisp[disp1]);

segment1 = WYSOKI;

segment2 = NISKI;

segment3 = WYSOKI;

opóźnienieMs(5);

pin9 = pin10 = pin11 = WYSOKI;

jeśli (punkt dziesiętny >= 100)

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

w przeciwnym razie portWrite(1, CCathodeDisp[disp2]);

segment1 = WYSOKI;

segment2 = WYSOKI;

segment3 = NISKI;

opóźnienieMs(5);

}

}

setup(){ //ustaw tutaj

Ustawienie analogowe(); //port analogowy zainicjowany

portMode(1, WYJŚCIE); //Piny od 1 do 8 skonfigurowane jako piny wyjściowe

/* skanowanie pinów skonfigurowanych jako piny wyjściowe */

pin9Mode = WYJŚCIE;

pin10Mode = WYJŚCIE;

pin11Mode = WYJŚCIE;

portWrite(1, LOW);

pin9 = pin10 = pin11 = WYSOKI; //skanuj piny (które są aktywne-niskie)

//są wyłączone na początku

loop(){ //Zaprogramuj tutaj

napięcie_battu = odczyt analogowy (A0); //przyjmuje zmierzoną wartość

napięcie_batu = ((napięcie_batu * 5000) / 1024); //współczynnik konwersji dla 5Vin

napięcie_batu = (napięcie_batu * 50)/5000; //współczynnik konwersji dla 50Vin

decimalPoint = batt_napięcie; //oznacza, gdzie pojawia się przecinek dziesiętny

//oryginalna wartość przed manipulacją danymi

wyświetlacz();

}

}

Zalecana: