Skip to content

Shaila-Hsiao/Justice-Hand

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 

Repository files navigation

Justice Hand

Concept Development 發展理念

  • 起因:
    1. 因為只要每到晚上,就會聽到隔壁總是會聽到奇怪的噪音,嚴重影響睡眠品質。但是我們又害怕被看到臉會被惡意報復,所以我們決定開著遙控車車反擊!
    2. 賴床
  • 發想: 我們想要以牙還牙,每次當鄰居房間開始製造噪音時,我們就在自己房間感應分貝大小自動啟動假手裝置開始拍打牆壁,藉此來提醒鄰居
  • 功能:
    • 能偵測對方音量,超過規定分貝,啟動假手
    • 假手會借用馬達來拍打牆壁,產生噪音攻擊
    • 可手動開啟/關閉
    • 額外功能
      • 賴床打臉器(後來就沒用了)
        • 可以定時,時間到了就朝臉開打
      • 遙控車子移動
        • 假手放置在車子上
        • 再由遙控器控制移動到指定位置

硬體設備(有用到的東東)

設備名稱 圖片網址 來源
Raspberry Pi 4 友情贊助(助教贊助)
mbot車車 親情贊助(林宜蔓同學提供)
伺服馬達 網購
伺服馬達多功能支架 網購
伺服機擺臂 蝦皮
分貝感測器 蝦皮
MCP3008 蝦皮
開關鍵 親情贊助(林宜蔓同學提供)
喇叭 蕭鈺宸同學提供
杜邦線*n(公母、公公、母母) 親情贊助(林宜蔓同學提供)
麵包板 親情贊助(林宜蔓同學提供)
假手 蝦皮
4號電池 蝦皮
pi camara 友情贊助(第七組)

安裝&設定過程

GPIO&設備

GPIO

按鈕

按鈕接口 Raspberry Pi 接口
OUT GPIO27
VCC 5v
GND GND

分貝感測器

分貝感測器接口 Raspberry Pi 接口
AOUT MCP3008 CH0 (GPIO4)
DOUT GPIO17
GND GND
VCC 5v

MCP3008

  • MCP3008 pinout description

    來源:MCP3008 Datasheet

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

開啟 SPI

開啟原因:

  • 樹莓派本身並不支援類比輸入(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)
    • 選擇yes-> OK
  • 重新開機
    sudo reboot
    
  • 檢查是否開啟成功SPI
    • 顯示spi_bcm2835表示成功開啟SPI
    lsmod | grep spi
    

先更新套件

sudo apt update
sudo apt upgrade

程式編輯器: vim

sudo apt install vim

python

sudo apt install python3-pip

播放音樂 pygame.mixer()

  • 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)
    

分貝感測器

MCP3008設置

  • 作用:將類比訊號轉換成數位訊號(因為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

  • 安裝 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")
    

樹梅派開機啟動按鈕偵測檔detectpress.py

  • 要執行的內容(例如想要跑 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
  1. sudo vim /etc/systemd/system/detectpress.service
  2. sudo chmod 644 /etc/systemd/system/detectpress.service
  3. sudo systemctl daemon-reload
  4. sudo systemctl start detectpress
  5. sudo systemctl enable detectpress
  • service 執行結果

Telegram bot

Telegram bot

  • telegram 搜尋 @BotFather

  • 按 /start

  • 創造機器人 /newbot
    • 輸入機器人的name
    • 輸入機器人的username
    • 成功後即可獲得機器人的連結&token


  • 接下來輸入 /mybots

    • 選擇剛才創造的bot
  • /setcommand,接下來選擇 @yourbot

    • 輸入以下commend
      start - 開始偵測
      play - 撥放背景音樂
      stop - 停止偵測
      playstop - 停止播放音樂
      photo - 拍照
      video - 錄影
      
  • 切換到 @yourbot

  • 建立群組group&telegram bot

    • Enable telegram bot join groups
    • 自行建立群組+ 邀請telegram bot至group
    • 成果照

python 套件 python-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 聊天室】 畫面

LSA課堂知識運用

安裝軟體

  • sudo apt install vim
  • sudo apt install python3-pip

編輯程式碼

  • (sudo) vim 檔案名稱

依檔案權限決定是否需要sudo

查看程式碼

  • cat 檔案名稱

遠端連線

  • ssh

樹苺派相關

  • 燒錄SD卡
  • Wi-Fi 設定
  • 其他初始設定(開啟ssh設定等等)

service

  • sudo service <servicename> start
  • sudo service <servicename> stop
  • sudo service <servicename> status

Usage 如何使用

【開機即執行偵測按鈕1】

  1. 按下按鈕1(or telegram bot 輸入 /start): 開始感測聲音
  2. 再次按下按鈕1(or telegram bot 輸入 /stop): 停止感測聲音
  3. 按下按鈕2(or telegram bot 輸入 /play): 撥放背景音樂(ex: 阿彌陀佛)
  4. 遙控車子到門前偵測惡鄰居聲音
  5. 假如超過設定分貝門檻: Justice Hand開始拍打
  6. 拍打完,喇叭播放: 你好吵!!!
  7. 額外功能 telegram 輸入
    • /video:錄影
    • /photo:拍照

    檔案皆會傳至聊天室內

成果影片&聊天室畫面

Job_Assign

組員 工作分配
楊心慈 程式,PPT
蕭沁沅 程式,Github
蕭鈺宸 程式,Github
林宜蔓 採購, 設備,PPT
全部人 硬體組裝

References

未來展望

  • 影像辨識:
    • 將惡鄰居的樣貌拍起來
    • 如果有人對我們投以好奇的目光就用喇叭撥放:看屁阿!!!!
    • 增加鬧鐘功能:時間到了就會打你打到起來關掉
  • 電子花車
    • 增加第三組的繽紛LED氣氛燈
    • 接上步進馬達,並放置小姐公仔在上面旋轉展示

溫馨感謝愛心助教 ❤️

  • 漢偉 @UncleHanWei :題材發想、提供音檔來源、提供硬體設備、參與錄影、debug(tech support)
  • 蔣媽 @yuting0412 : 題材發想、提供硬體設備
  • 郭子偉 @vincentinttsh : support Raspberry pi 4、debug(tech support)、提供硬體設備 、 write github README.md ,提供全方位服務請撥打:0800029000

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages