智能機電整合開發板
Pomas V2
簡良諭
liangyuh@gmail.com
2024.10.10
腳位表
F3
F2
F1
F0
C3
C2
C1
C0
E3
E2
E1
E0
E7
E6
E5
E4
C15
C14
C13
C12
腳位編號
寫法
>>> led = Pin( 8 , Pin.OUT )
物件名稱
腳位編號
>>> led = Pin( 'E0', Pin.OUT )
物件名稱
腳位編號
>>> led = PWM( 0, freq=500, duty=0)
物件名稱
腳位編號
PWM編號
PWM3
PWM2
PWM1
PWM0
Pomas V2外觀圖
腳位對照圖
物件宣告寫法
>>> led = Pin( 8 , Pin.OUT )
物件名稱
腳位編號
>>> led = Pin( 'E0', Pin.OUT )
物件名稱
腳位編號
>>> led = PWM( 0, freq=500, duty=0)
物件名稱
腳位編號
F3
F2
F1
F0
C3
C2
C1
C0
E3
E2
E1
E0
E7
E6
E5
E4
C15
C14
C13
C12
IC腳位編號
PWM
PWM3
PWM2
PWM1
PWM0
課程1
認識Pomas開發板
Pomas V2外觀圖
輸出/入腳位對照圖
寫法
>>> led = Pin( 8 , Pin.OUT )
物件名稱
腳位編號
>>> led = Pin( 'E0', Pin.OUT )
物件名稱
腳位編號
>>> led = PWM( 0, freq=500, duty=0)
物件名稱
腳位編號
7
6
5
4
3
2
1
0
11
10
9
8
15
14
13
12
F3
F2
F1
F0
C3
C2
C1
C0
E3
E2
E1
E0
E7
E6
E5
E4
LED3
LED2
LED1
LED0
C15
C14
C13
C12
IO腳位
IC腳位編號
PWM
PWM3
PWM2
PWM1
PWM0
支援軟體
安裝驅動程式
安裝驅動程式
連接 USB 傳輸線並檢查連接埠編號
燒錄韌體更新
韌體燒錄更新
V2韌體下載網址: https://www.geniopy.com.tw/updates.html
1.將開發板「SW2」開關的2號腳位撥到ON位置,按「Reset」鈕將開發板重新啟動
重要提醒:如果Pomas開發板現在使用上很穩定沒有任何問題時,其實並不一定要一直操作更新韌體,可以當有新的需求時再進行更新。
韌體燒錄更新
2. 進入網址https://www.geniopy.com.tw/dl/pomas_firmware/ ,點選「更新工具」。
3. 下載「更新工具(Code_Ver12335).zip 」檔案並解壓縮
4. 進入「更新工具/USBMassProductionTool_For_GPL329XX」資料夾,6. 執行「 G+MassProductionTool For GPLXXxx.exe」。
韌體燒錄更新
5. 系統會自動偵測代入USB連接埠,按「Start Download」鈕。
6. 韌體燒錄完成(100%)後,按「Stop Download」鈕,離開更新程式。
7. 記得將開發板「SW2」開關的2號腳位撥到OFF位置,按「Reset」鈕將開發板重新啟動
燒錄韌體流程圖
燒錄完成
Thonny軟體
Thonny Python IDE
Thonny是一個免費的Python整合開發環境(IDE),也就是提供編碼、直譯/編譯和除錯的撰寫程式整合環境,主要目的是在簡化Python編程的過程。
安裝Thonny
繁體中文化
Thonny Python IDE操作界面
設定 Thonny
快速測試
REPL互動環境(Shell)
REPL代表「Real Eval Print Loop」,是一種常見的互動式編程環境。REPL環境允許用戶輸入代碼,立即執行它並返回結果。它通常包括以下部分:
執行撰寫程式
編輯環境設定
電子元件篇
電子元件接線
電子元件接線
以上述的例子,電路上放上的紅色LED燈時,則接線方法如下
註: 電阻不分正負極
直譯器設定
開機自動腳本
Pomas開發板可以點選所撰寫的程式來執行,但是若是想要在Pomas開發板開機時就自動執行指定的程式時,可以採取以下方式:
所以只要撰寫的程式檔案
接線說明
本例的LED燈已內建在Pomas開發板上,故不用接線。
程式碼
from machine import Pin
from gpb import delay
L0 = Pin(‘C12’, Pin.OUT )
while True:
L0.on()
delay(1000)
L0.off()
delay(1000)
02. 外接LED燈
實作說明
設計一個外接LED燈程式,符合以下要求:
註: 本單元主要目的在學習利用麵包板、杜邦線進行簡單的電路接線。
開發板內建限流電阻
接線說明
程式碼
from machine import Pin
from gpb import delay
led1 = Pin( 8, Pin.OUT)
while True:
led1.value(1)
delay(1000)
led1.value(0)
delay(1000)
03. PWM呼吸燈
實作說明
設計一個呼吸燈的程式,模仿人類的呼吸動作,符合以下要求:
LED燈重複地慢慢地亮起後又慢慢地變暗。
註: 部分LED燈只能作為數位輸出,現今大多的LED燈已能作類比輸出。
PWM腳位
Pomas的GPIO腳位都是數位輸出/輸入,也就是只能輸出0或1值。
PWM物件
在 MicroPython 中,要建立一個 PWM 物件,需使用PWM類別,並指定引腳、頻率和佔空比等參數。其語法如下:
led = PWM( N , freq , duty )
例如:
建立一個命名led1的PWM物件,使用引腳8作為PWM輸出(引腳的PWM編號為0),設置PWM頻率為500Hz,週期比值為0。
from machine import PWM
led1 = PWM( 0, freq=500, duty=0)
其中PWM有3個重要參數: N(PWM編號)、freq(頻率)、duty(佔空比)
接線說明
程式碼
from machine import PWM
from gpb import delay
led = PWM(0, freq=500, duty=0)
for i in range(5):
for n in range(0, 500, 50):
led.duty(n); delay(500)
print(n)
for n in range(500, 0, -50):
led.duty(n); delay(500)
print(n)
04. 按鈕開關
實作說明
設計一個利用按鈕來控制LED燈的亮與暗的程式,符合以下要求:
註: 若沒有外接的按鈕元件,可以使用Pomas開發板上的二個按鈕(KET1、KEY2)來操作。
按鈕元件
機械式按鈕(二腳)
機械式按鈕開關依持續作用的狀態形式,可以分為以下二類:
機械式按鈕(四腳)
按鈕開關有四支腳時,彼此兩兩相通(相通腳像夾子),當按下開關時,四支腳就會全部連通。接線時也是一組腳接VCC端、另一組腳接IO腳位。
建立按鈕物件
按鈕元件在程式中控制數位腳位是使用Pin物件,要匯入machine模組中的Pin類別。
from machine import Pin
創建外接的按鈕燈物件時,必須指定它的GPIO編號及數位輸入。建立語法如下:
物件名稱 = Pin( GPIO編號 , Pin.IN)
Pin物件有2個參數,分別為:
如: 建立一個btn物件,使用引腳9作為按鈕輸入,設置為輸入模式。
btn = Pin( 9 ,Pin.IN)
讀取按鈕輸入值
之前介紹過可以使用value(數值)方法來輸出數位訊號值,其實只要value()方法內不要放參數,就可以讀取輸入的數位訊號值。
print(btn.value()) # 印出按鈕狀態
開發板的KEY1及KEY2按鈕
開發板上內建有二個按鈕,分別為KEY1、KEY2,可以作為按鈕之用,只是宣告為物件時,必須使用Pomas指定的腳位宣告方式
btn1 = Pin('E6' ,Pin.IN)
btn2 = Pin('E7' ,Pin.IN)
接線說明
LED燈
按鈕
程式碼
from machine import Pin
from gpb import delay
led = Pin( 8 ,Pin.OUT) # 8號腳位
btn = Pin( 'E6' ,Pin.IN) # KEY1
while True:
if btn.value() == 1:
led.value(1)
else:
led.value(0)
05. RGB七彩霓虹燈
共陽極、共陰極RGB腳位判斷
RGB三色燈,是把R燈、G燈和B燈三者放在同一個元件內,
亂數模組
「隨機取數」是寫遊戲或是機率類的程式相當常用的技巧,在MicroPython中建議使用urandom模組,它提供了生成隨機數的功能。可以用來生成隨機的密鑰、種子等用途,
import urandom
常用的方法有取隨機整數randint()和取隨機浮點數uniform()。
urandom.randint(起始值a, 終止值b)
接線說明
若是共陽極腳 接 3.3V腳位。
程式碼
from machine import PWM
from gpb import delay
import urandom
LR = PWM(0, 200, 0 )
LG = PWM(1, 200, 0 )
LB = PWM(2, 200, 0 )
while True:
R = urandom.randint(0, 100)
G = urandom.randint(0, 100)
B = urandom.randint(0, 100)
LR.duty(R); LG.duty(G); LB.duty(B)
delay(1000)
print(R,G,B)
太亮時,數值可以改小一點
06. 亮度感測模組
實作說明
利用外接光敏電阻及紅色LED燈來設計一個程式,符合以下要求:
註: 決定變亮及變暗的數值請依實際環境調整
光線感測器(又稱光敏電阻)
光敏電阻是一種基於光學效應的電子元件,可以用來檢測環境光線強度。
它的工作原理是當光線照射到光敏電阻上時,會使其電阻值產生變化,進而改變電路中的電流或電壓值。光敏電阻的阻值通常會隨著光線強度的增加而減小,因此可以用來檢測光線的強弱。
這種只有2 個腳位的光敏電阻,沒有內建電阻,所以接線時接GND 建議要加上電阻(1K ~ 10K 都可以)。
ADC-類比數位轉換器(Analog-to-Digital Converter)
Pomas開發板處理這種連續的類比訊號,是透過ADC技術來達成。ADC是類比數位轉換器(Analog-to-Digital Converter)的縮寫,它是一種將類比信號轉換為數位信號的電子元件。在電子系統中,類比信號通常是指連續的、可變的電壓或電流信號,而數位信號則是由這些連續的信號轉換而來的、離散的二進制數字信號。
ADC物件
在MicroPython中,可以使用machine模組中的ADC類別,來通過程式碼來讀取外部設備上的模擬信號。
首先需要匯入machine模組的 ADC類別。
from machine import ADC
再來創建名為A0的ADC物件,使用A0腳位作類比輸出入。
A0 = ADC(0)
這樣就可以透過read()方法來讀取A0物件的數值
A0.read()
read()值範圍在0到4095之間,光線越亮,數值越高
接線說明
光敏感測器
LED燈
程式碼
from machine import Pin,ADC
from gpb import delay
led = Pin( 9 , Pin.OUT)
light = ADC(0)
br =0
for i in range(30):
br = br + light.read()
delay(20)
avg = br/30 + 200
while True:
if light.read() > avg :
led.on()
else:
led.off()
print(light.read())
delay(100)
07. 可變電阻調光燈
實作說明
設計一個角度感測可變電阻程式,符合以下要求:
可變電阻模組(類比輸入)
可變電阻模組內建分壓電路,經由轉動旋鈕改變兩個固定端間電阻值。以B10K的型號為例,它有3支腳,如圖所示,如果直接量這兩個腳的電阻值,就是10K。如果只接AB或BC兩腳,可以依照旋鈕的角度產生不同的電阻值。
該可變電阻的3支腳並沒有標示,通常A腳接VCC端、B腳接訊號輸出、C腳接GND端,但是A和C兩支腳接法是可以互換的,但是交換之後的數值變化會相反。
接線說明
可變電阻
LED燈
程式碼
from machine import PWM, ADC
from gpb import delay
led = PWM( 1 , 500, 0 )
a0 = ADC(0)
while True:
vr = a0.read()
led.duty(vr // 4)
print(vr , vr // 4)
delay(100)
08. TFT LCD螢幕
實作說明
設計二個程式可以在Pomas開發板上顯示圖片及文字,符合以下要求:
圖形模式LCD顯示模組
圖形模式LCD顯示模組可以顯示文字、數字、符號、圖像,它的螢幕為寬320、高240的座標以左上角為(0,0),右下角為(319,230)。
display模組
display模組是MicroPython中的一個顯示設備控制模組,
import display
display.start()
image模組建立影像流程
image模組
image模組是MicroPython中的一個圖像處理模組,它提供了對圖像進行處理和轉換的功能,例如” 改變圖像大小、旋轉圖像、調整圖像亮度和對比度等。
其中一些常用的類別和方法包括建立螢幕物件
scr = image.Image(320, 240, image.RGB565)
畫矩形
import display
import image
display.start()
display.vflip(0)
scr = image.Image(320, 240, image.RGB565)
# 在(0,0)處畫一個紅色矩形, X寬50, Y高100
scr =scr.draw_rectangle(0,0,50,100, (255,0,0),fill=True)
# 在(100,100)處畫一個綠色矩形, X寬100, Y高50
scr =scr.draw_rectangle(100,100,100,50,(255,0,0),fill=False)
display.set_frame(m_scr)
顯示圖片
如果是要把指定的圖片顯示在螢幕上,需要用到二個函數:
Image(圖片來源): 創建一個圖片物件,source為圖片的來源。
draw_image(圖片物件, x ,y): 在(x,y)位置繪製圖片
如
p_pict1 = image.Image('demo.bmp')
scr = scr.draw_image(p_pict1, 20, 20)
以上所介紹的都是希望在螢幕上顯示圖片、文字等設定,但是它並不會顯示在螢幕上,必須在最後加上set_frame ()這個指令才會真正顯示在螢幕上。
display.set_frame(scr)
顯示文字
顯示文字要使用draw_string()在螢幕物件上”繪製”文字,目前Pomas開發板的文字部分只能顯示英文字及數字。其語法如下:
draw_string(x , y, "string",(R, G, B), scale=n)
參數說明:
例如: 在(20,180)位置顯示”Hello”文字,顏色綠色、文字尺寸比例為3
scr = scr.draw_string(20,180,"Hello",(0, 255, 0), scale=3)
程式一: 顯示圖片及文字
import display
import image
display.start()
display.vflip(0)
scr = image.Image(320,240, image.RGB565)
scr = scr.draw_rectangle(0,0,320,240, (0,0,0), fill=True)
pict1 = image.Image('demo.bmp')
scr = scr.draw_image(pict1, 20, 20)
scr = scr.draw_string(20,180, "Hello", (0,255,0), scale =3)
display.set_frame(scr)
程式2-1: 自定程式庫-LCDshow.py
import image
display.start()
display.vflip(0)
scr = image.Image(320,240,image.RGB565)
def clear():
global scr
scr = scr.draw_rectangle(0,0,320,240,(0,0,0),fill=True)
display.set_frame(scr)
def put_str(y1,str1):
global scr
y1 = y1 * 30
scr = scr.draw_rectangle(10+50, y1, 50, 30,(0,0,0),fill=True)
scr = scr.draw_string(10,y1,str1,(255,255,255),scale=3)
display.set_frame(scr)
def put_pict(ppict1,x3,y3):
global scr
p_pict1 = image.Image(ppict1)
scr = scr.draw_image(p_pict1,x3,y3)
display.set_frame(scr)
程式2-2: 呼叫自定程式庫
import display
import image
from LCDshow import clear, put_str, put_pict
from gpb import delay
scr = image.Image(320,240, image.RGB565)
clear()
pictx = put_pict('demo.bmp',200,60)
for i in range(100):
put_str(1, "T="+str(i))
put_str(2, "C="+str(i))
put_str(3, "B="+str(i))
delay(100)
09. DHT11數位溫溼度計
實作說明
設計一個DHT11數位溫溼度計,符合以下要求:
DHT11數位溫溼度模組
DHT11數位溫溼度模組是屬於數位輸入,所以未必一定要使用具有類比(PWM)功能腳位。
接線說明
DHT11溫溼度計
from sensor import DHT11
from gpb import delay
dht = DHT11(8) # 8號腳位 dht = DHT11(8)
while True:
T = str(dht.temperature()) + "C"
H = str(dht.humidity()) + "%"
print(T,H)
delay(2000)
V2_09DHT配合LCD模組
from sensor import DHT11
import display, image
from LCDshow import clear, put_str, put_pict
from gpb import delay
scr = image.Image(320,240,image.RGB565)
dht = DHT11('E0') # 8號腳位
clear()
while True:
put_str(1, "T= "+str(dht.temperature()))
put_str(2, "H= "+str(dht.humidity()))
print(str(dht.temperature()) + "C")
print(str(dht.humidity()) + "%")
delay(2000)
clear()
10. 文字型LCD顯示模組(1602A)
實作說明
設計一個文字型LCD顯示模組,可以符合以下要求:
載入外部程式庫
當遇到韌體內部沒有支援的模組時,網路上有許多現成的 「 程式庫 」可供使用,例如現在要使用1602A LCD 模組,只要查詢關鍵字 「1602A」 「micropython」,就能找到可以直接匯入應用的程式庫,可簡化程式開發工作。
LCD顯示對應位置及指令
文字型LCD顯示模組的液晶螢幕可以顯示兩行資訊(第0行及第1行),每行16個字元(由0至15格),而每個字元只能在固定格內顯示,這二行的字元都有相對應的座標。
它只能顯示英文及數字,不能顯示中文字,常用的指令有
接線說明
DHT11數位溫溼度計
1602A LCD顯示模組
from sensor import DHT11
from machine import I2C
from gpb import delay
from i2c_lcd import I2cLcd
from lcd_api import LcdApi
I2C_ADDR = 0x27 ; I2C_NUM_ROWS =2 ; I2C_NUM_COLS=16
i2c = I2C(scl='A10', sda='A11', freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
dht =DHT11(8)
while True:
lcd.move_to(0,0)
lcd.putstr ( "T= "+str(dht.temperature()))
lcd.move_to(0,1)
lcd.putstr ( "H= "+str(dht.humidity()))
delay(2000)
11. 超音波感測器-倒車雷達
實作說明
設計一個倒車雷達程式,符合以下條件
超音波感測器
常見的HC-SR04超音波傳感器主要是用來偵測距離,模組上有兩個超聲波元件,一個用來發射,一個用來接收,就能利用一發一收,去算出距離。
蜂鳴器
蜂鳴器基本上分為有源蜂鳴器和無源蜂鳴器,二者的外型很相似,一般有源蜂鳴器會在上面貼一個白色貼紙,另外,有源蜂鳴器底部也會有膠封,無源蜂鳴器的底部可以直接看到電路板。
有源蜂鳴器 無源蜂鳴器
無源蜂鳴器
播放旋律主要是靠這個函式:
tone(pin, melody[thisNote], Duration);
//tone(PIN腳,音調,拍子)
要靜音則使用
noTone(pin);
其音高-音頻(單位Hz)對照表
接線說明
HC_SR04超音波感測器
蜂鳴器
from sensor import HC_SR04
from machine import PWM
from gpb import delay
sr04 = HC_SR04 ( 8 , 9 )
buzzer = PWM(3 ,freq=1000, duty=1000 )
while True:
x =sr04.Ultrasound()
if x < 20:
buzzer.duty(700)
else:
buzzer.duty(0)
print(str(x) + "cm" )
delay(500)
12.揚聲器SPK
實作說明
設計一個程式,符合以下要求:
揚聲器(Speaker)
揚聲器(Speaker)是一種將電信號轉換成聲音信號的電子元件,通常用於播放音樂、語音、警報等聲音訊號。透過改變頻率來改變音調,屬於PWM的應用。
揚聲器有很多種類,其中最常見的是動圈式揚聲器,它由喇叭振膜、線圈和磁鐵系統等組成,通過電信號作用在線圈上,產生磁場,進而產生振動,使得喇叭振膜產生聲音,應用電磁鐵將電流轉化為聲音。
揚聲器有2根腳位,模組上沒有特別標示腳位,也沒有正負極之分。
製作音檔-文字轉語音
進入 https://soundoftext.com/ 網站
1. 在Text區,輸入【歡迎進入Pomas的奇妙世界】文字。
2. Voice區選擇「Chinese(中文)」。
3. 按下「Submit」鈕。
audio_decode 模組
audio_decode 模組用於解碼和播放音訊檔案模組。它主要提供了以下功能:
音效播放流程
接線說明
程式碼
import audio_decode
audio_decode.init()
audio_decode.volume_up(90)
audio_decode.start('demo.mp3')
13. 麥克風錄音機
實作說明
設計一個錄音程式,符合以下要求:
麥克風
Pomas開發板內建有音效處理晶片及麥克風(MK!腳位),內建的麥克風屬於是感測器的一種,可以錄音、聲音偵測及語音辨識。
audio_encode 模組
audio_encode 模組用於進行音訊編碼的模組。它提供了以下函數:
這些函數可以用於在 MicroPython 環境下進行音訊編碼,例如將原始音訊數據進行壓縮後保存到文件中。需要注意的是,這些函數只能進行編碼,不能進行解碼。如果需要解碼,可以使用 audio_decode 模組進行解碼操作。
接線方式
揚聲器
LED燈
from machine import Pin
from gpb import delay
import audio_decode,audio_encode
ledR = Pin( 'C12' ,Pin.OUT) # 開發板LED0
ledY = Pin( 'C13' ,Pin.OUT) # 開發板LED1
audio_decode.init()
audio_encode.init()
audio_encode.start('record.wav') #錄音
ledR.on(); delay(5000); ledR.off()
audio_encode.stop()
ledY.on(); delay(2000); ledY.off() #播放
audio_decode.volume_up(100)
audio_decode.start('record.wav')
14. 可調速電風扇
實作說明
設計一個程式製作一個可以調整轉速的電風扇,符合以下要求:
風扇馬達(型號L9110)
風扇模組有標準4個腳位,分別為:
也可應用在船隻
語法:
inb = PWM( 腳位 ,Freq , duty )
如: inb = PWM( 0 , 200 , 0 )
INB: 馬達反轉,風向前吹
接線說明
可變電阻
風扇馬達
程式碼
from machine import PWM, ADC
from gpb import delay
inb = PWM (0,freq=200,duty=0) # 8號腳位
vr = ADC(0)
while True:
fan = vr.read()
inb.duty(fan // 4)
print(fan , fan // 4)
delay(100)
15. 滾珠開關
實作說明
設計一個螢幕調整程式,符合以下要求:
滾珠開關
滾珠開關也叫鋼珠開關,原理是通過珠子滾動接觸導針,控制電路的接通或者斷開的。當開關觸碰到內部的金屬板就亮燈、離開就關燈。利用開關中的小珠的滾動,可以透過金屬端子的觸碰就能產生導電或不導電的效果。
接線說明
滾珠開關
LED燈
from machine import Pin
from gpb import delay
shake = Pin('E0',Pin.IN) # 8號腳位
led1 = Pin('C2',Pin.OUT) # 2號腳位
prev = 0 # 建立變數 : 上一次的狀態
while True:
curr = shake.value()
print(curr)
if curr != prev:
led1.value(curr)
print("shake it!")
prev = curr
delay(100)
16. 震動開關
實作說明
設計一個居家安全程式,符合以下要求:
震動開關
震動開關的結構如下圖所示,裡頭有一個金屬導電彈簧以及金屬導電腳,金屬彈簧延伸到塑膠外殼外部是一條比較細的金屬線,因此在晃動的時候,內部互相接觸進而短路導電,原理和之前所提到的按鈕類似,只是震動開關利用震動的方式,控制電路的開或關。
請注意:晃動需要達到一定的幅度才能感測判斷為震動。
應用範圍:防盜警報系統、省電喚醒功能、自動斷電安全裝置等,各類需偵測震動之應用。
接線說明
震動開關
LED燈
from machine import Pin
from gpb import delay
sw = Pin('E0', Pin.IN) # 8號腳位
led1 = Pin('C2', Pin.OUT) # 2號腳位
while True:
sw_state = sw.value()
if sw_state == 0:
led1.on()
delay(500)
led1.off()
else:
led1.off()
17. 聲音偵測傳感器
實作說明
設計一個噪音檢測器居家安全程式,符合以下要求:
聲音偵測傳感器
聲音感測模組它的功能並不是用來講話或是偵測聲音的分貝值,主要作用只是偵測是否有聲音。聲音感測模組最常見的是以下這個紅色模組,這塊聲音感測模組價格便宜,但是缺點就是敏感度並不好,要很靠近發出聲音,而且音量要夠大超過門檻值,它才會有反應。接到類比腳位及數位腳位的差別是:
接線說明
聲音偵測傳感器
LED燈
from machine import Pin, ADC
from gpb import delay
led1 = Pin('C2',Pin.OUT) #2號腳位
a0 = ADC(0)
while True:
s_value = a0.read()
if s_value > 300:
print("聲音數值:", s_value)
led1.on()
delay(500)
led1.off()
delay(50)
18. 語音辨識
實作說明
設計一個用聲控電燈(LED燈)程式,符合以下要求:
註: 以LED燈代替電燈,讀者也可以採用繼電器及小夜燈施作實驗。
音頻輸出入/麥克輸入
在Pomas開發板上有內建麥克風(MIC)及外接耳機連接器、外接麥克風連接器。
語音辨識原理
語音辨識是指透過電腦對人類語言的聲音信號進行分析,並識別出語音的內容。其基本原理是通過信號處理和模式識別技術,將語音信號轉換為數字信號,然後進行模式識別,最終識別出語音內容。
智慧管家: 口令集1
語音辨識操作流程
接線說明
LED燈
也可以使用
ledR = Pin('C12', Pin.OUT )
import voice_recognition
from machine import Pin
led = Pin(2, Pin.OUT) # 2號腳位
#ledR = Pin('C12', Pin.OUT ) #使用開發板上LED紅燈
led.value(0)
voice_recognition.start(1)
while True:
cmd = voice_recognition.get_id()
if cmd == 2:
led.value(1)
if cmd == 3:
led.value(0)
19. 人臉辨識
實作說明
設計一個人臉辨識程式,符合以下要求:
鏡頭模組
鏡頭模組是連接在Pomas開發板上,用來輸入傳感器圖像原始數據,開發板中內建人臉偵測晶片。
鏡頭模組搭配LCD螢幕,可以讓鏡頭拍攝的影像即時顯示在LCD螢幕。
使用流程
測試鏡頭模組與LCD模組是否能正常運作
import sensor, display
sensor.start() # 啟用相機
display.start() # 啟用螢幕
while True:
img = sensor.snapshot() # 取得攝影機影像
display.set_frame(img) # 顯示剛剛取得的影像
接線說明
揚聲器
import face_recognition
import audio_decode
from gpb import delay
audio_decode.init()
audio_decode.volume_up(60)
face_recognition.start()
face_recognition.set_process(1)
while face_recognition.train() == 0:
pass
audio_decode.start('train_ok.wav')
face_recognition.set_process(0)
delay(2000)
face_recognition.recognize_start()
while True:
if face_recognition.get_face_id(0) != 0:
audio_decode.start("get_face.wav")
delay(2000)
face_recognition.recognize_start()
專題應用
A1. 智慧植栽
專題說明
設計一個可以智慧植裁的程式,符合以下要求:
註: 補水的濕度值可以依實際狀況自行調整。
土壤濕度感測器模組
土壤濕度感測器模組是一種用於測量土壤濕度的電子元件,通常由兩個主要部分組成:探針和模組。當溼度越高導電度也越高,將土壤濕度轉換成信號輸出,土壤濕度偵測模組有三支針腳,
繼電器
控制端: 有3個接腳,
被控端: 有3個接腳,負責接電源線。
其中NO和NC一次只會接一個,至於要接哪一個,就要看實際的情況了。
微型水泵
水泵本身有兩個開口,一個負責吸水、另外一個負責放水。只需要將電源線接上相應的電源,即可開始運轉。一些微型水泵還配備了控制電路,可以實現自動調節流量或壓力的功能。
水泵有兩條電線,一條接5V電源、一條接GND端,通電之後就會啟動內部的馬達開始抽水,所以在電路上使用一個繼電器作為開關,透過控制繼電器,就可以控制啟動水泵或關閉水泵。
接線說明
土壤濕度感測哭
繼電器
微型水泵
LED燈
接線說明
土壤濕度感測哭
繼電器
LED燈
程式1: 檢查土壤濕度感測器的偵測數值。
from machine import ADC
from gpb import delay
soil = ADC(0)
while True:
print ("濕度=",soil.read())
delay(1000)
程式2: 檢查繼電器運作
from machine import Pin
from gpb import delay
relay = Pin( 8 , Pin.OUT) #8號腳
led = Pin( 2 , Pin.OUT) #2號腳
while True:
relay.value(1); led.value(1)
print(1)
delay(2000)
relay.value(0); led.value(0)
print(0)
delay(2000)
專題程式-直接匯入LCDshow.py程式庫使用
from machine import ADC,Pin
import display,image
from gpb import delay
from LCDshow import clear, put_str, put_pict
main_scr = image.Image(320,240,image.RGB565)
soil = ADC(0)
relay = Pin( 8 , Pin.OUT) #8號腳
led = Pin( 2 , Pin.OUT) #2號腳
while True:
clear()
put_str(1, "S="+str(soil.read()))
if soil.read() < 1000:
relay.value(1); led.value(1)
delay(2000)
else:
relay.value(0); led.value(0)
delay(2000)
A2. 藍牙遠距搖控
實作說明
設計一個使用藍牙控制燈光、車門閘道程式,符合以下要求:
註:伺服馬達可以套上吸管,較能呈現閘門的效果。
藍牙模組
要呼叫BT-RT6M 藍芽模組工作,可以自行撰寫程式,或是使用名威科技所設計的程式庫ble_uart.py,只要將這個ble_uart.py檔案放入Pomas開發格的SD卡中,就能當成模組直接匯入並使用它,
該程式庫定義了一些方法,其功能說明如下:
藍牙遠端搖控APP
使用手機下載「 MeoW BLE」APP,它是一套藍牙通用工具,可以掃瞄以下QRCODE來進行安裝。如果無法使用此APP,可以下載其他免費的藍牙APP程式,如: FeasyBlue或是 LIGHTblue及Serial Bluetooth Terminal等做連線測試等。
伺服馬達(型號SG90)
伺服馬達有標準 3個腳位,模組上沒有特別標示腳位,而是以顏色區分。
常見的伺服馬達SG90有二種,請注意!二者的外觀跟型號都是一樣的。
接線說明
藍牙模組(BT-RT6M)
伺服馬達(SG90)
LED燈
程式1: 伺服馬達檢測
from gpb import Servo, delay
ser = Servo(0) # 使用 PWM8 腳位操控 Servo1
while True: # True 代表成立
ser.angle(0) # 停止
delay(500) # 等 0.5 秒
ser.angle(-50) # 順時針轉 50度
delay(500)
ser.angle(0)
delay(500)
ser.angle(50) # 逆時針轉 50度
delay(500)
程式2:檢測藍牙模組能否正常啟動
from ble_uart import BleUart
from gpb import delay
ble = BleUart( 2 , 115200 ) #Pomas V2用2, V4用0
delay(200)
ble.cmd_mode_entry()
ble.cmd_AT()
ble.set_device_name('lynn') #要改用自己設的英文名
print(ble.read_device_name())
專題程式: 藍牙遠距搖控匣門
from ble_uart import BleUart
from machine import Pin
from gpb import Servo, delay
ble = BleUart( 2 , 115200 ) #Pomas V2用2, V4用0
delay(200)
ble.cmd_mode_entry()
ble.cmd_AT()
ble.set_device_name('lynn') #要改自己的英文名
print(ble.read_device_name())
led = Pin ( 2, Pin.OUT)
ser = Servo(7)
while True:
cmd = str(ble.read(30), 'utf-8').strip('\0')
if cmd != '':
print(cmd)
if cmd == '1':
led.on()
ble.write('LED ON')
elif cmd == '2':
led.off()
ble.write('LED OFF')
elif cmd == '3':
ser.angle(90)
ble.write('OPEN DOOR')
elif cmd == '4':
ser.angle(0)
ble.write('CLOSE DOOR')
delay(10)
手機藍牙搖控
A3. 互連網應用
實作說明
設計一組2個互連網MQTT程式,符合以下要求:
提示: 本專題建議採用二張開發板,可以體會由B開發板(程式2)傳送MQTT訊息到A開發板(程式1)的互連網效果。若沒有2個Pomas開發板也可以逐一練習程式1及程式2。
UART WIFI模組(MW-RT10BX)
本專題採用MW-RT10BX這個WIFI模組
wifi函數庫
本專題採用MW-RT10BX這個WIFI模組,可以自行撰寫程式,或是使用名威科技所設計提供的程式庫wifi_uart.py,只要將這個wifi_uart.py檔案放入Pomas開發格的SD卡中,就能當成模組直接匯入並使用它。
class WifiUartRT10(): # 適用模組 MW-RT10BX
EN_PIN = 'B8' # for Pomas (Tinka請改為'B6')
wifi函數庫
要呼叫BT-RT6M 藍芽模組工作,以下為使用WIFI時常用的函數:
from wifi_uart import WifiUartRT10
MQTT函數庫
本專題採用MQTT GO網站作為訊號主機,因為它免費、免註冊、簡單易用。
MQTT GO網址: https://broker.mqttgo.io/
以下是程式庫wifi_uart.py在使用MQTT時會使用的函數列表及說明:
接線說明
UART WIFI模組
DHT11溫溼度計
程式1: 等待由MQTT伺服器接收訊息
from wifi_uart import WifiUartRT10
from sensor import DHT11
from gpb import delay
wifi = WifiUartRT10(2, 115200)
wifi.vccReboot()
wifi.sendAT('VER')
wifi.wifiConap('ABC','1234567890')
wifi.wifiGetip()
wifi.wifiState()
wifi.mqttCon('mqttgo.io','1883','8703896498')
wifi.mqttSub('humi','2',3000)
wifi.mqttSub('temp','2',3000)
while True:
wifi.mqttRecv()
delay(1000)
依實際值填入
程式2: 向MQTT主機傳送MQTT訊息
from wifi_uart import WifiUartRT10
from sensor import DHT11
from gpb import delay
dht = DHT11(8) #8號腳位
wifi = WifiUartRT10(2, 115200)
wifi.vccReboot()
wifi.sendAT('VER')
wifi.wifiConap('ABC','1234567890')
wifi.wifiGetip()
wifi.wifiState()
wifi.mqttCon('mqttgo.io','1883','8703896498')
wifi.mqttSub('humi','2',3000)
wifi.mqttSub('temp','2',3000)
while True:
wifi.mqttPub('2','0','temp',str(dht.temperature()))
delay(2000)
依實際值填入
A4. 智慧家庭
實作說明
設計一個智慧家庭專案,隨時偵測可以用語音控制家中家電的程式,符合以下要求:
智慧家庭架構圖
語音小愛管家-智慧居家流程
接線說明
LED接線圖
光敏感測器
DHT11溫溼度計
揚聲器(Speaker)
HC_SR04超音波感測器
伺服馬達(SG90)
風扇馬達(L9110)
接線說明
END
補充篇
Python基本語法
變數
Python變數並不需要宣告,只要直接指定變數值,就可以建立變數了,而電腦就會配置一塊記憶體給該變數使用。
變數的命名必須遵循以下規則:
變數實作
x = 0 ; y=1
a = b = c = 30 # 註解: 多重指定,同時將3個變數值指定為30
age, name = 20, "王大明"
print(x, y)
print(a, b, c)
print(age, name)
資料型態
在Python中,資料型態是用來表示不同的數據類型,常見的資料型態包括整數、浮點數、字串、布林值、串列、元組、字典等。
因為要相同的資料型態才能運算,Python在具有簡單的資料型態自動轉換功能:
資料型態轉換
其他的資料型態無法自動進行轉換時,就需要以函數來強制進行資料型態的轉換。是常見的資料型態轉換方法:
算術運算式
判斷式
程式的設計常會遇到需作一些判斷,再依照判斷的結果來進行不同的流程。這種判斷流程也稱之為選擇結構,Python語言以冒號「:」及縮排來表示程式區塊,縮排為1個Tab鍵或4個空白。
score = 89
if score >= 90:
print("甲等")
elif score >= 80:
print("乙等")
else:
print("不及格!")
串列(list)
程式中的資料通常是以變數來儲存,但是當有大量的資料要使用大量的變數時,單單變數命名就是個很大的問題,所以往往會改使用串列來處理。
串列(清單或列表)具有以下的特徵:
list1 = [1, 2, 3, 4, 5]
#元素皆為整數
list2 = [“芭樂”, “香蕉”, “蘋果”, “橘子”]
#元素皆為字串
list3 = [1, "水果", True]
#不同資料型態元素
常用的列表操作