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

Arduino 使用315Mhz无线模块通信并用1602液晶显示–Atmel技术社区.

 

如果没有女友这事已成为一个不争的事实,那能不能做点什么改变呢,比如说别人快下班的时候给女朋友打电话交代说先把饭煮了,咱们程序员也可以拿起电话,发 个短信给家里边那位—-Arduino开发板,叫她把热水器打开,回家好洗个热水澡。哈哈,这样一来,咱们的Arduino开发板也具有了女友的部分 功能了不是?
说干就干:
不积跬步,无以至千里。咱们既然想实现一个“机器人女友”,各种器官组件可少不了,心急吃不了热豆腐,咱们一步步来。
刚刚咱们说了发短信给Arduino,叫她完成一个打开热水器的动作。这个动作完美的实现其实不简单,但是我们可以将问题简单化。简单描述成一个命令接收 系统,传输命令这个就叫做人机交互,今天咱们做的只有我们给机器人发指令,没有接收机器人回传数据的功能,只能叫做单向通信。后面功能做齐全了必然会有回 传数据。那种双向通信称作人机交互也会更加妥当。
今天咱们实现的单向通信采用的是两块Arduino uno板,是为了将问题简化。实际制作的时候都是需要用外网控制,一般使用wifi路由器发送指令。当然,使用wifi路由器来做会更加节省成本,不过, 也会更加复杂,这里暂时先不讨论,先讨论两块Arduino之间使用315Mhz无线模块进行单向通信的实现方案。
扯淡了半天,咱们也可以开始了。按照常理,No pic no JB.先来一张效果图。
完整接线图:
1
光看这个图可能什么也看不出来,咱们分步来说。
首先来看下具体的 材料:
一:Arduino UNO两块,一个发送一个接收。
321505
PS:图片上的两块板上面的是原产进口的UNO r3作为发射端,下面的是华强北产的山寨UNO r3作为接收端,国产的做工不敢恭维,还好基本功能能用。继续看。
二:315Mhz无线接收模块
321506
三:315Mhz无线发射模块
321507
四:1602液晶两块(目的在于演示效果,实际场景是不需要液晶显示的)
321508
五:50K电调一个(用于1602液晶的对比度调节)
321509
六:面包板一块加杜邦线若干
321510
OK,材料上齐,开始折腾。
1602液晶采用了4线接法。毕竟uno板的接口实在是有限。液晶接法参考了极客工坊的图。我这使用的是一个50K的电调同时控制两个1602液晶的对比 度。接法就是两块UNO板同时使用一个5v供电,对比度调节同时接到电调的输出端。这样两个液晶的对比度就是一样的了。可同时控制。
下面给出1602液晶的四线接线图
321511
连接完之后再连接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();
  }
}
很简单吧。
最后看张效果图,实时显示发送与接收的数据
321512

发表评论

电子邮件地址不会被公开。 必填项已用*标注