2020年4月20日月曜日

C言語ではじめるRaspberry Pi徹底入門



【ニュース】
★【2023/12/23] Busterのダウンロードについて補足しました。
★【2023/08/03】DCモータの電気ノイズ対策について補足しました。
★【2023/04/07】WiringPi 2.70のインストール情報を載せました。
★【2023/03/30】Chapter 2のpp.28-16の内容をアップデートして、PDFで著者のGitHubにアップしました。
★【2023/01/08】Pi4Bで自走ロボットのメインボード(p.228 図10-22)を使用する場合の補足事項を追記しました。
★【2022/06/03】書籍用の索引をPDFでGitHubにアップしました。印刷してご利用ください。表12-4のパルスオンの値について補足しました。
★【2021/07/28】実践教育訓練学会の助成を受けて製作したRasPi学習ボードをMODEL RasPi-2021にバージョンアップしました。ラズパイのSoCを冷却するファンの駆動回路を実装しています。ラズパイを利用した教育の振興を図るため、実践教育訓練学会のご厚意よりプリント配線板(RasPi学習ボード)を公開します。ご利用ください。なお、MODEL RasPi-2019のガーバーデータにあった長穴データの不整合については、P板.comサポート窓口様とご相談の上、解決済みです。ご迷惑をおかけしました。

/******************************************************/
目次
Chapter1  Raspberry Piの概要
Chapter2  OSのセットアップ
Chapter3  プログラムの開発環境
Chapter4  LEDへの信号の出力
Chapter5  タクタイルスイッチによる信号の入力
Chapter6  PWM信号を使う
Chapter7  I2Cバスを使う
Chapter8  SPIバスを使う
Chapter9  Piカメラで撮影する
Chapter10 自走ロボットを製作する
Chapter11 自走ロボットを制御する(基礎編)
Chapter12 自走ロボットを制御する(応用編)
Appendix
索引
章末問題 Chapter4からChapter9
Chapter13 7セグメントLED表示器で数字を表示する
Chapter14 シリアルポートを使う
Chapter15 マルチスレッドを使う

/******************************************************/
はじめに
 本書の追加情報や出版後の状況の変化への対応情報などを随時アップしていきたと思います。本ページは、本書の目次の順番で情報提供しています。なお、新しい情報につきましては、Appendixの後に追記しています。
 ソースコードおよび正誤表については技術評論社のサポートページに掲載しています。誤りにつきましては、ご迷惑をおかけしたことを深くお詫び申し上げます。本書に関する<お問い合わせ>につきましては、奥付に明記した手続きにより出版社宛てへお願い致します。なお、著者及び職場等へのお問い合わせは、一切お断り致します。本ブログの配線図は「Fritzing」を使って描いたものを使用しています。

/*****************************************************/

Chapter1 Raspberry Piの概要

p.18-19 ⑥HDMI

Raspberry Pi 4Bからはデュアルディスプレイに対応するようになりました。ディスプレイが1台の場合、どちらのmicro-HDMIに接続してもかまいません。ただし、HDMIケーブルでサウンドを使用する場合、Pi 4Bに2つあるmicro-HDMIコネクタの内、電源用USBに近いコネクタ(基板のシルク文字HDMI0)を使用してください。 

p.25-26 1.6.3 GPIOと5V系回路とのインタフェース
  図1-8に示したラズパイとArduino Unoの使用例について、シリアルポート(UART)を利用してエコーバックするテストプログラムと配線図をQiitaに投稿しましたので、ご参照ください。
 〇ラズパイに「Arduino IDEをRaspberry Pi 3B+, 4Bにインストールする方法」も投稿しましたので、併せてご参照ください。

/******************************************************/

Chapter2 OSのセットアップ

 「 C 言語ではじめる Raspberry Pi 徹底入門」(以下、「徹底入門」)が2020 年 4 月に出版された後に、ラズパイの OS の名称も変わり、セットアップ も Imager アプリを使う方法に変わりました。 そこで、「徹底入門」のpp.28~36の内容をアップデートして、PDFで用意しました。著者のGitHubのWebサイトからダウンロードできます。

Raspberry Pi Imagerの登場

 本書で解説したRaspbainのセットアップ方法とは別に、Raspbainを簡単にSDカードにインストールできる「Raspberry Pi Imager」アプリが2020年に発表されました。「Raspberry Pi Imager」は財団の公式サイトからダウンロードできます。2つの便利な機能があります。

1)SDカードのフォーマット機能
32GBを超えるSDXC規格のSDカードのファイルシステムはexFAT形式であるため、Appendix A.2で紹介したguiformat.exe等を使用してFAT32形式にフォーマットする必要がありました。Raspberry Pi ImagerのErase機能でも、SDXC規格のSDカードをFAT32形式でのフォーマットが簡単に行えます。

2)Raspbianのインストール機能

