“迎门人体检测/zh”的版本间的差异
502748957@qq.com(讨论 | 贡献) (Created page with "{| style="width: 800px;" |- | ==概述== *项目名称:Microduino迎门人体检测 *目的:当有人靠近时,彩灯变色并播报欢迎语音 *难度:中 *耗时:...") |
502748957@qq.com(讨论 | 贡献) (→调试过程) |
||
第72行: | 第72行: | ||
[[File:Dl6.jpg||600px|center|thumb]] | [[File:Dl6.jpg||600px|center|thumb]] | ||
点击“浏览”,选择“music”文件夹中的"001.wav"音频文件,将音频文件添加到软件中 | 点击“浏览”,选择“music”文件夹中的"001.wav"音频文件,将音频文件添加到软件中 | ||
− | [[File: | + | [[File:doorwelcome3.jpg||600px|center|thumb]] |
在”更新下载”选项中选择“更新”,更新完成后,音频文件就已写入flash中。 | 在”更新下载”选项中选择“更新”,更新完成后,音频文件就已写入flash中。 | ||
[[File:Dl8.jpg||600px|center|thumb]] | [[File:Dl8.jpg||600px|center|thumb]] | ||
第93行: | 第93行: | ||
此时热释传感器检测到附近有人后,LED灯会变换颜色,喇叭播放出欢迎语音 | 此时热释传感器检测到附近有人后,LED灯会变换颜色,喇叭播放出欢迎语音 | ||
[[File:Doorwelcome0.jpg||600px|center|thumb]] | [[File:Doorwelcome0.jpg||600px|center|thumb]] | ||
+ | |||
==程序说明== | ==程序说明== | ||
*主函数部分 | *主函数部分 |
2015年10月14日 (三) 07:35的版本
概述
本次教程我们将使用Microduino产品模块快速搭建一个迎门人体检测体统, 该系统通过热释传感器探测3米范围内是否有人靠近,在有人靠近时,可以通过彩色LED灯变换色彩进行提示,并播报出欢迎语音。 材料清单
实验原理迎门人体检测系统主要分为检测与控制两个部分。检测部分采用红外热释传感器Microduino-PIR,能探测附近人体的红外特征信号。控制部分为声光控制,发光部件采用Microduino-Lantern模块,能让LED呈现美轮美奂的颜色;音频部分通过Microduino-Aduio模块管理音频文件,Microduino-Amplifier功率放大模块驱动2个喇叭发出洪亮的声音。 整体系统的控制原理即接入以上两个部分,Microduino-Core核心通过PIR传感器探测到附近有人靠近后,控制Lantern模块变换颜色,Auido模块播报“欢迎光临”语音,从而达到迎宾欢迎的效果。
Microduino-PIR/zh 人体都有恒定的体温,一般在37摄氏度,所以会发出特定波长10um左右的红外线,热释传感器就是通过被动式红外探头探测10um左右红外线而进行工作的。人体发射的10um左右的红外线经过菲涅尔滤光片增强后聚集到红外探头上。 红外探头通常采用热释电元件,这种元件在接受到人体红外辐射温度发生变化时就会失去电荷平衡,向外释放电荷,后续电路经过处理就能产生可以处理的电信号。 菲涅尔透镜利用透镜的特殊光学原理,在探测器前方产生一个交替变化的“盲区”和“高灵敏区”,以提高他的探测接收灵敏度。当有人从透镜前走过时,人体发出的红外线就不断地交替从“盲区”进入“高灵敏区”,这样就使接收到的红外信号以忽强忽弱的脉冲形式输入,从而增强其能量幅度。热释红外传感器只有配合菲涅尔透镜使用才能发挥最大作用。 文档调试过程
将Microduino-Core与Microduino-USBTTL叠加(无上下顺序),通过USB数据与电脑连接起来。 打开Arduino IDE编程软件,点击【文件】->【打开】 浏览到项目程序地址,点击“body_welcome.ino”程序打开。 点击【工具】,在板选项里面选择板卡(Microduino-Core),在处理器选项里面选择处理器(Atmega328p@16M,5V),再在端口选项里面选择正确的端口号,然后直接烧录程序。 使用USB数据线将Microduino-Audio模块与电脑连接。 连接成功能显示出一个名为Microduino Audio的CD驱动器,然后执行以下步骤: 打开CD驱动器后会出现音乐更新软件Music Update tool,选择“音频加载”选项; 点击“浏览”,选择“music”文件夹中的"001.wav"音频文件,将音频文件添加到软件中 在”更新下载”选项中选择“更新”,更新完成后,音频文件就已写入flash中。
将热释传感器接到Sensorhub的D4接口,Lantern灯接到Sensorhub的A0接口。 把用到的设备叠加起来(无上下顺序)
把叠加好的模块放入外壳中,把喇叭、热释传感器、LED灯固定到相应位置 将两个喇叭接到Amplifier的扬声器接口 用USB数据线连接Audio模块的USB接口,确认系统已供电 此时热释传感器检测到附近有人后,LED灯会变换颜色,喇叭播放出欢迎语音 程序说明
#include "audio.h" //audio模块功能
#include "key.h" //按键检测功能
#include <Adafruit_NeoPixel.h>
#define PIN A0 //LED灯控制引脚
Adafruit_NeoPixel strip =
Adafruit_NeoPixel(12, PIN, NEO_GRB + NEO_KHZ800);
#include <SoftwareSerial.h>
uint32_t color[9] =
{
strip.Color(0, 0, 0), strip.Color(255, 0, 0),
strip.Color(248, 141, 30), strip.Color(255, 255, 0),
strip.Color(0, 255, 0), strip.Color(0, 127, 255),
strip.Color(0, 0, 255), strip.Color(139, 0, 255),
strip.Color(255, 255, 255)
}; //LED灯要显示的9种颜色
#define body_pin 4 //热释传感器输入引脚
int i = 1;
int music_vol = 28; //初始音量0~30
boolean play_pause;
boolean play_stop;
void setup()
{
// initialize serial:
Serial.begin(9600); //串口初始化
pinMode(body_pin, INPUT);
key_init();
audio_init(DEVICE_Flash, MODE_One_END, music_vol);
//audio模块初始化:存储设备为Flash,单次播放模式,音量设置28
strip.begin(); //初始化LED
strip.show(); // Initialize all pixels to 'off'
for (int i = 0; i < 9; i++)
{
colorWipe(color[i]);
delay(300);
} //LED循环显示一遍9种颜色
colorWipe(color[0]); //LED灯关闭
}
void loop()
{
if (key_get(body_pin, 0)) //判断热释传感器触发
{
colorWipe(color[random(1, 10)]); //LED随机显示一种颜色
audio_choose(1); //控制audio播报语音
}
Serial.println(digitalRead(body_pin));
if (!digitalRead(body_pin)) // 判断热释传感器没有触发
colorWipe(color[0]); //LED灯关闭
}
void colorWipe(uint32_t c)
{
for (uint16_t i = 0; i < strip.numPixels(); i++)
{
strip.setPixelColor(i, c);
strip.show();
}
}
#include "arduino.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
//#define AUDIO_PORT Serial1 //Core+
#define AUDIO_PORT mySerial //Core
byte sn_reset[4] = //复位指令
{
0x7E, 0x02, 0x0C, 0xEF
};
byte sn_choose[6] = //选择曲目指令
{
0x7E, 0x04, 0x03, 0x00, 0x01, 0xEF
};
byte sn_vol[5] = //调节音量指令
{
0x7E, 0x03, 0x06, 0x18, 0xEF
};
byte sn_device[5] = //设备设置指令
{
0x7E, 0x03, 0x09, 0x01, 0xEF
};
byte sn_pause[4] = //暂停指令
{
0x7E, 0x02, 0x0E, 0xEF
};
byte sn_play[4] = //播放指令
{
0x7E, 0x02, 0x0D, 0xEF
};
byte sn_mode[5] = //设置播放模式指令
{
0x7E, 0x03, 0x11, 0x00, 0xEF
};
byte sn_down[4] = //下一曲目指令
{
0x7E, 0x02, 0x01, 0xEF
};
byte sn_up[4] = //上一曲目指令
{
0x7E, 0x02, 0x02, 0xEF
};
byte sn_eq[5] = //设置播放风格指令
{
0x7E, 0x03, 0x07, 0x01, 0xEF
};
//-----------------------------
void audio_pause() //音频暂停
{
AUDIO_PORT.write(sn_pause, 4);
delay(50);
}
void audio_play() //音频播放
{
AUDIO_PORT.write(sn_play, 4);
delay(50);
}
//play eq (Normal/Pop/Rock/Jazz/Classic/Base) 0-5
void audio_eq(byte _audio_eq) //设置播放风格
{
sn_mode[3] = _audio_eq;
AUDIO_PORT.write(sn_eq, 5);
delay(100);
}
#define MODE_loopAll 0
#define MODE_loopOne 1
#define MODE_One_STOP 2
#define MODE_One_END 4
//play mode (ALL/FOL/ONE/RAM/ONE_STOP) 0-4
void audio_mode(byte _audio_mode) //设置播放模式
{
sn_mode[3] = _audio_mode;
AUDIO_PORT.write(sn_mode, 5);
delay(100);
}
#define DEVICE_Flash 5
#define DEVICE_TF 1
//device select (U/TF/AUX/SLEEP/FLASH) 0-4
void audio_device(byte _audio_device) //设置存储方式
{
sn_device[3] = _audio_device;
AUDIO_PORT.write(sn_device, 5);
delay(1500);
}
void audio_down() //播放下一曲目
{
AUDIO_PORT.write(sn_down, 4);
delay(500);
}
void audio_up() //播放上一曲目
{
AUDIO_PORT.write(sn_up, 4);
delay(500);
}
void audio_vol(byte _audio_vol) //设置音量
{
sn_vol[3] = _audio_vol;
AUDIO_PORT.write(sn_vol, 5);
delay(50);
}
void audio_choose(byte _audio_choose) //选择曲目
{
sn_choose[4] = _audio_choose;
AUDIO_PORT.write(sn_choose, 6);
delay(100);
}
void audio_reset() //音频复位
{
AUDIO_PORT.write(sn_reset, 4);
delay(500);
}
void audio_init(int _audio_init_device,
int _audio_init_mode, int _audio_init_vol)
{
AUDIO_PORT.begin(9600);
delay(500);
audio_reset();
audio_device(_audio_init_device);
audio_mode(_audio_init_mode);
audio_vol(_audio_init_vol);
audio_pause();
}
视频 |