Raspberry Pi PicoでCircuitPython#11

CircuitPython

PicoにCircuitPythonをインストール

CircuitPython - Pico Download
TheRaspberryPifoundationchangedsingle-boardcomputingwhentheyreleasedtheRaspberryPicomputer,nowthey’rereadytodothesameformicrocontrollerswiththereleaseofthebrand...

このページからUF2ファイルをダウンロード。BOOTSELボタンを押しながらパソコンと接続して、Picoにドラッグすれば完了です。インストールが完了すると、Raspberry Pi PicoはCIRCUITPYというドライブ名を持ったストレージデバイスとして認識されます。

Picoの特徴

Picoの特徴はなんといっても自由に使えるGPIOピンが20本以上あることです。LEDをたくさんコントロールするときに最適です。また大きさはMaker Pi RP2040に比べて1/5のサイズです。

CircuitPythonでPWM出力を試してみる

PWMとはPulse With Modurationの略語です。特定の周波数でオンとオフを繰り返し、その比率によって電力を調整することができます。

#CircuitPythonでPWM出力するサンプルプログラム
import time
import board
import pwmio

# LED setup for board.GP0
led = pwmio.PWMOut(board.GP0, frequency=1000, duty_cycle=0)

while True:
    for i in range(100):
        # PWM LED up and down
        if i < 50:
            led.duty_cycle = int(i * 2 * 65535 / 100)  # 明るくする
        else:
            led.duty_cycle = 65535 - int((i - 50) * 2 * 65535 / 100)  # 暗くする
        time.sleep(0.01)

pwmio.PWMOut()

GP0ピンにPWMOutをセットします。frequency(周波数)は1000に設定します。つまり1khzですね。duty_cycleは65535を100%として計算されます。100%とはつまりデジタル的にオンの状態です。50%の出力のためには32768のduty_cycle(デューティー比)になりますね。

13行目のintは小数点の’ある数字(float)を整数(int)にするための関数です。

ねんのためfor文if文あたりも解説しておきましょう。まずfor文では0から100までの数字を発生させます。50未満のときはその数に2をかけて、さらに65535をかけてそれを100で割ります。その数をduty比にします。50以上になったら今度は暗くするために65535から数をどんどん引いてduty比を0に近づけていくのです。

3つのLEDをPWMで操作する

Raspberry Pi PICOとLEDはこんな感じで接続します。
#Raspberry Pi Pico CircuitPythonで3つのLEDをPWM制御
import time
import board
import pwmio
import random


LED1 = pwmio.PWMOut(board.GP0, frequency=1000, duty_cycle=0)
LED2 = pwmio.PWMOut(board.GP1, frequency=1000, duty_cycle=0)
LED3 = pwmio.PWMOut(board.GP2, frequency=1000, duty_cycle=0)

while True:
    LED1.duty_cycle = random.randrange(2000,30000)
    LED2.duty_cycle = random.randrange(1000,30000)
    LED3.duty_cycle = random.randrange(1000,30000)
    time.sleep(float(random.random()))

random関数

random.randrange(2000,3000)で2,000から30,000の間の整数を発生させます。そしてtime.sleep内のrandom.random()は0.01から1.00までの少数を発生させます。wait時間もランダムにして機械的な動きからしぜんなゆらめきになったでしょうか?

タイトルとURLをコピーしました