- Concept Development
- 硬體設備
- 安裝&設定過程
- 補充: telegram bot;
- LSA課堂知識運用
- Usage 如何使用
- Justice Hand Car 照
- Job Assignment
- References
- 未來展望
- 溫馨感謝愛心助教
- 起因:
- 因為只要每到晚上,就會聽到隔壁總是會聽到奇怪的噪音,嚴重影響睡眠品質。但是我們又害怕被看到臉會被惡意報復,所以我們決定開著遙控車車反擊!
- 賴床
- 發想: 我們想要以牙還牙,每次當鄰居房間開始製造噪音時,我們就在自己房間感應分貝大小自動啟動假手裝置開始拍打牆壁,藉此來提醒鄰居
- 功能:
- 能偵測對方音量,超過規定分貝,啟動假手
- 假手會借用馬達來拍打牆壁,產生噪音攻擊
- 可手動開啟/關閉
- 額外功能
- 賴床打臉器(後來就沒用了)
- 可以定時,時間到了就朝臉開打
- 遙控車子移動
- 假手放置在車子上
- 再由遙控器控制移動到指定位置
- 賴床打臉器(後來就沒用了)
按鈕接口 | Raspberry Pi 接口 |
---|---|
OUT | GPIO27 |
VCC | 5v |
GND | GND |
分貝感測器接口 | Raspberry Pi 接口 |
---|---|
AOUT | MCP3008 CH0 (GPIO4) |
DOUT | GPIO17 |
GND | GND |
VCC | 5v |
MCP3008接口 | Raspberry Pi 接口 |
---|---|
CH0 | GPIO4 |
VDD | 5V |
VREF | 5V |
AGND | GND |
CLK | GPIO11 |
DOUT | GPIO9 |
DIN | GPIO10 |
CS/SHDN | GPIO8 |
DGND | GND |
伺服馬達接口 | Raspberry Pi 接口 |
---|---|
OUT(橘) | GPIO18 |
VCC(紅) | 5V |
GND(棕) | GND |
- 樹莓派本身並不支援類比輸入(Analog Input)
- 因此需要使用額外的AD轉換器(Analog to Digital Conveter)來,讀取類比資訊
- 此次使用的ADC IC為 MCP3008
- ADC IC需要使用 SPI介面來溝通,交換資訊
- MCP3008 & Raspberry pi 特殊GPIO(SPI)接法
- GPIO 07 ~ 11: 專門給SPI介面使用
- 進入設定介面
sudo raspi-config
- 選擇 Interfacing Option3
- 選擇SPI
- SPI enabled(yes)
- 重新開機
sudo reboot
- 檢查是否開啟成功SPI
- 顯示
spi_bcm2835
表示成功開啟SPI
lsmod | grep spi
- 顯示
sudo apt update
sudo apt upgrade
sudo apt install vim
sudo apt install python3-pip
- pygame.mixer() : 是一個用來處理聲音的模組
- 要先安裝pygame&音樂相關套件
sudo pip3 install pygame sudo apt install libsdl2-dev sudo apt install libsdl2-mixer-dev
- 引入模組&套件啟動、初始化
import pygame pygame.mixer.init()
- 播放音檔
pygame.mixer.music.load('音檔路徑') pygame.mixer.music.play()
- 停止播放音檔
pygame.mixer.music.stop()
- 範例:
import pygame pygame.mixer.init() pygame.mixer.music.load('/home/pi/mp3/hanweivoice.mp3') pygame.mixer.music.play(0,0.6)
- 作用:將類比訊號轉換成數位訊號(因為Raspberry Pi沒有支援類比訊號輸入),每個通道可依類比設備的輸入值傳回一個10位元的數值
- 安裝套件
sudo pip3 install gpiozero
- 引入套件
from gpiozero import MCP3008, Button
- 設置變數
#channel 0 類比訊號腳位 sound = MCP3008(0) # 數位訊號腳位 digital_sound = Button(4)
- 範例 - 每0.1秒傳送偵測資料
while running: try: print('{}-SoundValue:{:.4f}, ButtonValue:{}'.format(loop, sound.value, digital_sound.value)) AvgArr.append(sound.value) time.sleep(0.1) loop += 1 except KeyboardInterrupt: running = False
- 腳位、頻率設定
#訊號輸出pin(PWM) MotorPin=18 #訊號輸出pin設置 gpio.setup(MotorPin,gpio.OUT) #50 : 頻率(Hz) PWM_FREQ = 50 pwm_motor = gpio.PWM(MotorPin, PWM_FREQ)
- 設定初始角度
- +90度:( 0.8 ms / 20 ms ) * 100 = 4
- +60度:( 0.9 ms / 20 ms ) * 100 = 4.5
- 0度:( 1.5 ms / 20 ms ) * 100 = 7.5
- -60度:( 2.1 ms / 20 ms ) * 100 = 10.5
- -90度:( 2.2 ms / 20 ms ) * 100 = 11
pwm_motor.start(7.5)
- 範例 - 從+60度轉到-90度5次,並回歸0度位
for a in range(5): pwm_motor.ChangeDutyCycle(4.5) time.sleep(0.25) pwm_motor.ChangeDutyCycle(11) time.sleep(0.25) pwm_motor.ChangeDutyCycle(7.5)
- 引入套件
import RPi.GPIO as gpio
- 設置變數
btn = 27 # button pin setup gpio.setmode(gpio.BCM) gpio.setup(btn, gpio.IN, pull_up_down=gpio.PUD_UP)
- 接收按鈕輸入
- 放開 = 1 = True
- 按下 = 0 = False
input_result = gpio.input(btn)
- 安裝 pi camera套件
sudo pip3 install picamera
- 需要套件
sudo apt install gpac
- 影片如何轉檔
# covert video format def convert(VIDEO_PATH, VIDEO_PATH_mp4): # Record a 15 seconds video. print("Rasp_Pi => Video Recorded! \r\n") # Convert the h264 format to the mp4 format. command = "MP4Box -add " + VIDEO_PATH + " " + VIDEO_PATH_mp4 call([command], shell=True) print("\r\nRasp_Pi => Video Converted! \r\n")
- 要執行的內容(例如想要跑 Python 的程式等等)要寫成 Shell script
- 創建shell執行檔
autostart.sh
sudo vim autostart.sh
- 增加執行
detectpress.py
的程式碼
#! /bin/bash cd /home/pi python3 detectpress.py
- 增加執行
- 增加此shell執行檔可以執行的權限
chmod +x /home/pi/autostart.sh
- 新增一個 service
sudo vim /etc/systemd/system/detectpress.service
sudo chmod 644 /etc/systemd/system/detectpress.service
sudo systemctl daemon-reload
sudo systemctl start detectpress
sudo systemctl enable detectpress
-
telegram 搜尋 @BotFather
-
按 /start
- 創造機器人 /newbot
- 輸入機器人的name
- 輸入機器人的username
- 成功後即可獲得機器人的連結&token
-
接下來輸入
/mybots
- 選擇剛才創造的bot
-
/setcommand,接下來選擇
@yourbot
- 輸入以下commend
start - 開始偵測 play - 撥放背景音樂 stop - 停止偵測 playstop - 停止播放音樂 photo - 拍照 video - 錄影
- 輸入以下commend
-
建立群組group&telegram bot
- 安裝pip套件 python-telegram-bot
sudo pip3 install python-telegram-bot
- 匯入模組&初始化bot&設定token
# 匯入相關套件
from telegram.ext import Updater # 更新者
from telegram.ext import CommandHandler, CallbackQueryHandler # 註冊處理 一般用 回答用
from telegram.ext import MessageHandler, Filters # Filters過濾訊息
from telegram import InlineKeyboardMarkup, InlineKeyboardButton # 互動式按鈕
token = 'add your token here'
# 初始化bot
updater = Updater(token=token, use_context=False)
- 設定調度器 & 新增handler並加入dispatcher
- 輸入
/start
的時候,robot會去執行start()
dispatcher = updater.dispatcher # 定義收到訊息後的動作(新增handler) def start(bot, update): # 新增指令/start #robot 回覆在聊天室的訊息 update.message.reply_text(text='HI ' + str(chat['id'])) #新增handler且加入dispatcher dispatcher.add_handler(CommandHandler('start', start))
- 輸入
- 開始運作bot
# 開始運作bot updater.start_polling()
```
- 【JusticeHand 聊天室】 畫面
- sudo apt install vim
- sudo apt install python3-pip
- (sudo) vim
檔案名稱
依檔案權限決定是否需要sudo
- cat
檔案名稱
- ssh
- 燒錄SD卡
- Wi-Fi 設定
- 其他初始設定(開啟ssh設定等等)
sudo service <servicename> start
sudo service <servicename> stop
sudo service <servicename> status
【開機即執行偵測按鈕1】
- 按下按鈕1(or telegram bot 輸入
/start
): 開始感測聲音 - 再次按下按鈕1(or telegram bot 輸入
/stop
): 停止感測聲音 - 按下按鈕2(or telegram bot 輸入
/play
): 撥放背景音樂(ex: 阿彌陀佛) - 遙控車子到門前偵測惡鄰居聲音
- 假如超過設定分貝門檻: Justice Hand開始拍打
- 拍打完,喇叭播放: 你好吵!!!
- 額外功能 telegram 輸入
/video
:錄影/photo
:拍照
檔案皆會傳至聊天室內
組員 | 工作分配 |
---|---|
楊心慈 | 程式,PPT |
蕭沁沅 | 程式,Github |
蕭鈺宸 | 程式,Github |
林宜蔓 | 採購, 設備,PPT |
全部人 | 硬體組裝 |
- 伺服馬達
- 分貝感測器
- MCP3008
- 聲音播放
- 按鈕
- telegram robot
- 新增service
- 影像辨識:
- 將惡鄰居的樣貌拍起來
- 如果有人對我們投以好奇的目光就用喇叭撥放:看屁阿!!!!
- 增加鬧鐘功能:時間到了就會打你打到起來關掉
- 電子花車
- 增加第三組的繽紛LED氣氛燈
- 接上步進馬達,並放置小姐公仔在上面旋轉展示
- 漢偉 @UncleHanWei :題材發想、提供音檔來源、提供硬體設備、參與錄影、debug(tech support)
- 蔣媽 @yuting0412 : 題材發想、提供硬體設備
- 郭子偉 @vincentinttsh : support Raspberry pi 4、debug(tech support)、提供硬體設備 、 write github README.md ,提供全方位服務請撥打:0800029000