制作我们的项目无线技术总是使它看起来很酷,并且扩展了它可以控制的范围。从使用普通的IR LED进行短距离无线控制开始,到使用ESP8266进行全球HTTP控制,都有许多方法可以无线控制某些东西。在这个项目中,我们学习如何使用433 MHz射频模块和AVR微控制器来 构建无线项目。
在这个项目中,我们要做以下事情:
- 我们将 Atmega8 用于RF发送器,将 Atmega8 用于RF接收器部分。
- 我们将LED和按钮与Atmega8微控制器连接。
- 在发送器端,我们将按钮与Atmega接口并发送数据。在接收器端,我们将无线接收数据并在LED上显示输出。
- 我们使用编码器和解码器IC来传输4位数据。
- 使用市场上便宜的RF TX-RX模块,接收频率为433Mhz。
所需组件
- Atmega8 AVR微控制器(2)
- USBASP编程器
- 10针FRC电缆
- 面包板(2)
- LED灯(2)
- 按钮(1)
- HT12D和HT12E对
- RX-TX射频模块
- 电阻器(10k,47k,1M)
- 跳线
- 5V电源
使用的软件
我们使用 CodeVisionAVR 编写我们的代码和软件 SinaProg 软件使用USBASP程序员上传我们的代码Atmega8的。
您可以从给定的链接下载这些软件:
CodeVisionAVR :http://www.hpinfotech.ro/cvavr_download.html
SinaProg: http ://www.ablab.in/sinaprog-hex-file-downloader-software-to-download-code-to-avr-microcontroller/#inline_content
在讨论原理图和代码之前,让我们了解带编码器-解码器IC的RF模块的工作原理。
433MHz射频发射器和接收器模块
这些是我们在项目中使用的发送器和接收器模块。它是可用于433 MHz的最便宜的模块。这些模块在一个通道中接受串行数据。
如果我们看到模块的规格,则发射器的额定输入电压为3.5-12V ,发射距离为20-200米。它确实以433 MHz频率以AM(音频调制)协议进行传输。我们可以在10mW功率下以4KB / S的速度传输数据。
在上图中,我们可以看到发送器模块的引脚排列。引脚从左到右分别是VCC,DATA和GND。我们还可以添加天线并将其焊接在上图所示的点上。
对于接收器规格,接收器具有5V dc额定值和4MA静态电流作为输入。接收频率为433.92 MHz,灵敏度为-105DB。
在上图中,我们可以看到接收器模块的引脚排列。四个引脚从左到右分别是VCC,DATA,DATA和GND。中间的两个引脚内部连接。我们可以使用任何一个或两个。但最好同时使用这两种方法来降低噪声耦合。
另外,数据表中未提及一件事,模块中间的可变电感器或POT用于频率校准。如果我们无法接收到发送的数据,则发送和接收频率可能不匹配。这是一个射频电路,我们需要在理想的发射频率点上调节发射器。同样,与发射器一样,该模块还具有一个天线端口。我们可以焊接成线圈形式的导线,以延长接收时间。
传输范围取决于提供给发射机的电压和两侧天线的长度。对于此特定项目,我们没有使用外部天线,而是在发射器端使用了5V。我们检查了5米的距离,它运行良好。
在RF发送器和接收器电路中了解有关RF对的更多信息。通过检查以下使用RF对的项目,您可以了解有关RF工作的更多信息:
- 射频控制机器人
- 红外至射频转换器电路
- 使用Raspberry Pi的RF远程控制LED
- 射频控制家用电器
电路原理图
射频发射器侧电路图
- atmega8的D7引脚-> HT12E的13引脚
- atmega8的引脚D6->引脚12 HT12E
- atmega8的D5引脚-> HT11E的Pin11
- atmega8的D4引脚-> HT12E的10引脚
- 按下Atmega引脚B0的按钮。
- HT12E的引脚15和16之间有1M欧姆的电阻。
- HT12E的引脚17到射频发射器模块的数据引脚。
- HT12E的引脚18到5V。
- HT12E的GND引脚1-9和引脚14以及Atmega的引脚8。
射频接收器侧电路图
- atmega8的D7引脚-> HT12D的13引脚
- atmega8的引脚D6->引脚12 HT12D
- atmega8的D5引脚-> HT12D的11引脚
- atmega8的D4引脚-> HT12d的10引脚
- LED到Atmega的Pin B0。
- HT12D的引脚14到RF接收器模块的数据引脚。
- HT12D的引脚15和16之间有47Kohm电阻。
- HT12D的GND引脚1-9和Atmega的引脚8。
- LED到HT12D的引脚17。
- 5V至Atmega的引脚7和HT12D的引脚18。
使用CodeVision为Atmega 8创建项目
安装这些软件后,请按照以下步骤创建项目并编写代码:
步骤1。打开CodeVision单击 File-> New- > Project 。确认对话框将出现。点击是
步骤2. CodeWizard将打开。单击第一个选项,即 AT90 ,然后单击确定。
步骤3.选择您的微控制器芯片,这里我们将使用Atmega8,如图所示。
步骤4:-单击端口。在变送器部分,按钮是我们的输入,输出4条数据线。因此,我们必须初始化Atmega的4个引脚作为输出。单击端口D。通过单击将Bit 7、6、5和4设为空白。
第5步:-单击 程序->生成,保存并退出 。现在,我们一半以上的工作已经完成
步骤6:-在桌面上创建一个新文件夹,以便我们的文件保留在该文件夹中,否则它将分散在整个桌面窗口中。根据需要命名文件夹,我建议使用相同的名称保存程序文件。
我们将有三个对话框,一个接一个地保存文件。保存另两个对话框后,对其他两个对话框执行相同的操作。
现在,您的工作区看起来像这样。
我们的大部分工作都是在向导的帮助下完成的。现在,我们只需要为发送器和接收器部分编写几行代码,就是这样……
按照相同的步骤为Receiver part创建文件。在接收器部分,只有Led是我们的输出,因此将端口B0位输出。
代码和说明
我们将编写代码以使用RF无线切换LED。本文末尾给出了发送器和接收器侧的Atmega的完整代码。
射频发射器的Atmega8代码:
首先包含 delay.h 头文件,以在我们的代码中使用延迟。
#包括
现在,进入代码的最后几行,您将在其中找到 while 循环。我们的主要代码将在此循环中。
在 While 循环中,当按下按钮时,我们将向PORTD发送0x10字节,当未按下按钮时,将向PORTD发送0x20字节。您可以使用任何值进行发送。
而(1) { if(PINB.0 == 1){ PORTD = 0x10; } if(PINB.0 == 0){ PORTD = 0x20; } } }
射频接收器的Atmega代码
首先在 void main 函数上方声明变量,以存储来自RF模块的传入字符。
#包括
现在进入 while 循环。在此循环中,将输入字节存储到char可变 字节中, 并检查输入字节是否与我们在发送器部分中编写的相同。如果字节相同,则将PortB.0设为高电平,并取PORTB.0的NOT来切换LED。
而(1) { 字节= PIND; if(PIND.7 == 0 && PIND.6 == 0 && PIND.5 == 0 && PIND.4 == 1) { PORTB.0 =〜PORTB.0; delay_ms(1000); }}}
建立项目
我们的代码已完成。现在,我们必须 构建我们的项目 。单击构建项目图标,如图所示。
生成 项目后,将在 Debug-> Exe 文件夹中生成一个HEX文件,该文件位于您之前保存文件的文件夹中。我们将使用此HEX文件通过Sinaprog软件将其上传到Atmega8。
将代码上传到Atmega8
根据给定的图将电路连接到程序Atmega8。将FRC电缆的一侧连接到USBASP编程器,另一侧将连接到微控制器的SPI引脚,如下所述:
- FRC母连接器的Pin1-> Atmega8的MOSI的Pin 17
- 引脚2连接到atmega8的Vcc,即引脚7
- 引脚5连接到atmega8的复位,即引脚1
- 引脚7连接到atmega8的SCK,即引脚19
- 引脚9连接到atmega8的MISO,即引脚18
- 引脚8连接到atmega8的GND,即引脚8
按照电路图连接面包板上的其余组件,然后打开Sinaprog。
我们将使用 Sinaprog 上传上面生成的Hex文件 , 因此将其打开,然后从Device下拉菜单中选择Atmega8。如图所示,从 Debug-> Exe 文件夹中选择HEX文件。
现在,单击“程序”。
完成后,对单片机进行了编程。使用相同的步骤在接收器侧对另一个Atmega进行编程。
完整的代码和演示视频如下。