Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

智慧插座(Smart Relay): 從GPIO到繼電器

76,915 views

Published on

《特色》
1. 四小時工作坊,手把手教學,附完整範例程式。
2. 從 GPIO 控制 LED 到控制 110V 家用電器。
3. 全系列 Pi 都可以使用。

《內容》
1.GPIO + Python介紹(1 小時)
2.數位輸出,使用 Python 控制 LED(1 小時)
3.繼電器介紹,控制家用插座,讓 USB LED 亮和暗(2 小時)

《範例程式》
https://github.com/raspberrypi-tw/smart-relay

《購買套件》
https://www.raspberrypi.com.tw/19657/smart-relay-kit/

Published in: Technology
  • Be the first to comment

智慧插座(Smart Relay): 從GPIO到繼電器

  1. 1. 智慧插座 : 從 GPIO 到繼電器 台灣樹莓派 <sosorry@raspberrypi.com.tw>
  2. 2. 姓名標示 — 非商業性 — 相同方式分享 CC (Creative Commons) 姓名標示 — 你必須給予 適當表彰、提供指向本授權 條款的連結,以及 指出(本作品的原始版本)是否已 被變更。你可以任何合理方式為前述表彰,但不得以 任何方式暗示授權人為你或你的使用方式背書。 非商業性 — 你不得將本素材進行商業目的之使 用。 相同方式分享 — 若你重混、轉換本素材,或依本 素材建立新素材,你必須依本素材的授權條款來 散布你的貢獻物。
  3. 3. 3 ● Raspberry Pi 官方經銷商 about 台灣樹莓派 http://farnell.com/raspberrypi-consumer/approved-retailers.php?region=apac&MER=MER-LM-OB-RPICC-76315
  4. 4. ● 專注於 Raspberry Pi 應用與推廣 ● 舉辦社群聚會 / 工作坊 / 讀書會 / 黑客松 ● Website: ● https://www.raspberrypi.com.tw/ ● Facebook: ● 搜尋 RaspberryPi.Taiwan ● https://www.facebook.com/RaspberryPi.Taiwan 社群 x 活動
  5. 5. 5 ● COSCUP,MakerConf,PyCon 講者 ● 投影片 ● http://www.slideshare.net/raspberrypi- tw/presentations ● 程式碼 ● https://github.com/raspberrypi-tw 分享 x 教學
  6. 6. 6 ● Raspberry Pi GPIO 介紹 ● 使用繼電器控制 110V 電器 本次主題
  7. 7. 7 ● 硬體:Raspberry Pi 3 ● 作業系統:2017-11-29-raspbian-stretch.img ● 為了可以使用USB 轉TTL 傳輸線 ● 修改/boot/config.txt, 新增三行 – dtoverlay=pi3-miniuart-bt – core_freq=250 – enable_uart=1 ● 修改/boot/cmdline.txt, 將quiet splash 的quiet 移除 今日環境 刪除 quiet 新增三行
  8. 8. ● $ sudo apt-get update ● $ sudo apt-get -y install python- pip python-dev x11vnc python3-dev python3-venv 安裝今日所需軟體 ( 已安裝 )
  9. 9. 9 Raspberry Pi GPIO 介紹
  10. 10. 10 ● General Purpose Input Output ● GPIO 是一種可用軟體控制的數位訊號 什麼是 GPIO ? http://www.tek.com/datasheet/tps2000b-series-digital-storage-oscilloscopes-datasheet
  11. 11. 11 ● 決定是輸入還是輸出 ● 輸出:寫值到某根腳位 ● 輸入:從某根腳位讀值 ● 等待中斷 (interrupt) 的發生 ● 決定是正緣觸發還是負緣觸發 用軟體控制什麼 ?
  12. 12. 12 GPIO 腳位在哪裡? http://www.raspberrypi-spy.co.uk/ Pin1 Pin2 Pin25 Pin26 Pin3 Pin4Z Z 字型的腳位編號
  13. 13. 13 ● GPIO 高電位輸出為 3.3V ● GPIO 容忍輸入電位為 3.3V ● 單一 Pin 輸出電流為 3mA-16mA ● 全部 Pin 輸出總和小於 50mA ● GPIO 輸入低電位為小於 0.8V, 高電位為大於 1.3V 幾個 GPIO 的數字 https://www.scribd.com/doc/101830961/GPIO-Pads-Control2
  14. 14. 14 ● C ● C + wiringPi ● C# ● Ruby ● Perl ● Python ● Scratch ● Java Pi4J Library ● Shell script 如何控制 Raspberry Pi 的 GPIO ?
  15. 15. 15 Python + GPIO
  16. 16. 16 ● 變數 , 物件 , 型別 , 註解 ● 模組 ● 縮排 ● 迴圈 ● 條件判斷 ● 函式 Python 五分鐘速成
  17. 17. 17 ● 動態型別 (dynamic typing) # 這是註解 i = 3 # 變數 i 指到數字物件 3 i = [1, 2, 3, 4, 5] # 變數 i 指到串列物件 print(i[2]) # 印出串列中第三個元素 i = "abcde" # 變數 i 指到字串物件 print(i[2]) # 印出字串中第三個元素 變數 , 物件 , 型別 , 註解
  18. 18. 18 # import MODULE import RPi.GPIO # import MODULE as ALIAS import RPi.GPIO as GPIO 模組
  19. 19. 19 ● 用縮排取代大括號 ● 程式碼的區塊是用縮排分隔 ● 不使用 tab, 使用空白鍵 ● 常見縮排為 4 個空白鍵 縮排
  20. 20. 20 ● 自動迭代 (iterator) for i in xrange(start, stop[, step]): process for i in xrange(0, 11, 5): process 迴圈
  21. 21. 21 if condition_1: process_1 elif condition_2: process_2 else: process_3 process_4 條件判斷
  22. 22. 22 def function_name(): process def function_name(param_name): process def function_name(param_name = 3): process 函式
  23. 23. 23 ● 1. 存成檔案以後 , 用 python 執行 ● $ nano test.py ● $ python test.py ● 2. 進到互動模式 , 可直接看輸出結果 ● $ python Python 2.7.9 (default, Sep 17 2016, 20:26:04) [GCC 4.9.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 兩種執行 Python 的方法
  24. 24. 24 數位輸出
  25. 25. 25 實驗 1: 硬體的 Hello World 目的 : 從硬體到軟體的思維
  26. 26. 26 ● 發光二極體 ● 單向導通 ● 省電 LED http://upload.wikimedia.org/wikipedia/commons/c/c8/5mm_Red_LED.jpg 長腳接正極 Vcc 短腳接負極 GND
  27. 27. 27 要接哪一個腳位? 目標 : 一隻腳接地 , 一隻腳給電
  28. 28. 28 線路圖 LED RPi 長腳 (RED) Pin12 (GPIO18) 短腳 (BLACK) Pin6 (Ground) 1k 電阻 : 棕黑黑棕 ( 棕 )
  29. 29. 29 線路圖 LED RPi 長腳 (RED) Pin12 (GPIO18) 短腳 (BLACK) Pin6 (Ground) 1k 電阻 : 棕黑黑棕 ( 棕 )
  30. 30. 麵包板的使用 https://www.slideshare.net/eoinbrazil/imediaarduino08
  31. 31. 31 使用麵包板方便多了 1k 電阻
  32. 32. 32 各腳位的意義 https://goo.gl/f2rPpN
  33. 33. 33 開始用 Python 控制 GPIO 吧
  34. 34. 34 ● 載入模組 (Import module) ● 選擇編號系統 (Define pin numbering) ● 定義腳位 (Setup up a channel) ● 讀取輸入 / 寫入輸出 (Input/Output) ● 清理 (Cleanup) Python Code 基本流程 http://code.google.com/p/raspberry-gpio-python/wiki/BasicUsage
  35. 35. 35 #!/usr/bin/python ● import RPi.GPIO as GPIO # Import module import time GPIO.setmode(GPIO.BOARD) # Define pin numbering LED_PIN = 12 GPIO.setup(LED_PIN, GPIO.OUT) # Setup up a channel print("LED is on") GPIO.output(LED_PIN, GPIO.HIGH) # Input/Output status time.sleep(3) GPIO.cleanup() # Cleanup 一個實際的範例 以下都是使用別名 (alias)
  36. 36. 36 使用 :nano < 檔名 , 例如 led_on.py> 離開 :Ctrl + x > 令存新檔 :y > 不存離開 :n > 離開 :Ctrl + c nano 編輯器使用
  37. 37. 37 DEMO led_on.py $ cd ~ $ nano led_on.py $ python led_on.py
  38. 38. 38 ● Wiki ● http://sourceforge.net/p/raspberry-gpio- python/wiki/Home/ ● Code ● http://sourceforge.net/p/raspberry-gpio- python/code/ci/default/tree/ ● Reference detail ● http://elinux.org/RPi_Low-level_peripherals ● http://elinux.org/RPi_BCM2835_GPIOs ● http://www.raspberrypi.org/wp- content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf 更多 RPi.GPIO 的使用方法
  39. 39. 39 實驗 2: 控制 LED 閃爍 目的 : 熟悉 Python 語法
  40. 40. 40 一樣的線路圖 LED RPi 長腳 (RED) Pin12 (GPIO18) 短腳 (BLACK) Pin6 (Ground) 1k 電阻
  41. 41. 41 try: while True: print("LED is on") GPIO.output(LED_PIN, GPIO.HIGH) time.sleep(1) print("LED is off") GPIO.output(LED_PIN, GPIO.LOW) time.sleep(1) except KeyboardInterrupt: print("Exception: KeyboardInterrupt") finally: GPIO.cleanup() 永不停止的 while 迴圈 - 按 Ctrl+c 跳出迴圈
  42. 42. 42 $ cd ~ $ git clone https://github.com/raspberrypi-tw/smart-relay $ cd ~/smart-relay $ python led_blink.py 讀寫 GPIO 會存取 /dev/mem, 需 root 權限 (2015-09-24 以後的 image 可以用一般使用者身份執行 ) 執行方式
  43. 43. 43 實驗 3: 繼電器 目的 : 從 5V 到 110V
  44. 44. ● 繼電器是自動控制電路中的一種常用元器件 , 能 夠控制一組開關的通與斷 , 通常是通過電訊號進 行控制 , 或是通過磁 / 聲 / 光 / 熱形式來控制 繼電器 (Relay) http://www.51hei.com/dianzi/3479.html
  45. 45. ● 用小電流去控制大電流的一種「自動開關」 功能 繼電器 https://zh.wikipedia.org/wiki/%E7%BB%A7%E7%94%B5%E5%99%A8 大電流小電流
  46. 46. ● COM(Common) 表示共接點 ● NO(Normally Open) 為常開接點 , 平常處於開路 ( 斷 ) 路 ● NC(Normally Close) 為常閉接點 , 平常處於閉路 內部構造和名詞縮寫 https://zh.wikipedia.org/wiki/%E7%BB%A7%E7%94%B5%E5%99%A8
  47. 47. ● 額定工作電壓 ● 直流電阻 ● 吸合電流 ● 釋放電流 ● 觸點切換電壓和電流 技術參數
  48. 48. ● 電磁式繼電器 ● 熱敏乾簧繼電器 ● 固態繼電器 (SSR) ● 光繼電器 繼電器種類 http://goo.gl/821qH6
  49. 49. 光 ( 耦合 ) 兩路繼電器 https://www.sainsmart.com/products/2-channel-5v-relay-module
  50. 50. ● 額定工作電壓 :5V ● 吸合電流 : 直流 30V/10A, 交流 250V/10A ● 釋放電流 :15-20mA ● 觸點切換電壓和電流 : 低電位觸發 技術參數
  51. 51. 用繼電器控制 USB LED 燈
  52. 52. 全部設備 繼電器 插座頭 電源線 三用電錶 快速接頭杜邦母線 USB LED 燈 5V 轉接器 一字螺絲起子 銅導線
  53. 53. 先連接繼電器和樹莓派測試 4612
  54. 54. 先連接繼電器和樹莓派測試 NO 接點 COM 接點 VCC IN1 GND
  55. 55. 先連接繼電器和樹莓派測試
  56. 56. 56 線路圖 Rpi Relay Pin4 (5V) VCC (Red) Pin6 (Ground) IN1 (Orange) Pin12(GPIO18) GND (Black)
  57. 57. 57 ● RELAY_PIN = 12 GPIO.setup(RELAY_PIN, GPIO.OUT, initial=GPIO.HIGH) ● try: while True: print("Relay is on") GPIO.output(RELAY_PIN, GPIO.LOW) time.sleep(2) print("Relay is off") GPIO.output(RELAY_PIN, GPIO.HIGH) time.sleep(2) except KeyboardInterrupt: print("Exception: KeyboardInterrupt") finally: GPIO.cleanup() 低電位觸發
  58. 58. 58 DEMO relay_switch.py $ cd ~/smart-relay $ python relay_switch.py
  59. 59. 接上電錶
  60. 60. 執行測試程式
  61. 61. 電源線和快速接頭
  62. 62. 將銅導線插到快速接頭
  63. 63. 將電源線和快速接頭接在一起
  64. 64. 開關和銅導線
  65. 65. 將銅導線 [ 直接 ] 插到開關裡
  66. 66. 將開關和電源線接在一起
  67. 67. 再接到繼電器上 ( 先不插到插頭 )
  68. 68. 將插座兩端接起來 ( 先不插到插頭 ) 兩端接起來
  69. 69. 用電錶測試 ( 先不插到插頭 ) 量測插頭兩腳
  70. 70. 執行測試程式 ( 先不插到插頭 ) 繼電器打開時導通了
  71. 71. 確認沒問題了嗎?
  72. 72. 將插頭插上 ( 注意安全 !) 再插上插頭 先把 5V 轉接器和 USB LED 燈插上
  73. 73. 執行測試程式
  74. 74. USB LED 燈亮了 !
  75. 75. 75 DEMO relay_switch.py $ cd ~/smart-relay $ python relay_switch.py
  76. 76. 76 Raspberry Pi Rocks the World Thanks

×