本書p.30-31では、PCを利用して、NOOBSをダウンロード(図2-3)して、ファイルの解凍とSDカードへコピー(図2-4)しましたが、Raspberry Pi Imagerでは一連の作業を自動的に行ってくれます。SDカードに書き込みが終わったら、本書p.34の「2.4.3 Raspbianの設定」から始めてください。
 なお、Windows版の「Raspberry Pi Imagerの使用方法」についてはQiitaに投稿しましたので、ご参照ください。
〇Qiitaの「Raspberry Pi Imagerの使い方」へ

なお、2023年9月時点では、Raspberry Pi Imagerを使用してBuster(32bit)をダウンロードできなくなりました。下記のRaspberry Pi財団サイトからイメージファイル(2021-05-07-raspios-buster-armhf-full.zip)をダウンロードおよび解凍して、ImagerのOS→Use customで解凍した2021-05-07-raspios-buster-armhf-full.imgをSDカードに書き込んでください。ラズパイのセットアップの途中で、日本語環境を選択してください。
https://downloads.raspberrypi.org/raspios_full_armhf/images/raspios_full_armhf-2021-05-28/

国内のミラーサイトの利用

 便利な「Raspberry Pi Imager」アプリですが、短所もあります。一つはダウンロードに時間がかかることです。これは、本書p.30図2-3の手続きの短所でもあるのですが、ネットワークモニタの観察から英国にアクセスしているようで、約2GBのダウンロードに時間がかかります。北陸先端大学大学院(JAIST)のミラーサイトには、NOOBSの歴代から最新ファイルがあります。ただ、ネットのトラフィック状況によっては国内のミラーサイトからでも時間がかかることがあります。ダウンロードしたら、本書p.32の「2.4.2 Raspbianのインストール」から始めてください。
〇JAISTのミラーサイト http://ftp.jaist.ac.jp/pub/raspberrypi/NOOBS/images/


p.48  C関数のマニュアルを日本語で表示

$ sudo apt install manpages-ja-dev

p.51  sudo apt-get install wiringpi

 2023年4月5日時点、wgetコマンドを実行すると「404 Not Found」と表示されて、パッケージをダウンロードできません。そのため、WiringPi2.70へのアップデートを参照してください。
 出版後に、上記のコマンドを実行すると「E:パッケージ wiringpiが見つかりません」と表示されるようになりました。p.69に記載している通り、下記の手続きで行ってください。なお、最新のwiringpiをインターネットからダウンロードする手続きなので、ラズパイをネットに接続して実行してください。
アップデートの方法
$ cd /tmp
$ wget https://project-downloads.drogon.net/wiringpi-latest.deb
$ sudo dpkg -i wiringpi-latest.deb
$ gpio -v
gpio version: 2.52 
インストールが成功すると上記のようにバージョンが表示されます。

pp.68-69  WiringPi 2.70へアップデート

 本書では、OS BusterとWiringPi 2.52の組み合わせを前提にしていますが、WiringPi2.52へアップデートができない状況ではWiringPi2.70へアップデートするのも選択肢の一つです。手続きは下記の記事を参照してください。なお、WiringPi2.70をインストールする前に、旧WiringPiを上記の手続きでアンインストールしてください。


WiringPi 2.5のアンインストールの方法
$ sudo apt purge wiringpi -y
$ hash -r

WiringPi2.52と2.70の違い
 管見で知り得た2.52と2.70の違いに以下があります。
① 2.52ではPi4 BにおいてpullUpDnControl(GPIO,PUD_DOWN)関数のプルダウン抵抗が有効にならない不具合がありましたが、2.70では修正されています。
② ハードウェア方式PWMで使用するクロックの周波数は、2.52ではPi3/3B+(19.2MHz)とPi 4B(54.0MHz)と異なっていましたが、2.70においてはどちらも19.2MHzに統一されて互換性が担保されました。そのため、Pi 4Bの場合であっても、本書p.126 リスト6-2においてpwmSetClock(192)としてください。
対象ソースコード
〇p.131 リスト6-4:List6-4_PwmBuz01.c
〇p.261 リスト11-4:List11-4_PwmBuz.c

/******************************************************/

Chapter3 プログラムの開発

/******************************************************/

Chapter4 LEDへの信号の出力(GPIOの出力を使う)

p.85 図4-10:LED点灯回路の配線図

 図4-10の配線図で動作を確認していますが、GPIOの動作をより安定させるためにGNDをブレッドボードに分散して配線することをお薦めします。

3.3V系の電源回路の設計

本ブログのAppendix「A.8 5V電源ラインから3.3V系電源回路の設計」で,USB ACアダプター(5V)と東芝製三端子レギュレータTA48033Sを使用して、3.3V(出力電流1A)の電源回路を紹介しています。Chapter9までの回路を組み立てると、下記の写真程度になります。


p.96 章末問題

