使我們的項(xiàng)目無線化總是讓它看起來很酷,并擴(kuò)展了可以控制的范圍。從使用普通紅外 LED 進(jìn)行短距離無線控制到 ESP8266 進(jìn)行全球 HTTP 控制,有很多方法可以無線控制某些東西。在本項(xiàng)目中,我們將學(xué)習(xí)如何使用 433 MHz RF 模塊和 AVR 微控制器構(gòu)建無線項(xiàng)目。
在這個項(xiàng)目中,我們做以下事情:-
我們將 Atmega8 用于射頻發(fā)射器,將Atmega8用于射頻接收器部分。
我們將 LED 和按鈕與 Atmega8 微控制器連接。
在發(fā)射器方面,我們將按鈕與Atmega連接并傳輸數(shù)據(jù)。在接收器側(cè),我們將無線接收數(shù)據(jù)并在LED上顯示輸出。
我們使用編碼器和解碼器IC來傳輸4位數(shù)據(jù)。
接收頻率為433Mhz,使用市場上廉價的RF TX-RX模塊。
所需組件
Atmega8 AVR 微控制器 (2)
10 針 FRC 電纜
面包板 (2)
發(fā)光二極管 (2)
按鈕 (1)
HT12D 和 HT12E 對
射頻模塊
電阻器 (10k,47k,1M)
跳線
5V電源
使用的軟件
我們使用CodeVisionAVR軟件編寫代碼,使用SinaProg軟件使用USBASP程序員將代碼上傳到Atmega8。
在介紹原理圖和代碼之前,讓我們先了解RF模塊與編碼器-解碼器IC的工作原理。
433MHz 射頻發(fā)射器和接收器模塊
這些是我們在項(xiàng)目中使用的發(fā)射器和接收器模塊。它是433 MHz最便宜的模塊,這些模塊在一個通道中接受串行數(shù)據(jù)。
如果我們看到模塊的規(guī)格,變送器的額定工作電壓為3.5-12V,發(fā)射距離為20-200米。它確實(shí)以433 MHz 頻率的 AM(音頻調(diào)制)協(xié)議傳輸。我們可以以 4KB/S 的速度以 10mW 的功率傳輸數(shù)據(jù)。
在上圖中,我們可以看到發(fā)射器模塊的引腳。從左到右,引腳是VCC,DATA和GND。我們還可以添加天線并將其焊接在上圖中表示的點(diǎn)上。
對于接收器規(guī)格,接收器的額定電壓為5V 直流,靜態(tài)電流為 4MA作為輸入。接收頻率為433.92 MHz,靈敏度為-105DB。
在上圖中,我們可以看到接收器模塊的引腳。四個引腳從左到右依次為VCC、數(shù)據(jù)、數(shù)據(jù)和GND。中間的兩個引腳在內(nèi)部連接。我們可以使用任何一個或兩個。但是,最好同時使用兩者來降低噪聲耦合。
此外,數(shù)據(jù)表中沒有提到一件事,模塊中間的可變電感或POT用于頻率校準(zhǔn)。如果我們無法接收傳輸?shù)臄?shù)據(jù),則發(fā)射和接收頻率可能不匹配。這是一個射頻電路,我們需要將發(fā)射器調(diào)諧到完美的發(fā)射頻率點(diǎn)。此外,與發(fā)射器相同,該模塊也有一個天線端口;我們可以以線圈形式焊接焊絲,以獲得更長的接收時間。
傳輸范圍取決于提供給發(fā)射器的電壓和兩側(cè)天線的長度。對于這個特定的項(xiàng)目,我們沒有使用外部天線,而是在發(fā)射器側(cè)使用了5V。我們檢查了5米的距離,效果很好。
電路圖
射頻發(fā)射器側(cè)電路圖
引腳 D7 的 atmega8 -> 引腳 13 HT12E
引腳 D6 的 atmega8 -> 引腳 12 HT12E
atmega8 的引腳 D5 -> 引腳 11 HT12E
引腳 D4 的 atmega8 -> 引腳 10 HT12E
按鈕固定 Atmega 的 B0。
HT12E 引腳 15 和 16 之間的 1M 歐姆電阻。
HT12E 的引腳 17 連接到射頻發(fā)射器模塊的數(shù)據(jù)引腳。
HT12E 至 5V 的引腳 18。
HT12E 的 GND 引腳 1-9 和引腳 14 以及 Atmega 的引腳 8。
射頻接收器側(cè)電路圖
atmega8 的引腳 D7 -> 引腳 13 HT12D
引腳 D6 的 atmega8 -> 引腳 12 HT12D
引腳 D5 的 atmega8 -> 引腳 11 HT12D
引腳 D4 的 atmega8 -> 引腳 10 HT12d
LED 連接到 Atmega 的引腳 B0。
HT12D的引腳14到射頻接收器模塊的數(shù)據(jù)引腳。
HT12D 引腳 15 和 16 之間的 47Kohm 電阻。
HT12D 的 GND 引腳 1-9 和 Atmega 的引腳 8。
LED 連接到 HT12D 的引腳 17。
5V 至 Atmega 的引腳 7 和 HT12D 的引腳 18。
使用 CodeVision 為 Atmega 8 創(chuàng)建項(xiàng)目
安裝這些軟件后,請按照以下步驟創(chuàng)建項(xiàng)目并編寫代碼:
第 1 步。打開 CodeVision 單擊“文件 -> 新建”-> 項(xiàng)目。將出現(xiàn)確認(rèn)對話框。點(diǎn)擊是
第 2 步。代碼向?qū)⒋蜷_。單擊第一個選項(xiàng),即 AT90,然后單擊確定。
第 3 步。選擇您的微控制器芯片,在這里我們將采用如圖所示的Atmega8。
第 4 步:-單擊端口。在變送器部分,按鈕是我們的輸入,輸出4條數(shù)據(jù)線。因此,我們必須初始化 Atmega 的 4 個引腳作為輸出。單擊端口 D.通過單擊使位 7、6、5 和 4 輸出。
第 5 步:-單擊程序 - >生成,保存并退出?,F(xiàn)在,我們一半以上的工作已經(jīng)完成
第 6 步:-在桌面上創(chuàng)建一個新文件夾,以便我們的文件保留在文件夾中,否則它將分散在整個桌面窗口中。根據(jù)需要命名您的文件夾,我建議使用相同的名稱來保存程序文件。
我們將有一個接一個的三個對話框來保存文件。對保存第一個對話框后將出現(xiàn)的其他兩個對話框執(zhí)行相同的操作。
現(xiàn)在,您的工作區(qū)如下所示。
我們的大部分工作都是在向?qū)У膸椭峦瓿傻摹,F(xiàn)在,我們只需要為發(fā)射器和接收器部分編寫幾行代碼,就是這樣......
按照相同的步驟為接收器部分創(chuàng)建文件。在接收器部分,只有 Led 是我們的輸出,因此使端口 B0 位輸出。
代碼和解釋
我們將編寫使用 RF 無線切換 LED的代碼。本文末尾給出了發(fā)射器和接收器側(cè)的 Atmega 的完整代碼。
射頻發(fā)射器的 Atmega8 代碼:
首先包含delay.h頭文件以在我們的代碼中使用 delay。
#include
#include
void main(void)
{
現(xiàn)在,來到代碼的最后一行,您將在其中找到一個 while循環(huán)。我們的主代碼將在此循環(huán)中。
在 While 循環(huán)中,我們將在按下按鈕時將0x10字節(jié)發(fā)送到 PORTD,并在未按下按鈕時發(fā)送0x20。您可以使用任何值進(jìn)行發(fā)送。
while (1)
{
if(PINB.0 == 1) {
PORTD = 0x10;
}
if(PINB.0 == 0) {
PORTD = 0x20;
}
}
}
射頻接收器的Atmega代碼
首先在 void main 函數(shù)上方聲明變量,用于存儲來自 RF 模塊的傳入字符。
#include
#include
#include
unsigned char byte = 0;
void main(void) {
現(xiàn)在來到while循環(huán)。在此循環(huán)中,將傳入字節(jié)存儲到 char 變量字節(jié),并檢查傳入字節(jié)是否與我們在發(fā)射器部分中寫入的字節(jié)相同。如果字節(jié)相同,請將端口 B.0設(shè)置為高電平,而不是使用 PORTB.0 來切換 LED。
while (1)
{
byte = PIND;
if(PIND.7==0 && PIND.6==0 && PIND.5==0 && PIND.4==1)
{
PORTB.0 = ~PORTB.0;
delay_ms(1000);
} } }
構(gòu)建項(xiàng)目
我們的代碼完成了?,F(xiàn)在,我們必須構(gòu)建我們的項(xiàng)目。單擊“構(gòu)建項(xiàng)目”圖標(biāo),如下所示。
構(gòu)建項(xiàng)目后,將在調(diào)試> Exe文件夾中生成一個十六進(jìn)制文件,該文件可以在您之前為保存項(xiàng)目而創(chuàng)建的文件夾中找到。我們將使用此十六進(jìn)制文件通過Sinaprog軟件上傳到Atmega8中。
將代碼上傳到 Atmega8
根據(jù)給定的圖表連接電路以編程Atmega8。將FRC電纜的一端連接到USBASP編程器,另一端將連接到微控制器的SPI引腳,如下所述:
FRC 母連接器引腳 1 -> 引腳 17,Atmega8 的 MOSI
引腳 2 連接到 atmega8 的 Vcc,即引腳 7
引腳 5 連接到 atmega8 的復(fù)位,即引腳 1
引腳 7 連接到 atmega8 的 SCK,即引腳 19
引腳 9 連接到 atmega8 的 MISO,即引腳 18
引腳 8 連接到 atmega8 的 GND,即引腳 8
按照電路圖連接試驗(yàn)板上的其余組件,然后打開Sinaprog。
我們將使用Sinaprog上傳上面生成的十六進(jìn)制文件,因此打開它并從設(shè)備下拉菜單中選擇 Atmega8。從調(diào)試> Exe 文件夾中選擇十六進(jìn)制文件,如下所示。
現(xiàn)在,單擊程序。
您已完成,您的微控制器已編程。使用相同的步驟在接收器側(cè)對另一個Atmega進(jìn)行編程。
Code for Transmitter Part:
#include
#include
void main(void)
{
DDRB=(0<
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=0
PORTB=(0<
// Port C initialization
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(1<
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<
// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(1<
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<
while (1)
{
if(PINB.0 == 1) {
PORTD = 0x10;
}
if(PINB.0 == 0) {
PORTD = 0x20;
}
}
}
Code for Receiver Part:
#include
#include
// Declare your global variables here
unsigned char byte = 0;
unsigned char lightON = 0;//light status
int LED_status = 0;
void main(void)
{
// Input/Output Ports initialization
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=Out
DDRB=(0<
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=0 Bit0=0
PORTB=(0<
// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<
while (1)
{
byte = PIND;
if(PIND.7==0 && PIND.6==0 && PIND.5==0 && PIND.4==1 && LED_status==0)
{
PORTB.0 = ~PORTB.0;
delay_ms(1000);
}
}
}
-
微控制器
+關(guān)注
關(guān)注
48文章
7576瀏覽量
151724 -
HTTP
+關(guān)注
關(guān)注
0文章
510瀏覽量
31358 -
ESP8266
+關(guān)注
關(guān)注
50文章
962瀏覽量
45170
發(fā)布評論請先 登錄
相關(guān)推薦
評論