Tanuki_Bayashin’s diary

電子工作を趣味としています。最近はラズベリーパイPicoというマイコンを使って楽しんでいます

ラズパイPicoで使うPico‐SDK C/C++ に関する覚え書き

【目次】

  • 1.はじめに
  • 2.各処理の記述
    • 2.1 GPIO
    • 2.2 パルス幅変調(PWM)
    • 2.3 A/Dコンバーター
    • 2.4 タイマ割り込み
    • 2.5 処理の時間計測

1.はじめに

 ラズベリーパイPicoというマイコンがあります(以下Picoと表記します)。倒立振子を作り上げたくてPico-SDK(Pico用のC/C++にて開発するための環境)に手を出してきました。いくつか機能別にコードの書き方をまとめておきたいと思います。(自分用の備忘録)

参考:
製品としてのPicoに関する情報がいっぱい載ってます。
Raspberry Pi Documentation - Raspberry Pi Pico and Pico W

Pico‐SDKの構築やプログラミングに関するサイトです。
https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf

Picoで使う各ライブラリーの関数について詳しく書かれています。
Raspberry Pi Pico SDK: Raspberry Pi Pico SDK

※rev1. AD3~4について、A/Dコンバーターの節にて追記しました。以下のサイトを参照しました。(2022/10/12)
macOSからPi Picoを使う - その3:腰も砕けよ 膝も折れよ:So-net blog

続きを読む

傾斜計に応用したカルマンフィルターの動特性

※なにか気になる点がありましたらコメント欄にご記入ください。また、工作や回路を製作する場合には、細かい作業などに対して、細心の注意を払われるようお願いいたします。

目次

1.はじめに

 前回の投稿でカルマンフィルターに関する記事を載せましたが、今回はその動特性をご覧いただきたいと思います。
 プログラム言語のPythonにて記述しており、Tkinterとよばれるモジュールを用いました。(ほどんどコピペです)
 ソースコードは以下にあるものを参考にしました。とても役に立ちました。

imagingsolution.net

※これらの記事の中に出てくるカルマンフィルターについては、トランジスタ技術2019年7月号の記事を出典としています。

ご参考:前回の記事
tanuki-bayashin.hatenablog.com
出典:トランジスタ技術 2019年7月号 第1章第2節(P.39~)のあたり
toragi.cqpub.co.jp

続きを読む

テレビのインチサイズから縦横の長さを求める式

目次

  • 1.はじめに
  • 2.計算してみる

1.はじめに

 テレビの大きさはよく画面の対角線の長さで表示されます。(インチで示されています)
例えば50V型と言えば、テレビの画面の対角線の長さが50インチであることを示しています。
ではこのとき、縦と横の長さがどれくらいなのか、知りたいと思ったことはありませんか?

今回、このTVの画面の縦と横の長さをcmで表すとき、どのような式になるのかを計算で導いてみました。

先に結果を示すと、Zがインチサイズだとすると、

 X(横幅) = 2.214Z (cm)       (9)
 Y(縦幅) = 1.245Z (cm)   (10)

であることが分かりました。
(図1はこの式より各サイズの縦と横の長さを載せています。参照してください)

図1 画面のサイズと縦と横の長さ

※サイズに○○V型とVがつくのは、ビジュアルサイズ(Visual Size)といい、正味の画面の部分のサイズを示しているのだそうです。

続きを読む

カルマンフィルタを用いた傾斜計の製作

※なにか気になる点がありましたらコメント欄にご記入ください。また、工作や回路を製作する場合には、細かい作業などに対して、細心の注意を払われるようお願いいたします。

【目次】

1.はじめに

 前々からこのブログにて傾斜計の試作を重ねてきましたが、ある程度形になったので、以下に紹介したいと思います。

 傾斜計自体の出典は以下に示すトランジスタ技術のバックナンバーによります。詳しい内容については、こちらをご参照いただければと思います。

出典:トランジスタ技術 2019年7月号 第1章第2節(P.39~)のあたり
toragi.cqpub.co.jp

 また以下は、以前Pythonにてコードを書いた時の傾斜計の試作機についての記事です。傾斜角を求める原理や、傾斜計の回路についても載せてあります。参考にしてください。
tanuki-bayashin.hatenablog.com

 さらに今回Raspberry Pi Pico を用いたことから、Pico-SDKC/C++環境に載っていたサンプルプログラムを利用しました。トランジスタ技術ソースコードを利用した分も含めて、この場を借りて感謝の意を表します。ありがとうございました。

※あくまでここに載せてある内容は、電子工作レベルの作品です。実験的に試作し、動作の確認を楽しむレベルであることをご承知おきください。

図2 実験風景(市販の傾斜計の上に加速度センサーを固定した)
続きを読む

傾斜計の試作機の製作 C言語バージョン

※なにか気になる点がありましたらコメント欄にご記入ください。また、工作や回路を製作する場合には、細かい作業などに対して、細心の注意を払われるようお願いいたします。

目次

  • 1.はじめに
  • 2.傾斜計のソフトウェア
  • 3.今回のコードをビルドするときに使用したCMakeLists.txt
  • 4.傾斜角度の表示(動画)
  • 5.まとめ

