跳到內容

維基少年:樹莓派/樹莓派樂高®防盜報警器

來自華夏公益教科書,為開放世界提供開放書籍

Andrew Oakley 的教程
公有領域 2016-04-24 更新 2018-03-01
www.cotswoldjam.org

LEGO® 是樂高集團公司的商標,該公司不讚助、授權或認可本教程或 Cotswold Raspberry Jam。

本教程將向您展示如何製作一個防盜報警器,當樂高®門開啟時會發出警報聲。

Words you will see on the screen, or that you need to type in, are highlighted like this

在每行結尾,您通常需要按 ↵ Enter 鍵。您的導師應該已經為您準備了樹莓派,並給您一個元件包。如果沒有,請參閱結尾處的“準備”部分。

電子元件

[編輯 | 編輯原始碼]

壓電蜂鳴器

[編輯 | 編輯原始碼]

壓電蜂鳴器在電流透過時會發出嗶嗶聲。

它有兩個“腿”聯結器;一個長一個短。

  • 長腿必須連線到正極
  • 短腿必須連線到地線(負極)。

簧片開關

[編輯 | 編輯原始碼]

簧片開關是一個玻璃管,裡面有兩塊金屬,中間隔著一個小縫隙。當附近有磁鐵時,兩塊金屬會接觸,讓電流透過。簧片開關可以在任一側連線正極或負極。

跳線(也稱為杜邦線)用於將電子元件連線到樹莓派或麵包板。

您還應該有四根母對母跳線。

一塊小磁鐵和一個樂高®門

[編輯 | 編輯原始碼]

一塊小磁鐵和一個樂高®門。您的導師應該已經用膠帶將簧片開關貼上到門框的頂部內側,並將磁鐵貼上到門的頂部內側。

如果您家裡有防盜報警器,可以拿一個腳凳看看門頂。我敢打賭您會看到一些白色的塑膠塊——門框上一個,門頂一個。這些裡面包含一個簧片開關和一個磁鐵,就像本教程一樣。

樹莓派使用兩組數字來指代通用輸入輸出引腳(GPIO 引腳)。

“板編號”只是從左下角開始,從 1 開始,一直向上和向右,直到 40。

“BCM 編號”(Broadcom 編號)是樹莓派處理器看到引腳連線的方式。

我們將使用 GPIO Zero 進行程式設計,它使用 BCM 編號。

  1. 將簧片開關連線到 GPIO 引腳 9(GND)引腳 7(GPIO 4)
  2. 將壓電蜂鳴器的短腿連線到 GPIO 引腳 14(GND),並將長腿連線到 GPIO 引腳 16(GPIO 23)

檢測門開啟

[編輯 | 編輯原始碼]

啟動樹莓派並進入桌面。

從選單中選擇程式設計 - Python 3。然後使用檔案,新建視窗建立新程式。

在程式中輸入以下內容,或者您可以使用檔案,開啟開啟 python/burglar 資料夾中的 burglar1.py 程式。

from gpiozero import Button

button=Button(4)

button.wait_for_release()
print ("Door opened")

使用檔案,儲存將此程式儲存為 burglar1.py,然後透過選擇執行選單,執行模組來執行它。

關閉門然後開啟門。您應該在螢幕上看到“門已開啟”字樣。

沒有起作用?檢查您是否

  • 電線連線到正確的 GPIO 引腳。
  • 簧片開關與磁鐵對齊。輕輕旋轉它,使觸點被磁鐵拉到一起。
  • 簧片開關沒有斷裂(如果斷裂,請向您的導師索要另一個)。
  • 沒有拼寫錯誤,沒有缺失的括號,並且您使用了圓括號而不是尖括號、大括號或方括號。

這個程式在做什麼?

[編輯 | 編輯原始碼]
from gpiozero import button

第一行告訴計算機學習一個新事物。計算機可以從其他程式設計師編寫的程式中學習,我們稱這些其他程式為“庫”。我們的指令告訴計算機學習關於按鈕,按鈕可以按下或釋放。

button=Button(4)

簧片開關是一種特殊的按鈕。它是“常開”的(釋放),沒有電流透過。當附近有磁鐵時,它會閉合(就像按下按鈕一樣),電流從 GPIO4 引腳流向接地引腳。

