智慧插座(Smart Relay): 從 GPIO 到繼電器
by
台灣樹莓派
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
智慧插座 : 從 GPIO 到繼電器 台灣樹莓派 2019/05/01@TKU
Slide 2
Slide 2 text
姓名標示 — 非商業性 — 相同方式分享 CC (Creative Commons) 姓名標示 — 你必須給予 適當表彰、提供指向本授權 條款的連結,以及 指出(本作品的原始版本)是否已 被變更。你可以任何合理方式為前述表彰,但不得以 任何方式暗示授權人為你或你的使用方式背書。 非商業性 — 你不得將本素材進行商業目的之使 用。 相同方式分享 — 若你重混、轉換本素材,或依本 素材建立新素材,你必須依本素材的授權條款來 散布你的貢獻物。
Slide 3
Slide 3 text
3 ● Raspberry Pi 官方經銷商 ● 專注 Raspberry Pi 應用與推廣 , 舉辦社群活動 關於我們
Slide 4
Slide 4 text
4 ● COSCUP,MakerConf,PyCon,HKOSCon 講者 ● 投影片 ● https://speakerdeck.com/piepie_tw ● 程式碼 ● https://github.com/piepie-tw 分享 x 教學
Slide 5
Slide 5 text
No content
Slide 6
Slide 6 text
6 ● Raspberry Pi GPIO 介紹 ● 使用繼電器控制 110V 電器 本次主題
Slide 7
Slide 7 text
7 ● 硬體:Raspberry Pi 3B/3B+ ● 作業系統:2018-11-13-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 新增三行
Slide 8
Slide 8 text
● $ sudo apt-get update ● $ sudo apt-get -y install python- pip python-dev x11vnc python3-dev python3-venv 安裝今日所需軟體 ( 已安裝 )
Slide 9
Slide 9 text
9 Raspberry Pi GPIO 介紹
Slide 10
Slide 10 text
10 ● General Purpose Input Output ● GPIO 是一種可用軟體控制的數位訊號 什麼是 GPIO ? http://www.tek.com/datasheet/tps2000b-series-digital-storage-oscilloscopes-datasheet
Slide 11
Slide 11 text
11 ● 決定是輸入還是輸出 ● 輸出:寫值到某根腳位 ● 輸入:從某根腳位讀值 ● 等待中斷 (interrupt) 的發生 ● 決定是正緣觸發還是負緣觸發 用軟體控制什麼 ?
Slide 12
Slide 12 text
12 GPIO 腳位在哪裡? http://www.raspberrypi-spy.co.uk/ Pin1 Pin2 Pin25 Pin26 Pin3 Pin4 Z Z 字型的腳位編號
Slide 13
Slide 13 text
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
Slide 14
Slide 14 text
14 ● C ● C + wiringPi ● C# ● Ruby ● Perl ● Python ● Scratch ● Java Pi4J Library ● Shell script 如何控制 Raspberry Pi 的 GPIO ?
Slide 15
Slide 15 text
15 Python + GPIO
Slide 16
Slide 16 text
16 ● 變數 , 物件 , 型別 , 註解 ● 模組 ● 縮排 ● 迴圈 ● 條件判斷 ● 函式 Python2 五分鐘速成
Slide 17
Slide 17 text
17 ● 動態型別 (dynamic typing) # 這是註解 i = 3 # 變數 i 指到數字物件 3 i = [1, 2, 3, 4, 5] # 變數 i 指到串列物件 print(i[2]) # 印出串列中第三個元素 i = "abcde" # 變數 i 指到字串物件 print(i[2]) # 印出字串中第三個元素 變數 , 物件 , 型別 , 註解
Slide 18
Slide 18 text
18 # import MODULE import RPi.GPIO # import MODULE as ALIAS import RPi.GPIO as GPIO 模組
Slide 19
Slide 19 text
19 ● 用縮排取代大括號 ● 程式碼的區塊是用縮排分隔 ● 不使用 tab, 使用空白鍵 ● 常見縮排為 4 個空白鍵 縮排
Slide 20
Slide 20 text
20 ● 自動迭代 (iterator) for i in xrange(start, stop[, step]): process for i in xrange(0, 11, 5): print(i) 迴圈
Slide 21
Slide 21 text
21 if condition_1: process_1 elif condition_2: process_2 else: process_3 process_4 條件判斷
Slide 22
Slide 22 text
22 def function_name(): process def function_name(param_name): process def function_name(param_name = 3): process 函式
Slide 23
Slide 23 text
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 的方法
Slide 24
Slide 24 text
24 數位輸出
Slide 25
Slide 25 text
25 實驗 1: 硬體的 Hello World 目的 : 從硬體到軟體的思維
Slide 26
Slide 26 text
26 ● 發光二極體 ● 單向導通 ● 省電 LED http://upload.wikimedia.org/wikipedia/commons/c/c8/5mm_Red_LED.jpg 長腳接正極 Vcc 短腳接負極 GND
Slide 27
Slide 27 text
27 要接哪一個腳位? 目標 : 一隻腳接地 , 一隻腳給電
Slide 28
Slide 28 text
28 線路圖 LED RPi 長腳 (RED) Pin12 (GPIO18) 短腳 (BLACK) Pin6 (Ground) 1k 電阻 : 棕黑黑棕 ( 棕 )
Slide 29
Slide 29 text
29 線路圖 LED RPi 長腳 (RED) Pin12 (GPIO18) 短腳 (BLACK) Pin6 (Ground) 1k 電阻 : 棕黑黑棕 ( 棕 )
Slide 30
Slide 30 text
麵包板的使用 https://www.slideshare.net/eoinbrazil/imediaarduino08
Slide 31
Slide 31 text
31 使用麵包板方便多了 1k 電阻
Slide 32
Slide 32 text
32 各腳位的意義 https://goo.gl/f2rPpN
Slide 33
Slide 33 text
33 開始用 Python 控制 GPIO 吧
Slide 34
Slide 34 text
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
Slide 35
Slide 35 text
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)
Slide 36
Slide 36 text
36 使用 :nano < 檔名 , 例如 led_on.py> 離開 :Ctrl + x > 令存新檔 :y > 不存離開 :n > 離開 :Ctrl + c nano 編輯器使用
Slide 37
Slide 37 text
37 DEMO led_on.py $ cd ~ $ nano led_on.py $ python led_on.py
Slide 38
Slide 38 text
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 的使用方法
Slide 39
Slide 39 text
39 實驗 2: 控制 LED 閃爍 目的 : 熟悉 Python 語法
Slide 40
Slide 40 text
40 一樣的線路圖 LED RPi 長腳 (RED) Pin12 (GPIO18) 短腳 (BLACK) Pin6 (Ground) 1k 電阻
Slide 41
Slide 41 text
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 跳出迴圈
Slide 42
Slide 42 text
42 $ cd ~ $ git clone https://github.com/piepie-tw/smart-relay $ cd ~/smart-relay $ python led_blink.py 讀寫 GPIO 會存取 /dev/mem, 需 root 權限 (2015-09-24 以後的 image 可以用一般使用者身份執行 ) 執行方式
Slide 43
Slide 43 text
43 實驗 3: 繼電器 目的 : 從 5V 到 110V
Slide 44
Slide 44 text
● 繼電器是自動控制電路中的一種常用元器件 , 能 夠控制一組開關的通與斷 , 通常是通過電訊號進 行控制 , 或是通過磁 / 聲 / 光 / 熱形式來控制 繼電器 (Relay) http://www.51hei.com/dianzi/3479.html
Slide 45
Slide 45 text
● 用小電流去控制大電流的一種「自動開關」 功能 繼電器 https://zh.wikipedia.org/wiki/%E7%BB%A7%E7%94%B5%E5%99%A8 大電流 小電流
Slide 46
Slide 46 text
● COM(Common) 表示共接點 ● NO(Normally Open) 為常開接點 , 平常處於開路 ( 斷 ) 路 ● NC(Normally Close) 為常閉接點 , 平常處於閉路 內部構造和名詞縮寫 https://zh.wikipedia.org/wiki/%E7%BB%A7%E7%94%B5%E5%99%A8
Slide 47
Slide 47 text
● 額定工作電壓 ● 直流電阻 ● 吸合電流 ● 釋放電流 ● 觸點切換電壓和電流 技術參數
Slide 48
Slide 48 text
● 電磁式繼電器 ● 熱敏乾簧繼電器 ● 固態繼電器 (SSR) ● 光繼電器 繼電器種類 http://goo.gl/821qH6 光電耦合 電磁式
Slide 49
Slide 49 text
光 ( 耦合 ) 兩路繼電器 https://www.sainsmart.com/products/2-channel-5v-relay-module
Slide 50
Slide 50 text
● 額定工作電壓 :5V ● 吸合電流 : 直流 30V/10A, 交流 250V/10A ● 釋放電流 :15-20mA ● 觸點切換電壓和電流 : 低電位觸發 技術參數
Slide 51
Slide 51 text
用繼電器控制 USB LED 燈
Slide 52
Slide 52 text
全部設備 繼電器 插座頭 電源線 三用電錶 快速接頭 杜邦母線 USB LED 燈 5V 轉接器 一字螺絲起子 銅導線
Slide 53
Slide 53 text
先連接繼電器和樹莓派測試 4 6 12
Slide 54
Slide 54 text
先連接繼電器和樹莓派測試 NO 接點 COM 接點 VCC IN1 GND
Slide 55
Slide 55 text
先連接繼電器和樹莓派測試
Slide 56
Slide 56 text
56 線路圖 Rpi Relay Pin4 (5V) VCC (Red) Pin6 (Ground) IN1 (Orange) Pin12(GPIO18) GND (Black)
Slide 57
Slide 57 text
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() 低電位觸發
Slide 58
Slide 58 text
58 DEMO relay_switch.py $ cd ~/smart-relay $ python relay_switch.py
Slide 59
Slide 59 text
接上電錶
Slide 60
Slide 60 text
執行測試程式
Slide 61
Slide 61 text
電源線和快速接頭
Slide 62
Slide 62 text
將銅導線插到快速接頭
Slide 63
Slide 63 text
將電源線和快速接頭接在一起
Slide 64
Slide 64 text
開關和銅導線
Slide 65
Slide 65 text
將銅導線 [ 直接 ] 插到開關裡
Slide 66
Slide 66 text
將開關和電源線接在一起
Slide 67
Slide 67 text
再接到繼電器上 ( 先不插到插頭 )
Slide 68
Slide 68 text
將插座兩端接起來 ( 先不插到插頭 ) 兩端接起來
Slide 69
Slide 69 text
用電錶測試 ( 先不插到插頭 ) 量測插頭兩腳
Slide 70
Slide 70 text
執行測試程式 ( 先不插到插頭 ) 繼電器打開時導通了
Slide 71
Slide 71 text
確認沒問題了嗎?
Slide 72
Slide 72 text
將插頭插上 ( 注意安全 !) 再插上插頭 先把 5V 轉接器和 USB LED 燈插上
Slide 73
Slide 73 text
執行測試程式
Slide 74
Slide 74 text
USB LED 燈亮了 !
Slide 75
Slide 75 text
75 DEMO relay_switch.py $ cd ~/smart-relay $ python relay_switch.py
Slide 76
Slide 76 text
76 Raspberry Pi Rocks the World Thanks