Chapter4からChapter9までの章末問題をアップしました。電子オルゴールや焦電センサモジュールを使った自動撮影などの課題があります。PDFやソースコードのダウンロードの方法は本ブログのAppendixの後に記載しています。

/******************************************************/

Chapter5 タクタイルスイッチによる信号の入力(GPIOの入力を使う)

p.103  5.4.2 プルダウン抵抗を利用したタクタイルスイッチ回路

Pi 3/3 B+では、pullUpDnControl関数は有効ですが、Pi 4BではWiringPiのバージョン2.52においてpullUpDnControl関数が無効です。そのため、Pi 4Bを使用する場合はタクタイルスイッチ回路にプルダウン抵抗(3.3kΩ)を付加してください。

/******************************************************/

Chapter6 PWM信号を使う

/******************************************************/

Chapter7 I2Cバスを使う

p.141  LCD AQM1602のはんだ付けの方法

Appendix A.6 に動画アップしました。

p.149  図7-16:LCDの表示例(引数があるとき)
$ cd MyApp  ※フォルダMyAppへ移動してから、実行します。
$ ./List7-1_Lcd01 I love Raspberry Pi

p.149  I2Cバスリピーター(PCA9515AD)の回路と配線例
本書の図7-22にI2Cバスリピーターを利用した回路図を示します。
・図7-22のSDA信号に4.7kΩのプルダウン抵抗を外します。
・バスリピーターPCA9515AD(秋月電子通商 I-10882)を挿入します。
・スレーブ側のSCLとSDAの信号を10kΩの抵抗でプルアップします。


I2Cバスリピーターを利用した配線図を示します。
秋月電子通商で販売されているI2CバスリピーターPCA9515ADは8ピンのSOPパッケージのため、ブレッドボードに挿入することはできません。そんため、DIP化基板に実装したり、基板にピンを付けたり等のはんだ付け作業が必要になります。参考までに、14ピンのSOPパッケージのはんだ付け作業の動画を用意しました。ビデオにはありませんが、はんだ付け作業前にプリント基板のフットプリントにフラックスを塗るとはんだ付けの仕上がりが良くなります。


【コラム】 wiringPiを使用しないでI2Cデバイスと通信する
 wiringPiのI2Cライブラリの関数には、レジスタがないシンプルデバイスに対して、スレーブアドレスだけをライトする関数や、複数バイトのデータをリードする関数がありません。そこで、Linuxのi2c-devドライバを利用して、これらの関数の作成しました。
Qiitaの「Raspberry Pi 4BとセンサHIH-6130で湿度・温度を測定する」で、ソースコードを公開しました。また、Linuxのi2c-devドライバとwiringPiの混在の記述も可能です。

LibreOfficeのインストールとメニューの日本語表示
$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt install libreoffice -y
$ sudo apt install libreoffice-l10n-ja -y
$ sudo apt install libreoffice-help-ja -y

/******************************************************/

Chapter8 SPIバスを使う

/******************************************************/

Chapter9 Piカメラで撮影する

bullseyeに非対応

 2021年にDebian11「bullseye」がリリースされて、Raspberry Pi OSもbullseyeがダウンロードできるようになりました。ただし、bullseyeからカメラドライバ等が独自のものからオープンソースの「libcamera」に変更されて、従来のraspistillコマンド等は使用できなくなりました。そのため、OSのバージョンはBusterを使用してください。

p.198 PiカメラモジュールV2のピントの調整方法

 白いリングの「小型フォーカス調整工具」を利用したピントの調整方法についてはQiitaに投稿しましたので、ご参照ください。
〇Qiitaの「Raspberry Pi 公式カメラモジュールV2のピントの調整方法」へ

p.205  9.4.4  raspividコマンドの使用例

raspividコマンドは、RAWモード動画形式(.h264)としてキャプチャします。RAWは英語で「生」、「未加工」を意味し、イメージセンサから得られた生データです。多くのメディアプレイヤーでは、動画形式(.h264)に対応していないか、正しい速度で再生しないことがあります。そのため、よく使用されるMP4動画形式(.mp4)に変換します。変換するアプリはMP4Boxを使用します。

〇MP4Boxのインストールの手順は次の通りです。
$ sudo apt install -y gpac

〇raspividによる動画撮影(p.205)
raspividコマンドのデフォルトでは、1080p30の画質で5秒間記録します。
1080p30は、画素数1920×1080(約207万ピクセル)、プログレッシブ走査方式、フレームレートが30fpsのことです。
フレームレートは1秒間あたりの画像の数です。
$ raspivid -o video1.h264

〇MP4BoxによるMP4動画形式に変換
raspividで使用したフレームレートをMP4Boxのオプションに指定します。
$ MP4Box -add video1.h264 video1.mp4 -fps 30
AVC-H264 import - frame size 1920 x 1080 at 30.000 FPS
AVC Import results: 143 samples - Slices: 3 I 140 P 0 B - 0 SEI - 3 IDR
Saving to video1.mp4: 0.500 secs Interleaving

〇動画の再生
VLCメディアプレイヤーでvideo1.h264とvideo1.mp4の再生を比較すると、
・video1.h264の場合は、再生速度が速くなります。
・video1.mp4の場合は、ほぼ5秒で再生されます。
・”ほぼ”の理由は、MP4Boxの-infoのオプションで変換されたmp4の情報を確認すると、デフォルトの動画記録時間は5秒ですが、約4.8秒と表示されました。
$ MP4Box -info video1.mp4  

本書の下記のraspivid コマンドの使用例も同様にMP4Boxで変換します。
p.205
$ raspivid -t 10000 -o video2.h264 -w 640 -h 480 -fps 15
$ MP4Box -add video2.h264 video2.mp4 -fps 15

p.206
$ raspivid -o video3.h264 -t 25000 -td 2500,5000
$ MP4Box -add video3.h264 video3.mp4 -fps 30

参考サイト
https://www.raspberrypi.org/documentation/usage/camera/raspicam/raspivid.md
https://www.raspberrypi.org/documentation/raspbian/applications/camera.md

/******************************************************/

Chapter10 自走ロボットを製作する

p.221  ライン検出基板の外形加工の動画


p.228  図10-22:自走ロボットのメインボードの回路図
Pi 3/3 B+では、pullUpDnControl関数は有効ですが、Pi 4BではWiringPiのバージョン2.52においてpullUpDnControl関数が無効です。そのため、Pi4 Bを使用する場合はタクタイルスイッチ(SW2, SW3)にプルダウン抵抗(3.3kΩ)を付加してください。


p.230  メインボードの外形加工の動画


p.239  10.7 自走ロボットのテスト走行の動画



p.214 物流倉庫で活躍するロボットの事例
〇NIKKEI 倉庫の中を縦横無尽 アマゾンの動く棚ロボ https://www.youtube.com/watch?v=Xbw0U6xfc9E
〇モノタロウ 笠間ディストリビューションセンター https://www.youtube.com/watch?v=LbVQL6WCDkc


p.234 DCモータのノイズ対策
 ブラシ付きDCモータは、ブラシと整流子による電気の整流で回転が持続しますが、電気の流れが切り替わるときに、スパークが発生して電気ノイズの原因になります。電気ノイズの低減対策として、DCモータの端子間にセラミックコンデンサ(0.1uF)を取り付けましたが、端子とDCモータのハウジング間にも、セラミックコンデンサ(0.1uF)を2箇所に取り付けるとより効果的です。なお、ハウジングにコンデンサをはんだ付けすると、ダブルギヤボックスのパーツT5を取り付けることができなくなります。

 ハウジングのはんだ付けには、フラックスと熱容量が大きいこと先を使用すると作業が楽です。本書で推奨した白光製はんだこてダッシュ(FX-650-81)をお使いの場合は、こて先を
T34-C3/3C型に交換することができます。こて先のC型は円柱を斜めにカットした形状で、標準で付いているB型(円錐型)と比べて熱容量が大きいです。先端の楕円面ではんだ付けします。

/******************************************************/

Chapter11 自走ロボットを制御する(基礎編)

p.251 PC側からの操作(VNC Viewerへの接続)

 PCからVNC Viewerでラズパイに接続しようとすると、黒い画面が表示されることがあります。この場合は、PCとラズパイの解像度のミスマッチの状態にあります。対策としては、ラズパイのデスクトップ画面をクライアント側の仕様に合わせて適切な解像度に固定すると解決します。

 緑のACT LEDが消灯していることを確認してから、ラズパイの電源をOFFにします。ディスプレイ、キーボード、マウスを装着して再起動します。ターミナルから管理者権限でラズパイの設定ツールraspi-configを実行します。
$ sudo raspi-config

 設定ツールの画面が表示されます。メニューから解像度(Resolution)の画面を表示させますが、OSのバージョンによってメニューの選択の順番が異なるようです。下記の表を参照してください。

OSのバージョンメニューの選択の順番
4.19.75 (2019年9月)「7 Advanced Options」→「A5 Resolution」
5.10.17 (2021年5月)「2 Display Options」→「D1 Resolution」

 解像度(resolution)の画面が表示されたら、キーボードの矢印キーでPC側の仕様に合わせて適切な解像度を選択してください。選択したら、Tabで<了解>に移動してEnterを押します。その後の画面も<了解>、 <Finish>を押します。

 次のrebootの画面で、<いいえ>を押して設定ツールを終了します。


 メニューから「Shutdown」をクリックして、ラズパイをシャットダウンします。その後、電源をOFFにしたら、HDMIケーブルとキーボード、マウスを外して、電源をONにします。OSが立ち上がった頃を見計らって、PCからVNC Viewerで接続すると、デスクトップ画面が表示されます。

p.277  11.9 DCモータを正転、逆転させるの動画


p.284  11.10 シャットダウンボタンを追加するの動画

