arduino教程-12.红外线

arduino教程-12.红外线
topic
12.1 认识红外线
可见光、红外线和电波,都是电磁波的⼀种,
地锚机不锈钢旗杆制作远红外线和近红外线,⼈体在常温下所释放的红外线波长约10um(微⽶)。靠近可见光部分的近红外线,⼏乎不会散发热能,通常⽤于红外线通信、遥控和距离传感器
12.2 ⼈体红外线传感器
被动式(Passive)红外移动传感器,⽽红外线(Infrared)英⽂简称IR,所以此传感器⼜称为PIR移动传感器,⼀般通称为“⼈体红外线传感器”,所谓“被动式”侦测,代表这种传感器内部有两个侦测“窗⼝”,被侦测物体必须要⽔平移动,它才能⽐较出红外线的变化,若朝向它的正⾯移动,就⽐较不容易被侦测到。
热释电型传感器,热释电(pyroelectric)代表该模块会随着温度变化产⽣电⼦信号。传感器模块上的IC电路将会接收并处理传感器的信号,以⾼电位或低电位的形式输出。总之,⼈体红外线侦测模块,相当于电⼦开关,平常输出低电位(0V),侦测到⼈体移动时,变成⾼电位(3.3V)。
动⼿做12-1 监测⼈体移动
实验说明: 使⽤⼈体红外线传感器来点亮位于Arduino板⼦13端⼝的LED
**程序:**由于⼈体红外线传感器模块只会返回0与1两种状态值。
const byte pirPin =12;//红外线传感器信号端⼝
const byte ledPin =13;//LED端⼝
void setup(){
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);//LED端⼝设定成“输出”
}
void loop(){
boolean val =digitalRead(pirPin);//读取传感器值
if(val){
digitalWrite(ledPin, HIGH);
}else{
digitalWrite(ledPin, LOW);
}
}
屏式电脑
12.3 红外线遥控
红外发射
红外发射的遥控器发射的38K红外载波信号是由遥控器⾥的编码芯⽚对其进⾏编码。下⾯⽤TC9012芯⽚了解下编码⽅式。它是以⼀段引导码,⽤户码,数据码,数据反码组成,利⽤脉冲的时间间隔来区别是0还是1信号(⾼电平低电平之⽐约为1:1时被认为是信号0,),⽽编码就是由这些0 、1信号组成。同⼀个遥控器的⽤户码是不变的,⽤数据吗不同来分辨遥控器按的键不同。当按下遥控器按键时,遥
控器发送出红外载波信号,红外接收器接收到信号时程序对载波信号进⾏解码,通过数据码的不同来判断按下的是哪个键。单⽚机由接收到的01信号进⾏解码,由此判断遥控器按下的是什么键。
(编码⽅式详细参考附件)
红外线遥控接收器,都只对特定的频率信号(正确的名字叫做载波,通常是36kHZ或38kHZ)和“通关密语”有反应。这个“通关密
语”称为协议。
红外线遥控接收元器件,它的内部包含红外线接收元器件以及信号处理IC,常见的型号是TSOP4836和TSOP4838(后⾯两个数字代表载波频率)。
普通的红外线接收元器件不含信号处理IC,其主要规格是感应的红外线波长范围。
动⼿做12-2 使⽤IRremote扩展库解析红外线遥控值
安装Arduino IDE的时候就已经安装过⼀个RobotIRremote库,如果有的话,就把原来的删除,然后解压这个库⽂件。
程序: 请先把“IRremote”扩展库⽂件复制到Arduino的libraries⽂件夹。选择⽂件→⽰例→IRremote→IRrecvDemo。
#include <IRremote.h>
int RECV_PIN =11;
IRrecv irrecv(RECV_PIN);//声明⼀个红外接收对象,名叫irrecv,接收端⼝是11
decode_results results;//  声明⼀个存储接收值得变量
void setup(){
Serial.begin(9600);
}
void loop(){
//解析红外接收值,若decode()返回true,代表有收到新的数据。
if(irrecv.decode(&results)){
Serial.println(results.value, HEX);//读取解析后的数字,并以16进位格式输出。
}
}
遥控器的每个按键都对应了不同的编码,不同的遥控器使⽤的编码也不相同。
读取红外线原始(raw)格式
IRremote扩展库提供另⼀个“IRrecvDump”⽰例程序,能辨别并显⽰红外线遥控信号的格式名称,并输出接收器所收到的原始数据。
动⼿做12-3 使⽤红外线遥控器控制舵机
实验说明:取得红外线遥控器的句柄之后,你就可以⽤遥控器来控制Arduino,本例将⽰范通过红外线遥控舵机。
实验程序:将依据遥控器的左、右箭头键,调整舵机的旋转⾓度,以及“录像”按键打开或关闭板⼦上第13脚的LED。
#include <IRremote.h>
#include <Servo.h>
Servo servo;
const byte RECV_PIN =11;//
const byte LED_PIN =13;//
const byte SERVO_PIN =8;//
boolean sw = false;//
byte servoPos =90;//
IRrecv irrecv(RECV_PIN);//
decode_results results;//
void setup(){
pinMode(LED_PIN, OUTPUT);//
servo.attach(SERVO_PIN);//
servo.write(servoPos);//
}
void loop(){
if(irrecv.decode(&results)){//
switch(results.value){//
case0xC1C7C03F://若此数值等于“录像”
sw =!sw;//
digitalWrite(LED_PIN, sw);//应急通信系统
break;
case0xC1C7C43B://
if(servoPos >10){//
服务器硬件监控servoPos -=10;//
servo.write(servoPos);//
}
break;
case0xC1C744BB:
if(servoPos <170){
servoPos +=10;//
servo.write(servoPos);//
}
break;
}
}
}
动⼿做12-4 从Arduino发射红外线遥控电器
实验说明: IRremote扩展库也具备发射红外线遥控信号的功能,本单元将组装⼀个Arduino红外线遥控发射器,并从“串⼝监视器”指挥它来遥控家电
实验电路: 根据IRremote扩展库的设定,红外线发射LED必须接在第3端⼝,⽽且最好先串联⼀个330Ω电阻保护LED。
实验程序: 使⽤IRremote扩张库发射红外线信号之前,必须先声明⼀个“I”类型的对象IRsend irsend;,程序将通过此对象发射制定格式的信号,以发出NEC红外线为例,指令:irsend.sendNEC(红外线编码, 位数);
⽰例: 从串⼝获得任何字符时,Arduino发射红外线上⾯的信号;
#include <IRremote.h>
IRsend irsend;
弹片开关void setup(){
Serial.begin(9600);
}
void loop(){
ad()!=-1){
irsend.sendNEC(0xC1C7C03F,32);    Serial.println("Action!");
}
}

本文发布于:2024-09-22 01:08:21,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/285822.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:红外线   信号   接收   传感器
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议