Operácie

Monitor kapacity batérie

Zo stránky SensorWiki

Záverečný projekt predmetu MIPS / LS2026 - Meno Priezvisko


Zadanie

Mojím semestrálnym projektom je vytvorenie jednoduchého systému na monitorovanie stavu batérie pomocou mikrokontroléra ATmega328P. Stav batérie je určený na základe merania napätia na analógovom vstupe pomocou integrovaného ADC prevodníka.


Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

Pri realizácii projektu som využil mikrokontrolér Arduino Nano s procesorom ATmega328P, potenciometer B10k a tri LED diódy. Potenciometer som použil ako zdroj premenlivého napätia, pomocou ktorého som simuloval rôzne úrovne nabitia batérie.

Stredný vývod potenciometra som pripojil na analógový vstup A0, zatiaľ čo krajné vývody boli pripojené na napájanie 5 V a GND. Zelenú, žltú a červenú LED diódu som pripojil na digitálne piny D2, D3 a D4 cez ochranné rezistory.

Na spracovanie vstupného signálu som využil integrovaný ADC prevodník mikrokontroléra. Ten prevádza analógové napätie na číselnú hodnotu, s ktorou program ďalej pracuje. Podľa nameranej hodnoty program rozhodne, ktorá LED dióda bude aktívna. Pre vysoké hodnoty sa rozsvieti zelená LED, pre stredné žltá LED a pre nízke červená LED.

Program bol vytvorený v jazyku C v prostredí Microchip Studio. Pri testovaní som menil polohu potenciometra a sledoval zmenu indikácie na LED diódach, čím som overil správnu funkciu celého zapojenia.


Celkový pohľad na zariadenie.

Schéma zapojenia. Potenciometer B10k je pripojený na vstup A0 a slúži na simuláciu napätia batérie. LED diódy pripojené na piny D2, D3 a D4 zobrazujú stav batérie pomocou svetelnej signalizácie.

Schéma zapojenia.

Použité súčiastky:

Schéma zapojenia.
Potenciometer.
Schéma zapojenia.
Schéma zapojenia.

Algoritmus a program

Algoritmus programu je založený na meraní analógového napätia pomocou ADC prevodníka mikrokontroléra ATmega328P. Na začiatku programu sa volá funkcia ADC_init(), ktorá zabezpečuje inicializáciu ADC prevodníka, nastavenie referenčného napätia a aktiváciu prevodníka.

Na čítanie analógovej hodnoty zo vstupu A0 sa používa funkcia ADC_read(). Tá spustí prevod analógového signálu na digitálnu hodnotu, počká na dokončenie prevodu a vráti nameranú hodnotu ADC.

Funkcia LED_off_all() slúži na zhasnutie všetkých LED diód pred vyhodnotením aktuálneho stavu. V hlavnej slučke programu sa neustále vykonáva meranie vstupného napätia a jeho porovnanie s definovanými prahovými hodnotami. Na základe výsledku sa rozsvieti príslušná LED dióda signalizujúca stav batérie (FULL, MID alebo LOW).

Program využíva aj funkciu _delay_ms(100), ktorá vytvára krátke oneskorenie medzi jednotlivými meraniami. Celý proces sa opakuje v nekonečnej slučke while(1), čím je zabezpečené priebežné monitorovanie stavu batérie.



#ifndef F_CPU
#define F_CPU 16000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>

#define LED_FULL    PD2   // Zelená LED
#define LED_MID     PD3   // Žltá/oranžová LED
#define LED_LOW     PD4   // Červená LED

#define ADC_FULL_LIMIT  778   // približne 3.8 V
#define ADC_MID_LIMIT   409   // približne 2.0 V

void ADC_init(void)
{
	// Referenčné napätie AVCC = 5 V, vstup ADC0 = A0
	ADMUX = (1 << REFS0);

	// Zapnutie ADC, preddelička 128
	ADCSRA = (1 << ADEN) |
	(1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
}

uint16_t ADC_read(void)
{
	// Spustenie merania
	ADCSRA |= (1 << ADSC);

	// Čakanie na dokončenie merania
	while (ADCSRA & (1 << ADSC));

	return ADC;
}

void LED_off_all(void)
{
	PORTD &= ~((1 << LED_FULL) | (1 << LED_MID) | (1 << LED_LOW));
}

int main(void)
{
	uint16_t adc_value;

	// Nastavenie D2, D3, D4 ako výstupy
	DDRD |= (1 << LED_FULL) | (1 << LED_MID) | (1 << LED_LOW);

	ADC_init();

	while (1)
	{
		adc_value = ADC_read();

		LED_off_all();

		if (adc_value >= ADC_FULL_LIMIT)
		{
			PORTD |= (1 << LED_FULL);   // Full
		}
		else if (adc_value >= ADC_MID_LIMIT)
		{
			PORTD |= (1 << LED_MID);    // Mid
		}
		else
		{
			PORTD |= (1 << LED_LOW);    // Low
		}

		_delay_ms(100);
	}
}


Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:

Zdrojový kód: zdrojaky.zip

Overenie

Pri otáčaní potenciometra sa postupne prepínali jednotlivé LED diódy podľa nastavenej úrovne napätia. Tým som overil správnu funkciu ADC prevodníka aj vyhodnocovacej časti programu.

Aplikácia.

Video:

Čo by som urobil inak

Ja osobne by som doplnil ešte viac LED diód pre presnejšie zobrazenie stavu nabitia batérie. Používateľ by tak získal lepší prehľad o aktuálnom stave napätia. Ďalším zaujímavým rozšírením by bolo pridanie bzučiaka, ktorý by upozornil na veľmi nízky stav nabitia zvukovou signalizáciou.


Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.