注目キーワード

【Arduino】Raspberry Pi Pico/W のPIOでウィンカー点滅を再現するぞ!(PIO : Lチカ)

すけろく
うーむ。
どうしたものか。
げんろく
どうした。
暗い顔をして。
すけろく
カーモデルのウィンカー点滅を再現したくてな。
明滅回路を作ろうか悩んでおる。
げんろく
ん!?
そんなときは、メインプロセッサと切り離して
動作するPIOの出番ではないのか!

この記事では、「Raspberry Pi  Pico/W」に実装されている「PIO(Programmable I/O」を実際に使ってみます。

まずは第三弾として、「LED点滅」機能を「PIO(Programmable I/O」を使って実装します。

microPythonやC言語でのプログラム例はあるものの、Arduino IDEを使った例はあまりないので、ぜひチェックしてくださいね!

Raspberry Pi の中でも、省電力なCPUを搭載したマイコン開発ボードです。

他のRaspberry Pi 製品とは異なり、Linux OSを搭載していません。

しかし省スペース、省電力の専用CPU「RP2040」を搭載していて、Arduino IDEや、MicroPythonで開発可能です。

しかも、Wi-FiとBluetoothが使用できるモジュールも搭載されているので、スタンドアロンでの稼働のみならず、他のマイコンと無線通信することが可能です。

 

今回の目標
PIO(Programmable I/O」を「Raspberry Pi  Pico/W」のGPIOに実装し、LEDを点滅させるプログラムを実装します。
カーモデルのウィンカー点滅を目指すので、実車の点滅速度に合わせてみます。
開発環境としては、Arduino IDEを使います。

Raspberry Pi  Pico/W」の特徴でもある「PIO(Programmable I/O」をいよいよ活用して様々な可能性を探っていきます。

メインプロセッサと違うサイクルで稼働させることができる「PIO(Programmable I/O」で実装するとプログラムも回路も単純にできますよ。

ぜひ、皆さんも挑戦してみてくださいね!

この記事の前提となる「Raspberry Pi  Pico W」のはじめかたは、次の記事で紹介しています。

関連記事

すけろく ついに、国内でもRaspberry Pi Pico Wを手に入れたぞ! げんろく Wi-Fiモジュールがついているので、 国内の技適取得が必要だったからな。 すけろ[…]

あわせて読みたい!「Raspberry Pi  Pico W」関連の便利記事

関連記事

すけろく ん~。 このエラーの時の変数の値が知りたいな~ げんろく どうした? プログラムがうまく動かないのか? すけろく そうなのだ。 Raspberry Pi Pico[…]

今回の記事の対象となるマイコンはこちら!

Raspberry Pi Pico

created by Rinker
Raspberry Pi
¥1,270 (2024/04/29 18:14:23時点 Amazon調べ-詳細)

Raspberry Pi Pico W

ピンヘッダ実装済み

created by Rinker
ノーブランド品
¥2,210 (2024/04/29 14:17:06時点 Amazon調べ-詳細)

ピンヘッダを自分ではんだ付けするもの

created by Rinker
Raspberrypi
¥1,635 (2024/04/29 06:55:05時点 Amazon調べ-詳細)

 

ウィンカー点滅とは?

カーモデル(模型)を作っていると、ヘッドライトやウィンカーを光らせたい!という欲求が出てきますよね。

ただ光らせるだけであれば、簡単な回路で実装できますが、点滅となると少し部品点数の多い回路を組む必要があります。

また、「Raspberry Pi  Pico/W」などのマイコンのGPIOを使ってLED回路を制御する場合、

通常のLoopによる繰り返しを使うと正確な時間で点滅させることは難しいことがあります。

せっかく、実車に近いカーモデルを作るので、日本の法定点滅回数に合わせたものが作りたいという欲求もあります(笑)

日本の法律では、ウィンカーの点滅回数は、1秒間に60回~120回とのこと。

この点滅回数に合わせて調整できるようにしたい場合、回路よりもマイコンのプログラム制御のほうが、後々調整しやすくなります。

 

そこで今回は、「PIO(Programmable I/O」を使ってLEDを点滅させるプログラムを組んでみようと考えました。

PIO(Programmable I/O」は、独立したサイクルを使って、正確な間隔で命令を実行できるので、安定してLEDを点滅させることができます。

また、Loopによる繰り返しサイクルとは独立して動くため、複数の点滅パターンや部品を個別に光らせる場合にも有効です。

 

 

PIO(Programmable I/O)とは?

PIOとは Prgrammable I / O (Input / Output)の略で、端子の部分とマイコン中核部の仲介役をプログラマブルに行うことができるものです。

詳しい説明については、次の記事で紹介していますので、あわせて確認してくださいね!

 

PIOについては、次の記事でチェックしてね!

関連記事

すけろく Raspberry Pi Pico/Wには、PIOという機能があるらしいな。 げんろく そうだ。 UARTなどのインタフェース不足や、実装されていない機能を GPIOに対してプログラムでき[…]

 

PIOをArduino IDE で使う際の準備

PIOは、Raspberry Pi Pico SDKに含まれるpioasmを使ってC言語やPython用のプログラムをジェネレート(生成)します。

Arduino IDEも実際にはC言語での使い方に近い手順を取ります。

Raspberry Pi Pico SDKにあるpioasmは、ソースファイルのみ提供されています。

使うためにはコンパイルして実行形式ファイルに変換しなければなりません。

 

Arduino IDEでpioasmを使う方法は次の記事でチェックしてね!

関連記事

すけろく Raspberry Pi Pico/WのPIO機能については前回調べた。 今度は実際に使ってみたいの~ げんろく そうだな。 実際にプログラムする際の注意事項などを見ていこう。 […]

 

LEDの点灯制御とは?

Raspberry Pi  Pico/W」でLEDの点灯制御するためには、「Raspberry Pi  Pico/W」に実装されているGPIOを使います。

GPIOの「High」、「Low」状態を変化させることでLEDを点滅させることができます。

 

Raspberry Pi  Pico/W」には、基板に実装されているLEDがあります。

今回のプログラムのテスト用に使用するのに有効ですが、1つ注意点があります。

Raspberry Pi  Pico W」の基板実装LEDは、「PIO(Programmable I/O」では制御できません。

 

そのため、外部回路にLEDを用意する必要があります。

※「Raspberry Pi  Pico」は、GPIO(25)が基板実装LEDなので、制御ができます。

 

外部回路にLEDを用意する際の注意点は次の通りです。

  • Raspberry Pi  Pico / W」のGPIOから出せる電流は4mA以下にすること
  • Raspberry Pi  Pico / W」のGPIOから出る電圧は3Vになる
  • LEDを光らせるための電流、電圧は、LEDの仕様に合わせて準備する

 

この注意点を満たすための簡単な回路は次のようになります。

LEDで使う電流は20mA以上必要なことが多いため、Raspberry Pi  Pico / W」のGPIOを直接LEDに接続することはできません。

今回はLEDをRaspberry Pi  Pico / W」のGPIOからスイッチング制御するため「Nch MOSFET」を使いました。

図上の「AO3400A」が「Nch MOSFET」です。

「Nch MOSFET」は、ゲート(図上の1)と呼ばれる入力ピンに対して入力する電圧を制御することでドレイン(DC入力:図上3)からソース(DC出力:図上2)へ大きな電流を流すことができるものです。

ゲート(図上の1)には電流は必要ないため、今回は、GPIOからの電流は2mAに抑えるように抵抗(R2)は、650Ωにしています。

※約2Vの電圧がGPIOが「High」状態である場合にゲートにかかる計算です。

 

ドレイン(図上3)とソース(図上2)にある抵抗(R1、3)はLEDに合わせて選択しています。

実際に構成した回路は次のようになりました。

ブレッドボード左側にあるPicoprobe用の「Raspberry Pi Pico」には、

GPIOをわかりやすくする「GPIO Master」を取り付けています。

気になる方は、こちらからどうぞ。

Boothショップで販売中!

この商品は、電子工作でRaspberry Pi Pico/Wを使う場合に便利なツールです。Raspberry Pi Pi…

 

 

LED点滅プログラムの作成

早速、LED点滅プログラムを作成します。

今回のプログラム例では、LEDを1Hzで点滅させるように作っています。

 

PIOファイルを作成する

ノートパッドなどのテキストエディタを開いて、次のプログラムをコピーし、貼り付けます。

ソース内部にコメントを入れていますので、参考にしてください。

 

ファイルの拡張子を「.pio」にして保存します。

アセンブリ部分の記述方法については、次の記事を参照してください。

関連記事

すけろく Raspberry Pi Pico/Wには、PIOという機能があるらしいな。 げんろく そうだ。 UARTなどのインタフェース不足や、実装されていない機能を GPIOに対してプログラムでき[…]

 

ヘッダーファイルの生成

pioasmの使用方法で記載した手順を使って、ヘッダーファイルを生成します。

pioasmが保存されているフォルダに先ほど作成したPIOソースファイル(.pio)をコピーして行ってください。

 

生成されたヘッダーファイルは次のようになります。

 

 

 

Arduino IDEへのヘッダーファイルの取り込み

生成されたヘッダーファイルをArduino IDEに取り込みます。

そのためにArduino IDE上で新規のスケッチを作成します。

スケッチに次のようにコードを記載し、保存します。

 Arduino IDE スケッチ例

 

生成したヘッダーファイルを次の手順で、作成したスケッチに取り込みます。

  1. Arduino IDEのメニューから[スケッチ]-[ファイルを追加]を選択します。
  2. スケッチが保存されたフォルダが開くので、生成したヘッダーファイルをコピーして選択します。
  3. 追加する旨の確認メッセージが表示された場合は承認してください。
  4. 最後にスケッチの3つ目の「#include “pio_blink_leds.h」の部分を保存したヘッダーファイル名に変更します。

 

以上で、ヘッダーファイルの取り込みは完了です。

Raspberry Pi Pico Wへの書き込み 

  1.  Raspberry Pi PicoをパソコンにUSB接続します。
  2.  Arduino IDEで前述のプログラムを記載して、 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
  3. 「ツール」メニューから「ボード」情報を確認し、次のものを選択します。
    「Raspberry Pi Pico/RP2040」-「Raspberry Pi Pico W」
  4. 「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。
  5. 「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。(転送速度は「115200」です)
  6. 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。

※Raspberry Pi Pico の場合は、③の手順から適宜変更してください。

プログラム実行結果

書き込みが完了し、5Vの電源を投入すると、次のようにLEDが点滅します。

ちょっと調整すると、次のようにカーモデルのウィンカー点滅が実装できました!

5秒おきに点滅、消灯をくりかえします。

このあたりは、最終的に動画にしていく予定ですよ~

 

 

編集後記

いかがだったでしょうか。

Raspberry Pi Pico / W」の「PIO(Programmable I/O」を使ってLED点滅機能を実装してみました。

目的であった、カーモデルのウィンカー点滅も再現することができました。

PIO(Programmable I/O」はいろんな用途で使えそうです。

今後も作例を充実させていければと思います。

 

記事の内容は以上です。

最後までご覧くださり、ありがとうございました。

次回もご期待ください。

今回の記事の対象となるマイコンはこちら!

Raspberry Pi Pico

created by Rinker
Raspberry Pi
¥1,270 (2024/04/29 18:14:23時点 Amazon調べ-詳細)

Raspberry Pi Pico W

ピンヘッダ実装済み

created by Rinker
ノーブランド品
¥2,210 (2024/04/29 14:17:06時点 Amazon調べ-詳細)

ピンヘッダを自分ではんだ付けするもの

created by Rinker
Raspberrypi
¥1,635 (2024/04/29 06:55:05時点 Amazon調べ-詳細)

 

Raspberry Pi Pico Wの他の記事はこちらからどうぞ!

すけろく うーむ。 どうしたものか。 げんろく どうした。 暗い顔をして。 すけろく カーモデルのウィンカー点滅を再現したくてな。 明滅回路を作ろうか悩んでおる。 げんろく ん!? そんなときは、メインプロセッサと切り離して 動作するPIOの出番ではないのか! この記事では、「Raspberry Pi  Pico/W」に実装されている「PIO(Programmable I/O」を実際に使ってみます […]

すけろく Raspberry Pi Pico/WのPIO機能を使ってUARTの送信には成功した。 しかし、まだ受信側ができていないのぉ。 げんろく そうだな。 今度は受信側を試してみるか。 すけろく どうせなら、パソコンから送った文字を返すような やり取りができるといいな。 げんろく よし。 UART送受信を実装してみよう。 この記事では、「Raspberry Pi  Pico/W」に実装されてい […]

すけろく Raspberry Pi Pico/WのPIO機能については前回調べた。 今度は実際に使ってみたいの~ げんろく そうだな。 実際にプログラムする際の注意事項などを見ていこう。 すけろく Arduino IDEでも使用できるのか? げんろく ああ。 使えるぞ! Arduino IDEで使う場合を例にやっていこう。 この記事では、「Raspberry Pi  Pico/W」に実装されている […]

すけろく Raspberry Pi Pico/Wには、PIOという機能があるらしいな。 げんろく そうだ。 UARTなどのインタフェース不足や、実装されていない機能を GPIOに対してプログラムできる機能だ。 すけろく Raspberry Pi Pico/Wをもっと知るために PIOを調べてみたい。 げんろく よし! PIOについて少し調べてみるか! この記事では、「Raspberry Pi  P […]

すけろく うーむ。 げんろく どうした浮かない顔して。 すけろく これまで、Raspberry Pi Pico / Wをいろいろ確認してきたが 外付けのボタンの認識ってやったかぇ? げんろく たしかに!まだ取り上げていない基本的なものがあるな よし、今回はボタン押下時の状態を Raspberry Pi Pico / Wで認識してみよう。 この記事では、「Raspberry Pi  Pico W」を […]

すけろく 宅内で使っているリモコンは、どういった仕組みで テレビなどをつけているのかな~? げんろく 赤外線を使って信号を送っているのだ。 すけろく しかし、たくさんある機器のリモコンが混信しないのは どういった仕組みなのかぇ? げんろく よし、今回は赤外線リモコンの通信を 調査してみるか! この記事では、「Raspberry Pi  Pico W」を使って、「赤外線リモコンの通信内容を分析する」 […]

すけろく うーむ。 対応付けが難しいな。 げんろく どうした? Raspberry Pi Picoで悩んでいるようだな。 すけろく Raspberry Pi PicoやPico Wの GPIOピンの情報がボード上にプリント されていないから資料との対応付けがやりづらくてな。 げんろく そうか。そういう課題があるのだな。 よし、解決するグッツを作って提供してみよう! 皆さんは、「Raspberry […]

すけろく うーむ。 モーターを毎回同じくらい回転させることはできんのかな。 げんろく DCモーターや、サーボモーターだと、 回転量を正確に制御することは難しいぞ。 すけろく では、何か解決策はあるのかぇ? げんろく ステッピングモーターというものがある。 モーターの回転をステップとして制御できる。 今回はこのあたりを動かしてみるか。 この記事では、「Raspberry Pi  Pico W」を使っ […]

すけろく 以前の記事で、Raspberry Pi Pico Wを Picoprobe経由でデバッグすることができた。 しかし、シリアルの入出力がArduino IDEで 読み込めないのだ。 げんろく そうだな。 Raspberry Pi PicoやRaspberry Pi Pico Wでは、 シリアル出力用の「Serial.println」では、 Picoprobe経由で取得できない。 すけろく […]

すけろく ん~。 このエラーの時の変数の値が知りたいな~ げんろく どうした? プログラムがうまく動かないのか? すけろく そうなのだ。 Raspberry Pi Pico Wでもデバック機能が使えると いいのだが。。。 げんろく ちなみに、Arduino IDE 2.1.0 のデバッグ機能で Raspberry Pi Pico / Wのデバッグができるぞ! やっとできたプログラムを動かしてみると […]