Raspberry Pi Picoと赤外線受信モジュールとサーボモーターを組み合わせて、赤外線リモコンカーを作成します。電源はエネループ3本と5V出力昇圧DCDCコンバーターを使用します。
〇赤外線リモコンカーの写真
作成手順
1. 電子部品の準備
以下の電子部品を準備します
・Raspberry Pi Pico ベーシックセット
https://akizukidenshi.com/catalog/g/gK-16149/
・5V出力昇圧DCDCコンバーター
https://akizukidenshi.com/catalog/g/gK-13065/
・赤外線リモコン受信モジュールOSRB38C9AA(2個入)
https://akizukidenshi.com/catalog/g/gI-04659/
・オプトサプライ赤外線リモコン
https://akizukidenshi.com/catalog/g/gM-07245/
・360°連続回転サーボ(ローテーションサーボ) SG90-HV
https://akizukidenshi.com/catalog/g/gM-14382/
左右それぞれに使用するので2つ用意します。
・電池ボックス 単3×3本 リード線
https://akizukidenshi.com/catalog/g/gP-02667/
以下は配線用のジャンパー線です。必須ではないですが、あると便利です。
・コネクタ付コード 3P (黒赤黄)
https://akizukidenshi.com/catalog/g/gC-15384/
・ブレッドボード・ジャンパーワイヤ(オス-メス) 15cm(赤) (10本入)
https://akizukidenshi.com/catalog/g/gC-08933/
・ブレッドボード・ジャンパーワイヤ(オス-メス) 15cm(黒) (10本入)
https://akizukidenshi.com/catalog/g/gC-08932/
・ブレッドボード・ジャンパーワイヤ(オス-メス) 15cm(黄) (10本入)
https://akizukidenshi.com/catalog/g/gC-08936/
・ブレッドボード・ジャンパー延長ワイヤ(メス-メス) 15cm赤 (10本入)
https://akizukidenshi.com/catalog/g/gP-03474/
・ブレッドボード・ジャンパー延長ワイヤ(メス-メス) 15cm黒 (10本入)
https://akizukidenshi.com/catalog/g/gP-03475/
以下は、5V出力昇圧DCDCコンバーターとの接続用基板の部品として使用しました。必要に応じて使用してください。
・ICソケット ( 6P)
https://akizukidenshi.com/catalog/g/gP-08616/
・ピンヘッダ 2×40 (80P)
https://akizukidenshi.com/catalog/g/gC-00082/
・両面スルーホールガラスコンポジット・ユニバーサル基板 Fタイプ
https://akizukidenshi.com/catalog/g/gP-12731/
2. 電子回路の配線
以下の回路図に基づいて、配線します。
※赤外線受光モジュールとRaspberry Pi Picoとの接続は以下の様に行います。
OSRB38C9AAのピン配列を受光面&足を下にした面から見て、
OSRB38C9AAの左側のピン -> Raspberry Pi PicoのGP0ピン
OSRB38C9AAの中央のピン -> Raspberry Pi PicoのGNDピン
OSRB38C9AAの右側のピン -> Raspberry Pi Picoの3V3(OUT)ピン(36番ピン)
※サーボモータとRaspberry Pi Picoとの接続は以下の様に行います
SG90-HVの赤い線 -> 5V出力昇圧DCDCコンバーターのOUT端子
SG90-HVの茶色線 -> 5V出力昇圧DCDCコンバーターのGND端子
SG90-HVの黄色線 -> Raspberry Pi PicoのGP2またはGP4ピン
※5V出力昇圧DCDCコンバーターとRaspberry Pi Picoの接続は以下の様に行います
Raspberry Pi PicoのVSYS -> 5V出力昇圧DCDCコンバーターのOUT端子
Raspberry Pi PicoのGND -> 5V出力昇圧DCDCコンバーターのGND端子
〇結線を行った電子回路の写真
3. リモコンカーの部品の準備
以下の部品または相当するものを準備します。
・TAMIYAユニバーサルプレート (2枚セット)
https://www.tamiya.com/japan/products/70157/index.html
・TAMIYAトラックタイヤセット (36mm径)
https://www.tamiya.com/japan/products/70101/index.html
・OpenSCADとUltimaker Curaを使用して、サーボモーターにつける事ができるホイールを作成する
https://serverarekore.blogspot.com/2021/05/openscadultimaker-cura.html
・自在ゴム車
※ホームセンターで大きさにもよりますが、以下の様な自在ゴム車が70円~100円位で手に入ります。
・3Dプリンタで作成したタミヤのユニバーサルプレートとRaspberry Pi Picoを固定する部品
作成方法については以下を参照してください。
OpenSCADとUltimaker Curaを使用して、タミヤのユニバーサルプレートにRaspberry Pi Picoを固定する事のできるマウンタを作成する
・3Dプリンタで作成したタミヤのユニバーサルプレートとサーボモーターを固定する部品
作成方法については以下を参照してください。
OpenSCADとUltimaker Curaを使用して、タミヤのユニバーサルプレート用のサーボモーター固定部品を作る
・低頭タイプのM3ネジとナット
TAMIYAのユニバーサルプレートに合うネジのM3のネジ・ナットを用意します。
4. 赤外線リモコンカーの作成
以下の様に、3Dプリントした部品をユニバーサルプレートにつけます。電池ボックスも穴が空いているので、低頭M3ネジとナットを使用してユニバーサルプレートに固定します。Raspberry Pi Picoとユニバーサルプレートの固定は、上記で作成した3Dプリンタのマウンタを使用します。
下から見た場合、以下のように固定します。
5. プログラミング
Thonnyを使用して、以下のプログラムをRaspberry Pi Picoに書き込みます。
import time
from machine import Pin, PWM
from ir_rx.nec import NEC_8
keydata = {
0xD8:"Power button",
0xF8:"A button",
0x78:"B button",
0x58:"C button",
0xB1:"Upper left button",
0xA0:"Up button",
0x21:"Upper right button",
0x10:"Left button",
0x20:"Center button",
0x80:"Right button",
0x11:"Bottom left button",
0x00:"Down button",
0x81:"Bottom right button",
0xFF:"N/A"
}
last_code=0xFF
def callback(data, addr, ctrl):
global last_code
if data < 0: # repeat code
print(keydata[last_code])
else:
last_code = data
print(keydata[data])
if last_code == 0xA0: # Up button -> foward
pos=20
servo1.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
pos=-20
servo2.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
time.sleep_ms(1000)
pos=0
servo1.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
servo2.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
elif last_code == 0x00: # Down button -> Back
pos=-20
servo1.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
pos=20
servo2.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
time.sleep_ms(1000)
pos=0
servo1.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
servo2.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
elif last_code == 0x10: # Left button -> turn left
pos=-20
servo1.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
pos=-20
servo2.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
time.sleep_ms(1000)
pos=0
servo1.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
servo2.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
elif last_code == 0x80: # Right button -> turn right
pos=20
servo1.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
pos=20
servo2.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
time.sleep_ms(1000)
pos=0
servo1.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
servo2.duty_u16(int((1.5 + (pos / 180)) * 65535 / 20 + 0.5))
6. Raspberry Pi Picoリモコンカーの動作確認
単3電池3本を電池ボックスに挿入し、赤外線リモコンを使用して動作を確認します。
上ボタンで全身・左ボタンで左旋回・右ボタンで右旋回。下ボタンで後進します。
関連情報
・
OpenSCADとUltimaker Curaを使用して、タミヤのユニバーサルプレートにRaspberry Pi Picoを固定する事のできるマウンタを作成する
・
OpenSCADとUltimaker Curaを使用して、サーボモーターにつける事ができるホイールを作成する
・
OpenSCADとUltimaker Curaを使用して、タミヤのユニバーサルプレート用のサーボモーター固定部品を作る