07 用Scratch玩Pico W
(2022/12/11)
前陣子拿到Pico W的開發板及亞博的Pico小車,想說要讓小朋友來玩玩,因此上網找到了一個客製化的Scratch,可以來玩Pico,簡單測試如下:
一、前置作業
認識CodeSkool
網址:
官網:https://skool.cc/ (這好像也是印度出品的)
Pico教學:https://skool.cc/blog/program-raspberry-pico-in-micro-python-using-codeskool-scratch
客製化Scratch :https://ide.codeskool.cc/
準備工作:
電腦安裝python (https://www.python.org/downloads/ )
電腦安裝上傳軟體ampy (https://pypi.org/project/adafruit-ampy/ )
會用到picozero函式庫 (https://picozero.readthedocs.io/en/latest/ 、https://picozero.readthedocs.io/en/latest/recipes.html )
在CodeSkool下載uploader (安裝好install.exe,執行codeskool.exe後,要更新瀏覽器)
由於上面的程序太複雜,我打算利用CodeSkool寫積木程式,然後用我比較熟悉的Thonny來執行
Thonny
Pico W安裝韌體 (請看前幾篇文章)
安裝picozero程式庫 https://picozero.readthedocs.io/en/latest/gettingstarted.html
picozero的Github:https://github.com/RaspberryPiFoundation/picozero
把上面下載的 picozero.py複製到Thonny,並上傳到pico W
測試:讓內建的LED燈閃爍
進入CodeSkool:https://ide.codeskool.cc/
這軟體有一些缺點,存檔後,常常無法正常打開
使用上跟Scratch一樣
擴展(添加)Micro Python積木
寫上內建LED燈閃爍程式
也適用Pico W
到Thonny執行程式
二、利用亞博pico小車當擴展板來測試
認識Pico小車的腳位圖
如下圖:
測試範例檔
網站的Examples有提供5個範例檔,如下
範例一:LED燈漸亮漸滅
外接一顆LED燈在S1(GPIO18)
叫出如下程式
範例二:按鍵來亮滅燈
外接一顆LED燈在S1(GPIO18)
外接一顆按鍵在S3(GPIO20)
叫出如下程式
結果:按下按鍵其值為1、未按下按鍵其值為0
範例五:播放音樂
小車內建蜂鳴器的腳位在GPIO22
叫出如下程式
顯示板載溫度
一個ADC有兩個關鍵的特點:它的解析度,以數位位元測量,它的通道,或它可以接受和轉換多少模 擬信號一次。 您的PICO中的ADC的解析度為12位,這意味著它可以將類比信號轉換為數位信號,其數 字從0到4095不等-儘管這是在MicroPython中處理的,轉換為從0到65,535的16位元數字,因此它的行 為與其他MicroPython微控制器上的ADC相同。 它有三個通道被帶到GPIO引腳:GP26、GP27和 GP28,它們也被稱為類比頻道0、1和2的GP26_ADC0、GP27_ADC1和GP28_ADC2。 還有第四個ADC 通道,它連接到一個內置在RP2040中的溫度感測器。
顯示左右光敏電阻的類比值
內建光敏電阻的腳位:#Light1 -> GPIO27、#Light2 -> GPIO26
jumper要調到Light
由於【Pot】(電位計)與光敏電阻一樣都是屬於【類比輸入】,所以採用Pot積木,但它只有0、1、2三個腳位可用,所以要手動修改一下腳位
量測結果:其值介於0~1之間,越亮其值接近0、越暗其值接近1
同理,【聲音感測器】使用腳位為GPIO27,jumper要調到Voice,程式同上
聲音感測器量測結果:無聲時,其值接近0,有聲響時,其值越大
顯示4個巡線感測器的數位值
巡線感測器腳位:2、3、4、5(由車的左前方到右前方)
由於【按鍵】與巡線感測器一樣都是屬於【數比輸入】,所以採用【按鍵積木】
量測結果:
在白線時,其值為0、車上感應燈滅掉
在黑線時,其值為1、車上感應燈亮起
跟之前小車官方的結果不同
顯示超聲波感測器量測到的距離
超聲波感測器腳位:Trig = Pin(0, Pin.OUT)、Echo = Pin(1, Pin.IN)
量測結果:
距離積木量測出來的值(單位為公尺)
小車還有OLED顯示器(I2C)、WS2812燈條(GPIO6)、紅外線接收器(GPIO7)、藍牙、電池電量等,在此沒有相關積木可用!
三、亞博pico小車的基本使用
分別控制左右輪的基本動作
使用Motor積木,左右馬達所用的腳位,積木的順序:左:13、12;右:10、11
先看原始程式
控制小車前進、後退、左轉、右轉、停止
使用Robot積木
左右馬達所用的腳位,積木的順序:左:13、12;右:10、11
程式如下
以下為第一次測試時的作法,車子還是可以動,以後改用上面的作法
避障小車
避障規則:
當前方30cm內無障礙就前進
否則,隨機左右轉0.3~1秒
巡線小車
有4個巡線感測器
先利用中間2個來測試
當T2=1、T3=1(都在黑線上),就向前進
當T2=1、T3=0,代表偏右,所以就向左轉
當T2=0、T3=1,代表偏左,所以就向右轉
測試結果:
由於小車的速度太快,會導致失敗
最後把小車的速度改為172.2,慢一點才成功
四、連網的使用
利用網址控制小車前進、後退、左轉、右轉、停止
檔案:https://share.codeskool.cc/4DXk (開啟失敗了)
send資料改用下面 'HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n'
在網址列下如下網址即可控制車子的運動
利用網頁控制小車前進、後退、左轉、右轉、停止
同上面程式做一點小修改
文字程式加上一個函式
# Function to load in html page
def get_html(html_name):
with open(html_name, 'r') as file:
html = file.read()
return html
積木再加一行,如下
index.html網頁的HTML檔,一樣放到Pico的根目錄去
<html>
<head>
<title>Pico W</title>
</head>
<body>
<h1>Pico W</h1>
<p>Control the Pico_Car</p>
<a href=\robot/forward><button>Farward</button></a>
<a href=\robot/backward><button>Bcakward</button></a>
<a href=\robot/left><button>Left</button></a>
<a href=\robot/right><button>Right</button></a>
<a href=\robot/stop><button>Stop</button></a>
</body>
</html>
開啟網頁 (Pico的網址)
可利用如下的按鈕去控制小車
另外,利用scratch的舞台,有5個角色來控制小車的部份沒有成功!!
從網頁傳送溫度