Raspberry PiのACT LEDの緑色の点灯はmicroSDカードにアクセス処理中であることを示しています。ACT LEDが完全に消灯してから、自走ロボットのメインスイッチ(SW1)をオフにします。


p.288  11.11 緩やかなラインをトレースするの動画


/******************************************************/

Chapter12 自走ロボットを制御する(応用編)

p.300  12.2 RCサーボモータを制御するの動画


p.310 「表12-4:RCサーボモータの回転角度とパルスオンの時間」の補足
 回転角度0°(右向き)のときのパルスオンの値をとしていますが、サーボモータSG-90によっては振動する場合があります。その場合には、パルスオンの値を6または7に変更してお試しください。

p.310  12.3 距離を測定するの動画


p.315 アングル材とPiカメラの取り付け
アングル材にPiカメラを取り付ける場合、M3のプラスチックナットを挟むことでPiカメラの実装部品に取り付けによる圧力は加わりません。


p.320  12.4 障害物を検出して自動停止して撮影するの動画


p.326  リスト 12-3:List12-3_Safety.c

GeanyでList12-3_Safety.cをビルドして実行するとPiカメラの画像は保存されますが、/etc/rc.localファイルにList12-3_Safetyを追記した場合、画像は保存されません。そのため、p.328の15行目のソースコードに保存先のパス(/home/pi/MyApp)を挿入してください。
旧:system("raspistill -t 100 -a 12 -a 1024 -o `date '+%Y%m%d-%H%M%S'`.jpg");
新:system("raspistill -t 100 -a 12 -a 1024 -o /home/pi/MyApp/`date '+%Y%m%d-%H%M%S'`.jpg");

/******************************************************/

Appendix

A.6 LCDなどの小型部品のはんだ付けの方法

p.320  LCD AQM1602のはんだ付けの動画


A.7 ユニバーサル基板のはんだ付けのポイント

p.347 A.7.1 スズメッキ線の伸ばし方

p.347 A.7.4 はんだの除去の方法
● フラックスを利用したはんだの修正方法


● 吸取器を利用したはんだの修正方法


● 吸取線を利用したはんだの修正方法

A.8 5V電源ラインから3.3V系電源回路の設計

ラズパイ(Pi 3/3B+およびPi 4B)には高効率なパワーマネジメントIC(PMIC)が実装されています。PMICは、AC-DCやDC-DCコンバータを含む電源ICのことです。ラズパイではPMICを利用して、USBの電源(5V)から3.3Vやその他の電圧を作り出しています。本書ではラズパイの拡張コネクタの3.3Vを使用していますが、例題の範囲では足りているようです。もっと3.3Vの電流を使用したい場合やラズパイに負担を掛けたくない場合は、別途3.3Vの電源を用意します。ここでは、USB ACアダプター(5V)と東芝製三端子レギュレータTA48033Sを使用して、3.3V(出力電流1A)の電源回路を紹介します。

準備するもの

名 称
個数
備 考
三端子レギュレータ
1
東芝製 TA48033S
最大出力電流 1A
セラミックコンデンサ  0.33uF
1

電解コンデンサ
220uF
1
ブレッドボードに実装したものを流用する
電源用マイクロUSBコネクタDIP化キット
1
参考品:秋月電子通商(K-10972)
USB Micro-Bコネクタ ACアダプター1出力5V 1A以上のもの

・最大出力電流 1A
・出力電圧精度  VOUT±3% (25℃)
・保護機能   過電流および過熱制限
・端子 1:VIN 3:GND 2:VOUT

※2番と3番の位置に注意(データシートより)

回路図

USBコネクタの5V出力を三端子レギュレータTA48033SのVINに入力します。TA48033SのVOUTから3.3Vが出力されます。三端子レギュレータの動作を安定させるめに、セラミックコンデンサをVINに、電解コンデンサをVOUTに接続します。各コンデンサのGNDのリードは、三端子レギュレータのGNDのリードと同じブレッドボードの列に挿入します。一点アースといいますが、より回路が安定します。
 本回路では、出力電流を1Aまで取り出すことができます。一般に、5Vから3.3Vを作り出しているのでその差分(1.7V)と出力電流(1A)との積が、レギュレータの損失(1.7W)となります。仮に、TA48033Sの損失を1.7Wとした場合、40℃以下の室温であれば、「データシートの周囲温度と最大許容損失のグラフ」より放熱器を付けなくてもよいようです。ただ、機械に組み込む場合は、筐体内の温度が上昇しますので、放熱対策が必要になる場合があります。

配線図

・ラズパイの拡張コネクタの2箇所の3.3Vのジャンパワイヤをブレッドボードから外します。これは、ラズパイとTA48033Sの出力同士のバッティングによる不具合を避けるためです。ラズパイの故障の原因になります。
・ラズパイの拡張コネクタのGNDは複数あります。試作した回路の動作を安定させるために、できるだけ多くをブレッドボードに配線します。
・三端子レギュレータを品番が記載された正面から見た時、左のリードが1番でUSBコネクタの5Vに配線します。真ん中のリードが3番でGNDに配線します。
・次の三端子レギュレータの動作確認が終わるまで、右のリード(2番)はブレッドボードに配線しません。

