Bluetooth moduļa izmantošana kopā ar viedtālruni

Šoreiz autors, izmantojot HC-05 sērijas Bluetooth moduli un ATMEGA328P sērijas mikrokontrolleri, ir izveidojis elektrisko principiālo shēmu, kura veic dažādu ierīču ieslēgšanu un izslēgšanu, izmantojot iepriekš minēto moduli un viedtālruņa nosūtītos simbolus, kuri darbojas kā komandas, kuras simbolizē konkrētu darbību, piemēram, izslēgt visas ierīces vai ieslēgt kādu. 

Lai ikdienas dzīvi padarītu daudz ērtāku, izmantojot šādu risinājumu, lietotājs, atrodoties gultā, var ieslēgt tējkannu, radio, gaismu u.c. Vienīgais, kas lietotājam ir nepieciešams, ir viedtālrunis, kas atbalsta Bluetooth savienojumu.

Komandu sarakstu ir iespējams papildināt. 




1.1.att. Elektriskā principiālā shēma dažādu ierīču vadībai, izmantojot Bluetooth



Viens no Bluetooth moduļiem tiek izmantots, lai simulētu viedtālruni, bet otrs ir pieslēgts pie mikrokontrollera, kurš tālāk saņem viedtālruņa nosūtītās komandas, izmantojot USART saskarni starp Bluetooth moduli un mikrokontrolleri. 

USART (universal synchronous and asynchronous receiver-transmitter) saskarne veic datu nosūtīšanu virknes veidā. 

Izmantojot USART, mikrokontrolleris saņem komandas, tad nosūta atbildi, ka konkrētās ierīces ir ieslēgtas vai izslēgtas, kur šajā gadījumā tiek izmantotas tikai divas ierīces: gaisma un motors.

Ja divas ierīces, tad nepieciešamas tikai divas komandas, kur katra no tām ir savai ierīcei, lai to ieslēgtu, bet neizmantotās komandas nozīmē, ka visas ierīces tiks izslēgtas, protams, to nozīme var būt arī citādāka. 

Kamēr viena ierīce ir ieslēgta, tikmēr otra ir izslēgta, taču var arī veikt izmaiņas programmas kodā, piemēram, lai varētu veikt attiecīgas darbības, izmantojot četras dažādas komandas, proti, katrai ierīcei divas komandas, kur viena būtu paredzēta, lai ieslēgtu, bet otra būtu paredzēta, lai izslēgtu. Protams, programmas kodu var papildināt, lai nodrošinātu lielāku funkciju skaitu.


Programmas koda piemērs:


#define F_CPU 8000000UL

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

#define BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (BAUDRATE * 16UL))) - 1)

void USART_Init();
char USART_RxChar();
void USART_TxChar(char data);
void USART_SendString(char *str);

int main(void){
char input_data;
DDRB = 0xFF;
USART_Init();
while(1){
input_data = USART_RxChar();

if(input_data == '1'){
PORTB |= (1<<PB1);
USART_TxChar('\r');
USART_SendString("Gaisma ieslegta\r");
Izslegt_motoru();
}
else if(input_data == '2'){
PORTB |= (1<<PB0);
USART_TxChar('\r');
USART_SendString("Motors ieslegts\r");
Izslegt_gaismu();
}
else if(input_data == '3'){
USART_SendString("Tejkanna ieslegta\n");
}
else{
USART_TxChar('\r');
USART_SendString("Visas ierices izslegtas\r");
Izslegt_gaismu();
Izslegt_motoru();
}
}
return 0;
}



void USART_Init(){

UCSR0B |= (1 << RXEN0) | (1 << TXEN0);
UCSR0C |= (1 << USBS0)| (1 << UCSZ00) | (1 << UCSZ01);
UBRR0L = BAUD_PRESCALE;
UBRR0H = (BAUD_PRESCALE >> 8);
}

char USART_RxChar(){

while (!(UCSR0A & (1 << RXC0)));
return(UDR0);
}

void USART_TxChar(char data){

UDR0 = data;
while (!(UCSR0A & (1<<UDRE0)));
}

void USART_SendString(char *str){

int i=0;
while (str[i]!=0)
{
USART_TxChar(str[i]);
i++;
}
}


void Izslegt_gaismu(){
PORTB &= ~(1<<PB1);
}

void Izslegt_motoru(){
PORTB &= ~(1<<PB0);
}



1.2.att. Kad tiek nosūtīta komanda, ar kuras palīdzību tiek ieslēgta gaisma


1.3.att. Kad tiek nosūtīta komanda, ar kuras palīdzību tiek izslēgtas visas ierīces


1.4.att. Kad tiek nosūtīta komanda, ar kuras palīdzību tiek ieslēgts motors





UZ SĀKUMU