Ovládanie rýchlosti jednosmerného motora cez bluetooth: Rozdiel medzi revíziami
Zo stránky SensorWiki
Riadok 124: | Riadok 124: | ||
unsigned int adc_read(char a_pin); | unsigned int adc_read(char a_pin); | ||
</syntaxhighlight ></tab> | </syntaxhighlight ></tab> | ||
<tab name=" | <tab name="filenam22e.h"><syntaxhighlight lang="c++" style="background: LightYellow;"> | ||
#include <avr/io.h> | #include <avr/io.h> | ||
Verzia z 13:23, 12. máj 2025
Záverečný projekt predmetu MIPS / LS2025 - Samuel Gálik
Zadanie
Ovládanie rýchlosti otáčania jednosmerného motora pomocou Bluetooth aplikácie

Literatúra:
Analýza a opis riešenia
Pomocou aplikácie Bluetooth Electronics budem ovládať otáčky DC motora. Aplikácia komunikuje s Bluetooth modulom HC-05 pomocou grafického rozhrania aplikácie cez jazdca (slider), ktorý pri zmene hodnoty vyšle 5 znakov. V poradí ide najprv znak „*“, ktorý označuje začiatok posielanej informácie, následne 3 číslice, ktoré predstavujú otáčky motora a nakoniec znak „#“, ktorý označuje koniec vysielaných informácií. Nachádzajú sa tam aj dve tlačidlá jedno vyšle znak F, čo znamená zastavenie motora a druhé vyšle znak N, čo znamená nastavenie motora na polovicu maximálnych otáčok. Bluetooth modul má 6 pinov, z ktorých sa použijú 4: RX a TX na komunikáciu s Arduino Uno, VCC na napájanie 5V a GND na pripojenie k zemi. Následne prijatý signál pomocou Arduina spracujeme. Pomocou Timer1 v mikroprocesore ATmega328p vytvorí PWM signál, ktorý následne pošleme cez ochranný rezistor s hodnotou 330 Ohmov na NPN tranzistor. Tento signál umožní ovládať náš jednosmerný motor.





RX pin z Bluetooth modulu zapojíme na TX na Arduine a TX z Bluetooth modulu na RX na Arduine. Bluetooth modul je napájaný z Arduina, ktoré je v našom prípade napájané cez USB kábel. Na napájanie samotného jednosmerného motora použijeme externý 12 V zdroj, ktorý sme pripojili na tranzistor. Tranzistor ovládame PWM signálmi z Arduina.
Algoritmus a program
Na začiatku pridáme knižnice, potom inicializujeme sériovú komunikáciu a časovač Timer1. Potom kód čaká, kým nepríde znak. Po prijatí znaku skontroluje, či sa nejedná o znak „*“. Ak áno, vynuluje premenné a a i, potom vojde do cyklu while, kde začne načítavať ďalšie prichádzajúce znaky. V tomto cykle zostane dovtedy, kým neprečíta tri znaky alebo kým neprečíta znak „#“. Vnútri cyklu program kontroluje, či je znak medzi 0 až 9. Ak áno, priradí ho k správnej cifre v premennej a. Pomocou premennej i vieme priradiť číslo na správnu cifru vzhľadom na to, že máme string nas z hodnotami: 100, 10 a 1. Premenná i teda určuje, ktorú cifru vyberieme. Následne kód prepočíta hodnotu a nastaví ju do OCR1A, čím sa zmení hodnota pre PWM. Nakoniec ešte kód kontroluje, či neprišiel znak „N“ alebo „F“, ktoré buď nastavia motor na polovicu otáčok, alebo ho úplne zastavia.
#include <avr/io.h>
#define F_CPU 16000000UL
#include <stdio.h>
#include "urat.h"
#include <util/delay.h>
#define set_bit(ADDRESS,BIT) (ADDRESS |=(1<<BIT))
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
#define toggle_bit(ADDRESS,BIT) (ADDRESS ^=(1<<BIT))
int main(void)
{
int a; int i;
char ReceivedChar;
int nas[3] = {100, 10, 1,};
uart_init();
FILE mystdout = FDEV_SETUP_STREAM(uart_putc, NULL, _FDEV_SETUP_WRITE);
stdout = &mystdout;
DDRB|=(1<<PB1)|(1<<PB2);
TCNT1 = 0;
ICR1 = 4000;
OCR1A = 2000;
TCCR1A|=(1<<COM1A1)|(1<<WGM11);
TCCR1B|=(1<<CS11);
TCCR1B|=(1<<WGM12)|(1<<WGM13);
while(1)
{
ReceivedChar = uart_getc();
if(ReceivedChar == '*'){
a=0;i=0;
while(ReceivedChar != '#' && i < 3){
ReceivedChar = uart_getc();
if (ReceivedChar >= '0' && ReceivedChar <= '9'){
a= (nas[i] * (ReceivedChar - '0')) + a;
i++;
}
else{break;}
}
}
if (ReceivedChar == 'N'){
a=150;
}
if (ReceivedChar == 'F'){
a=100;
}
OCR1A = (40 * a)-4000;
printf(" %d ",a);
printf(" %d ",OCR1A);
}
return(0);
}
#include <avr/io.h>
void adc_init(void); // A/D converter initialization
unsigned int adc_read(char a_pin);
#include <avr/io.h>
void adc_init(void); // A/D converter initialization
unsigned int adc_read(char a_pin);
Zdrojový kód: zdrojaky.zip
Overenie
Na videu je možne vidieť, že po zmene jazdca v aplikácii sa mení rýchlosť otáčok motora.

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