7549| 5
|
[项目] 钱包小管家 |
本帖最后由 DL张 于 2018-4-19 13:28 编辑 钱包小管家 制作说明文档(很多东西显示不出来,请下载下面的pdf打开查看) 重庆育才中学——张德邻 指导教师——沈菊颖 创意来源: 生活中,许多人经常丢三落四,出门之前总是找不到自己的钱包;有些月光族从来不懂得理财,不经意间钱包里的钱就被他用光了;有些人虽然有记账的习惯,但也会出现漏记或者记不清某一笔开销的情况;还有些人走在路上钱包从口袋里滑落或者被扒手扒走,她当时却不知道。基于此,我设计了一套集防丢、记账、定位功能于一身的钱包管理系统。有了这个钱包小管家,钱包管理不再愁。 功能说明: 钱包小管家能记录您钞票的进进出出,能记录您每天的东奔西跑。她是一个钱包卫士,防丢利器;她是一个钱包小饰品,记账小助手;她是一个轻薄小配件,寻物好帮手。她给您带来省心的体验。 l 防丢报警——“嘀嘀,又忘记我了” 手机和钱包小管家建立蓝牙连接(Bluno beetle集成蓝牙4.0功能)后,通过使用手机APP,24小时贴身保护您的财产,钱包掉了手机报警,手机掉了钱包报警(加速度传感器的值较大/蓝牙非正常断开,蜂鸣器发出报警声/手机报警),实现财产双保险。 l 自动记录消费时间地点——“叮咚,您又花钱了” 当您从口袋里掏出钱包,打开钱包刷卡、消费,您的手机就会叮咚一声,弹出一条消息,提示您的钱包打开了(通过光线传感器识别是否打开钱包),而且手机APP会自动记录下您的使用时间(通过APP INVENTOR里的计时器实现),并获取当前位置的纬度,经度和地址名称(通过APP INVENTOR里的位置传感器实现)。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wpsC090.tmp.jpg l 无忧记账 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC091.tmp.jpg 您只需要在空闲的时候打开手机APP,根据自动记录的钱包使用时间和地点,轻松让您记起您的每一笔消费,并一次性记账。还可以输入日期查询往日的账本。 、 l 定位寻找——“嘀嘀,我在这里,我在这里” 有时候在室内也会遇到找不到钱包的情况,这时,打开手机APP,点击“钱包钱包你在哪”,铃声响起,钱包无处遁身,让您免除找不到钱包的麻烦。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC092.tmp.jpg l 账本查询 主人这是您当日的账本,请过目≧∇≦ file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC093.tmp.jpg l 免打扰设置——“我不打扰您了,我先休息了” 当您在公司或在家里的时候,您不想因为频繁走动导致反复的断线报警,那么您可以将正常模式切换到勿扰模式,在这个时间内,会屏蔽手机和钱包小管家的全部报警,除了打开钱包时的通知消息。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC094.tmp.jpg l 丢失地点记录——“嗨,我可能被落在这里了” 当手机和钱包小管家断开连接时,手机会记录下最后一次断开连接的时间和地点,当您回家后发现钱包不见了,请别紧张,请打开手机APP看看,它最后一次断开的位置有可能在饭店或者朋友家里。即使在勿扰时间段里,管家依旧会默默地帮您记录下断线时间和地点。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC095.tmp.jpg 硬件清单:
之所以选择Bluno beetle作为主控器是因为它只有SD卡大小,集成蓝牙4.0功能,满足可穿戴电子应用的需求。使用模拟环境光线传感器识别钱包是否打开,使用三轴加速度传感器来检测钱包是否掉落,数字无源蜂鸣器起到报警提示的作用。 制作过程: (1) 电路连接 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0A6.tmp.jpg
(2)用Solidworks建立3D模型 钱包小管家分为主体和盖子两个部分,主体和盖子的连接为滑盖连接 主体部分长65mm宽65mm高20mm file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wpsC0A7.tmp.jpg 中间凸出来的棱是为了滑盖连接而设计的 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0A8.tmp.jpg 中间的小孔为光线传感器的透光孔长8mm宽6mm file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0A9.tmp.jpg 盖子部分长63mm宽61mm高20mm file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0AA.tmp.jpg file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wpsC0BA.tmp.jpg 凹槽为滑盖结合而设计 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0BB.tmp.jpg (3)连接安装 1.规划每个部件的位置 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0BC.tmp.jpg 2用热熔胶固定各部件 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0CD.tmp.jpg 3. 焊接 使用可调温式电烙铁和直径1mm焊锡丝,焊接温度500摄氏度。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0CE.tmp.jpg file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wpsC0CF.tmp.jpg 安装完成 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0D0.tmp.jpg 、 Arduino 代码编写(Arduino IDE) file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0E0.tmp.png 各部分功能 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0E1.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0E2.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0E3.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0E4.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0E5.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0E6.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0F7.tmp.png 检测钱包是否掉落 检测钱包是否被打开 寻找报警 断线报警 一.检测钱包是否掉落 钱包小管家一直在检测钱包在Z轴(竖直方向)上的加速度值,当钱包掉落时,钱包首先会进行一段近似于自由落体的运动,然后猛的撞向地面。如果检测到的值达到了我设定的阈值,钱包就会报警,然后发送字符串”2”给手机,手机接收到后也会报警。 代码: #include <Wire.h> #include <DFRobot_LIS2DH12.h> //调用加速度传感器所需要的函数库 DFRobot_LIS2DH12 LIS; void setup(){ Wire.begin(); Serial.begin(115200); //设置串口波特率115200 while(!Serial); delay(100); } void loop(){ acceleration(); } /*! * @brief Print the position result. */ void acceleration(void) //调用函数库 { int16_t x, y, z; delay(100); LIS.readXYZ(x, y, z); LIS.mgScale(x, y, z); //X,Y,Z为加速度传感器所测得3个轴的值,但这里只需要Z轴的值 if (z >= 1050) { delay(100); if (z >= 1050) { //检测是否自由落体运动 delay(100) if(z>=2000) { //检测是否撞击地面 Serial.println("2"); //如果是,向手机发送字符串”2” for (int i = 0; i <= 180; i = i + (1)) { tone(4,2000 + 1000 * sin(i / 180.0 * 3.14159)); delay(2); //管脚为四的蜂鸣器发出报警声 } } } } 二.检测钱包是否被打开 读取光线传感器的值,来判断钱包是否被打开,如果打开则发送字符串”1”给手机。 代码: void setup() { Serial.begin(115200); //设置串口波特率115200 } void loop() { if (analogRead(A0) >= 100) { delay(2000); //防抖 if (analogRead(A0) >= 100) { Serial.println("1") //如果模拟环境光线传感器输入的值大于100则向手机发送字符串”1” delay(10000) //避免过多判断已打开钱包 } } } 三.寻找报警 读取串口的值来判断此时是否在寻找钱包,如果是则蜂鸣器发出报警声。 代码: String item; // 定义item为字符串 void setup() { Serial.begin(115200); //初始化串口波特率为115200 item = "0"; //随便给item赋的值,无任何意义 pinMode(4, OUTPUT); //定义数字管脚4为输出管脚 } void loop() { if (Serial.available() > 0) { //串口是否有数据可读? item = Serial.readString(); //如果串口有数据可读,将“item”赋值为串口读取到的数据 if (item == "3") { //如果“item”=3,说明此时正通过手机寻找钱包 for (int i = 0; i <= 180; i = i + (1)) { tone(4,2000 + 1000 * sin(i / 180.0 * 3.14159)); delay(2); //蜂鸣器报警 } } else if (item == "4") { //如果“item”=4,说明此时正通过手机控制管家不再发出声音 noTone(4); //蜂鸣器停止报警 } } } 四.断线报警 当手机钱包相距过远(超过5m)蓝牙连接就会中断,串口就会断开,蜂鸣器报警 代码: void setup() { Serial.begin(115200); } void serialEvent() { //当串口中断时,即手机和钱包相距过远蓝牙断开时执行 for (int i = 0; i <= 180; i = i + (1)) { tone(4,2000 + 1000 * sin(i / 180.0 * 3.14159)); //蜂鸣器报警 delay(2); } } 手机APP设计 使用APP inventor制作: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC0F8.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC118.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC119.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC11A.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC12B.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC12C.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC13C.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC13D.tmp.png file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC14E.tmp.png Smart Wallet APP 防丢报警 账本管理 足迹追踪 寻找钱包 一.防丢报警 (1)掉落报警 当钱包掉落时,钱包小管家发送字符串“2”给手机,手机接收到后报警。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC14F.tmp.jpg (2)断开报警 当手机和钱包小管家的连接处于非正常断开状态(通过连接状态的文本来判断),手机报警。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC150.tmp.jpg 二.账本管理 (1)自动记录账本 当钱包被打开时小管家会发送字符串“1”给手机,手机读取此时的时间、位置等信息然后将信息追加到一个列表里面;并且弹出对话框提示钱包被打开了。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC151.tmp.jpg file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC152.tmp.jpg (2)完善和保存账本 当用户点击“完善今日账本” 时,将列表里的数据一个个地展示到列表显示框里。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC163.tmp.jpg 效果图: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC164.tmp.jpg 用户根据列表显示框的时间、位置信息在文本输入框中输入支出或收入的金额来完善账本,再点击“完善下一条”进行下一条的完善。此时将文本输入框内的数据与列表显示框内的数据合并,追加在另一个列表里。列表显示框的数据再替换为下一条的数据。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC165.tmp.jpg 用户完善好后点击“保存今日账本”按钮,此时调用微数据库来保存已完善账本的数据,调用计时器读取此时的年月日作为保存的标签。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC166.tmp.jpg (3)查询账本 既然有完善账本功能,那么也应该有查询账本功能:在对应的文本输入框中输入要查询的日期,点击查询按钮,就会调取相应日期的账本用列表的方式展现给你。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC167.tmp.jpg 效果图: file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wpsC196.tmp.jpg 三.足迹追踪 (1)记录足迹 每当位置发生改变时手机都会记录下改变的位置信息,追加在列表里,然后再保存在微数据库里。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC1A7.tmp.jpg 用户点击“保存今日足迹”按钮,调用微数据库保存,调用计时器获取时间作为标签。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wpsC1A8.tmp.jpg (2)查询足迹 用户在文本输入框内输入要查询的日期,再点击查询按钮即可查询 file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wpsC1A9.tmp.jpg 效果图: file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wpsC1AA.tmp.jpg 四.寻找钱包 有时候在室内也会遇到找不到钱包的情况,这时,打开手机APP,点击“钱包钱包你在哪”,铃声响起,钱包无处遁身。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wpsC1BB.tmp.jpg 当“钱包钱包你在哪”被点击时,手机就会发送字符串”3”给小管家,小管家接收到后就会使蜂鸣器发出声音。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC1BC.tmp.jpg 找到钱包后点击“钱包钱包你够了”,小管家的铃声就会停止。 当“钱包钱包你够了”被点击时发送字符串”4”给小管家,小管家接收到后就会使蜂鸣器停止发出声音。 蓝牙连接 此作品的所有功能都是建立在蓝牙连接的基础上的,所以蓝牙连接的介绍必不可少。 由于后面与bluno beetle通讯均需要使用地址,因此首先初始化2个全局文本变量: ble_service_uuid为蓝牙服务的地址,由bluno固件定义,不可修改,固定为 0000dfb0-0000-1000-8000-00805f9b34fb; ble_characteristic_uuid为设备通讯地址,由bluno固件定义,不可修改,固定为 0000dfb1-0000-1000-8000-00805f9b34fb。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC1BD.tmp.jpg App打开时调用Activity活动启动器开启蓝牙获取权限并扫描周围蓝牙设备: file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wpsC1BE.tmp.jpg 蓝牙打开后接下来需要打开设备列表给用户选择。点击连接与断开按钮时如果显示为“连接Bluno“说明当前蓝牙是断开的,则停止扫描周围蓝牙设备,并弹出一个选择框显示当前搜到的周围的蓝牙设备列表。如果点击按钮时显示为“断开Bluno“说明当前蓝牙已连接,则断开当前连接的蓝牙。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC1BF.tmp.jpg 当用户点击列表选择了某个设备后,就可以连接这个设备了:选择列表的第1到17项为设备的MAC地址,连接这个地址的设备。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC1C0.tmp.jpg 建立蓝牙连接之后,需要使用定时器扫描是否接收到数据(从小管家传递过来的),如果有数据就读取数据并处理。 我们设置的计时器时间为500ms,因此每500ms会扫描一次是否接收到数据,此数据若太小会导致发送的数据丢包。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC1C1.tmp.jpg 接收到数据后,就对数据进行相应的处理。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC1D1.tmp.jpg 如果蓝牙处于断开状态,调用对话框显示未连接;如果蓝牙处于连接状态,随时准备发送数据。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsC1F1.tmp.jpg |
1.25 MB, 下载次数: 3545
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed