13 OSEP+Arduino
(2024/05/08)
一、認識Arduino開發板與積木程式
參考我以前的文章
其中使用【積木程式】的軟體有很多,主要有2大類:
使用積木程式寫程式,再把積木程式轉為Arduino語言,再燒錄到Arduino板子,使用時,可離線操作
motoBlockly(慧手科技):https://www.motoduino.com/
bDesigner(桃園市八德國小蔡佳倫老師):https://bdesigner1.webnode.tw/
mblock(大陸):https://www.mblock.cc/en/
pictoBlox(印度):https://pictoblox.ai/
...
使用積木程式寫程式,寫程式與Arduino互動,使用時,Arduino板子要與電腦連接,不可離線操作
使用前,Arduino板子要先安裝韌體
一般以Scratch 3.0為底,再去修改,所以很多界面與Scratch相似
Transformer(宇宙機器人):https://www.kodorobot.com/ ,但此軟體好像已經沒有在推廣了!
bDesigner(桃園市八德國小蔡佳倫老師):https://bdesigner1.webnode.tw/
mblock(大陸):https://www.mblock.cc/en/
pictoBlox(印度):https://pictoblox.ai/
OSEP Scratch(台灣):https://sites.google.com/view/scratch-web-serial-api/home
...
認識OSEP Scratch
OSEP Scratch官網:https://sites.google.com/view/scratch-web-serial-api/home
許惠美教授的最新AI教學影片(20240120):https://youtu.be/arYZqksnDqE?si=sDYnqyKnVfdWNJRu
OSEP Scratch 線上編輯器
正式版(版本編號:1110731):https://osep-scratch.github.io/app/app/
測試版本 (β版)(版本編號:1121226): https://estea8968.github.io/osep_web_serial/app/ (這次採用此來教學)
前置作業
先安裝Arduino的驅動程式
再來燒錄OSEP的韌體
添加擴展Arduino積木
小試一下
讓D13的LED燈閃爍
二、擴展板的使用
參考我以前的文章
認識 數位及類比
認識【輸出裝置】及【輸入裝置】
認識【擴展板】
數位腳位(通常D0、D1不會用到, 當RX與TX用)
D2腳位接了一顆【按鍵】
D3腳位接了一顆【按鍵】
D4腳位接了一顆【DHT11(溫濕度感應器)】
D5腳位接了一顆【蜂鳴器】
D6腳位接了一顆【紅外線接收器】
D7腳位沒有接東西,我們可以接我們想接的元件或感應器
D8腳位沒有接東西,我們可以接我們想接的元件或感應器
D9腳位接到了【三色LED的紅燈】
D10腳位接到了【三色LED的綠燈】
D11腳位接到了【三色LED的藍燈】
D12腳位接了一顆【紅色LED燈】
D13腳位接了一顆【藍色LED燈】
類比輸入腳位
A0:可變電阻器
A1:光敏電阻
A2:LM35溫度感測器模組
A3:沒有接東西,我們可以接我們想接的元件或感應器
A4:I2C接口(A4 SDA)
A5:I2C接口(A5 SCL)
其他
1個I2C接口(A4 SDA、A5 SCL)、1個TTL串口
實作一:交互點亮LED1及LED2(點亮時間為1秒)
實作二:交互點亮三色LED燈的紅燈、綠燈、藍燈(每燈點亮時間為1秒)
三色LED燈很亮很刺眼,不要直視!
程式跟上面很像,能不能再把下面程式再簡化一下?
實作三:將三色LED燈的紅燈漸亮又漸滅,不停循環,這也就是所謂的【呼吸燈】
PWM腳位就是把數位腳位模擬成類比腳位,Arduino的PWM腳位有:3、5、6、9、10、11 (有~的符號)
PWM腳位的輸出值為0~255間,其實0及255就是數位訊號的0及1,類比訊號就是在0與1間還有其他值
這可能要用到變數及迴圈,請先想一想如何做?
實作四:按SW1鍵開燈、按SW2鍵關燈
先確認按下按鍵時,腳位的數位值(請小貓咪告知其值)
測試後發現:這按鍵好像有BUG,只按1下(短按),會跑2次,出現2(如下) (再請國全老師看看)
實作五:請告知【可變電阻器】的【輸入類比值】
類比輸入值介於0~1023間
實作六:天黑請開燈
在上例中,一樣可以請大熊說出光敏電阻的輸入類比值,發現
全遮光時:其值靠近0
很亮時,其值靠近1023
以輸入類比值小於200代表天黑了
當天黑時,請將藍色LED1點亮
三、進階遊戲設計 (Arduino與舞台的互動)
實作一:猴子接香蕉遊戲:利用可變電阻器可以移動猴子的位置
實作二:跳恐龍遊戲:按下按鍵,恐龍會往上跳,避過障礙物
實作二:射擊遊戲:利用可變電阻器可以移動主角的位置,按下按鍵會射擊出子彈
四、其他元件的使用
請小貓咪說出目前的溫度、濕度
設定腳位積木要放在迴圈裡面
將電腦的鍵盤模擬成鋼琴的鍵盤
播放全家便利商店入店時的音樂
簡譜:3 1 5(低音) 1 2 5 2 3 2 5(低音) 1
測試超音波測距感測器
超音波感測器有4支腳,分別為VCC、TRIG、ECHO、GND
我們將TRIG接到擴展板的D7、ECHO接到D8,VCC接VCC、GND接GND
請小貓咪說出目前量測到的距離
測試LCD顯示器
LCD顯示器有4支腳為I2C腳位
測試後發現:LCD顯示器好像只支援0X27的,0X3F的好像不支援,再請國全老師增加可選擇位址的選項
五、物聯網(MQTT、LINE)的應用
1.MQTT的使用
認識MQTT
這是目前物聯網最夯的應用
MQTT由三種角色構成,分別是Publisher(發布者)、 Broker(代理人)和Subscriber(訂閱者)
相當於youtube的訂閱機制(youtuber為【發布者】、youtube網站為【Broker】、你我為【訂閱者】)
MQTT的主題(Topic)名稱:MQTT主題名稱是UTF-8(萬國碼)編碼的字串,我們可以自行決定主題名稱,例如,傳送溫度的訊息主題可命名成「溫度」、傳送亮度的訊息主題叫做「照度」…等等。主題名稱也支援類似檔案路徑的階層式命名方式 ,如: wenyu/home/1f/led
MQTT伺服器的參考資料:10 MQTT相關工具
實作一:從外部控制小貓咪前進、後退(或點亮Arduino板上的LED燈)
使用夜市小霸王的MQTT伺服器
wss://broker.mqttgo.io:8084/mqtt
MQTT client工具 (網頁版)
https://mqttgo.io/ 或 https://broker.mqttgo.io/
擴展添加【MQTT】積木
主題(Topic)與訊息(Payload)(請自訂),如
主題:wenyu38
訊息:go、back
這積木當收到訊息後,訊息變數會一直存著此值,所以小貓咪會一直移動,因此再發送一訊息出去
實作二:在Arduino板上按按鍵來控制外部(如別人的小貓咪)
2.LINE的使用
實作:簡易防盜系統
申請 LINE Notify 權杖
打開 LINE Notify 的網站 ( https://notify-bot.line.me/zh_TW/ ),使用自己的 LINE 帳號登入。
登入後滑鼠移至上方個人帳號,選擇「個人頁面」
我的權杖:i1zs6yKUZoFv71vL812Dur94QyJvDYuVqeXjBAxzQ1RR (別人不要用)
擴展添加【 LINE Notify】積木
權杖積木要放在裡面,不能只宣告一次
可從第一個積木【查閱表情主題與代號】
【圖片】積木好像跟【表情】積木無法共存?
有時積木順序真顛倒也不行?
六、使用Posenet2Scratch
參考:https://sites.google.com/site/wenyunotify/15-ai%E7%9B%B8%E9%97%9C/01-%E7%94%A8scratch%E7%8E%A9ai
使用Posenet2Scratch積木
PoseNet是一種機器學習模型,可以即時推測人臉及身體部位的位置。
PoseNet體驗:https://storage.googleapis.com/tfjs-models/demos/posenet/camera.html
一共可以量測出以下部位的X、Y座標:鼻、左眼、右眼、左耳、右耳、左肩、右肩、左肘、右肘、左手腕、右手腕、左腰、右腰、左膝、右膝、左腳踝、右腳踝,(我的右眼在鏡頭內也是在右邊,除非鏡頭改用【翻轉】)
不論一人或多人都可即時辨識
擴展添加【Posenet2Scratch】積木
擴展積木前,先把鏡頭設備裝好,添加時會問您允不允許【使用相機】,同意後,舞台就會出現鏡頭畫面
賴國安老師的體感抓雞範例(感謝國安老師) 檔案
以下內容教材如下:https://sites.google.com/site/wenyunotify/15-ai%E7%9B%B8%E9%97%9C/01-%E7%94%A8scratch%E7%8E%A9ai
請移到下方的位置
五、使用ML2Scratch積木
實作:剪刀石頭布
六、利用Teachable Machine建立模型
連結網址:https://teachablemachine.withgoogle.com/ (移到最下方改為中文版)
實作:剪刀石頭布訓練及預測