2021年5月22日土曜日

Raspberry Pi Picoと赤外線受信モジュールとサーボモーターで赤外線リモコンカーを作成する

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を使用して、タミヤのユニバーサルプレート用のサーボモーター固定部品を作る

0 件のコメント:

コメントを投稿