Arduino 諌程教學<<點我看課程
開放硬體接感測器之微處理器(MCU):micro:bit 、ESP8266 、ESP32... 均可
選用 microPython 或 circuitPython ,python方式銜接感測器。
學習python 進場英文程式語言過程 有 感測器讀取 強化學習認知
以下 MCU 選用ESP32 與 109年開放式硬體創客套件之感測器 為主要教學用料,ESP32 以 microPython 作為入門練習環境。
數位輸入-按鈕開關 與 數位輸出-LED 二者關連起來?
接腳定義: GPIO12=按鈕開關 | GPIO13=LED
簡易功能: [按住]按鈕開關 時 LED [亮],放開時暗。
這功能適合使用[自鎖式開關]
數位輸入-按鈕開關 與 數位輸出-LED 二者關連起來?
接腳定義: GPIO12=按鈕開關 | GPIO13=LED
簡易功能: 按鈕開關[按一下] 時 LED [亮],再[按一下]後LED[暗],[切換]功能。
[一個開關]有二種狀態,以 [按下]=上一狀態放開 [及] 目前狀態按住
第11行:辨認[按下]狀態
第12行:LED 亮|暗 二狀態 以 變數ledS 運算 加1後再[除2的餘數]
類比輸入-可變電阻 與 類比輸出-LED 二者關連起來?
接腳定義: GPIO12=可變電阻 | GPIO13=LED
簡易功能: LED呼吸燈模式動作,可變電阻調[呼吸頻率]。
ADC 取值範圍: 0~65535
PWM 內 duty 設定範圍: 0~1023
第12行 運算式: 10-abs(10-i) 依 廻圈 0~20 改成 0~10~1 來回方式
程式缺點: 沒有時時刻刻 依 可變電阻之ADC 調時間,呼吸來回一次才取ADC,確認接續呼吸速度。亮度控制是直線式變化!
可改善之處?
每小回合即讀取ADC值
亮度 duty數值控 依[正弦線]控制
個人請 Gemini AI 給的 範例程式 <<下載參考
AI協助改善,學習新潮流!
數位輸入-按鈕開關x2 與 類比輸出-L9110s 二者關連起來?
使用DC馬達表現 正反轉 及 轉速不同 ,馬達用電量大 需 經[馬達模組]區分 動力電|訊號控制
接腳定義: GPIO12=按鈕開關A | GPIO13=按鈕開關B | GPIO26 & GPIO27 接L9110s A組
預期功能: 按鈕開關A與B[按一下] 時 對N20馬達[ +&- ] ,正值是順轉、負值是反轉 ,數值大小=馬達轉速,二按鈕均按下 為 馬達停止。
控制變數定義:Cnum=當下數值 數值範圍-9~0~+9
MCU控制訊號:類比輸出無法直接控電壓高低,用 PWM方式!達成電壓差效果。
microPython 中 PWM 使用duty,數值範圍 0~1023
類比輸入-光線感測器 與 函式庫-無源蜂鳴器 二者關連起來?
接腳定義: GPIO12=光線感測器 | GPIO13=無源蜂鳴器
簡易功能: 測光亮度 極亮時每1.5秒才[ㄅㄧ]1聲,全暗時短[ㄅㄧ]聲。
需事先分別確定
光線感測器:實際取得數值範圍 暗=568 ~ 亮=4096
無源蜂鳴器:[ㄅㄧ]聲的 音頻=freq(770) 及 音長=sleep(0.1) 參數值
請 Gemini AI 給無源蜂鳴器的 範例程式 <<下載參考
相同接線模式,播2隻老虎 Gemini AI 給的 範例程式 <<下載參考
[全暗] 休息 0.02秒 ,[極亮] 休1.5秒 [對照] 568~4096 VS 20~1500
範例程式:以解決問題為主,無源蜂鳴器 需 音頻+音長 故類函式功能
函式庫-超音波測距 與 函式庫-輸出LCD 二者關連起來?
超音波測距 HC-SR04 訊號腳 有 Trig Echo 2支,正電 及 接地 共4條線。
LCD1602(I2C介面) 訊號腳 有 SDA SCL 2支,正電 及 接地 共4條線。
ESP32接腳圖中 GPIO21=SDA | GPIO22=SCL ...
請 Gemini AI 給 這二個物件案例程式 ,其中程式 GPIO16=Trig | GPIO17=Echo 說明... 需求環境 下載程式庫... 如何安裝LCD1602需要庫? 如何求證目前I2C之地址? 實體接線對不對... 案例程式產生錯誤訊息如何排解? AI無法一次給對的解答!!
降低難度!求LCD1602與ESP32順利動作,這網頁分享得到解決 使用lcd_api.py及machine_i2c_lcd.py為函式庫,實作結果OK。
用Gemini改用這函式庫整合HC-SR04 再修函式沒有ljust() 功能 及 16字上限,要看懂程式作用,[人工] 小修正才得 範例程式包<<下載解壓再參考
簡易功能: 以cm為單位,呈現超音波所測得的情況。
函式庫 由網路高人分享所得,個人經驗:使用函式庫方式,要驗證與個人選用開放硬體是否符合? AI給的答案只是網路集合、整理後的回應。
I2C通訊確認選用[感測器]目前被設定的[地址],才能於I2C通道中順利配合動作。
數位輸入-滾珠開關 與 函式庫-max7219 二者關連起來?
滾珠開關左右擺動即達開關功能。
max7219(SPI介面) 訊號腳 有 DIN CS CLK 3支,正電 及 接地 共5條線。
ESP32接腳 GPIO22=DIN=SPI MOSI | GPIO5=CS=SPI SS | GPIO18=CLK=SPI SCK
網路中 github max7219 這函式庫應該OK,待實做確認可行性。
參照 max7219範例 修DIN腳用GPIO22 ,確認動作正常!
第1個範例(Initialize the Driver)中間段程式有簡易功能,沒有暫停故實做是看不到效果 ,建議加sleep(5) 及 清空fill(0) 。
第2、3 二個範例 需再 下載圖形的函式庫(IconsLibrary.py)。
滾珠開關 接GPIO23
輸入 & 輸出 均有! 請 Gemini AI 給 這二個物件案例程式 ?
實做給 提示詞1:
使用 esp32 ,micropython 系統,滾珠開關 接GPIO23 , max7219 GPIO22=DIN GPIO5=CS GPIO18=CLK 。 設計一個 max7219 全亮、全暗 動作2次後,計時5秒,感測 滾珠開關 訊號0至1 計次1 及在max7219 左上往橫亮1點,再計次1次共2次 秀2點 ... 第9次時到下一行的第1點。程式給參考
測試!看程式,發現這是單流程,停5秒後無限感測滾珠開關
再給 提示詞2:
計時5秒過程同時 感測 滾珠開關 訊號0至1 計次1 及在max7219 左上往橫亮1點,再計次1次共2次 秀2點 ... 第9次時到下一行的第1點,當時間到即停止感測滾珠開關 。程式給參考
測試!程式功能達成初步想法。 範例程式包 <<下載參考
AI協作 :知道感測器接腳基本功,函式庫環境確認,遊戲創意想法與合理性,程式碼AI有能力供給您需求。
再給 提示詞3:
這程式再加強,計時結束時 停5秒,保持剛結束情況。 max7219 再全亮、全暗動作2次後 跑馬燈方式呈現剛才的 計次 。 當滾珠開關被 開狀態達3秒 後即清空上回計次,重新進入遊戲 閃2次計次動作。 給案例程式
測試!程式功能達成初步想法,沒有跑馬燈! 不得不看AI給的程式,認為 max7219沒有這功能。 個人測試函式庫及提供範例有 跑馬燈這功能?
人工修訂有跑馬燈功能 案例程式包 <<下載參考
全國貓咪盃曾採用開放硬體創客套件清單的[霍爾開關] 不同廠家有所差異。
這裡選用[霍爾感測器-Hall Sensor]開關屬於晶片模式:需要[極性]正確才動作。
另一種 磁簧開關-Digital Sensor:沒有極性問題,但有結構方向性問題。
坊間尚有霍爾感測器 有[類比輸入]模式玩法,待日後再說明。
接腳定義: GPIO12=霍爾開關 | GPIO13=12顆 環形彩燈 ws2812b / neopixel
microPython 內含模組有 彩燈=neopixel (不需加掛 函式庫),控制概念:先設置編號狀態→一起動作,neopoxel.指令 是那一類?