動作確認

・デジタルマルチメータをDC電圧計にセットして、TA48033Sの出力電圧が3.2Vから3.4Vの範囲にあることを確認してください。
・出力電圧が正常であれば、右のリード(2番)をブレッドボードの赤い電源ラインに配線します。
・出力電圧に異常があれば、電源用マイクロUSBコネクタDIP化キットのはんだ付け箇所や、配線をチェックしてください。

/******************************************************/

索引

 「C言語ではじめるRaspberry Pi徹底入門」の書籍用の索引(4ページ)をPDFで用意しました。著者のGitHubのWebサイトからダウンロードできます。
 本書のサイズはB5変形型のため、索引のPDFをA4で印刷して破線で示した余白をカットしてください。例えば、索引の片方の縁に糊を付けて、奥付と見返りの間に挿入して固定します。


/******************************************************/

章末問題 Chapter4 ~ Chapter9

 「C言語ではじめるRaspberry Pi徹底入門」の学習内容を利用して、読者が応用力を習得するために章末問題Chapter4~Chapter9までの章末問題と参考事例を作成しました。内容の一部を紹介します。
  • Chapter4 キーボードから入力された10進数をLEDに2進数で表示
  • Chapter5 割込み処理でタクタイルスイッチのオルタネート動作
  • Chapter6 電子ピアノやオルゴールのプログラム
  • Chapter7 測定した温度をCSVファイルにして、表計算でグラフ化
  • Chapter8 D/Aコンバータで正弦波を出力してオシロスコープで観測
  • Chapter9 カメラと焦電センサモジュールを組合わせての自動撮影、など。
 章末問題と解答例のソースコードは、著者のGitHubのWebサイトからダウンロードできます。

 本Webサイトの情報を丸ごとダウンロードする方法を解説します。なお、Webサイトのディレクトリを開いてファイルを選択すれば、個別にダウンロードもできます。著者のGitHubのホームページを開き、[View on GitHub]をクリックします。

 Web サイトの①[Code](①)⇒[Download ZIP](②)をクリックします。ダウンロードが完了すると、ラズパイのダウンロードフォルダに「raspigh1-master.zip」ファイルが保存されます。

 
 下図のようにダウンロードフォルダを開いて、raspi-gh1-master.zip(①)を右クリック⇒[ここでファイルを展開](②)をクリックします。展開が終了すると、raspi-gh1-master フォルダが作成されるので、ダブルクリックするといくつかフォルダを表示されます。Chapter4-9 フォルダ内に、章末問題と回路図のPDFと、ソースコードがあります。ソースコードは/home/pi/MyApp にコピーします。章末問題の使用法はPDFを参照してください。


/******************************************************/

Chapter13 7セグメントLED表示器で数字を表示する

Chapter13のPDFテキストと解答例のソースコードは、著者のGitHubのWebサイトからダウンロードできます。

Chapter13では7セグメントLED 表示器を使用して、数字を表示します。多様な表示が可能なLCD が普及していますが、数字だけの表示なら大きく明るい7セグメントLED表示器が使用されています。7セグメントLED 表示器の構造、ダイナミック点灯方式の原理、時刻を表示させる課題を学びます。また、トランジスタの概要やスイッチング回路についても学びます。
目次
はじめに
13.1    本章で準備するもの
13.2    7 セグメントLED 表示器とは
13.3    数字を表示させる
13.4    トランジスタとは
13.5    4 桁の数字をダイナミック点灯させる
13.6    章末問題

4桁7セグメントLED表示器の配線図
/******************************************************/

Chapter14 シリアルポートを使う

Chapter14のPDFテキストと解答例のソースコードは、著者のGitHubのWebサイトからダウンロードできます。

ラズパイやArduino等にはUART(ユーアート)と呼ばれるシリアル通信のためのハードウェア回路を内蔵しています。UARTの送信と受信の端子をシリアルポートと呼びます。本章では、UARTのデータフォーマットとRS-232規格について解説し、シリアル通信のプログラミングについて学びます。UARTをインタフェースとするデバイスやRS-232装備した計測器や産業用機器は数多くあります。シリアルポートを習得することで、ラズパイの活用の可能性が広がることでしょう。

目次
はじめに
14.1    本章で準備するもの
14.2    シリアルポートとは
14.3    RS-232とは
14.4    ラズパイのシリアルポートの設定と構成
14.5    RS-232インタフェース回路
14.6    PCのシリアルポートの通信設定
14.7    Linuxのコンソールからログインする
14.8    ラズパイとPCでテレタイプする
14.9    WiringPi Serial Library関連
14.10    mini UARTでデータ伝送する
14.11    パリティビットを付加してデータ伝送する
14.12    章末問題

