Raspberry Pi PicoをArduino開発環境で使うためのメモ

Raspberry Pi Picoの開発にはMicroPythonを使うことが多いと思いますが、Arduino開発環境も使用することができます。
Arduinoの過去の資産が使えてよい感じです。

本サイトではRaspberry Pi Pico+Arduinoの記事をいくつか掲載していますが、
その前提となるArduino開発環境のセットアップについてのメモを残しておきます。

PicoをArduinoで開発する場合、「Arduino公式版」の他に「EarlePhilhower版」というものがあります。
公式版ではServoライブラリが利用できないなど、今一つです。
公式版よりもEarlePhilhower版の方がしっかりしている印象で、本サイトの記事ではEarlePhilhower版を使用しています。

EarlePhilhower版のインストール

Arduino IDEを起動して、[ファイル] -> [基本設定]を選択します。
[追加のボードマネージャのURL]欄に、以下のURLを設定して[OK]ボタンを押します。

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

[ツール] -> [ボード] -> [ボードマネージャー] を選択します。
検索欄に「pico」と入力して検索します。

上の「Arduino Mbed OS RP2040Boards by Arduino」の方が公式版です。
下の「Raspberry Pi Pico/RP2040 by Earle F. Phihower, III」の方がEarlePhilhower版ですので、こちらをインストールします。

下図のように[ツール] -> [ボード] から、
[Raspberry Pi Pico/RP2040] -> [Raspberry Pi Pico]を選択します。

初めてPicoを接続する時は下図の[BOOTSEL]ボタンを押しながらUSBを接続します。

そうすると、USBメモリのように「RPI-RP2」という名前のドライブがマウントされます。

[ツール] – [ポート] – [UF2 Board] を選択します。

この状態で、簡単なプログラム(LED点滅)を[->]ボタンで書き込みます。

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}

LEDが点滅しましたか?

[ツール] – [ポート] を選択して、COM5 など正しいCOMポートを選択します。

2回目以降はBOOTSELボタンを押しながら接続する必要はありません。そのままUSBを接続すれば書き込みできます。
USBにPicoを接続するとボードが自動認識されますが、自動認識されない場合は上記のように選択しなおしてください。

後はArduino UNO等と同じように開発できると思います。

Raspberry Pi PicoにArduinoから書き込みができなくなった場合の対処方法(Windows)

PicoをArduino IDE環境で開発している時に、PicoにUSBを刺してもCOMポートが認識されなくなってしまう場合があります。
※I2Cのプログラムを間違えてしまった時などによくおこります。

その場合の復旧方法です。

※前章のArduino IDE + Raspberry Pi Picoのセットアップは終わっているものとします。

  • Arduino IDEを起動
  • LED点滅など簡単なプログラムを作成
  • [スケッチ] -> [コンパイル済みバイナリをエクスポート] を選択
  • [スケッチ] -> [スケッチフォルダを表示] を選択
  • buildフォルダに拡張子がuf2のファイルができています
  • BOOTSELを押しながらPicoのUSBを刺す
  • 「RPI-RP2」という名前のドライブとしてマウントされます
  • 上で作成した拡張子がuf2のファイルをマウントされたドライブにコピーします

これでCOMポートが認識されると思います。

Raspberry Pi Picoを初期状態に戻す方法

Raspberry Pi Picoを初期状態(出荷時状態)に戻す場合は以下のようにします。

  • 以下のRaspberry Pi Pico公式サイトを開きます。
    https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html#software-utilities
  • 「Resetting Flash memory」のところの、「Download the UF2 file」から、UF2ファイルをダウンロードします。
  • BOOTSELを押しながらPicoのUSBを刺す
  • 「RPI-RP2」という名前のドライブとしてマウントされます
  • ダウンロードしたuf2ファイル(flash_nuke.uf2)をマウントされたドライブにコピーします

これで、Picoが初期状態(出荷時状態)に戻ります。

超音波距離センサー + Raspberry Pi Picoで潜水艦ソナー風

