Introduction: Intelligent Music Restroom
Motivation 製作動機
上公共廁所時,總是覺得聲音很讓人害羞嗎?
總是覺得上大號很久很無趣,但滑手機又使人分心便秘? 等廁所時讓人不耐煩,滑手機怕被誤會偷拍? 糊塗如你有時忘記鎖門,造成春光外洩的尷尬? 音樂化妝室可以解決你的問題^^
門鎖特殊設計,利用磁鐵互斥,使門是常開狀態。當有人進入把門鎖上,就會啟動音樂,並搭配現有的LED顯示版“使用中”(參考湖口休息站廁所),讓自己確認門有上鎖,外面的人也能得知此間有人使用。
音樂部分是採用音軌模式,每間都有不同的音軌(ex:鼓聲、吉他、人聲…),當所有廁所都被佔用時,就能欣賞到一首完整音軌的歌曲。 音樂可以採用跟歌手合作,達到幫忙打廣告的效果,就不會有版權問題。
purpose 目的
(A)使用端:
1.廁所目前使用狀況(可使用/使用中/多次使用)
2.確保使用時,門確實鎖上(磁鐵)
3.音樂播放,放鬆身心
4.使用過久提醒
5.緊急按鈕
(B)監控端:
1.廁所目前使用狀況(可使用/使用中/需打掃)
2.使用者使用時間
3.廁所使用次數
4.緊急呼救提醒
5.廁所溫濕度管理(抽風機)
6.衛生紙剩餘狀況
Step 1: Prepare Module and Material 使用材料
以下為製作一間廁所需要用到的材料,若要做n間廁所則需n份使用者端的材料,但監控端若腳位足夠,則只需要一份。
(A)使用者端
麵包版 大 *1
杜邦線、單芯線 *數十條(公公 公母 母母 皆需)
雙色LED燈 *1
藍色LED燈 *1
220 ohm電阻 *6 (可以利用其他ohm的電阻代替)
Arduino Uno *1 (可以利用其他種類Arduino代替)
普通開關6mm x 6mm *1 (可用其他種開關替代)
限位開關(小) *1
DFPlayer MP3模組 *1
小喇叭 *1
雷切門板 (見附加檔案 door_template.dwg)
3D列印門軸 *4 (見附加檔案 door_pivot.prt)
門軸用長型螺絲 *2 、螺帽 *4
(B)監控端
麵包版 大 *1
杜邦線、單芯線 *數十條(公公 公母 母母 皆需)
220 ohm電阻 *6 (可以利用其他ohm的電阻代替)
Arduino Uno *1 (可以利用其他種類Arduino代替)
普通開關6mm x 6mm *2 (可用其他種開關替代)
筆電*1 (含Matlab)
Step 2: Wiring and Schematic 接線
附件PDF檔為清楚的接線圖
Attachments
Step 3: Arduino Code for User Side
#include <SoftwareSerial.h><br>#include <DFPlayer_Mini_Mp3.h>
//defined Pins on Arduino int LimSwiPin=4;//限位開關腳位 int GreenPin=5;//LED綠色腳位 int RedPin=6;//LED紅色腳位 int EmergPin=7;//緊急按鈕 int SwitchGive=12; //Give the limit switch message to the monitor int EmergGive=13; //Give the Emergency switch message to the monitor
//defined variables int SwitchTime; //counting how many times the Limit Switch been pressed int UseCount; //counting how many times tthe toilet been used int Emergency; int loop_delay=250; int Max_SwitchTime=60; bool Toolong=0; //the time that means too long is loop_delay*Max_SwitchTime(ms)
SoftwareSerial music(2, 3); // RX, TX
void setup() { Serial.begin (9600); music.begin (9600); mp3_set_serial (music); //set Serial for DFPlayer-mini mp3 module delay(1); //wait 1ms for mp3 module to set volume mp3_set_volume (0); Serial.println("Program Start Here") ; pinMode(LimSwiPin, INPUT); pinMode(GreenPin, OUTPUT); pinMode(RedPin, OUTPUT); pinMode(SwitchGive, OUTPUT); pinMode(EmergGive, OUTPUT); mp3_reset (); mp3_stop(); mp3_next(); delay (200); }
void loop() { Serial.println(); mp3_play(); int switchStatus = digitalRead(LimSwiPin); Emergency = digitalRead(EmergPin); if(switchStatus==1){ SwitchTime++; digitalWrite(SwitchGive, 1); } else if(switchStatus==0){ SwitchTime=0; digitalWrite(SwitchGive, 0); }
//Determine that the door is opened or closed or in danger if(SwitchTime<4 && Emergency==0 && Toolong==0){ digitalWrite(GreenPin, 1); digitalWrite(RedPin, 0); digitalWrite(EmergGive, 0); mp3_set_volume (0); Serial.print("door open") ; } else if(SwitchTime>=4 && Emergency==0 && Toolong==0){ digitalWrite(GreenPin, 0); digitalWrite(RedPin, 1); digitalWrite(EmergGive, 0); mp3_set_volume (30); Serial.print("door close") ; } else if(Emergency==1||Toolong==1){ digitalWrite(GreenPin, 0); digitalWrite(RedPin, 1); digitalWrite(EmergGive, 1); mp3_set_volume (21); Serial.println("Warning!!!"); Serial.println("Warning!!!"); Serial.println("Warning!!!"); Serial.println(); delay(100); digitalWrite(GreenPin, 0); digitalWrite(RedPin, 0); }
//means using toilet too long if(SwitchTime>Max_SwitchTime){ Toolong=1; Serial.println("Toolong~Toolong~Toolong~"); } else Toolong=0;
//counting for how many times the toilet been used if(SwitchTime==4){ UseCount++; } Serial.println(); Serial.print("switchStatus="); Serial.println(switchStatus); Serial.print("SwitchTime="); Serial.println(SwitchTime); Serial.print("UseCount="); Serial.println(UseCount); Serial.print("Emergency="); Serial.println(Emergency); delay(loop_delay); }
Attachments
Step 4: Construct the Monitor System
Arduino可以連接到電腦,並使用不同的程式設計軟體進行互動,並且可以建立使用這操作介面已達成不同的需求,而我們選擇使用Matlab作為程式設計軟體。以下將分兩個部分介紹我們如何建立監控系統、使用這介面。
將Arduino連接到Matlab
若要將Arduino連接到Matlab,必須在Arduino灌上驅動程式,並且在Matlab安裝相關toolbox
(1)下載Arduino驅動程式(見附加檔按Arduino_matlab.zip)
檔案中read me.txt有介紹每一組arduino code可以與以matlab使用的功能,根據我們要的功能,打開pde資料夾中的adioes,並以Arduino IDE執行,上傳到Arduino中。
(2)安裝Arduino的toolbox到Matlab中
在Matlab的Home介面,點開add-ons,選擇get hardware support packages,並下載安裝Matlab Support Packages for Arduino,最後必須將.m與之後要打Matlab的主程式放在同一個資料夾。
(3)將Matlab與Arduino連接
將Arduino以USB線連接到電腦,並確認其連接序列埠,像我的是:/dev/cu.usbmodem1421(Ios linux windows名稱會不一樣),在Matlab中打入
a = arduino('/dev/cu.usbmodem1421') 即可連接
delete(instrfind({'Port'},{'/dev/cu.usbmodem1421'}))即可斷開連接
之後會將這兩個code寫在主程式,因此無需額外撰寫
在Matlab上以GUIDE建立監控系統
在Matlab上以gui介面建立使用這介面,是給予監控者(打掃人員)使用,並且利用與Arduino連接可以使用的input,output指令讀取資訊傳遞指令,詳細內容見read me.txt ,以下為Matlab code。
(見附加檔案intelligent_music_restroom.zip)
Step 5: Assembling the Model (組裝模型)
組裝方式見附圖
線路凌亂可使用吸管或熱縮套管使之整齊。
門把使用帳簿釘和墊片來固定在門上;門使用3D列印的門軸固定在隔間板上。
門把上加裝螺絲和螺帽為增重用,因為雷切門把重量比實際大小的門把輕很多,無法啟動限位開關。
需要幾間廁所模型,就用幾塊Arduino版,但監控端若腳位足夠,則只需要一塊。
SD卡內建議只放一個音檔,因為MP3模組不太穩定,可能會播出非指定的歌曲。
Step 6: Prototype Video
Music that were edited is at the attachment.
reference:
田馥甄 Hebe Tien - 小幸運 A Little Happiness - Piano Tutorial 鋼琴教學 [HQ] Synthesia
Comments
6 years ago
Hi, I like it.