RS-232インタフェース回路の配線図
/******************************************************/

Chapter15 マルチスレッドを使う

Chapter15のPDFテキストと解答例のソースコードは、著者のGitHubのWebサイトからダウンロードできます。

 例えば、Lチカしながら曲を再生するには、どうしたらよいのでしょうか? 複数のプログラムを同時に動作させるのはArduino Uno等のマイコンでは高度なテクニックになるのですが、マルチタスクOSのLinuxを実装したラズパイなら、スレッド関数を利用することで意外と簡単にC言語で記述できるんです。マルチスレッドをマスターしてワンランク上のプログラミングスキルを目指しましょう。

目次
はじめに
15.1  本章で準備するもの
15.2  様々なマルチタスクOS
15.3  プロセスとスレッドの関係
15.4  Pthreadsライブラリ
15.5  Geanyのビルドの設定
15.6  スレッドの実行と終了
15.7    pthread_exit関数で終了する
15.8    スレッドをreturn文で終了する
15.9    pthread_join関数で終了する
15.10  pthread_cancel関数で終了する
15.11    周波数が異なるLEDを点滅させる
15.12    psコマンドでプロセスとスレッドを確認する
15.13 スレッドでバウンシング対策
15.14 シリアルポートからスレッドで受信する
15.15 ミューテックスを使用する
15.16 章末問題

/******************************************************/

RasPi学習ボード(MODEL RasPi-2021)のプリント配線板の製造情報

 実践教育訓練学会の助成を受けて、C言語ではじめるRaspberry Pi徹底入門(以下、徹底入門)の前半のChapter9までの実習で使用する回路をプリント配線板として設計しました。本プリント基板をRasPi学習ボードと呼びます。ラズパイを利用した教育の振興を図るため、実践教育訓練学会のご厚意により、プリント配線板のガーバーデータやドリルデータ等の製造情報を無償で読者に提供致します。2021年7月にRasPi学習ボードは「MODEL RasPi-2021」にバージョンアップしました。ラズパイのSoCを冷却するためのファンの駆動回路を実装しています。
 なお、RasPi学習ボードは、書籍「C言語ではじめるRaspberry Pi徹底入門」(技術評論社)を使用した教育のみを目的としています。したがって、本学習ボードを用いた利用は、必ず自己の責任と判断によって行ってください。利用の結果について、技術評論社、実践教育訓練学会および著者はいかなる責任も負いません。記載の情報は、2021年7月現在のものをもとにしています。将来的に変更される場合もあります。

RasPi学習ボード・プリント配線板の製造情報等🄫菊池達也
クリエイティブ・コモンズ・ライセンス(表示4.0国際)CC BY-NC-SA




RasPi学習ボードの特長

 RasPi学習ボード(MODEL RasPi-2021)には次のような特長があります。
  • 「徹底入門」の課題を実習(自走ロボットを除く)ができます。
  • 配線が固定されているため、ブレッドボードを使用したときに発生する誤配線、接触不良などのトラブルが無く、プログラミングに専念できます。ブレッドボードを使用した回路の試作スキルは必要ですが、学習目標によっては省略しても良いのではないでしょうか。
  • Arduino UNO R3に準拠したシールドを装備しているため、新しい回路を追加することが可能で、拡張性があります。
  • 本ブログで紹介したI2Cバスリピーターと3.3V三端子レギュレータを実装しているため、電気的に安定します。
  • 持ち運びや収納が容易です。
  • ラズパイのSoCを冷却するためのファンの駆動回路を実装しています。「Raspberry Piの設定」で、設定した温度で自動的にファンが動作します。




ダウンロードの方法
 RasPi学習ボードの仕様書や製造情報等は、著者のGitHubのWebサイトのフォルダ「RasPi学習ボード」にあります。
 フォルダ「プリント配線板製造情報」に、RasPi学習ボードのExcellon ドリルファイルとGerber RS-274X (拡張フォーマット)ファイルがあります。RasPi学習ボードの仕様や部品表等については、「RasPi学習ボード2021仕様書.pdf」 に書かれています。回路の技術的な内容は、「徹底入門」や本ブログの記事をご参照ください。

製造情報について

 RasPi学習ボード(MODEL RasPi-2021)の製造情報はフォルダ「プリント配線板製造情報」の中にあります。各ファイルの意味は次の通りです。
Excellon ドリルファイル
  • ドリルデータ   Rasp2_demo.drd
  • ドリルリスト   Rasp2_demo.dri