button.wait_for_release()

這會導致程式等待直到簧片開關重新開啟——它必須從閉合狀態變為開啟狀態。如果門在程式開始時已經開啟,則不計入。

print ("Door opened")

這將在螢幕上列印一條訊息。

迴圈程式

[編輯 | 編輯原始碼]

讓我們新增一個迴圈,這樣我們就可以不斷地開啟和關閉門。

from gpiozero import Button

button=Button(4)

while (True):
   button.wait_for_release()
   print ("Door opened")
   
   button.wait_for_press()
   print ("Door closed")

或者,如果您不想輸入,可以載入 burglar2.py 程式。

while 命令會重複程式的一部分;True 詞語會讓它永遠重複。

縮排在 Python 中很重要。例如,您必須在 while 後面的行中輸入兩個空格。這樣的縮排定義了一塊程式碼。

Python 對標點符號和大小寫也很挑剔。True 的第一個字母必須是大寫,並且 while (True): 行必須以冒號結尾。

使用檔案,儲存將此程式儲存為 burglar.py,然後透過選擇執行選單,執行模組來執行它。嘗試開啟和關閉門。

透過選擇 Shell 選單,重新啟動 Shell 來停止程式。

蜂鳴器

[編輯 | 編輯原始碼]

修改程式以新增蜂鳴器。或者,載入burglar3.py檔案。

from gpiozero import Button, Buzzer

button=Button(4)

buzzer=Buzzer(23)

while (True):
  button.wait_for_release()
  print ("Door opened")
  buzzer.beep(1,0,1)
   
  button.wait_for_press()
  print ("Door closed")

請注意,我們已經從庫中匯入了蜂鳴器物件,以及按鈕。

接下來,我們將蜂鳴器設定為在 GPIO23 上工作。

當門被開啟時,我們使用

  buzzer.beep(1,0,1)

此命令具有三個數字,稱為引數

  1. 蜂鳴器發聲的秒數(1)
  2. 蜂鳴器保持靜音的秒數(0,零)
  3. 迴圈遍歷聲音和靜音期的次數(1,僅一次)

1,0,1 將給我們一個單一的 1 秒蜂鳴聲。你可以更改它,使其發出非常煩人的聲音!

使用檔案,儲存將此程式儲存為 burglar3.py,然後透過選擇執行選單,執行模組來執行它。

現在,當你開啟門時,蜂鳴器應該會響一秒鐘。

透過選擇 shell 選單,重啟 shell 來停止程式。

從以下位置下載示例程式檔案:http://www.cotswoldjam.org/downloads/2016-04

從 Bricklink.com 或 LEGO® 零件專家處從 cpc.farnell.com 或電子元件零售商處
60623 1×4×6 釘門 SW01130小型釹塊磁鐵
60596 1×4×6 釘門框 SW00757低壓玻璃簧片開關
3032 4×6 釘板 LS03804低壓壓電蜂鳴器
 SC12901 ×4 母-母 杜邦跳線

玻璃簧片開關容易斷裂。彎曲時握住支腿,不要依賴玻璃支撐它們。使用透明膠帶® 以確保任何碎片在開關斷裂時不會逃逸。

Cjam-burglar-tutorial-2018.pdf

[編輯 | 編輯原始碼]

本教程的原始 PDF 可以在維基共享資源上找到:Cjam-burglar-tutorial-2018.pdf

burglar1.py

[編輯 | 編輯原始碼]
from gpiozero import Button

button=Button(4)

button.wait_for_release()
print ("Door opened")

burglar2.py

[編輯 | 編輯原始碼]
from gpiozero import Button

button=Button(4)

while (True):
  button.wait_for_release()
  print ("Door opened")

  button.wait_for_press()
  print ("Door closed")

burglar3.py

[編輯 | 編輯原始碼]
from gpiozero import Button, Buzzer

button=Button(4)
buzzer=Buzzer(23)

while (True):
  button.wait_for_release()
  print ("Door opened")
  buzzer.beep(1,0,1)

  button.wait_for_press()
  print ("Door closed")
華夏公益教科書