Operácie

Monitor kapacity batérie: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
StudentMIPS (diskusia | príspevky)
 
(18 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
Záverečný projekt predmetu MIPS / LS2026 - '''Meno Priezvisko'''
Záverečný projekt predmetu MIPS / LS2026 - Samuel Igaz




Riadok 7: Riadok 7:




[[Obrázok:Ard_nano.jpg|400px|thumb|center|Vývojová doska ACROB.]]
[[Obrázok:Ard.pinout.png|400px|thumb|center|Arduino NANO Pinout]]


'''Literatúra:'''  
'''Literatúra:'''  
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]
* [https://docs.arduino.cc/resources/datasheets/A000005-datasheet.pdf Dokumentácia k doske NANO]
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]




Riadok 18: Riadok 17:
== Analýza  a opis riešenia ==
== 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.
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 na simuláciu rôznych úrovní napätia 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.
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.
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 svietiť. 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.
   
   


[[Súbor:Monitor baterie2.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]]
[[Súbor:Monitor baterie2.jpg|400px|thumb|center|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. Potenciometer B10k je pripojený na analógový vstup A0. Jeho krajné vývody sú pripojené na zem (GND) a napájacie napätie 5 V. LED diódy pripojené na digitálne piny D2, D3 a D4


[[Súbor:schema_monitor.jpg|400px|thumb|center|Schéma zapojenia.]]
[[Súbor:schema_monitor.jpg|400px|thumb|center|Schéma zapojenia.]]
Riadok 35: Riadok 33:
Použité súčiastky:
Použité súčiastky:


[[Súbor:schema_monitor.jpg|400px|thumb|center|Schéma zapojenia.]]
[[Súbor:Ard_nano.jpg|400px|thumb|center|Arduino NANO]]
 
[[Súbor:B10k2.jpg|400px|thumb|center|Potenciometer B10k.]]
 
[[Súbor:Resistor220.jpg|400px|thumb|center|Rezistor 220 Ohm]]


[[Súbor:B10k.jpg|400px|thumb|center|Potenciometer.]]
[[Súbor:Zelena_led.jpg|400px|thumb|center|LED Zelená]]


[[Súbor:Resistor220.jpg|400px|thumb|center|Rezistor]]
[[Súbor:Zlta_led.jpg|400px|thumb|center|LED Žltá]]


[[Súbor:schema_monitor.jpg|400px|thumb|center|Schéma zapojenia.]]
[[Súbor:Cervena_led.jpg|400px|thumb|center|LED Červená]]


=== Algoritmus a program ===
=== Algoritmus a program ===
Riadok 135: Riadok 137:




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: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
Zdrojový kód: [[Médiá:ProjektSamuelIgaz.zip|zdrojaky.zip]]


=== Overenie ===
=== Overenie ===
Riadok 143: Riadok 144:
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.  
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.  


[[Súbor:Monitor_baterie1.png|400px|thumb|center|Aplikácia.]]
[[Súbor:Monitor_baterie1.png|400px|thumb|center|Zapojenie]]


'''Video:'''
'''Video:'''
Riadok 154: Riadok 155:




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


[[Category:AVR]] [[Category:MIPS]]
[[Category:AVR]] [[Category:MIPS]]

Aktuálna revízia z 21:09, 7. jún 2026

Záverečný projekt predmetu MIPS / LS2026 - Samuel Igaz


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.


Arduino NANO Pinout

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 na simuláciu rôznych úrovní napätia 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 svietiť. Pre vysoké hodnoty sa rozsvieti zelená LED, pre stredné žltá LED a pre nízke červená LED.


Celkový pohľad na zariadenie.

Schéma zapojenia. Potenciometer B10k je pripojený na analógový vstup A0. Jeho krajné vývody sú pripojené na zem (GND) a napájacie napätie 5 V. LED diódy sú pripojené na digitálne piny D2, D3 a D4

Schéma zapojenia.

Použité súčiastky:

Arduino NANO
Potenciometer B10k.
Rezistor 220 Ohm
LED Zelená
LED Žltá
LED Červená

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);
	}
}


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.

Zapojenie

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.