在一些便利店的门口,我们经常会发现这样一个装置,当我们进入便利店时,会有一个音箱播放一次欢迎光临的音效。在本节课中我们将会一起来制作一个这样的迎客装置。
知识锦囊
PIR运动传感器

PIR运动传感器是一种红外运动传感器,可用于检测到是否有人或动物在其检测范围内经过。日常生活中见到的楼道感应灯,商场的电动门等,通常都是利用红外运动传感器,来实现有人经过时就开灯或者开门。
红外运动传感器的全称是“被动式红外运动传感器”,它由对红外光线敏感的特殊材质组成。当传感器闲置时,位于传感器检测范围内的物体,如房间、墙和桌子等,发射的红外线强度几乎恒定;而当有人或动物经过时,传感器检测到的红外线强度就会发生一定的变化,根据这些变化,就可以判定是否有人或动物经过。
OLED显示屏

OLED又叫有机电激光显示、有机发光半导体,其自发光、低功耗、反应速度快、高分辨率、质量轻等优点使它的应用领域非常广泛。0.96寸OLED显示屏是具有Grove I2C接口的单色(白色)128×64像素无源显示矩阵模块。在项目制作时,我们可以通过OLED显示屏显示时间、温湿度等传感器返回的数值,也可以直接显示字母、数字、图形甚至图案,实现可视化交互的效果。
实践操作
任务一:当有人靠近时,在显示器上显示欢迎光临
首先是硬件连接部分,我们将PIR运动传感器和OLED显示屏分别连接到主控板上。PIR运动传感器连接A0/D0接口,OLED显示屏连接到IIC接口。
接下来下载OLED显示屏的库文件U8x8lib.zip下载成功之后,将该文件解压到Ardunio的库文件夹中(文件夹地址:此电脑/文档/Arduino/libraries)完成传感器库的导入。
然后打开Arduino IDE,新建一个程序文件,编写以下代码:
#include <Arduino.h>#include <U8g2lib.h>#define BAT_ENABLE 19 //Grove端口使能引脚#define PIR_SENSOR 0 //PIR传感器连接到D0接口#ifdef U8X8_HAVE_HW_SPI#include <SPI.h>#endif#ifdef U8X8_HAVE_HW_I2C#include <Wire.h>#endifU8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // High speed I2C// U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); //Low spped I2Cvoid setup(void) {digitalWrite(BAT_ENABLE, HIGH);//启用Grove端口pinMode(PIR_SENSOR, INPUT);//设置PIR传感器为输入模式u8g2.begin();}void loop(void) {u8g2.clearBuffer(); // 清除缓存u8g2.setFont(u8g2_font_ncenB08_tr); // 设置字体if(digitalRead(PIR_SENSOR)){//如果检测到有人靠近u8g2.drawStr(0,10,"Hi,Welcome"); // 显示欢迎光临u8g2.sendBuffer(); //将信息传输到显示器}else{u8g2.drawStr(0,10,"see you"); // write something to the internal memoryu8g2.sendBuffer(); //将信息传输到显示器}delay(1000);}
然后,
- 单击工具>开发板> Wio LTE
- 单击工具>端口以选择正确的端口号。(不要选择COM1)
接下来单击Arduino IDE左上方的Upload按钮,几秒钟后,程序成功上传;
程序上传成功之后,尝试靠近和远离PIR运动传感器,观察OLED显示屏是否正确显示欢迎语句。
任务二:添加欢迎光临音效
一个完善的迎客装置除了显示文字之外,如果能够同时发出欢迎光临的声音提示,效果就会变得更好。在本任务中,我们将会在任务一的基础上加上声音提示的功能,接下来让我们看一下该怎么做吧!
首先是硬件连接部分,我们将PIR运动传感器、蜂鸣器和OLED显示屏分别连接到主控板上。PIR运动传感器连接A0/D0接口,OLED显示屏连接到IIC接口,蜂鸣器连接到A2/D2接口。
接下来让我们回到代码部分:
#include <Arduino.h>#include <U8g2lib.h>#define BAT_ENABLE 19 //Grove端口使能引脚#define PIR_SENSOR 0 //PIR传感器连接到D0接口#define buzzer_PIN 2//定义蜂鸣器连接至D2接口#ifdef U8X8_HAVE_HW_SPI#include <SPI.h>#endif#ifdef U8X8_HAVE_HW_I2C#include <Wire.h>#endifint a = 0; //设置一个变量U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // High speed I2C// U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); //Low spped I2Cvoid setup(void) {digitalWrite(BAT_ENABLE, HIGH);//启用Grove端口pinMode(PIR_SENSOR, INPUT);//设置PIR传感器为输入模式pinMode(buzzer_PIN, OUTPUT); //设置蜂鸣器的引脚为输出状态u8g2.begin();}void loop(void) {u8g2.clearBuffer(); // 清除缓存u8g2.setFont(u8g2_font_ncenB08_tr); // 设置字体if(digitalRead(PIR_SENSOR)){//如果检测到有人靠近if(a == 0){digitalWrite(buzzer_PIN,HIGH);//启动蜂鸣器delay(200);digitalWrite(buzzer_PIN,LOW);//关闭蜂鸣器a = 1;}u8g2.drawStr(0,10,"Hi,Welcome"); // 显示欢迎光临u8g2.sendBuffer(); //将信息传输到显示器}else{if(a == 1){digitalWrite(buzzer_PIN,HIGH);//启动蜂鸣器delay(200);digitalWrite(buzzer_PIN,LOW);//关闭蜂鸣器a = 0;}u8g2.drawStr(0,10,"see you"); // write something to the internal memoryu8g2.sendBuffer(); //将信息传输到显示器}delay(1000);}

上传程序之后,检查蜂鸣器是否传出了欢迎光临提示声音。
