Raspberry Pi Pico - 入出力をテストする

1/29/2023

Pico Raspberry Pi

t f B! P L

Raspberry Pi PicoのADC(入力)とGPIO入出力を試してみた。

やってみたことは;

  1. ADC入力: 半固定抵抗を介して電圧入力
  2. GPIO入力: タクトスイッチ
  3. GPIO出力: LEDを光らせる
  4. PWM出力: LEDの明るさ可変
  5. 最後に組み合わせて明るさと色を調整できるようなプログラムを作ってみた
    • ADCの電圧からLEDへの出力を調整
    • タクトスイッチで調整する色を変更

配線

PIN GPIO 信号 接続部品
31 26 アナログ入力(ADC0) 半固定抵抗
14 10 入力 タクトスイッチ
17 13 出力 LED緑
19 14 出力 LED青
20 15 出力 LED赤

使った機材


ADC入力: 半固定抵抗を介して電圧入力

PIN31/GPIO26/ADC0に半固定抵抗を接続して読み値を表示。先日オンボードの温度計を読み取った際とほぼ同じ内容。

machine.ADC(#)で値を読み取り。

from machine import Pin
import utime
adc0 = machine.ADC(0)
conversion_factor = 3.3 / (65535) # ADC変換係数
while True:
    adc0_value = adc0.read_u16()
    adc0_voltage = adc0_value * conversion_factor
    print('Pico ADC0', adc0_value, ', ', adc0_voltage, 'V')
    utime.sleep(1) #1秒毎に実行

GPIO入力: タクトスイッチ

PIN14/GPIO10を入力として使用しタクトスイッチを接続。入力の設定はPin(#, Pin.IN)と指定する。PULL_DOWN、PULL_UPも接続方法に合わせて指定できる。
from machine import Pin
import utime
TactSw = Pin(10, Pin.IN, Pin.PULL_DOWN)
while True:
    Sw_state = TactSw.value()
    print('タクトスイッチ: ', Sw_state)
    utime.sleep(0.25) #0.25秒毎に実行

GPIO出力: LEDを光らせる

PIN17/GPIO13、PIN19/GPIO14、PIN20/GPIO15を出力として使用しLEDへ接続。出力の設定はPin.OUTと指定、valueに1(on)・0(off)を指定するだけで簡単に出力できる。
タクトスイッチを押した際にON/OFFする。

from machine import Pin
import utime
TactSw = Pin(10, Pin.IN, Pin.PULL_DOWN)
led1 = Pin(13, Pin.OUT)
led2 = Pin(14, Pin.OUT)
led3 = Pin(15, Pin.OUT)
while True:
    Sw_state = TactSw.value()
    if TactSw.value() == 1:
        print('タクトスイッチ: ON')
        led1.value(1)
        led2.value(1)
        led3.value(1)
    else:
        print('タクトスイッチ: OFF')
        led1.value(0)
        led2.value(0)
        led3.value(0)
    utime.sleep(0.25)

PWM出力: LEDの明るさ可変

ADCで読み取った半固定抵抗の値を使ってLEDの明るさを調整。GPIOをPin.OUTではなくPWM出力に指定し、dutyの値にADCで読んだ値をそのまま代入した。

from machine import Pin,PWM
import utime
adc0 = machine.ADC(0)
conversion_factor = 3.3 / (65535) # ADC変換係数

led1 = PWM(Pin(13))
led2 = PWM(Pin(14))
led3 = PWM(Pin(15))

led1.freq(1000)
led2.freq(1000)
led3.freq(1000)

while True:
    adc0_value = adc0.read_u16()
    led1.duty_u16(int(adc0_value))
    led2.duty_u16(int(adc0_value))
    led3.duty_u16(int(adc0_value))
    utime.sleep(0.1)

今回試した内容を組合せて実行

タクトスイッチを使って明るさを調整する色を切り替えられるようにしてみた。

from machine import Pin,PWM
import utime
# 半固定抵抗のADC入力
adc0 = machine.ADC(0)
# タクトスイッチのGPIO入力
TactSw = Pin(10, Pin.IN, Pin.PULL_DOWN)
# LEDへPWM出力
led1 = PWM(Pin(13))
led2 = PWM(Pin(14))
led3 = PWM(Pin(15))
# PWM周波数
led1.freq(1000)
led2.freq(1000)
led3.freq(1000)
# 出力値初期設定
led1_duty = 0
led2_duty = 0
led3_duty = 0
#可変するLEDの初期設定
ledsw = 1
#実行
while True:
    # 半固定抵抗の値読み込み
    adc0_value = adc0.read_u16()
    # タクトスイッチを押した際に調整する色を選択(1:緑、2:青、3:赤)
    if TactSw.value() == 1:
        ledsw = ledsw + 1
    if ledsw == 1:
        led1.duty_u16(int(adc0_value))
        led1_duty = adc0_value
        print('Setting green')
    elif ledsw == 2:
        led2.duty_u16(int(adc0_value))
        led2_duty = adc0_value
        print('Setting blue')
    elif ledsw == 3:
        led3.duty_u16(int(adc0_value))
        led3_duty = adc0_value
        print('Setting red')
    if ledsw > 3:
        ledsw = 1
    print('green:   ',led1_duty/65535*100)
    print('blue:    ',led2_duty/65535*100)
    print('red:     ',led3_duty/65535*100)
    utime.sleep(0.1)

ひとまずPicoの使い方を勉強しなおすには適度なお題だった。今後SPIを使ってLEDマトリックスをいじったりしてみようと思う。


参考にしたサイト


参考書

  • Raspberry Piで学ぶ電子工作


このブログを検索

ラベル

Outdoor (18) 3D Printer (12) Raspberry Pi (10) Learning (9) Movie (7) Pico (6) FreeCAD (5) Game (5) Blog (4) MSFS (4) Python (4) Gadget (1) Unity (1)

ブログ アーカイブ

About

思い付きで始めた様々なコトをやった感想やメモ、Web上で見つけた後々役立ちそうなコトなどをまとめてます。 万人の役に立つコンテンツではなく自分用メモ的な内容ですが、何かの役に立てば幸いです

人気の投稿

QooQ