如何使用Arduino构建一个无线门铃

发布者:快乐时刻最新更新时间:2023-06-20 来源: elecfans关键字:Arduino  无线门铃  射频模块 手机看文章 扫描二维码
随时随地手机看文章

  我们都知道有线门铃系统需要电线和合适的插座才能令人满意地工作。由于有线门铃系统需要复杂的布线,需要有经验的人才能完成工作,无论是工作还是外观都不好。它的另一个问题是,如果您想为现有房屋安装有线门铃系统,则安装需要更多的精力和时间。由于温度和湿度以及其他环境因素,电线会损坏并导致短路。这就是无线门铃系统发挥作用的地方。尽管无线门铃系统的成本更高,但与有线门铃系统相比,无线门铃系统的定期维护比有线门铃系统低,这需要有经验的人进行维护。在安装方面,无线门铃系统的安装非常简单,无需经验人员即可安装。除此之外,无线门铃系统还具有摄像头、录像机等附加功能,外观时尚,完全无线,可以轻松安装在房子的任何地方。


  在这个项目中,我们将使用 Arduino 构建一个无线门铃。我们将有一个按钮,按下该按钮将无线播放我们选择的旋律,以指示有人在门口。对于无线连接,我们将使用 433 MHz 射频模块。一般来说,RF 模块必须始终伴随着解码器和编码器模块,但我们也可以使用本教程中使用的 Arduino 等微控制器来代替解码器和编码器模块。


  所需硬件:

  射频模块

  阿杜诺

  蜂鸣器

  按钮

  面包板

  连接线

  433 MHz 射频模块:

  对于我们基于 Arduino 的无线门铃,我们将使用 433 MHz 无线射频模块。RF模块,即射频模块,由两个模块组成,一个接收数据的模块称为接收器,一个传输数据的模块称为发射器。

poYBAGL_QiCAVTboAAPQXnCbIfM984.png

  射频发射器:

  发射器由一个调谐到 433MHz 频率的 SAW 谐振器、一个开关电路和一些无源元件组成。

poYBAGL_QhyACkSuAAB9cr2WROA944.png

  当数据引脚的输入为高电平时,开关将起到短路作用,振荡器运行,在一段时间内产生固定幅度的载波和固定频率。当数据引脚的输入为低电平时,开关作为开路,输出为零。这也称为幅移键控 (ASK)。我们将在本文后面讨论更多


  接收电路:

  射频接收器是一个简单的电路,由射频调谐电路、放大器电路锁相环电路组成。

poYBAGL_QhiAemAZAABWZEoH5gY968.png

  RF调谐器用于将电路调谐到特定频率,该频率需要满足发射频率。放大器电路用于从所有其他信号放大特定频率并增加特定频率的灵敏度。


  锁相环电路:

  锁相环电路 (PLL) 是一种用于我们希望从低频参考信号中获得高度稳定频率的设备类型的电路。PLL 是一个负反馈系统,由一个压控振荡器和一个相位比较器组成,其连接方式使振荡器频率始终与输入信号匹配,如下所示。

poYBAGL_QhSAE3ELAACiU5d9nSo895.png

  在 PLL 电路中,两个信号,即来自参考信号和来自压控振荡器 (VCO) 的信号,作为相位检测器的输入,相位检测器的输出是两个输入之间的差异,这个输出是两个信号的相位差。该输出包含频率分量,它们是信号的和和差。所以,这个输出作为低通滤波器的输入,它只允许低频,不允许高频信号通过。低通滤波器的输出被馈送到压控振荡器 (VCO),这个输入充当 VOC 的一个值,必须改变它以减小两个信号之间的相位差。VCO 发生变化,直到相位差最小,或者相位检测器的输出具有恒定的误差输出。这会导致循环锁定情况。


  通过所有这些组件,接收器接收来自天线的信号,然后通过射频调谐电路进行调谐,并使用 OP-Amp 放大这个微弱的信号,并将这个放大的信号进一步用作 PLL 的输入,从而使解码器锁定到输入的数字位上,这会产生噪声较小的输出。


  调制:

  调制是将数据转换为电信号的过程,这些调制后的信号用于传输。我们调制信号,以便我们可以将必要的信号与其他信号分开。如果没有调制,所有具有相同频率的信号将混合在一起,这将导致错误。调制方式有很多种,流行的有模拟调制、数字调制、脉冲调制和扩频。


  其中,无线传输中最常用的一种是数字调制。流行的数字调制技术是幅移键控、频移键控、相移键控、正交幅度调制。


  幅移键控 (ASK) 调制:

  在幅移键调制中,正弦载波会不断产生连续的高频载波,被调制的信号是二进制序列,这些信号使输入到开关电路的信号为高电平或低电平。

poYBAGL_Qg-ARLI8AABdccqLSNo070.png

  如上图所示,当输入为低电平时,开关将作为开路,输出为零。当开关的输入为高电平时,输出将是载波信号。


  Arduino射频发射器电路图

  我们的无线门铃项目需要一个发射器和接收器电路,每个电路都有自己的 Arduino 板。门铃发射器的电路图如下所示

pYYBAGL_QguALHqdAAI4dJbf1NQ649.png

  Arduino管脚5接门铃开关的一端,开关的另一端接电源电压。一个10kohm的下拉电阻连接到引脚5,如图所示。引脚 11 连接到发射器模块的数据引脚。Vcc 连接到电源电压,发射器模块的接地引脚接地。

pYYBAGL_QgeANtcRAAf-iBKusVc337.png

  在这里,我使用面包板连接模块,按钮用作门铃开关。

  Arduino射频接收器电路图

  同样,在接收器端,我们需要使用另一个带有射频接收器模块的 Arduino 板。然后Arduino门铃接收器 电路也有一个蜂鸣器,当按钮被按下时播放一些旋律。

pYYBAGL_QgSAa1qLAAHNnDJm1qo997.png

  在这里,我们将Arduino的引脚7连接到蜂鸣器正极,负极接地。VCC 的电源电压提供给接收模块,模块的 GND 引脚接地。接收模块的输出引脚连接到 Arduino 的第 12引脚。

poYBAGL_QgGAFP37AAi-TRXbYr4979.png

  接收模块由 4 个引脚组成,其中一个引脚接地,另一个引脚用于提供 VCC 电源,其余两个引脚用于数据传输。在上图中,一个蜂鸣器连接到 Arduino 的数字 7 引脚,而 Arduino 的第 12 引脚连接到接收模块输出引脚。

Arduino发射器代码说明

本页底部给出了 Arduino 发射器部分的完整代码。代码解释如下。

这些是使用 RF 模块发送或接收数据所需的头文件。这些库使 Arduino 和模块之间的连接变得简单。如果没有这些,您必须手动编写将 RF 模块与 Arduino 连接的代码。创建一个对象“驱动程序”以访问用于发送和接收数据的命令。您可以从 Github下载适用于 Arduino 的 Radio Head Library。

 

#include 
#include  // 没有实际使用,但需要编译
RH_ASK 驱动程序;

 

 Serial.begin() 用于查找 RF 发射器模块是否工作,我已将 PIN 5(数字引脚 5)初始化为输入引脚,它充当门铃开关。

 