Gerber RS-274X (拡張フォーマット)ファイル
  • 部品面パターン  Rasp2_demo.cmp
  • はんだ面パターン Rasp2_demo.sol
  • 部品面レジスト  Rasp2_demo.stc
  • はんだ面レジスト Rasp2_demo.sts
  • 部品面シルク   Rasp2_demo.plc
  • 外形線図     Rasp2_demo.out
 これらの Excellon ドリルファイルとGerber RS-274Xファイルはgerbv - A Free/Open Source Gerber Viewerで、ドリルリスト以外のファイルを確認することができます。Windows版やLinux版があります。
http://gerbv.geda-project.org/

ラズパイでは下記のコマンドでインストールできます。
$ sudo apt install gerbv -y


 プリント配線板のオーダーについては、インターネットで受け付けるメーカーがあります。手続きについては、各メーカーにお問い合わせください。
製造の仕様として次の点に留意してください。
・外形寸法 100.0mm × 160.0mm
・銅箔厚み 35um    ※電流容量により35um厚で設計しています。
・長穴   あり   ※DCジャックの端子が長穴の仕様になっています。
・表面処理 無鉛はんだレベラー  ※はんだ付けが楽になりますがコストアップになります。読者のスキルとご相談ください。
 参考までに、本製造情報でP板.comで発注する場合は、フォルダ「プリント配線板製造情報」の全てのファイルをZIP形式で1つのファイルにまとめて、メーカーにアップロードします。「製造指示書.xls」は、P板.comの指定するファイルで、必要事項は入力済みです。なお、手続きの詳細はP板.comのホームページをご参照ください。

組立てについて

 学生やホビーの方でも、白光FX-650-81相当のはんだごてを使って、キット感覚で楽しく組立てられえるようにアートワーク設計しました。ベタパターンはありませんが、電源系には太い配線があるので、こて先を3C型に交換することをおすすめします。
 はんだ付けの経験が浅い読者がいるかもしれませんが、本ブログで紹介したLCD AQM1602のはんだ付けや、吸取器を利用したはんだの修正方法のスキルがあれば組立ては可能でしょう。組立て指示書を用意していませんが、マスキングテープで仮止めするなどして、抵抗などの背の低い部品から順番に実装してください。なお、ピンヘッダ(JP1~JP7)の挿入が少しきついかもしれません。はんだ付けするために基板をひっくり返したときに、ピンヘッダが落ちないようにするためです。ピンの挿入不足があればペンチ等で、はんだ付けをする前に修正してください。
 LCDのはんだ付けのビデオでも述べたように安全衛生作業を順守して、怪我のないように作業してください。ご自身で組み立てたRasPi学習ボードで、スキルアップされることを願っています。

以上。

/******************************************************/

【履歴】
【2020/04/20】初公開
【2020/05/24】TA48033S回路の写真追加
【2020/05/26】カメラモジュールV2のピントの調整方法
【2020/06/27
章末問題 Chapter4~Chapter9
【2020/07/07LCDのはんだ付けとスズメッキ線の伸ばし方の動画追加
【2020/07/10A.7.4 はんだの除去の方法の動画追加
【2020/07/19RasPi学習ボードのプリント配線板の製造情報
【2020/07/27目次の作成
【2020/08/23】「Chapter13 7セグメントLED表示器で数字を表示する」のPDFテキストと解答例のソースコードをGitHubにアップしました。
【2020/08/31】Chapter10のライン検出基板とメインボードの外形加工について、ホームセンター等で購入できる安価な工具等を利用した方法についての動画をアップしました。また、ブログのテーマを「シンプル」に変更。
【2020/11/18】「Chapter14 シリアルポートを使う」のPDFテキストと解答例のソースコードをGitHubにアップしました。
【2021/05/13】GitHubにアップしている章末問題 Chapter4-9 3版.pdfとシリアルポートChapter14シリアルポート(第2.1版)のPDFと一部ソースコードを更新しました。
【2021/05/17】「Chapter15 マルチスレッドを使う」のPDFテキストと解答例のソースコードをGitHubにアップしました。ご利用ください。
【2021/07/28】RasPi学習ボードをファン付き(MODEL RasPi-2021)にバージョンアップしました。
【2021/07/30】「Chapter11」PC側からVNC Viewerでラズパイに接続したときに、黒い画面「Cannot currently show the desktop」が表示された場合の対策方法をアップしました。
【2021/12/30】「Chapter12」List12-3_Safety.cのソースコードを修正しました。
【2022/06/03】書籍用の索引をPDFでGitHubにアップしました。表12-4のパルスオンの値について補足しました。
【2023/01/08】Pi4Bで自走ロボットのメインボード(p.228 図10-22)を使用する場合の補足事項を追記しました。
【2023/03/30】Chapter 2のpp.28-16の内容をアップデートして、PDFで著者のGitHubにアップしました。










C言語ではじめるRaspberry Pi徹底入門

【ニュース】 ★【2023/12/23] Busterのダウンロードについて補足しました。 ★【2023/08/03】DCモータの電気ノイズ対策について補足しました。 ★【2023/04/07】WiringPi 2.70のインストール情報を載せました。 ★【2023/03/30】...