Arduino 使用315Mhz无线模块通信并用1602液晶显示

分享到:

如果没有女友这事已成为一个不争的事实,那能不能做点什么改变呢,比如说别人快下班的时候给女朋友打电话交代说先把饭煮了,咱们程序员也可以拿起电话,发个短信给家里边那位----Arduino开发板,叫她把热水器打开,回家好洗个热水澡。哈哈,这样一来,咱们的Arduino开发板也具有了女友的部分功能了不是?
 
说干就干:
 
不积跬步,无以至千里。咱们既然想实现一个“机器人女友”,各种器官组件可少不了,心急吃不了热豆腐,咱们一步步来。
 
刚刚咱们说了发短信给Arduino,叫她完成一个打开热水器的动作。这个动作完美的实现其实不简单,但是我们可以将问题简单化。简单描述成一个命令接收系统,传输命令这个就叫做人机交互,今天咱们做的只有我们给机器人发指令,没有接收机器人回传数据的功能,只能叫做单向通信。后面功能做齐全了必然会有回传数据。那种双向通信称作人机交互也会更加妥当。
 
今天咱们实现的单向通信采用的是两块Arduino uno板,是为了将问题简化。实际制作的时候都是需要用外网控制,一般使用wifi路由器发送指令。当然,使用wifi路由器来做会更加节省成本,不过,也会更加复杂,这里暂时先不讨论,先讨论两块Arduino之间使用315Mhz无线模块进行单向通信的实现方案。
 
扯淡了半天,咱们也可以开始了。按照常理,No pic no JB.先来一张效果图。
 
完整接线图:
1
 
光看这个图可能什么也看不出来,咱们分步来说。
 
首先来看下具体的 材料:
 
一:Arduino UNO两块,一个发送一个接收。
2
 
PS:图片上的两块板上面的是原产进口的UNO r3作为发射端,下面的是华强北产的山寨UNO r3作为接收端,国产的做工不敢恭维,还好基本功能能用。继续看。
 
二:315Mhz无线接收模块
3
 
三:315Mhz无线发射模块
4
 
四:1602液晶两块(目的在于演示效果,实际场景是不需要液晶显示的)
5
 
五:50K电调一个(用于1602液晶的对比度调节)
6
 
六:面包板一块加杜邦线若干
7
 
OK,材料上齐,开始折腾。
 
1602液晶采用了4线接法。毕竟uno板的接口实在是有限。液晶接法参考了极客工坊的图。我这使用的是一个50K的电调同时控制两个1602液晶的对比 度。接法就是两块UNO板同时使用一个5v供电,对比度调节同时接到电调的输出端。这样两个液晶的对比度就是一样的了。可同时控制。
 
下面给出1602液晶的四线接线图
8
 
连接完之后再连接315Mhz的发射和接收模块。两个模块的连接都非常简单,发射端三根针脚。vcc接电源5V,gnd接gnd,ATAD为信号 线,选择一个数字接口连接就OK了。接收端有四个针脚,vcc和gnd就不说了,剩下的两个都是data信号线,这里只需要使用一根即可。注意,这里不 能随便选择数字接口。这里要选择2号或者3号接口,原因是因为在UNO板上面只有2号和3号接口是中断接口。
 
好了。下面看程序,程序中使用的针脚可能和图上不太一样。那些都可以根据自己的喜好自行调整。这里程序需要使用两个库文件。
 
LiquidCrystal.h是控制LCD液晶的库文件
 
RCSwitch.h则是控制315Mhz无线模块的库文件
发射端代码:
#include <LiquidCrystal.h>
#include <RCSwitch.h>
LiquidCrystal lcd(7, 6 , 5 , 11,10, 9, 8);
RCSwitch mySwitch = RCSwitch();
int i = 0;
void setup(){
   lcd.begin(16, 2);
   mySwitch.enableTransmit(12);
}
void loop(){
  i = i+1;
  mySwitch.send(i, 24);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("send:");
  lcd.setCursor(5,0 );
  lcd.print(i);
  delay(1000);
}
 
程序的意思是每个一秒发送一个数字并在1602上显示出来。
 
接收端代码:
#include <LiquidCrystal.h>
#include <RCSwitch.h>
LiquidCrystal lcd(7, 6 , 5 , 11,10, 9, 8);
RCSwitch mySwitch = RCSwitch();
 
void setup(){
  lcd.begin(16, 2);
  mySwitch.enableReceive(0);
}
void loop(){
  if (mySwitch.available()) {
    int value = mySwitch.getReceivedValue();
    if (value != 0) {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("receive:");
      lcd.setCursor(8, 0);
      lcd.print(value);
    }
    mySwitch.resetAvailable();
  }
}
 
很简单吧。
 
最后看张效果图,实时显示发送与接收的数据
9

 

继续阅读
Arduino驱动安装教程

Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。由一个欧洲开发团队于2005年冬季开发。其成员包括MassimoBanzi、DavidCuarTIelles、TomIgoe、GianlucaMarTIno、DavidMellis和NicholasZambetTI等。

超详细图文教程:如何制作一辆Arduino小车(含源码)

你想要学习如何制作你自己的机器人吗?制作机器人是自学电子学和计算机编程的一种非常好的方式。wikihow这个教程详细介绍了制作一个机器人的步骤:组装机器人;给机器人接线;连接电源 ;安装Arduino软件;给机器人编程。

Arduino厨房定时器教程,原理图+源码

一个基于Arduino UNO的经典厨房定时器,带LCD显示屏和蜂鸣器

Arduino,你为什么这么红?

如果浏览5—10年前的电子制作资料,你一定可以看到五花八门的单片机选型、各种手工焊制的电路板、纷繁复杂的飞线……而近几年的各种基于单片机的电子制作,则统一了许多,各种不同领域、不同功能的电子DIY作品,大都采用了同一种控制模块为核心——Arduino。

一篇帖子让你学会Arduino!从基础到实战

论坛里有很多不错的Arduino教程,为了能让大家更加方便的找到这些资料,增加一个帖子来存放链接。 大家可以通过这个帖子,从而找到社区内Arduino的分类资源,不必再东翻西找。

©2018 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss