# 發明展 ## (P)防盜包包 #### 說明 >人離開時沒有偵測到手機藍芽訊號則進入防盜狀態 >防盜狀態中如果失重則蜂鳴器警報 > ![](https://i.imgur.com/k0nbv7i.png =80%x) ### 防盜系統程式邏輯 :::success #### 手機部分 ---- App Inventorentor實現 < 待機循環狀態> (可切換) 重複無限次: > >等待3秒 > > 檢測與防盜裝置藍芽的連線狀態: > > 如果與裝置連線上,則 : > > 發送訊息:`手機訊號` 給防盜裝置 > >偵測防盜裝置的發出的訊息: > >如果收到訊息則手機顯示`與裝置連結中,訊息接收正常!` > >若沒收到訊息則手機顯示`與裝置連結中,但訊息未接收到!` > >>> > 如果未與裝置連線上,則: > >嘗試連線 > >如果連線成功,則手機顯示`與裝置恢復連線,等待三秒後進行訊息發送` > >如果連線失敗,則手機顯示`與裝置連線失敗,等待三秒後重新嘗試連線` ___ <解除警報功能> >持續發送`解除警報`訊息 ::: :::success #### 防盜系統部分 ---- Arduino實現 重複無限次: > >等待1秒 > >檢測`失重裝態`與`手機訊息接受狀態` 並且發送`裝置訊號`給手機,持續`5秒` > >如果有持續收到`手機訊號` (可詳細設定判別模式) >>則不作為 >> >如果沒持續收到`手機訊號`,則進入`防盜模式` ___ 防盜模式,重複無限次: >檢測失重狀態,持續`10秒` (可詳細設定判別模式) >如果失重狀態為`真`則進入`警報模式` >如果剛剛解除了`警報模式`,則`解除防盜模式` ___ 警報模式,重複無限次: >`蜂鳴器`警報開啟 >偵測手機訊息,持續`5秒` >>偵測到`解除警報`,則解除警報模式 ::: ### 材料 >Arduino UNO*1 藍牙模組HC-06*1 或者 HC-05*1 USB TO TTL線*1 MPU6050 (GY-521) * 1 (陀螺儀+加速度模組) 蜂鳴器 麵包板 x1 連接線 * n #### 採購網站 >[機器人王國](https://robotkingdom.com.tw/) >[蝦皮](https://shopee.tw/) #### 參考資料 [手機 App Inventorentor 透過藍牙傳送訊號給 Arduino](https://blog.cavedu.com/2013/11/08/appinventorandarduinowithbluetooth/) [HC05具體說明](https://swf.com.tw/?p=693) [藍芽模組與安卓互相發訊息](https://blog.cavedu.com/2017/10/18/hc05-hc06/) [三軸陀螺儀+三軸加速計感測模組](https://atceiling.blogspot.com/2019/09/arduino57mpu-6050-gy-521.html) http://mr-sochen.blogspot.com/2017/05/arduinohc-05-hc-06.html ## (P)智慧藥盒 ### 說明 >1.事前設定好吃藥時間 >2.螢幕提示下次吃藥時間 >3.時間到裝置發出聲音,螢幕提示吃藥 >4.使用者聽到聲音後,按按鈕取藥吃藥 >5.裝置紀錄用藥時間點 >6.使用者可以查看吃藥時間、上次沒吃藥的時間、 ### 材料 >DS1302 時鐘模組 >Keypad 4x4按鍵 >Arduino UNO*1 >藍牙模組HC-06*1 或者 HC-05*1 >USB TO TTL線*1 >1602 LCD (顯示器) >蜂鳴器 >連接線 * n >麵包板 x1 ### 參考 https://blog.jmaker.com.tw/arduino-ds1302-lcd https://www.shs.edu.tw/works/essay/2020/10/2020101511013121.pdf http://www.shs.edu.tw/works/essay/2018/03/2018032307445876.pdf ## (P)智慧輪椅 ### 說明 >1.偵測傾斜到一定程度時,伸出輔助輪 >2.不傾斜時收回輔助輪 ### 傾斜系統材料 >Arduino Uno 開發板 SW520D傾斜傳感器 LED x1 220歐姆電阻 x1 蜂鳴器 x1 麵包板 x1 排線 N 條 ### 馬達部分 >待查 ### 參考 https://atceiling.blogspot.com/2020/10/arduino82sw-520d.html ___ ## (P)手勢辨認 ![](https://1.bp.blogspot.com/-2kRk6Ga0fZ4/YWO28r4xiAI/AAAAAAAAE5c/Pg_njseyeokrKaphGj-WjXLii0wi5NAGQCLcBGAsYHQ/s1663/iThome_Day_26_Fig_01.jpg) [圖片來源](https://ithelp.ithome.com.tw/articles/10279266) ```cpp= /* APDS-9960 - Gesture Sensor >APDS-9960 - 手勢傳感器 This example reads gesture data from the on-board APDS-9960 sensor of the Nano 33 BLE Sense and prints any detected gestures to the Serial Monitor. >本範例透過 Arduino Nano 33 BLE Sense板上的APDS-9960 sensor 讀取 手勢資料, >並透過 Serial Monitor 輸出(印出資料)偵測到的手勢資料 Gesture directions are as follows: - UP: from USB connector towards antenna - DOWN: from antenna towards USB connector - LEFT: from analog pins side towards digital pins side - RIGHT: from digital pins side towards analog pins side >手勢方向感應如下 >上 : USB接口 往 天線方向 >下 : 天線 往 USB接口 方向 >左 : 從類比接腳 往 數位接腳方向 >右 : 從數位接腳 往 類比接腳方向 The circuit: - Arduino Nano 33 BLE Sense >電路 >-Arduino Nano 33 BLE Sense This example code is in the public domain. >本程式所有類別(class)的中的成員(members)及方法(method)均為公開存取(public) */ #include <Arduino_APDS9960.h> //引入標頭檔 Arduino_APDS9960.h //即引入Arduino_APDS9960庫,來去使用 void setup() { Serial.begin(9600); //串列埠初始化,初始化鮑率必須傳入來設定 //鮑率(Braud)=9600,即每秒傳輸9600位元(bit)的資料 while (!Serial); //假設上一行串列埠沒有開出來設定好,就讓程式卡在這行進入迴圈空轉。 if (!APDS.begin()) { Serial.println("Error initializing APDS-9960 sensor!"); } //初始化感應器 APDS.begin(),如果失敗則印出失敗訊息 "Error...." // for setGestureSensitivity(..) a value between 1 and 100 is required. // Higher values make the gesture recognition more sensitive but less accurate // (a wrong gesture may be detected). Lower values makes the gesture recognition // more accurate but less sensitive (some gestures may be missed). // Default is 80 //APDS.setGestureSensitivity(80); /* * 方法setGestureSensitivity(..),可以傳入1~100的整數數值 * 數值越高會讓手勢辨識越機敏,相對的你手勢要求的正確度就更高, * 所以更多不嚴謹的手勢,會被偵測出來,導致正確率下降。 * * 而數值越低會手勢辨識敏感度變低,所以偵測到的手勢正確率上升。 * ("數值越低有些手勢可能會錯失掉",我不知道是偵測不到還是敏感度變低後偵測結果會有偏 * 差,你們需要自己去嘗試) * * 預設值為80 * * APDS.setGestureSensitivity(80); * * */ Serial.println("Detecting gestures ..."); //串列埠輸出"偵測到手式" //這行程式表達意思有錯誤,理論上應該是跟上面的if式用else接在一起 //上面那行 使APDS初始化 如果沒有失敗才印出這行,才合邏輯 } void loop() { if (APDS.gestureAvailable()) { // a gesture was detected, read and print to Serial Monitor //APDS開始持續感應手勢 int gesture = APDS.readGesture(); //設置整數變數gesture為感應到的數值 switch (gesture) { case GESTURE_UP: /* GESTURE_UP應該是某個內建好的整數常數 * 假設 gesture 與 GESTURE_UP 相等則做下面的動作 */ Serial.println("Detected UP gesture"); break; //上面判定好手勢向上後, //輸出"偵測到手勢向上",即"Detected UP gesture" //透過break直接跳出 switch case區塊 //以下就類推了 case GESTURE_DOWN: Serial.println("Detected DOWN gesture"); break; case GESTURE_LEFT: Serial.println("Detected LEFT gesture"); break; case GESTURE_RIGHT: Serial.println("Detected RIGHT gesture"); break; //如果輸入gesture不是以上數值,就執行這個區塊內的動作 default: // ignore break; } } } ``` ``` int buzzer=13; void setup() { pinMode(buzzer,OUTPUT); } void loop() { int i; while(1) { for(i=0;i<50;i++) { digitalWrite(buzzer,HIGH); delay(1); digitalWrite(buzzer,LOW); delay(1); } delay(1000); for(i=0;i<100;i++) { digitalWrite(buzzer,HIGH); delay(3); digitalWrite(buzzer,LOW); delay(3); } delay(1000); } } ``` ```cpp= /* AUTHOR: Hazim Bitar (techbitar) DATE: Aug 29, 2013 LICENSE: Public domain (use at your own risk) CONTACT: techbitar at gmail dot com (techbitar.com) */ #include <Wire.h> #include <SoftwareSerial.h> SoftwareSerial BTSerial(10, 11); // RX | TX void setup() { Serial.begin(9600); Serial.println("Enter AT commands:"); BTSerial.begin(9600); // HC-05 default speed in AT command more } void loop() { } ``` https://electronics.stackexchange.com/questions/67739/hc-05-bluetooth-module-not-recognized-by-mobile-phone https://livingtech.education/2018/06/03/arduino%E5%AF%A6%E7%94%A8-hc-05-at-mode%E4%B8%BB%E5%BE%9E%E9%85%8D%E5%B0%8D/