潜水艦のソナー画面風のものを作ってみました。
超音波距離センサーをサーボで回転させて、各角度の距離を測って、プロットしています。
緑の線が超音波距離センサーが向いている方向になります。
潜水艦のソナーだと360度ですが、サーボで動かしているので、前方180度のみです。

台車に載せてLiDARを使ったSLAMのようにマッピングできないかなと思っていましたが、超音波距離センサーは解像度が低くうまくいかなそうだったので、潜水艦ソナー風にしました。
古いルンバに搭載したら、新型ルンバの部屋マッピングみたいにできるかと妄想しています。

使用したパーツ

超音波距離センサー:HC-SR04
サーボ:GWS MINI
マイコン:Raspberry Pi Pico

超音波距離センサーのHC-SR04は最大4mぐらいまで計測できます。
レーザーのセンサーに比べて安価です。Amazonで5個\1,000で購入しました。

接続

  Pico
Pin4 GP2  -> サーボ
Pin6 GP4  -> Echo
Pin7 GP5  -> Trig

超音波距離センサーのHC-SR04は電圧が5Vなので、Pico(3.3V)に接続するために、Echo端子は以下のように5KΩと10KΩで分圧しています。Trig端子は直結してOKです。

Echo端子--5KΩ-+-10KΩ--GND
               |
               +-Pico(GP4)

プログラム

■マイコン側のプログラム
Raspberry Pi Pico側はArduino開発環境を使用しました。
Arduino開発環境にはearlephilhower版を使用しました。

Raspberry Pi PicoのArduino開発環境構築については↓を参照ください。
Raspberry Pi PicoをArduino開発環境で使うためのメモ

サーボを-90~90度で動かして、距離を測定しています。
角度と距離をPC側にシリアルで送信します。

距離を算出する時に使用する音速が温度に影響するので、Picoに内臓されている温度センサーを使用していますが、室温よりも低めになるようで、適当に6℃プラスしています。

■PC側のプログラム
Pythonで作成しました。
描画にはtkinterを使用しています。
マイコンから受け取った角度と距離から、sin・cos関数を使用してx,y座標を算出します。
古い座標の色を暗くしたかったので、一定数の座標をバッファに保存して、毎回再描画しています。

PCとPicoのシリアル通信のためにpyserialを使用しています。
以下のコマンドでインストールしてください。

pip install pyserial

COM_PORT変数は適切なポートに書き換えてください。

ソースはこちらに置いています。
https://github.com/ponta1/SuperSonicMapping

動いている様子

Raspberry Pi Picoは↓で購入できます。

K-Shogiの画面が小さい場合

K-Shogiの画面が小さい場合、以下の設定を行うと大きくできるかもしれません。
サポート掲示板で教えていただきました)

K-Shogi64.exeまたはK-Shogi.exe(使っている方)を右クリック -> [プロパティ]を選択

[互換性]タブを選択
[高DPI設定の変更]をクリック

[高DPIスケール設定の上書き]欄のチェックをONにして、[システム]を選択

本格派対局将棋 ぴよ将棋
本格派対局将棋アプリ ぴよ将棋
[Android] [iOS]

かわいい「ひよこ」と対局する将棋アプリ。かわいいけどAIは本格派!
対局後の検討機能や棋譜管理機能も充実!棋譜解析機能も搭載!

コップの水がこぼれない台 MPU6050 + Raspberry Pi Pico(Arduino)

前回の記事「MPU6050 + Raspberry Pi Pico(Arduino) -> PCで3Dのキューブを回転表示」の続きです。

前回はジャイロ・加速度センサー(MPU6050)の値を読み込んでPC上で3Dのキューブを回転表示しましたが、
今回はサーボ2つを使用して、「常に水平になる台」を作成してみました。

サーボ2台を直交させて接続しますが、お手軽にラズパイカメラ用2軸マウント(A838)を使用しました。

このカメラマウントは、サーボに定番の小型サーボSG-90を使用するようになっています。
(今回はSG-90の互換サーボを使用しました)

