在这次电晕大流行期间,电梯已成为每个人都触摸相同按钮的高风险场所。在许多地方,人们发现了防止与升降机按钮接触的技巧,例如使用抽纸,牙签或卫生纸巾来按下升降机按钮。
因此,在延续之前的Corona安全项目(例如自动消毒机,非接触式温度监控和社交距离检测器)之后,我们将使用Arduino Nano构建一个手势控制的电梯原型。
该非接触式电梯使用Arduino Nano,APDS9960手势传感器和OLED显示模块。使用此基于手势的控制面板,您可以通过手势轻松控制自己的电梯。APDS9960传感器用于读取手势。向上和向下手势用于设置楼层编号,向左手势用于关闭电梯门并根据楼层编号移动电梯,向右手势用于打开门。
所需组件
- Arduino纳米
- OLED显示模块
- APDS9960 RGB和手势传感器
- 面包板
- 跳线
APDS9960 RGB和手势传感器
APDS9960 RGB和手势检测模块是一个小型转接板,带有内置的APDS-9960传感器,紫外线和红外线阻挡滤光片,四个对不同方向敏感的独立二极管以及与I2C兼容的接口。该传感器可用于环境光和颜色测量,接近检测和非接触式手势感应。它的手势检测范围为10至20 cm,可用于控制微控制器,机器人和许多其他项目。
特征:
- 工作电压:2.4V至3.6V
- 工作范围:4-8英寸(10-20厘米)。
- I2C接口(I2C地址:0x39)。
- 环境光和RGB颜色感应,接近
- 光模块中的传感和手势检测
- I2C总线快速模式兼容接口,数据速率高达400 kHz。
电路原理图
下面给出了使用APDS9960的非接触式电梯的电路图。
我们正在将Arduino Nano与APDS9960传感器和OLED显示接口。APDS9960传感器和OLED显示器的VCC和GND引脚都连接到Arduino的3.3V和GND。APDS9960 Sensor和OLED Display的SCL和SDA引脚分别连接到Arduino的A5和A4引脚。
OLED和APDS9960引脚 |
Arduino纳米针 |
VCC |
3.3v |
地线 |
地线 |
SCL |
A5 |
SDA |
A4 |
这是使用Arduino进行手势控制的电梯的完整设置的样子:
要了解有关OLED显示器及其与其他微控制器的接口的更多信息,请单击链接。
代码说明
页面末尾提供了使用APDS9960的非接触式电梯的完整代码。在这里,我们正在解释代码的一些重要部分。在此程序中,我们将使用APDS9960和 Adafruit_SH1106库 。可以从Arduino IDE下载APDS9960库。要下载库,请转到 草图>库管理器>搜索 ,然后输入Arduino APDS9960。虽然可以从此处下载 Adafruit_SH1106库 。
因此,像往常一样,通过包含所有必需的库来开始代码。 Adafruit_SH1106.h 是原始Adafruit库的修改版本。
#包括
在接下来的几行中,定义变量以存储用户要去的当前楼层和楼层号。
int floornum = 0; int currentfloor = 0;
之后,输入上箭头,下箭头,开门和关门图片的位图。可以使用Image2cpp之类的转换器来生成图像的十六进制代码。要了解有关如何使用Image2cpp的更多信息,请遵循此Arduino QR代码生成器教程。
const unsigned char up PROGMEM = {0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00,………………………… ………………………………………………);const unsigned char down PROGMEM = {0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00,………………………… ………………………………………………);const unsigned char dooropen PROGMEM = {0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x0f,0xff,0xff,0xc0、0x1f,0xff,0xff,0xe0,``………………………… ………………………………………………);
在 setup() 函数中,以9600的波特率初始化串行监视器,以进行调试。然后在接下来的几行中,使用 begin() 方法初始化OLED显示屏和APDS9960传感器,如下所示:
Serial.begin(9600); 如果(!APDS.begin()){Serial.println(“初始化APDS9960传感器出错!”); } Serial.println(“检测手势…”); display.begin(SH1106_SWITCHCAPVCC,0x3C);
初始化显示和传感器之后,使用 clearDisplay() 方法清除显示缓冲区,并使用 display.setTextSize() 和 display.setTextColor() 方法设置字体大小和颜色。
display.setTextSize(2); display.setTextColor(WHITE); display.clearDisplay(); display.display();
在 void loop() 内部 , 不断检查是否做出任何手势。如果是,则读取手势值并检查它是哪个手势(上,下,右,左),然后在串行监视器上打印相应的读数。向上和向下手势用于设置用户要去的楼层号。左手势用于关闭电梯门并根据楼层号移动电梯,而右手势用于打开门。
如果(APDS.gestureAvailable()){int手势= APDS.readGesture();开关(手势){case GESTURE_UP:Serial.println(“ Detected UP pose”); display.clearDisplay(); floornum ++;首页1();打破;案例GESTURE_DOWN:Serial.println(“检测到的向下手势”); display.clearDisplay(); floornum-;首页1();打破;情况为GESTURE_LEFT:Serial.println(“ Detected LEFT pose”); display.clearDisplay();开始();打破; case GESTURE_RIGHT:Serial.println(“ Detected RIGHT手势”); display.clearDisplay();首页1();打破;默认值:break; }
的 和home1() 函数是用于绘制主显示用于电梯。它由向上箭头,向下箭头,开门,关门标志和当前楼层号组成。 drawBitmap() 函数用于在OLED显示器上绘制图像。 drawBitmap() 函数的语法如下:
drawBitmap(int16_t x,int16_t y,位图,int16_t w,int16_t h,颜色);
哪里:
int16_t x,int16_t y 是OLED显示器的X和Y坐标
位图是位图的名称
int16_t w,int16_t h是图像的高度和重量。
void home1(){display.setCursor(101,23); display.println(floornum); display.drawBitmap(23,0,uparrow,40,18,WHITE); display.drawBitmap(26,46,downarrow,40,18,白色); display.drawBitmap(0,15,dooropen,29,30,WHITE); display.drawBitmap(60,15,closedoor,29,30,WHITE); display.display(); }
的 开始() 函数是用来向上或向下移动的升力。为此,将当前楼层号与用户想要去的楼层号进行比较。如果楼层号大于当前楼层号。则电梯将向上移动,如果楼层号小于当前楼层号。然后升降机将向下移动。当当前楼层均为 和地板号 是相同的。
void start(){while(floornum> currentfloor){Serial.println(“ going UP”); currentfloor ++; display.drawBitmap(0,0,up,100,64,WHITE); display.setCursor(101,23); display.println(currentfloor); display.display(); display.clearDisplay(); delay(2000); } while(floornum <currentfloor){Serial.println(“ going Down”); 当前楼层-; display.drawBitmap(0,0,down,100,64,WHITE); display.setCursor(101,23); display.println(currentfloor); display.display(); display.clearDisplay(); delay(2000); } if(floornum == currentfloor){Serial.println(“ Reached”); display.clearDisplay(); 首页1(); Serial.print(currentfloor); }}
测试手势控制的非接触式升降机
硬件和代码准备好后,将Arduino Nano连接到笔记本电脑并上传下面给出的完整代码。如您所见,默认情况下,OLED将显示Elevator UI。
现在,如下面的视频所示,上下摇动手以设置要走的地板。然后做出向左的手势,以确认要去该楼层的电梯。如果要停止升降机,请用手做出正确的手势。
下面给出了该项目的完整工作视频和代码。希望您喜欢这个项目。如果您对此项目有任何疑问,请在评论部分中保留。