创建一个由 Android 应用控制的人数统计
组件和用品
| × | 1 | ||||
| × | 2 | ||||
| × | 3 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 3 | ||||
| × | 3 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
| ||||
|
关于这个项目
说明
首先,人数计数器是一种检测通过入口的人数的设备。当我不得不去度假两周时,我曾想过让一个人柜台来确保我的房间。此外,我想使用人员计数器作为警报,警告没有权限进入房间的人。激光是使用 LDR 精确计数的最佳选择,因为它具有速度特性,因此我决定使用带有 LDR 的激光进行计数工作。我的房间有三个可能的入口(两扇门和一扇窗),所以我使用了三个激光器和三个 LDR。但是,我意识到如果我想在哪个入口的激光打开或是否打开警报之间进行选择,我需要远程控制设备。所以我添加了一个 HC-06 蓝牙模块,以通过我创建的 Android 应用程序与设备进行通信。此外,Android 应用程序会显示进入您要观察的任何入口的人数。
为了支持我的项目和文章,你可以在这里访问我的网站 :)
创建应用
有很多不同的方法可以创建一个 Android 应用程序,例如将代码从 HTML 转换为 Java 或使用 Python 对应用程序进行编程。然而,MIT App Inventor 是最简单的方法,因为当你想制作一个安卓应用程序时,它的拖放结构是最简单的方法,但不要忘记它尚未与 iOS 兼容。
人数计数器!是应用程序的名称,它包括两个名为 Screen1 和 Screen2 的屏幕。
屏幕 1
继续到主屏幕是主屏幕,但首先必须正确输入在 MIT App Inventor 中设置的密码。 (我设置的默认密码是“counter”。)
图> 图> 图>屏幕 2
它是主屏幕和控制Arduino板的菜单,Arduino发送的人数统计结果显示在该屏幕上。
您可以选择打开哪个激光或是否打开警报,在此屏幕上您还可以看到人数计数器的结果并将其设置为从零开始。
图> 图>图> 图> 图>
如何使用激光和 LDR 制作人员计数器
激光(通过受激辐射进行光放大)是一种基本上将光包通过非常直线发送到目标的设备。如果激光直接指向自身,LDR(光敏电阻器)可以轻松检测到光强的增加。当激光器和 LDR 之间有障碍物时,LDR 会检测到光强度的降低。因此,如果您可以计算最佳水平范围内的每次下降,您就会有一个人员计数器。根据我对 LDR 的实验,最佳级别的范围必须在 150 到 350 之间。
图> 图>
连接
- Arduino Uno 模块
- 引脚 2 ---------Laser_Module_1
- 引脚 3 -------- Laser_Module_2
- 引脚 4 -------- Laser_Module_3
- 引脚 5 -------- 蜂鸣器
- 引脚 6 -------- HC-06 蓝牙模块 (TX)
- 引脚 7 ---------HC-06 蓝牙模块(RX)
- 引脚 8 ---------Control_Led_1
- 引脚 12 ---------Control_Led_2
- 引脚 13 ----------Control_Led_3
- 引脚 9 ------- RGB_Module (R)
- 引脚 10 ------ RGB_Module (G)
- 引脚 11 ------- RGB_Module (B)
- AO------------LDR_1
- A1------------LDR_2
- A2------------LDR_3
在完成所有部件的连接之前,确保激光器直接朝向 LDR。
在我对设备进行测试并录制了测试视频后,我将设备分为三个部分,用于三个不同的入口。自从我使用它们以来,我就没有怀疑过我房间的安全性。
代码
- PeopleCounter_with_Lasers.ino
PeopleCounter_with_Lasers.inoArduino
/////////////////////////////////////////////// // // 在 Android 设备上使用激光创建人员计数器 // // by Kutluhan Aktar // // /////////////////////// //////////////////////// 该项目的目的是制作一个人数计数器,使用激光和 LDR 检测进入房间的人数,以及使用 android 应用程序控制它。//// 使用 1K 欧姆电阻将 LDR 的一条腿连接到 GND。//// 确保激光直接朝向 LDR。//// 如果你想要人数计数器的结果是准确的,请正确设置 LDR 的最佳水平。////// Connections://// Arduino Uno// Laser_Module_1// Pin 2 ------------ ------------// Laser_Module_2//引脚3 ------------------------// Laser_Module_3//引脚4 -----------// 蜂鸣器// 引脚 5 ------------------- -----// HC-06 蓝牙模块// Pin 6 ------------------------TX// Pin 7 ----- -------------------RX// Control_Led_1// 引脚 8 ----------------------- -// Control_Led_2//引脚12 ------------------------// Control_Led_3// 引脚 13 ------------------ ------// RGB_Module// 引脚 9 ------------------------R// 引脚 10 -------- ----------------G// 引脚 11 ------------------------B// LDR_1/ / AO ------------------------// LDR_2// A1 ------------------ ------// LDR_3// A2 ------------------------ #includeint LaserPin_1 =2; // 定义激光传感器的pins.int LaserPin_2 =3;int LaserPin_3 =4;int BuzzerPin =5; // 蜂鸣器 pin.int Control_RX =6; // SoftWareSerial library 的 RX 和 TX 引脚。int Control_TX =7;int RedPin =9; // RGB LED 传感器的 PWM 引脚。int GreenPin =10;int BluePin =11;int Control_Led_1 =8; // 设置每个led作为每个激光模块状态的标志。int Control_Led_2 =12;int Control_Led_3 =13;int LDR_1 =A0; // LDRs.int LDR_2 =A1;int LDR_3 =A2;int LDR_1_Read 的模拟引脚; // 将 LDR 的值定义为全局变量。int LDR_2_Read;int LDR_3_Read;int Counter =0; // 将计数器的默认值设置为零。volatile boolean Alarm_is_Activated =false; // 选择是否开启警报。volatile boolean Alarm_Initial =false;volatile boolean Counter_Detect =false; // 这是一个给 Arduino.SoftwareSerial Control(Control_RX, Control_TX) 提供延迟时间的变量; // 定义 Rx 和 Tx 引脚以与蓝牙模块通信。String Name ="Control"; // 为您的模块命名并为其设置密码.int Password =1111;String Uart ="9600,0,0";void setup() { Serial.begin(9600); Control.begin(9600); // 开始HC-06蓝牙模块通信。 // Change_BluetoothModule_Defaults(); // 如果你想改变蓝牙模块的默认值,你可以激活它。 pinMode(LaserPin_1,OUTPUT); pinMode(LaserPin_2,OUTPUT); pinMode(LaserPin_3,OUTPUT); pinMode(RedPin,OUTPUT); pinMode(GreenPin,OUTPUT); pinMode(BluePin,OUTPUT); pinMode(Control_Led_1,OUTPUT); pinMode(Control_Led_2,OUTPUT); pinMode(Control_Led_3,OUTPUT);}void loop() { get_Data_From_LDR(); // 从 LDR 传感器获取数据。 if(Control.available()){ // 如果 HC-06 蓝牙模块可用,则 Commands() 已进行。 char c =Control.read(); Serial.println(c); // 使用终端控制应用程序设置的字符。命令(c);设置报警(); // 初始化闹钟函数。 Set_Counter(); // 开始人数统计。 }void Commands(char i){ // 选择当特定字符从应用程序发送到 Arduino 时发生哪些事件。 switch(i){ case '1' :Control.print(Counter);休息;案例'2':Alarm_is_Activated =true;休息;案例'3':Alarm_is_Activated =false;休息;案例'4':digitalWrite(LaserPin_1,HIGH);数字写入(Control_Led_1,HIGH);休息;案例'5':digitalWrite(LaserPin_1,LOW);数字写入(Control_Led_1,低);休息;案例'6':digitalWrite(LaserPin_2,HIGH);数字写入(Control_Led_2,高);休息;案例'7':digitalWrite(LaserPin_2,LOW);数字写入(Control_Led_2,低);休息;案例'8':digitalWrite(LaserPin_3,HIGH);数字写入(Control_Led_3,HIGH);休息;案例'9':digitalWrite(LaserPin_3,LOW);数字写入(Control_Led_3,低);休息; case 'r' :计数器 =0;休息; } }void get_Data_From_LDR(){ // 获取LDR传感器的数据。 LDR_1_Read =模拟读取(LDR_1); LDR_2_Read =模拟读取(LDR_2); LDR_3_Read =模拟读取(LDR_3); }void Set_Counter(){ // 设置人员计数器。 if(LDR_1_Read <150 || LDR_2_Read <150 || LDR_3_Read <150){ // 如果检测到运动。 Counter_Detect =真; } else{ Counter_Detect =false; } if(Counter_Detect ==true){ Counter =Counter + 1;延迟(500); // 给一些时间来准确获取进入房间的人数。 } if(Counter_Detect ==false){ Counter =Counter; }}void Set_Alarm(){ // 设置可调整的警报系统。 if(Alarm_is_Activated ==true){ if(LDR_1_Read <150 || LDR_2_Read <150 || LDR_3_Read <150){ // 如果检测到运动。 Alarm_Initial =true; } else{ Alarm_Initial =false; } if(Alarm_Initial ==true){tone(BuzzerPin,500); Color_Change(255, 0, 0);延迟(50); Color_Change(0, 255, 0);延迟(50); Color_Change(0, 0, 255);延迟(50); Color_Change(255, 255, 0);延迟(50); Color_Change(80, 0, 80);延迟(50); Color_Change(0, 255, 255);延迟(50); Color_Change(255, 255, 255);延迟(50); } } if(Alarm_is_Activated ==false || Alarm_Initial ==false ){ noTone(BuzzerPin); Color_Change(0, 0, 0); }}void Color_Change(int red, int green, int blue){ // 轻松更改 RGB 模块变量。红色 =255 - 红色;绿色 =255 - 绿色;蓝色 =255 - 蓝色;模拟写入(RedPin,红色);模拟写入(GreenPin,绿色); analogWrite(BluePin, blue);}void Change_BluetoothModule_Defaults(){ // 更改蓝牙模块的默认值,无论您选择什么值。 Control.print("AT+NAME"); // 更改名称。 Control.println(名称); Serial.print("名称已更改:"); Serial.println(名称);延迟(2000); Control.print("AT+PSWD"); // 修改密码。 Control.println(密码); Serial.print("密码已更改:"); Serial.println(密码);延迟(2000); Control.print("AT+UART"); // 改变波特率。如果蓝牙模块是HC-05,波特率的默认值为38400。 Control.println(Uart); Serial.print("波特率设置:"); Serial.println(Uart);延迟(2000); Serial.println("任务完成。"); // 您可以使用终端查看任务是否正确完成。}
定制零件和外壳
People Counter的代码文件! peoplecounter_J375iBnBF8.aiaPeople Counter的Apk文件! peoplecounter_uBf7MU4A1c.apk示意图
制造工艺
- 温控风扇
- 使用 Raspberry Pi 的手势控制机器人
- 由 ANDROID 智能手机控制的 RASPBERRY PI WIFI 机器人
- 3D RGB Arduclock
- 通过 Wi-Fi 玩火(ESP8266、NeoPixels 和 Android 应用)
- 使用 Raspberry Motor Shield 的 Android 控制玩具
- Alexa 通过 Raspberry Pi 控制 LED
- MyRiver
- 摇杆游戏
- 适用于 Windows 10 UWP 应用的 PM2.5 和 PM 10 检测器设计
- MobBob:由 Android 智能手机控制的 DIY Arduino 机器人
- 情人节创意 - 一起度过的天数计数器(照片)