1.はじめに

 以前書いた記事で(2022/05/19)、Raspberry Pi Pico(以下Pico と記述) を用いて、倒立振子を製作するのに欠かせない傾斜計の試作を行いました。そのときはMicro Python を使ってコードを記述しましたが、今回はC言語を用いてコードを書いています。

 ハードの部分は、以前の記事を参考にしてください。また、加速度センサー(MPU-6050)からのデータを読み込む部分のコードは、Pico-SDK のサンプルの中に偶然入っていたので、そのまま利用しました。(ラズベリーパイ財団の著作物みたいなので、ここでは公表は控えました。悪しからず)

 前回の記事では(2022/06/22)、同一環境でPico からUART により、PCに数値のデータを送信する手法を示すところまでできているので、今回の記事では、加速度センサーからデータを読み込む処理を付け加えた形となっています。
※今回は新たに、小数点以下の数値も表示できるようにした関数も用意しました。

以前書いた記事:
傾斜計の試作機の製作 - Tanuki_Bayashin’s diary

前回書いた記事:
ラズパイPico によるUART接続~Pico-SDK C/C++開発環境にて - Tanuki_Bayashin’s diary

ご参考:
pico-sdk C/C++ での開発の進め方 - Tanuki_Bayashin’s diary

図1 全体構成図

主な仕様

出典:トランジスタ技術 2019年7月号 第1章第2節(P.39~)のあたり(再掲)

※ここでは自分なりに考えた処理を紹介していますが、後日、以下のやり方を他の方のブログにて見つけました。こちらの方がPC側に送信した後でもデータの扱いがしやすいことから、コードに書くには適していると思われます。(2022/08/11追記)

        snprintf(s, sizeof(s), "%f", angle);
        uart_puts(UART_ID, s);

解説:1行目により、angleというfloatの変数をsという文字列に変換したのち、uart_puts()にてデータを送信しています。

続きを読む

ラズパイPico によるUART接続~Pico-SDK C/C++開発環境にて

※なにか気になる点がありましたらコメント欄にご記入ください。

目次

  • 1.はじめに
  • 2.コードの内容
    • 2.1 1桁の数値を送信するには
    • 2.2 複数の桁を送信する場合
    • 2.3 main() 内での処理
  • 3.PicoからPCにデータを送信する(動画)
  • 4.まとめ

1.はじめに

 以前の記事の続編です。以前書いた記事では、Pico-SDK C/C++ 環境での開発の進め方について述べました。今回は、Raspberr Pi Pico(以下Pico と記述) によるUART接続をするコードを、実際にPico-SDK C/C++ 環境にて開発してみました。

以前書いた記事:pico-sdk C/C++ での開発の進め方 - Tanuki_Bayashin’s diary

開発環境:Windows10 Raspberry Pi Pico(C/C++により記述) ubuntu Visual Studio 2022 cmake など

 PicoにてUART接続するコードは、ubuntu 内のpico-examples の中にあるhello_uart(フォルダuart 内)の中のhello_uart.c というファイルにて既に出来上がっています。しかしこのコードでは、数値は送信できません。
 そこでここでは、数値もUARTにて送信できるようにしたuart2.c というコードを作ってみました。(開発の進め方は以前書いた記事に示してあります)

※ここでは自分なりに考えた処理を紹介していますが、後日、以下のやり方を他の方のブログにて見つけました。こちらの方がPC側に送信した後でもデータの扱いがしやすいことから、コードに書くには適していると思われます。(2022/08/11追記)

        snprintf(s, sizeof(s), "%f", angle);
        uart_puts(UART_ID, s);

解説:1行目により、angleというfloatの変数をsという文字列に変換したのち、uart_puts()にてデータを送信しています。

続きを読む

pico-sdk C/C++ での開発の進め方

※なにか気になる点がありましたらコメント欄にご記入ください。

目次

  • 1.はじめに
  • 2.開発の進め方
    • 2.1 ディレクトリ構造とCMakeLists.txtファイル
    • 2.2 新しくソースコードを起こし、ビルドする手順
      • A 前準備的な手順
      • B 開発していく上で繰り返すであろう手順

1.はじめに

 以前、Raspberr Pi Pico(以下Pico と記述)におけるSDK C/C++ の構築に関する記事を書きましたが(下を参照)、そこから1歩進んで、独自のプログラムをビルドするときのノウハウを書きとどめたいと思います。(自分用の備忘録的な要素が強いです)

以前書いた記事:Raspberry Pi Pico SDK C/C++の構築 - Tanuki_Bayashin’s diary

開発環境:Windows10 Raspberry Pi Pico(C/C++により記述) ubuntu Visual Studio 2022 cmake など

 以下のサイトに構築した pico-SDK C/C++ において、ディレクトリpico 内のblink.c というソースコードをビルドするやり方が載っていました。多分に参考になりました。
qiita.com

2.開発の進め方

2.1 ディレクトリ構造とCMakeLists.txtファイル

 開発の進め方と書くとぎょうぎょうしいですが、1章でふれたサイト内のように、ubuntu内のディレクトリpico の下にworks という作業用のディレクトリを作り、必要なファイルやディレクトリを準備します。
 筆者はディレクトリuart2 の中にuart2.c というCで書いたファイルを作り、ビルドしました。(ここではファイルの内容は割愛します)

※ここまでの手順などは1章のサイトを参考にしていただければと思います。

続きを読む