本例实验采用红外对管
该传感器模块对环境光线适应能力强,其有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,绿色指示灯会亮起,同时信号输出接口输出数字信号(一个低电平信号),可通过电位器旋钮调节检测距离,有效距离范围 2~30cm,工作电压为 3.3V-5V。该传感器的探测距离可以通过电位器调节、具有干扰小、便于装配、使用方便等特点,可以广泛应用于机器人避障、避障小车、流水线计数及黑白线循迹等众多场合。
本例实验采用板载1路继电器:
型号为HF32F/005-ZS3,这是一款支持1路继电器输出的模块,可以控制高压高电流的负载设备,实现智能开关等功能。
本例实验的SPI彩色液晶1.77寸显示屏(ST7735驱动)
TFT177-SPI,型号为SX177QQVGA,像素128X160TFT,驱动芯片为ST7735S,这是一款支持SPI接口的1.77寸TFT彩屏,可以显示文字、图形、图片等内容,提高用户互动体验度。
电原理图
本例实验使用光敏电阻模块
光敏电阻(photoresistor )
1、光敏电阻的概念——光敏电阻是用硫化镉或硒化镉等半导体材料制成的特殊电阻器,其工作原理是基于内光电效应(光电导效应)。光照愈强,阻值就愈低,随着光照强度的升高,电阻值迅速降低,亮电阻值可小至1KΩ以下。光敏电阻对光线十分敏感,其在无光照时,呈高阻状态,暗电阻一般可达1.5MΩ。光敏电阻器是利用半导体的光电导效应制成的一种电阻值随入射光的强弱而改变的电阻器,又称为光电导探测器;入射光强,电阻减小,入射光弱,电阻增大。还有另一种入射光弱,电阻减小,入射光强,电阻增大。光敏电阻器一般用于光的测量、光的控制和光电转换(将光的变化转换为电的变化)。光敏电阻器对光的敏感性(即光谱特性)与人眼对可见光(0.4~0.76)μm的响应很接近,只要人眼可感受的光,都会引起它的阻值变化。设计光控电路时,都用白炽灯泡(小电珠)光线或自然光线作控制光源,使设计大为简化。光敏电阻的特殊性能,随着科技的发展将得到极其广泛应用。
2、光敏电阻的结构——在顶部有两片呈梳状的金属电极,一般分为九线跟七线,且两片金属电极的梳齿是互相交错的,从波纹状的梳齿间隙里露出来的物质即为半导体光敏层,从金属电极的上面还可以看到两只金属引脚的顶部。管芯中光导电体的膜越长,面积越大,受光后,其电阻值变化也越大。因此,一般都把光导电体膜做成弓字形(蛇形状),使两电极成为交叉的梳状。目前,用量最大的光导电体材料是硫化镉(CdS),且掺有少量铜、银等杂质,以有效提高光敏电阻的光灵敏度。结构示意图如图所示。
管芯是一块安装在绝缘衬底上带有两个欧姆接触电极的光电导体。光导体吸收光子而产生的光电效应,只限于光照的表面薄层,虽然产生的载流子也有少数扩散到内部去,但扩散深度有限,因此光电导体一般都做成薄层。上面是两片梳状金属电极,中间是半导体光敏层,实际上是通过涂抹、喷涂及烧结等方式,在陶瓷基板上形成一层很薄的半导体光敏层,下面是陶瓷基板,两侧是两只金属引脚。在整个结构的外部由一层透明树脂防潮膜包裹着,起到透光、防潮及加固的作用。剖面图如图所示。
3、光敏电阻的工作原理——是基于内光电效应(光电导效应)。在半导体光敏材料两端装上电极引线,将其封装在带有透明窗的管壳里就构成光敏电阻,为了增加灵敏度,两电极常做成梳状。用于制造光敏电阻的材料主要是金属的硫化物、硒化物和碲化物等半导体。通常采用涂敷、喷涂、烧结等方法在绝缘衬底上制作很薄的光敏电阻体及梳状欧姆电极,接出引线,封装在具有透光镜的密封壳体内,以免受潮影响其灵敏度。入射光消失后,由光子激发产生的电子—空穴对将复合,光敏电阻的阻值也就恢复原值。在光敏电阻两端的金属电极加上电压,其中便有电流通过,受到一定波长的光线照射时,电流就会随光强的增大而变大,从而实现光电转换。光敏电阻没有极性,纯粹是一个电阻器件,使用时既可加直流电压,也加交流电压。半导体的导电能力取决于半导体导带内载流子数目的多少。当光照射到光电导体上时,若光电导体为本征半导体材料,而且光辐射能量又足够强,光导材料价带上的电子将激发到导带上去,从而使导带的电子和价带的空穴增加,致使光导体的电导率变大。为实现能级的跃迁,入射光的能量必须大于光导体材料的禁带宽度Eg,即式中ν和λ—入射光的频率和波长。在黑暗的环境下,它的阻值很高;当受到光照并且光辐射能量足够大时,光导材料禁带中的电子受到能量大于其禁带宽度ΔEg 的光子激发,由价带越过禁带而跃迁到导带,使其导带的电子和价带的空穴增加,电阻率变小。光敏电阻器通常由光敏层、玻璃基片(或树脂防潮膜)和电极等组成。光敏电阻器在电路中用字母“R”或“RL”、“RG”表示。
4、光敏电阻的主要参数——
(1)光电流、亮电阻。光敏电阻器在一定的外加电压下,当有光照射时,流过的电流称为光电流,外加电压与光电流之比称为亮电阻,常用100LX表示。
(2)暗电流、暗电阻。光敏电阻在一定的外加电压下,当没有光照射的时候,流过的电流称为暗电流。外加电压与暗电流之比称为暗电阻,常用0LX表示。
(3)灵敏度。灵敏度是指光敏电阻不受光照射时的电阻值(暗电阻)与受光照射时的电阻值(亮电阻)的相对变化值。
(4)光谱响应。光谱响应又称光谱灵敏度,是指光敏电阻在不同波长的单色光照射下的灵敏度。若将不同波长下的灵敏度画成曲线,就可以得到光谱响应的曲线。
(5)光照特性。光照特性指光敏电阻输出的电信号随光照度而变化的特性。从光敏电阻的光照特性曲线可以看出,随着的光照强度的增加,光敏电阻的阻值开始迅速下降。若进一步增大光照强度,则电阻值变化减小,然后逐渐趋向平缓。在大多数情况下,该特性为非线性。
(6)伏安特性曲线。伏安特性曲线用来描述光敏电阻的外加电压与光电流的关系,对于光敏器件来说,其光电流随外加电压的增大而增大。
(7)温度系数。光敏电阻的光电效应受温度影响较大,部分光敏电阻在低温下的光电灵敏较高,而在高温下的灵敏度则较低。
(8)额定功率。额定功率是指光敏电阻用于某种线路中所允许消耗的功率,当温度升高时,其消耗的功率就降低。
(9)最高工作电压 最高工作电压是指光敏电阻器在额定功率下所允许承受的最高电压。
光敏电阻模块参数:
工作电压:DC3.3-5V
光敏电阻型号:5516
模块针脚:3针或4针(4针的多出一个模拟输出端A0)
【花雕动手做】实验五十:红外对管与光敏电阻双模块感应控制继电器
实验开源代码
#define ASC2_12
#define ST7735_CS_PIN 9
#define ST7735_CS_GPIO_PIN gpio_pin_1
#define ST7735_DC_PIN 1
#define ST7735_DC_GPIO_PIN gpio_pin_1
#define ST7735_RST_PIN 25
#define ST7735_RST_GPIO_PIN gpio_pin_1
#define ST7735_SCK_PIN 3
#define ST7735_SCK_GPIO_PIN gpio_pin_3
#define ST7735_MOSI_PIN 2
#define ST7735_MOSI_GPIO_PIN gpio_pin_2
#define ASC2_24
#define ST7735S_RGB_GBR_ORDER 0
#include "asr.h"
extern "C"{ void * __dso_handle = 0 ;}
#include "setup.h"
#include "myLib/asr_st7735.h"
#include "myLib/asr_event.h"
uint32_t snid;
void ASR_CODE();
void hardware_init();
SPITFT spi_tft(128, 160);
void sys_sleep_hook()
{
digitalWrite(28,0);
}
//{ID:250,keyword:"命令词",ASR:"最大音量",ASRTO:"音量调整到最大"}
//{ID:251,keyword:"命令词",ASR:"中等音量",ASRTO:"音量调整到中等"}
//{ID:252,keyword:"命令词",ASR:"最小音量",ASRTO:"音量调整到最小"}
/*描述该功能...
*/
void ASR_CODE(){
switch (snid) {
case 0:
digitalWrite(21,1);
spi_tft.clear((0x001F));
spi_tft.set_text_color((0xFFFF),(0x001F));
spi_tft.set_cursor(0,60);
spi_tft.draw_hanzi_32("智能管家");
break;
}
switch (snid) {
case 3:
digitalWrite(28,1);
spi_tft.clear((0xF800));
spi_tft.set_text_color((0xFFFF),(0xF800));
spi_tft.set_cursor(5,60);
spi_tft.draw_hanzi_24("打开继电器");
break;
case 4:
digitalWrite(28,0);
spi_tft.clear((0xFFFF));
spi_tft.set_text_color((0xF800),(0xFFFF));
spi_tft.set_cursor(5,60);
spi_tft.draw_hanzi_24("关闭继电器");
break;
case 5:
digitalWrite(21,1);
spi_tft.clear((0xFFFF));
spi_tft.set_text_color((0x001F),(0xFFFF));
spi_tft.set_cursor(5,60);
spi_tft.draw_hanzi_24("打开彩色屏");
delay(1000);
break;
case 6:
digitalWrite(21,0);
break;
}
//{ID:500,keyword:"命令词",ASR:"效果还行",ASRTO:"有你的鼓励挺好,谢谢"}
if(snid == 500){
digitalWrite(21,1);
spi_tft.clear((0xFFFF));
spi_tft.set_text_color((0xF800),(0xFFFF));
spi_tft.set_cursor(33,60);
spi_tft.draw_hanzi_32("谢谢");
}
}
void hardware_init(){
spi_tft.init();
spi_tft.set_direction(2);
spi_tft.set_text_wrap(true);
spi_tft.set_text_size(24);
spi_tft.set_bg_mode(1);
pinMode(4,input);
setPinFun(4,FIRST_FUNCTION);
pinMode(18,input);
dpmu_set_adio_reuse(PC2,DIGITAL_MODE);
dpmu_set_io_pull(pinToFun[18],DPMU_IO_PULL_UP);
setPinFun(18,SECOND_FUNCTION);
pinMode(19,input);
dpmu_set_adio_reuse(PC3,DIGITAL_MODE);
dpmu_set_io_pull(pinToFun[19],DPMU_IO_PULL_UP);
setPinFun(19,SECOND_FUNCTION);
while (1) {
if(!(digitalRead(4))){
digitalWrite(28,0);
digitalWrite(21,0);
delay(200);
enter_wakeup(2000);
delay(200);
//{ID:501,keyword:"命令词",ASR:"耍接官",ASRTO:"关闭所有"}
play_audio(501);
delay(1000);
}
if(!(digitalRead(19))){
digitalWrite(21,1);
digitalWrite(28,1);
delay(200);
enter_wakeup(2000);
delay(200);
//{ID:502,keyword:"命令词",ASR:"接耍官",ASRTO:"红外控制打开继电器"}
play_audio(502);
spi_tft.clear((0xFFFF));
spi_tft.set_text_color((0xF800),(0xFFFF));
spi_tft.set_cursor(5,60);
spi_tft.draw_hanzi_24("打开继电器");
delay(5000);
}
if(!(digitalRead(18))){
digitalWrite(21,1);
delay(200);
enter_wakeup(2000);
delay(200);
//{ID:503,keyword:"命令词",ASR:"官耍接",ASRTO:"光敏控制打开彩屏"}
play_audio(503);
spi_tft.clear((0xFFFF));
spi_tft.set_text_color((0x001F),(0xFFFF));
spi_tft.set_cursor(5,60);
spi_tft.draw_hanzi_24("打开彩色屏");
delay(5000);
}
delay(100);
}
vTaskDelete(NULL);
}
void setup()
{
digitalWrite(21,0);
//{speak:小爱-活泼女声,vol:18,speed:10,platform:haohaodada,version:V3}
//{playid:10001,voice:欢迎使用人工智能AI语音助手,用智能管家唤醒我}
//{playid:10002,voice:我退下了}
//{ID:0,keyword:"唤醒词",ASR:"智能管家",ASRTO:"我在"}
//{ID:3,keyword:"命令词",ASR:"打开继电器",ASRTO:"语音控制打开继电器"}
//{ID:4,keyword:"命令词",ASR:"关闭继电器",ASRTO:"语音控制关闭继电器"}
//{ID:5,keyword:"命令词",ASR:"打开背光",ASRTO:"语音控制打开背光"}
//{ID:6,keyword:"命令词",ASR:"关闭背光",ASRTO:"语音控制关闭背光"}
pinMode(28,output);
setPinFun(28,FIRST_FUNCTION);
pinMode(21,output);
setPinFun(21,SECOND_FUNCTION);
xTaskCreate(hardware_init,"hardware_init",256,NULL,100,NULL);
}
生成模型与编译烧录
实验记录视频
https://www.bilibili.com/video/BV14K411e7Xr/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987
实验五十:红外对管与光敏电阻双模块感应控制继电器