RF Modules are popularly used in remote control system . In Quadcopter , Robot remote control , Industrial remote control, telemetry and remote sensing etc. Get more details here RF_Wiki
Basic Concepts:
RF module consists of Two Units Transmitter and Receiver. We will use two pic microcontrollers to create transmitter section and receiver section. In Transmitter section we will connect one pic18f2550 with Transmitter and this will transmit signal according to the commands. The Receiver section will be built with another pic18f2550 and receiver unit. This section will receive signal from transmitter unit and the receiver unit will send data to the microcontroller. Finally microcontroller will execute led switching according to instructions.
RF Transmitter :
RF Module ( Wireless Radio Frequency )Transmitter_Tx
RF Module ( Wireless Radio Frequency )Transmitter Pinout
RF Receiver :
RF Module ( Wireless Radio Frequency ) Receiver Rx
RF Module ( Wireless Radio Frequency ) Receiver Rx
RF Modules are popularly used in the remote control system. In Quadcopter, Robot remote control, Industrial remote control, telemetry and remote sensing etc. Get more details hereRF_Wiki
RF module interfacing tutorial
RF Module :
RF Module means Wireless Radio Frequency Module. RF module consists of two units. One Transmitter unit and another is Receiver unit. Basically, RF modules are used to building a wireless connection between two points. We can easily communicate over 300-500m distance through RF module . in this tutorial we are using RF Module at the 433Mhz frequency and it supports baud rate 9600. Although didn't try this. In this tutorial, I will use baud rate2400.
We will use UART communication to interface RF Module with microcontroller. As we did previously in Bluetooth Interfacing with Pic Microcontroller tutorial. Now let's take a look on RF Transmitter and Receiver respectively .
RF Transmitter :
RF Module ( Wireless Radio Frequency )Transmitter_Tx
max232 433mhz module
RF Receiver :
RF 433 MHz (Wireless Radio Frequency) Communication Between two Microcontroller [Step By Step Tutorial ]
RF Module ( Wireless Radio Frequency ) Receiver Pinout
MikroC Code :
Now open MikroC and Create a new Project .If you are an expert you don't have to follow this steps .
Mikro C Library Funtions :
UARTx_Init: This function will initialize USART option of Microcontroller with Baud rate . We will use baud rate 2400 . The code will be look like this :
UART1_Init(2400);
UARTx_Data_Ready: This checks if it is available to read or transmit data .
UARTx_Read_Text: To read text data .Look at the example .
if (UART1_Data_Ready() == 1) {
UART1_Read_Text( txt, ")" , 2); }
This is checking if data is available to read . ")" . The txt char array variable will be being stored until the ")" will be found . 2 means to try for 2 times . So , I think our text should not be longer than 2 character .
UARTx_Write_Text: This will send text data . Look at the example :
if (UART1_Tx_Idle() == 1) {// this will check , if the last data transmission is completed
UART1_Write_Text("button2"); }
UARTx_Write: This will send char data . Look at the example :
if (UART1_Tx_Idle() == 1) {// this will check , if the last data transmission is completed
UART1_Write( '(' ); }
Reducing Noise :
To reduce noise, we will use a trick. Before reading the data text we will keep a function and this will check the first character. If the character will be '(', it will be checked by an if statement. Finally read text function will be performed until the char ')' will be found. That means microcontroller will show us only the text between '(' and ')'.
Please follow the example:
If we send (A) , Lcd will show "A" . If we send (B) , we will get "B" . Unless we cant get any text output. If we send "(A" , this will show no output to LCD display.
In this project , we will measure surroundings temperature and it will be shown at MikroC USART Terminal . First of all we need to set up LM35 sensor with pic microcontroller and an ADC register will take data from the temperature sensor . After calculating the temperature in centigrade it will be sent to our computer's MikroC USART terminal through Bluetooth[HC-06] . That is the basic concepts of this project.
Bluetooth Based Temperature Meter Project using Microcontroller
We will need an ADC Converter so that microcontroller can read the temperature .
ADC [Analog to Digital Converter]:
ADCON1 Register
Basically ADC is like as voltage divider . According to voltage It produce output . bit 5 : VCFG0: Voltage Reference Configuration bit (VREF- source)
1 = VREF- (AN2)
0 = VSS or 0 volt
bit 4 :VCFG0: Voltage Reference Configuration bit (VREF+ source)
1 = VREF+ (AN3)
0 = VDD or 5volt
We
will set VCFG0[bit 5]=0and VCFG0[bit4]=0 . So we will get highest
value 5volt[1023] and lowest value 0volt[0].The ADCON1 is a 10 bit
register that means (2 to the power 10) is
it's highest counting capacity and the result is 1024 . So this
register can count from 0 to 1023 . When 0 volt , we get reading at RA0
pin 0 .When 5 volt , we get reading at RA0 pin 1023. It means 5volt
equivalent to 1023 .
If 1023 reading value equal to 5 volt.
So 1 reading value equal to 5/1023 volt
So 'read_val' reading value equal to (5/1023)*read_val .volt .
As
we know LM35 reading can be changed with 0.01 v per degree centigrade
change , the temperature calculation should be like that : 0.01 volt for 1 degree centigrade Temperature
so 1 ,, ,, (1/0.01) ,, ,, ,,
and (5/1023)*read_val volt for [{(5/1023)*read_val }/0.01] degree centigrade Temperature .
Mikro C Library Funtions :
UARTx_Init: This
function will initialize USART option of Microcontroller with Baud
rate . We will use baud rate 38400 . The code will be look like this :
UART1_Init(38400);
UARTx_Data_Ready: This will check if it is available to read or transmit data .
UARTx_Read_Text: To read text data .Look at the example .
if (UART1_Data_Ready() == 1) {
UART1_Read_Text( txt, ")" , 13); }
This is checking if data is available to read . ")" means , txt car array variable will be being stored until the ")" will found . 13 means to try for 13 times . So , i think our text should not be longer than 11 character .
UARTx_Write_Text: This will send text data . Look at the example :
if (UART1_Tx_Idle() == 1) {// this will check , if the last data transmission is completed
Bluetooth device has been becoming very popular for wireless communication . Bluetooth is a device that helps you to communicate with other through wireless connection . I am not going to describe about Bluetooth technology . If you have more interest about it , please follow the link of wikipedia Link.
In this tutorial , i will show you how to interface Bluetooth module with pic microcontroller . I am using HC-06 Bluetooth Module and PIC 18f2550 microcontroller for this purpose .
We will use USART to make connection between pic18f2550 and HC-06 . So, here is an important thing Baud Rate . This bluetooth module supports 38400 Baud Rate . Actually i don't have much knowledge about Baud Rate . All i know , it's a Symbol rate and differs from bit rate. Higher baud rate makes higher speed of transmission and connection speed. I had tried to understand it clearly from wikipedia , but i failed to completely understand . If you would like to know about Baud Rate , please try these links.
Baud Rate can be changed using "AT Command" like GSM Module. I tried , but i didn't get any impact . I am giving another link if you would like to change it . I think Baud Rate 38400 is fine , i didn't change it .
I think , it's not very essential and that's my personal opinion . Now lets start and take a look at the picture :
HC-06 Bluetooth Module
HC-06 Bluetooth Module [Details] :
Default password: 1234
Baud rate: 38400
Dimensions: 1.73 in x 0.63 in x 0.28 in (4.4 cm x 1.6 cm x 0.7 cm)
PIN OUT
PIN DESCRIPTION
1 KEY
2 VCC
3 GND
4 TXD
5 RXD
MikroC Project :
Now open MikroC and Create a new Project .If you are an expert you don't have to follow this steps .
Note :
Our microcontroller will only transmits and receives data from HC-06 . For this purpose we will use UART of MikroC . As we did in serial communication. PIC18f2550 transmitted text data and that was taken by our computer and PIC18f2550 also received data text from computer. That was the basic idea. Here we are using HC-06 instead of computer.
Mikro C Library Funtions :
UARTx_Init: This function will initialize USART option of Microcontroller with Baud rate . We will use baud rate 38400 . The code will be look like this :
UART1_Init(38400);
UARTx_Data_Ready: This will check if it is available to read or transmit data .
UARTx_Read_Text: To read text data .Look at the example .
if (UART1_Data_Ready() == 1) {
UART1_Read_Text( txt, ")" , 13); }
This is checking if data is available to read . ")" means , txt car array variable will be being stored until the ")" will found . 13 means to try for 13 times . So , i think our text should not be longer than 11 character .
UARTx_Write_Text: This will send text data . Look at the example :
if (UART1_Tx_Idle() == 1) {// this will check , if the last data transmission is completed
UART1_Write_Text("button2"); }
Reducing Noise :
To reduce noise , we will use a trick . Before reading the data text we will keep a function and this will check first character . If the character is '(' , it will be checked by an if statement. Finally read text function will be performed until the char ')' will be found. That means microcontroller will show us only the text between '(' and ')' . Please follow the example :
If we send (Omnia) , Lcd will show "Omnia" . If we send (PinkFloyd) , we will get "PinkFloyd" . Unless we cant get any text output. If we send "(fee ra huri" , this will show no output .
Source Code :
// LCD module connections
sbit LCD_RS at LATB7_bit;
sbit LCD_EN at LATB6_bit;
sbit LCD_D4 at LATB5_bit;
sbit LCD_D5 at LATB4_bit;
sbit LCD_D6 at LATB3_bit;
sbit LCD_D7 at LATB2_bit;
sbit LCD_RS_Direction at TRISB7_bit;
sbit LCD_EN_Direction at TRISB6_bit;
sbit LCD_D4_Direction at TRISB5_bit;
sbit LCD_D5_Direction at TRISB4_bit;
sbit LCD_D6_Direction at TRISB3_bit;
sbit LCD_D7_Direction at TRISB2_bit;
// End LCD module connections
char txt[16];
char chk;
int i=0,ckop=0;
void main() {
ADCON1=0x0E; // Configure RE1 pin as input
CMCON=7;
for(i=0;i<16;i++){txt[i]=' ';}
TRISA.F3=1;
TRISA.F4=1; // Initialize ADC
TRISA.F5=1;
TRISC.F0=1;
Lcd_Init();
UART1_Init(38400);
delay_ms(200); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursdhhdor off
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 4, "Welcome");
Lcd_Out(2, 2, "pictutorial.net");
delay_ms(1500);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 2, "Received Data");
while(1){
ckop=2;
if (UART1_Data_Ready() == 1){
chk = UART1_Read();
for(i=0;i<16;i++){txt[i]=' ';}
}
if(PORTA.F3==0){
delay_ms(1000);
if (UART1_Tx_Idle() == 1 && ckop==2) {
UART1_Write_Text("button1");
}
ckop=4;
}
if(PORTA.F4==0){
delay_ms(1000);
if (UART1_Tx_Idle() == 1 && ckop==2) {
UART1_Write_Text("button2");
}
ckop=4;
}
if(PORTA.F5==0){
UART1_Write_Text("AT+BAUD4");
}
if(PORTC.F0==0){
UART1_Write_Text("AT+BAUD6");
}
if(chk=='('){
UART1_Read_Text(txt,")",13); // reads text until 'enter' is found
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 2, "Received Data");
Lcd_Out(2,1,txt);
delay_ms(500);
for(i=0;i<16;i++){txt[i]=' ';}
}
}
}