ラズパイカメラ用2軸マウント(A838)の組み立て方法は以下を参考にさせていただきました。
https://python-academia.com/raspberrypi-camera-mount/

上の写真のように接続しました。

  Pico               MPU6050
  Pin6 GP4        -> SDA
  Pin7 GP5        -> SCL
  Pin36 3V3(OUT)  -> VCC
  Pin3 GND        -> GND

  Pin4 GP2        -> サーボ1
  Pin5 GP3        -> サーボ2

プログラムはMadgwickAHRSで推定した角度でサーボを動かしています。

Raspberry Pi Pico側はArduino開発環境を使用しました。
Arduino開発環境にはearlephilhower版を使用しました。

Raspberry Pi PicoのArduino開発環境構築については↓を参照ください。
Raspberry Pi PicoをArduino開発環境で使うためのメモ

以下のライブラリを使用しています。
GitHubからZIP形式でダウンロードして、Arduino IDEの「スケッチ」->「ライブラリをインクルード」->「zip形式のライブラリをインクルード」でインストールします。

〇角速度・加速度から角度を推定 -> MadgwickAHRSフィルタ
https://github.com/arduino-libraries/MadgwickAHRS

〇タイマー割込み
https://github.com/khoih-prog/RPI_PICO_TimerInterrupt

ソース(Arduino開発環境用)はこちらに置いています。
https://github.com/ponta1/HorizontalTable

コップの水がこぼれない様子
※サーボが小型のためパワーがなくてダイソーのおちょこぐらいしかのせられませんでした

Raspberry Pi PicoとMPU6050は↓で購入できます。

MPU6050 + Raspberry Pi Pico(Arduino) -> PCで3Dのキューブを回転表示

前回の記事「Madgwickライブラリの収束を速くする 【Arduino/MPU6050】」の続きです。

角速度(ジャイロ)・加速度センサーMPU6050の角度をPC上で表示するプログラムを作ってみました。

Raspberry Pi Pico(Arduino開発環境)でMPU6050から読み取った角速度・加速度からMadgwickで角度を推定しPCへ送り、PC上で受け取った角度で3Dのキューブを回転させ表示します。
今回はRaspberry Pi Picoを使用しましたが、Arduino UNOなどでも接続ピンが変わるのとタイマーのところを変更すれば行けると思います。

プログラム

プログラムはGitHubで公開しています。

■Raspberry Pi Pico側
PicoとMPU6050は上の写真のように接続しました。

  Pico               MPU6050
  Pin6 GP4        -> SDA
  Pin7 GP5        -> SCL
  Pin36 3V3(OUT)  -> VCC
  Pin3 GND        -> GND

Raspberry Pi Pico側はArduino開発環境を使用しました。
Arduino開発環境にはearlephilhower版を使用しました。

Raspberry Pi PicoのArduino開発環境構築については↓を参照ください。
Raspberry Pi PicoをArduino開発環境で使うためのメモ

Raspberry Pi Pico側のプログラム(Arduino)
MPU6050/MPU6050.ino

以下のライブラリを使用しています。
GitHubからZIP形式でダウンロードして、Arduino IDEの「スケッチ」->「ライブラリをインクルード」->「zip形式のライブラリをインクルード」でインストールします。

〇角速度・加速度から角度を推定 -> MadgwickAHRSフィルタ
https://github.com/arduino-libraries/MadgwickAHRS

〇タイマー割込み
https://github.com/khoih-prog/RPI_PICO_TimerInterrupt

■PC側
MPU6050.py

Pythonで作成しています。
COM_PORT変数は適切なポートに書き換えてください。

以下のライブラリを使用しています。
〇pyserial
PCとPicoのシリアル通信のためにpyserialを使用しています。
以下のコマンドでインストールしてください。

pip install pyserial

〇Panda3D
3D表示のためにPanda3Dを使用しています。
以下のコマンドでインストールしてください。

pip install Panda3D

Raspberry Pi PicoとMPU6050は↓で購入できます。

ぴよ将棋やその他アプリの開発・お知らせ、ロボット・電子工作