无效设置()
{
   序列号.开始(9600);// 仅调试
   pinMode(5,输入);

 

此代码用于在程序启动时 RF TX 模块未初始化并且仅运行那些时打印消息“init failed”。

 

   如果 (!driver.init())
        Serial.println("初始化失败");

 

if函数检查引脚是逻辑高电平还是低电平,即门铃开关是打开状态还是关闭状态。指针 msg 包含我们要通过发送器发送的消息。需要注意的是,我们必须知道需要发送的字符数。这将有助于编写接收器代码。 

 

   如果(数字读取(5)==高){
 const char *msg = "a";

 

strlen()命令检查消息的长度,在本例中为 1。driver.send() 命令将数据发送到 tx 模块,然后将其转换为波形。命令 driver.waitPacketSent() 用于等待数据发送完毕。

 

driver.send((uint8_t *)msg, strlen(msg));
driver.waitPacketSent();

 

Arduino接收器代码说明

Receiver 程序也在本页末尾的 Transmitter 代码下方给出,或者可以从这里下载。您可以直接将它与您的硬件一起使用;代码解释如下。

这些是使用 RF 模块发送或接收数据所需的头文件。这些库使 Arduino 和 RF 模块之间的连接变得简单。如果没有这些,您必须手动编写将 RF 模块与 Arduino 连接的代码。

 

#include 
#include  // 没有实际使用,但需要编译

 

这些是为代码创建的头文件,用于将频率值等同于特定音符并获取音符值以获取音调。如果您想了解更多有关 pitches.h 或如何使用 Arduino 和蜂鸣器演奏旋律的信息,您可以参考这个Melody using Tone() FuncTIon教程。 

 

#include "pitches.h" //为音符添加等效频率
#include "themes.h" //添加注释值和持续时间

 

创建一个对象“驱动程序”以访问用于发送和接收数据的命令。

 

RH_ASK 驱动程序;

 

在串行监视器中打印消息。然后 if 条件检查初始化是否失败。

 

无效设置()
{
    序列号.开始(9600);// 调试目的
  如果 (!driver.init())
         Serial.println("初始化失败");
     别的
        Serial.println("完成");

 

整个代码处理所需旋律的音符、音高和持续时间

 

无效 Play_Pirates()
{
  for (int thisNote = 0; thisNote < (sizeof(Pirates_note)/sizeof(int)); thisNote++) {
    int noteDuraTIon = 1000 / Pirates_duraTIon[thisNote];//将持续时间转换为时间延迟
    音调(8, Pirates_note[thisNote], noteDuraTIon);
    int pauseBetweenNotes = noteDuration * 1.05; //这里1.05是节奏,增加播放更慢
    延迟(pauseBetweenNotes);
    无音(8);//停止8号针上的音乐
    }
}

 

命令uint8_t buf[1]将buf初始化为长度为 8 位的无符号整数,buf变量的大小为 1,正如我之前告诉你的,我们应该发送多少位并获取buf变量的长度以二进制形式。

 

无效循环()
{
        uint8_t buf[1];
    uint8_t buflen = sizeof(buf);

 

此代码检查我们是否接收到正确的数据,如果接收到的信号正确,它会播放歌曲。

 

    if (driver.recv(buf, &buflen)) // 非阻塞
      Serial.println("选中 -> '他是海盗'");
      Play_Pirates();
      Serial.println("停止");

 

  无线Arduino门铃工作

  发射器模块和 Arduino 一起连接在门附近,接收器模块和 Arduino 一起可以安装在房间的任何地方。当有人按下开关时,它会向Arduino的第5个引脚发送高脉冲,该引脚与发射器模块一起连接在门附近。在我们的接收器代码中,我们编写了一个命令——digitalRead(5),这个命令使 Arduino 继续读取这个引脚。当该引脚变为高电平时,Arduino 通过发送器发送数据,这些信号被接收器接收。连接蜂鸣器的 Arduino 读取这些信号,当接收到所需数据时,满足 if 函数,代码将启动函数Play_Pirates()并开始播放音乐。

pYYBAGL_QfeAfkFHAAbI5cU9_vQ355.png

门铃发射器代码


// ask_transmitter.pde

// -*- 模式:C++ -*-

// 如何使用 RadioHead 传输消息的简单示例

// 以非常简单的方式使用简单的 ASK 发送器。

// 使用 TX-C1 模块实现单工(单向)发送器



#include

#include // 没有实际使用,但需要编译



RH_ASK 驱动程序;

// RH_ASK 驱动程序(2000, 2, 4, 5); // ESP8266 或 ESP32:不要使用 pin 11





无效设置()

{

序列号.开始(9600);// 仅调试

pinMode(5,输入);

如果 (!driver.init())

Serial.println("初始化失败");

}



无效循环()

{

如果(数字读取(5)==高){

const char *msg = "a";

driver.send((uint8_t *)msg, strlen(msg));

driver.waitPacketSent();

延迟(200);

}

}




门铃接收器代码


#include

#include // 没有实际使用但需要编译

#include "pitches.h" //为音符添加等效频率

#include "themes.h" //添加注释值和持续时间



RH_ASK 驱动程序;



无效设置()

{

序列号.开始(9600);// 仅调试



如果 (!driver.init())

Serial.println("初始化失败");

别的

Serial.println("完成");

}



无效 Play_Pirates()

{

for (int thisNote = 0; thisNote < (sizeof(Pirates_note)/sizeof(int)); thisNote++) {



int noteDuration = 1000 / Pirates_duration[thisNote];//将持续时间转换为时间延迟

音调(8, Pirates_note[thisNote], noteDuration);



int pauseBetweenNotes = noteDuration * 1.05; //这里1.05是节奏,增加播放更慢

延迟(pauseBetweenNotes);

无音(8);//停止8号针上的音乐

}

}



无效循环()

{

uint8_t buf[1];

uint8_t buflen = sizeof(buf);



if (driver.recv(buf, &buflen)) // 非阻塞

{

Serial.println("选中 -> '他是海盗'");

Play_Pirates();

Serial.println("停止");

}

}


关键字:Arduino  无线门铃  射频模块 引用地址:如何使用Arduino构建一个无线门铃

上一篇:USB/HDMI 4x4拼接器如何实现异性拼接
下一篇:TDA1521音响电路

推荐阅读最新更新时间:2024-11-02 15:33

微软发布嵌入式学习库 为Arduino添加AI功能
微软研究院今年发布了一个全新的项目——将人工智能嵌入一个如同面包屑大小的处理器中。该项目称为“嵌入式学习库(ELl)”,它将帮助开发人员将机器学习模型构建并部署在像树莓派、Arduinos这样的嵌入式平台上。 一旦部署完成,机器学习模型将可以不依赖互联网而运行,这将会减少带宽限制,同时消除对网络延迟的担忧。此外,设备将会把个人的敏感信息保存在设备中,这将起到保护隐私的作用。 可以想象,研究人员可以通过这种方法来创建各种智能设备,比如用于智能农场的精准灌溉系统。 微软将树莓派3s与部署了最新技术的神经网络进行了比较,这些模型同样准确,但后者的运行速度提高了20倍。 嵌入式学习库的API支持使用C++和Python,你可以在微软的Gi
[嵌入式]
13岁极客DIY“谷歌眼镜”
Google Glass作为未来可穿戴设备的明星产品成为了众多极客模仿的对象,而今天一名13岁的男孩Clay Haight自己DIY了“Google Glass”,由Arduino Esplora上的传感器、Arduino LCD屏幕和一个3D打印镜架组成,能够使用语音命令来设置日历项、查看当地地图、温度和天气信息等等。 Clay表示:“眼镜佩戴起来非常的舒适,事实上当我们在家里戴上这副眼镜然后告诉我的父母现在的温度,这是多么的有趣。”Clay从小就展现了对DIY的天赋,在他8岁的时候他从他的外公手中拿到了一本关于事物如何创造和如何修复日常设备的书籍,对此他对电子、机器人和其他DIY项目产生了浓厚的兴趣,在他10岁的时
[手机便携]
13岁极客DIY“谷歌眼镜”
WiMAX技术及射频模块测试方案
1 WiMAX简介   无线接入互联网和无线多媒体数据业务的巨大需求推动了无线通信技术的快速发展,通信技术宽带化,IP化和移动化成为未来的发展趋势。 WiMAX 技术是以IEEE802.16系列标准为基础的宽带无线接入技术,近两年发展迅速,并逐渐成为城域宽带无线接入技术的发展热点。WiMAX系统主要有两个技术标准,一个是满足固定宽带无线接入的WiMAX802.16d标准,另一个是满足固定和移动的宽带无线接入技术WiMAX802.16e标准。WiMAX的关键技术主要包括以下几个方面:   (1)OFDM/OFDMA   正交频分复用OFDM是一种高速传输技术,是未来无线宽带接入系统/下一代蜂窝移动系统的关键技术之一。在WiMA
[模拟电子]
WiMAX技术及<font color='red'>射频模块</font>测试方案
奥地利微电子迷你摇杆被谷歌Arduino原型平台采用
    奥地利微电子的 EasyPoint™ 迷你操纵杆模块被纳入谷歌公司全新的 Android 配件开发套件参考设计     中国 —— 全球领先的高性能模拟 IC 设计者及制造商奥地利微电子公司(SIX 股票代码:AMS)宣布其 EasyPoint™ 迷你操纵杆模块被谷歌公司所选中,用于全新的 Android开放配件开发套件(ADK)( http://developer.android.com/guide/topics/usb/adk.html )。全新的参考设计平台采用 N50P111 EasyPoint™ 操纵杆模块,与 AS5013 线性霍尔传感器 IC 一起,为开发人员提供新的人机交互接口。     谷歌公司新
[手机便携]
基于ATMEGA8的Arduino Nano(UNO)开发板
简 介: 测试是否可以应用Arduino对其进行编程开发。实验证明,利用Arduino的 IDE无法对于MEGA进行ISP下载Bootloader。同时在后面的测试中,也没有能够利用原来的Bootloader完成对MEGA8的程序下载。具体原因不详。 后来经过对原来的MEGA328 Bootloader程序进行改进,可以进行正常的下载程序了。 关键词: MEGA8,Arduino,ISP   为什么想使用Arduino IDE对于ATMEGA8进行编程,在 Programming ATmega8 Using Arduino IDE - Arduino Project Hub 给出了如下的理由: Using a ch
[单片机]
基于ATMEGA8的<font color='red'>Arduino</font> Nano(UNO)开发板
Digi-Key 联手柴火x.factory在中国社区推广 Arduino 基础认证考试
全球电子元器件分销商 Digi-Key Electronics 今天宣布与中国的 Arduino 教学合作伙伴柴火 x.factory(前称柴火创客空间)建立战略合作伙伴关系,在中国社区推广 Arduino 基础认证考试。这项考试基于 Arduino 入门套件中介绍的概念,并对工程师在 Arduino 方面的电子、编程和物理计算知识水平提供官方认证。 Digi-Key 除了作为该项目的战略推广合作伙伴,还为前 100 位购买考试码者提供 30 元京东 (JD.com) 电子优惠券。工程师可以通过二维码购买考试存取码,并在Digi-Key 官方微信账号进行注册。我们将按照先到先得原则发放电子优惠券。 Digi-Key
[物联网]
Digi-Key 联手柴火x.factory在中国社区推广 <font color='red'>Arduino</font> 基础认证考试
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved