SunFounder PiCar-S Raspberry Pi スマートカーキット¶
PiCar-Sについて¶
PiCar-S は、Raspberry Pi 世代3モデルB、世代3モデルB +、世代4モデルBで使用できるクールなスマートカーである。超音波障害物回避、ライトフォロア、ラインフォロアなどの3つのセンサーモジュールを搭載しているため、車の制御方法に関するプログラミングを良く学ぶことはできる。
本取扱説明書では、ハードウェアとソフトウェアの両方を考え、説明、物理部品のイラストを使用してPiCar-Sを組み立てる方法について説明する。これらのすべてがどのように機能するかを学ぶことを楽しむだろう。次のリンクをクリックすると、PDFユーザーマニュアルを表示したり、コードのクローンを作成したりできます:https://github.com/sunfounder/SunFounder_PiCar-S/tree/V3.0。
製品の関するご意見、またはマニュアルにない新しいプロジェクトを学習したい場合は、遠慮なくこちらまでご連絡くだだい。できるだけ早めにマニュアルに更新します。
サポートメールアドレスはこちらまで:cs@sunfounder.com
部品一覧¶
構造プレート¶

上部プレートx 1
全部ハーフシャーシx1
六角前輪固定プレート×8
超音波サポートx1
ベアリングシールドx 8
ステアリングリンケージ×1
ステアリングコネクターx2
超音波コネクターx1
後部ハーフシャーシx1
センサーコネクターx1
メカニカルファスナー¶

配線¶

その他の部品¶

工具¶

別途用意する必要な部品¶
このキットには以下の成分が含まれていません。

注釈
保護ボードなしの 18650 バッテリーを使用することを推奨します。他のバッテリーを使用すると、保護ボードの過電流保護により、製品の電源が切れて動作を停止する可能性があります。
保護回路なしのバッテリーの場合は、バッテリーホルダーとの接続を確実にするために、アノードが膨らんでいる(正極が尖った)バッテリーを購入してください(以下を参照)。

長時間使用するために、可能な限り最大電力のバッテリーを使用してください。
前書き¶
PiCar-S はRaspberry Piに基づく スマートセンサー カーロボットで、ライトフォロワー、ラインフォロワー、超音波障害物回避を含む3つのセンサーモジュールを搭載している。これらのモジュールにより、このスマートカーはいくつかの簡単な自動動作が可能になる。したがって、これらのセンサーで車を制御するために、Pythonでのプログラミングについての基本知識を学ぶことができる。このスマートカーを作ろう!

車の組み立て¶
箱を開けて多くの部品をチェックするとき、とても興奮しているか?忍耐を持って、気楽にやってください。次の手順を CAREFUL 読んでください。各ステップが終了したら、マニュアルの図に基づいて作業を再確認してください。心配しないで!いくつかの特定のステップでヒントが与えられる。チュートリアルに一歩一歩で従ってください。さて、もう騒ぎは無く、今から始めよう!
前輪¶
注釈
組み立てる前に、ステアリングコネクタの方向に注意してください。
以下に示すように、 M4x25ネジ を一つの ステアリングコネクタ 、3つの ベアリングシールド 、3つの 六角前輪固定プレート 、と一つの 前輪 を通して M4セルフロックナット (方向に注意してください)に挿入する:

クロスソケットレンチを使用して M4セルフロックナット を固定してからドライバーを使用して M4x25ネジ を締める。

注釈
セルフロックナットはしっかりと締まっていることを確認してください。車輪とステアリングコネクタが動かなくなるまでネジを締め、次にネジを少し緩めて、ステアリングプレートだけが動くようにする。したがって、接続が緩すぎない場合、ホイールは柔軟に回転できる。
同じ方法で他の前輪を組み立てるが、車輪のステアリングコネクタは前のものと対称であることを覚えておいてください:

これで2つの前輪の組み立てが完了した。
ステアリングパーツ¶
ステアリングリンケ ージと 1アームロッカーアーム を M1.5x4セルフタッピングネジで 接続します。
注釈
ギアから最も遠いアームの最初の穴(下の矢印で示されている)に挿入します。

注釈
それらをしっかりと締めてから、ネジを少し緩め、ステアリングリンケージが柔軟に動くようにする。
バッテリーホルダー¶
上部プレートを裏返しにする。 リボン を半分にカットする。プレートの穴に通す。方向に注意して、バッテリーを後で簡単に取り外すことができるように、プレートの一方の端を長くしてください。

2本の M3x8皿ネジ と M3ナット でバッテリーホルダーを固定する:バッテリーホルダーのワイヤーの方向に注意してください。

PCB組み立て¶
Raspberry Pi (TFカード差込済み)を8本の M2.5x8銅製スタンドオフ で組み立てから ロボットHATS を差し込む。
4本の M2.5x6ネジ で ロボットHATS を固定する。
PCA9685 PWMドライバ ーと モータードライバ ーを8本の M2.5x12ネジとM2.5ナット で 下部プレート に固定する。

後輪(走行)¶
4本の M3x25ネジ と M3ナット で2つのモーターを後部ハーフシャシーに組み立てる。モーターを配線で内側に配置するように注意してください。こうすると、回路を接続することを便利にする。

4つのM3ナットで後輪を組み立てる。

後輪 をモーターシャフトに合わせ、回転させてやさしく差し込む。

回路構築¶
電源を接続する¶

モジュールを接続する¶

サーボを接続する¶

モーターを接続する¶

完全な接続は次のように表示される。

これで、回路基板がすべて車に取り付けられ、配線が完了した。しかし、それでもまだサーボを調整する準備ができていない。まず、いくつかのソフトウェアのインストールを完了しなければならない。
ラズベリー パイを始めよう¶
この章では、まずラズベリーパイの起動方法を学びます。内容には、オペレーティングシステム、ラズベリーパイネットワークをインストールする方法とターミナルの開き方が含まれます。
注釈
完全なチュートリアルは、ラズベリーパイの公式サイト(https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up)で確認できます。
注釈
ラズベリーパイがセットアップされている場合は、この部分をスキップして次の章に進むことができます。
オペレーティングシステムのインストール¶
必要なコンポーネント
任意のラズベリーパイ |
パーソナルコンピュータ*1台 |
マイクロSDカード*1枚 |
ステップ1
ラズベリーパイが開発したグラフィカルなSDカード書き込みツールは、Mac OS、Ubuntu 18.04、Windowsで動作し、イメージをダウンロードして自動的にSDカードにインストールしてくれるので、ほとんどのユーザーにとって最も簡単なオプションです。
ダウンロードページにアクセスします。https://www.raspberrypi.org/software/。お使いのオペレーティングシステムに合ったラズベリーパイイメージャーのリンクをクリックし、ダウンロードが終了したら、それをクリックしてインストーラーを起動します。

ステップ2
インストーラーを起動すると、オペレーティングシステムが実行をブロックしようとする場合があります。例えば、Windowsでは次のようなメッセージが表示されます。
これがポップアップされたら、順次に「More info」と「Run anyway」をクリックした後、指示に従ってラズベリーパイイメージャーをインストールします。

ステップ3
SDカードをパソコンやノートパソコンのSDカードスロットに挿入します。
ステップ4
ラズベリーパイイメージャーで、インストールしたいオペレーティングシステムとSDカードを選択します。

注釈
初回はインターネットに接続されている必要があります。
そのオペレーティングシステムは、将来のオフラインでの使用のために保存されます(ラストダウンロード.キャッシュ、C:/Users/yourname/AppData/Local/Raspberry Pi/Imager/cache, )。そのため、次にソフトを開いたときには、「リリース:日付、あなたのコンピュータにキャッシュされた」という表示になります。
ステップ5
使用中のSDカードを選択します。

ステップ6
「Ctrl+Shift+X」を押すと、SSHの有効化と無線LANの設定を行うための「Advanced options」ページが開きます。この2つの項目は必ず設定する必要がありますが、その他の項目はあなたの選択次第です。このイメージカスタマイズオプションを常に使用するように選択することができます。

その後、下にスクロールしてWifiの設定を完了し、「SAVE」をクリックします。
注釈
wifi country は、ラズベリーパイを使用している国の`ISO/IEC alpha2 code <https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements>`__の2文字のコードを設定してください、以下のリンクを参照してください:https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements。

ステップ7
「書込み」ボタンをクリックします。

ステップ8
SDカードに何らかのファイルが保存されている場合は、それらのファイルを永久に失わないようにするために、まずそれらのファイルをバックアップすることをお勧めします。バックアップするファイルがない場合は、「Yes」をクリックします。

ステップ9
一定時間を待った後、書き込み完了を表す以下のウィンドウが表示されます。

Raspberry Piに電源を入れる¶
USBカードリーダーを取り出し、SDカードをRaspberryPiに挿入します。
完全に充電された2つの18650バッテリーをホルダーに入れ、バッテリーホルダーからのワイヤーを開発ボードに差し込み、スイッチをオフからオンに切り替えます。 また、最初のテストに時間がかかるため、RaspberryPiの電源アダプターを使用してカーキットに電力を供給することをお勧めします。
IPアドレスを取得する¶
Raspberry Piの電源を入れたら、そのIPアドレスを取得する必要がある。IPアドレスを知る方法はたくさんあるが、そのうちの2つを以下のように示す。
1. ルーター経由で確認する
ルーター(ホームネットワークなど)にログインする権限がある場合は、ルーターの管理インターフェイスでRaspberry Piに割り当てられたアドレスを確認できる。
システムのデフォルトのホスト名-Raspberry Pi OS は raspberrypi であり、それを見つける必要がある。(ArchLinuxARMシステムを使用している場合は、alarmpiを見つけてください。)
2. ネットワークセグメントスキャン
ネットワークスキャンを使用して、Raspberry PiのIPアドレスを検索することもできる。ソフトウェア、 Advanced IP scanner(Googleからダウンロード) を使える。
「スキャン」をクリックすると、接続されているすべてのデバイスの名前が表示される。同様に、Raspberry Pi OSのデフォルトのホスト名は raspberrypi であり、今ホスト名とそのIPを見つけてください。

SSHリモートコントロールを使用する¶
SSHを適用することにより、Raspberry PiのBash Shellを開くことができる。BashはLinuxの標準のデフォルトシェルである。シェル自体は、お客様とUnix/Linuxをリンクするブリッジである「C」で書き込まれるプログラムである。さらに、必要な作業のほとんどを完了することに役立ち。
Linuxまたは/ Mac OS Xユーザーの場合¶
ステップ1
Applications->Utilities に入り、 Terminal を見つけてから開く。
ステップ2
ssh pi@ip_address と入力します。 "pi" はユーザー名、"ip_address" はIPアドレスです。 例えば:
ssh pi@192.168.18.197
ステップ3
"yes" を入力します。

ステップ4
デフォルトのパスワード「raspberry」を入力する。

ステップ5
これで、Raspberry Piが接続され、次のステップに進む準備ができた。

注釈
パスワードを入力すると、ウィンドウに文字が表示されないが、これは正常である。必要なのは、正しいパスコードを入力するだけである。
Windowsユーザーの場合¶
Windowsユーザーの場合、いくつかのソフトウェアのアプリケーションでSSHを使用できます。 ここでは、PuTTY をお勧めします(Googleからダウンロードできます)。
ステップ1
PuTTYをダウンロードする。PuTTYを開き、左側のツリー構造にある Session をクリックする。 Host Name (or IP address) の下のテキストボックスにRPiのIPアドレスを入力し、 Port に 22 (デフォルトでは22)を入力する。

ステップ2
Open をクリックする。IPアドレスを使用してRaspberry Piに初めてログインすると、安全上の指示が表示されることに注意してください。Yes をクリックする。
ステップ3
PuTTYウィンドウに「login as:」と表示されたら、「pi」(RPiのユーザー名)とパスワード「raspberry」(変更していない場合はデフォルトのパスワードである)を入力する。

ここで、Raspberry Piを接続し、次の手順を実行する。
サーボ構成¶
また、このキットで使用されるサーボはソフトウェアによって調整され、他のサーボほど物理的な固定点がないため、ここではソフトウェアを介してサーボを構成する。最初に、構成の前にソフトウェアの実装を完了してください。
注釈
本章では、バッテリーを取り付けて電源スイッチをONにスライドすることを忘れないでください。
ソースコードを取得する¶
ソースコードはGithubリポジトリにある。git cloneでソースコードをダウンロードする:
cd /home/pi/
git clone --recursive https://github.com/sunfounder/SunFounder_PiCar-S.git -b V3.0
注釈
入力時に十分に注意してください。ユーザー名とパスワードの入力を求められた場合は、入力を間違えている可能性がある。それは発生した場合、Ctrl+Cを押して終了し、再試行してください。
スクリプトを介して環境をインストールする¶
インストールスクリプトを使用して、必要なすべてのソフトウェアと構成を実行することはできる。代わりに一歩一歩に実行する場合は、「付録1:手動によるインストール」の手順に従ってください。
sudo ./install_dependencies
注釈
インストールスクリプトは、必要な部品をインストールし、動作環境用に構成する。インストール中にRaspberry Piがインターネットに接続されていることを確認してください。接続しない場合は、失敗する恐れがある。
インストールを完了した後、Raspberry Piは再起動すると示す。再起動するには yes と入力してください。
サーボを90度に設定する¶
再起動後、次のコマンドを入力する:
picar
ここに3つのコマンドが表示される。

最初の1つは、前輪を組み立てた後に使用する サーボ調整 用の servo-install である。このコマンドを実行するとサーボが90度回転するため、ここではこのコマンドを使用する。
picar servo-install

注釈
「OSError:[Errno 121] Remote I/O error」エラーメッセージが表示された場合は、raspi-configを開く:
sudo raspi-config
次に、3 Interfacing Options → <P5 I2C> →<YES> → <OK>を選択してI2Cサービスを有効にします。 キーボードの上、下、左、右のキーを使って選択できます、最後は<Enter>キーを押して確認します。
コードの実行後、ロッカーアームをサーボに差し込む。ロッカーアームが時計回りと反時計回りに回転し、特定の位置で停止する。サーボが良い状態にあると示す。以下の条件のいずれかがサーボに発生した場合、サーボは不良である:
雑音あり、熱い。
サーボラインを抜いてロッカーアームを回すと「カ」「カ」「カ」のように聞こえるか、またはギアの駆動音が鳴らさない。
ゆっくりで継続的に回してください。
上記の状況のいずれかが発生した場合は、service@sunfounder.com に送信してください。新品に交換してあげる。使用または組み立ての過程で破損した場合は、公式ウェブサイト http://www.sunfounder.com にて購入してください。
車の残り部分を組み立てる¶
警告
アセンブリのプロセス全体で、servo-install コマンドを実行し続けてください。
2つの M2x8ネジ と M2ナット を使ってステアリングサーボを上部プレートに取り付ける(サーボワイヤーの方向に注意してください):

ロッカーアーム固定ネジ (最短)で ステアリングリンケージ を ロッカーアーム に接続する。

ホイールを上部プレートに入念に取り付ける。

次に、組み立てられたフロントハーフシャーシを、スタンドオフを穴に合わせている上部プレートに置く。

入念に持ち、上下を逆にして、4本の M3x8ネジ でスタンドオフと上部プレートを固定する。

これで、アセンブリ全体が完了した。おめでとう!
補正¶
サーボを補正する¶
以前にサーボを90度に調整するコマンドを覚えているか?今回、他の2つのコマンドについて説明する。
2番目のコマンド front-wheel-test は、組み立て後に前輪が柔軟に回転できるかどうかをテストするために使用される。このコマンドを実行すると、左右に駆動する。
picar front-wheel-test

前輪がまっすぐな状態では、前輪の方向が正確に前を向いていない場合がある。フロントシャーシの真ん中の線から明らかなずれがある場合は、サーボを組み立て直して、もう一度 servo-instal を実行する。ほんの少しのずれ(約0〜15度のような)であるならば、ソフトウェアによって調整することができる。
SunFounder_PiCar/picar フォルダーを開く:
cd /home/pi/SunFounder_PiCar/picar
sudo nano config

エディターでフォルダーの config ファイルを開く。いくつかのパラメーターが表示される。turning_offset の値は、前輪を調整するために使用される。デフォルトではその値は 0 となっている。前輪を 少し右に回したい 場合は、大きな値 に変更してください。左寄りにする には、小さい値 に設定する(負の数に設定できる)。
ただし、ホイールを過度に構成 DO NOT でください(-30〜30の推奨値)。そうしないと、サーボが動かなくなったり壊れたりする恐れがある。
Turning_offsetの値を変更した後、Ctrl+O を押して変更を保存し、Ctrl+X を押して終了する。picar servo-install コマンドを実行して、前輪のステータスを確認する。
picar servo-install
そして前輪が正面を向いていない場合は、ファイル config を数回編集する必要がある。通常3〜5回程度調整する必要がある。前輪の補正が完了したら、後輪の補正に進む。
モーターを補正する¶
2つのDCモーターの配線はランダムであるため、モーターのVCCとGNDがホイールに逆に接続され、コードで構成されているように車輪が逆方向に回転すべきときに、正面に回転してしまう場合がある。したがって、後輪を交互に加速と減速を同時に行う3番目のコマンドを使用できる。
picar rear-wheel-test

後輪の回転方向が画面と同じかどうかを確認してください。2つの車輪は2つのモーターによって別々に駆動されることに注意してください。一つが前方に回転し、もう一つが後方に回転する場合がある。その場合は、そのコマンドで逆回転する1つまたは両方のホイールを調整する必要がある。
cd /home/pi/SunFounder_PiCar/picar
sudo nano config

forward_A と forward_B は2つのモーターのデフォルトの回転方向を変更する。値は 0 または 1 のみで、時計回りと反時計回りの回転を表す。デフォルトでは、両方のパラメーターで 0 となっている。したがって、車輪が逆回転する場合は、ホイールの対応するパラメーターを 1 に変更するだけである。
Ctrl+O を押して変更を保存し、Ctrl+X を押して終了する。
コマンド picar Rear-wheel-test を再度実行して、コマンドに従って後輪が回転しているかどうかを確認する。
picar rear-wheel-test
config を PiCar-S の下のディレクトリの example にコピーする。
cp config ~/SunFounder_PiCar-S/example
車を装備する!¶
センサーモジュールのない車は、視覚や聴覚のない人と同じように武装していないため、周囲の環境を感じない。だから我々がこれからすること、車を装備させて、周囲の物を検出できるようにすることである。次に、PiCar を PiCar-S に変える。
正確にはPiCar-Sとは何か? -------データを収集して処理する機能を車に与えるいくつかのセンサーをPiCarに装備する。PiCar への センサーモジュール は、ゲームコンソール への カートリッジ である。それらはゲームの基本的なデザインに追加されるため、プレイが豊かになる。コードにも似ている。プロセッサはSunFounder_PiCarを使用して車の動作を駆動し、さまざまなモジュール( SunFounder_Light_Follower、SunFounder_Line_Follower、SunFounder_Ultrasonic_Avoidance)に対応するコードパッケージを読み出す。
以下の対応するモジュールの説明の配線に従って、希望のセンサーモジュールを組み立てる。トランスフォーマー を楽しんでください!

障害物回避¶
動作原理¶
超音波障害物回避モジュールは収集したデータを検出して、障害物からの距離を計算できるRaspberry Piに転送する。Piは前輪と後輪の方向と回転を調整するコマンドを送信して、障害物がある場合は障害物から離れてPiCar-Sを制御する。
手順¶
ステップ1 組み立て
①超音波モジュールと超音波コネクタを M1.4*8 本のネジと M1.4 本のナットで接続します。
②次に、超音波サポートに M3*10 本のネジと M3 ナットで接続します。
③最後に、M3*10 本のネジと M3 ナットでアッパープレートに取り付けます。

注意:指でナットをスロットに入れて下に保持する方が簡単です。
ステップ2 配線
以下に示すように、4ピンのアンチリバースケーブルで超音波障害物回避装置をロボットHATSに接続する。
超音波モジュールは5Vまたは3.3Vの電源を持っていることがある。ここでは、3.3V電源を与える。


ステップ3 テスト
適用する前に、まず超音波障害物回避モジュールをテストする。
cd ~/SunFounder_PiCar-S/example/
python3 test_ultrasonic_module.py

距離の測定がそれほど正確でない場合がある。大丈夫よ。この25kHzの超音波モジュールは汎用のものではないが、約30〜40度の水平検出範囲を持っている。したがって、測定された距離はそれほど正確ではないかもしれないが、その狭い範囲は障害物回避に便利である。さらに、Raspberry Piはリアルタイムのオペレーティングシステムではないため、不正確な時間計算は距離測定の精度にも影響する。ただし、この超音波モジュールは障害物を回避することに十分である。
ステップ4 旅に出よう!
これで、上記のテスト後の超音波モジュールの効果の概要が分かるだろう。超音波障害物回避のコードを実行してみよう。
python3 ultra_sonic_avoid.py
今のところ、PiCar-Sが起動した。車を地面に置くだけである。プログラムに従い、障害物を検出すると方向を転換する。障害物が近すぎる場合、後方に移動し、左/右に走行する。また、コードで障害物検出範囲のしきい値と後方に移動するしきい値を変更することもできる。

ultra_sonic_avoid.pyのコードの説明¶
ワークフロー全体

超音波モジュールはデジタル値、つまり高レベルまたは低レベルを返し、返された2つのレベル間の間隔時間を障害物までの距離に変換できる。したがって、ここではタイミングを求めるためにPythonでtimeモジュールを呼び出す。距離を計算する式は、超音波モジュールのドライバーに書き込まれる。メインプログラムは、対応するプログラムを呼び出して距離値を取得するだけである。
障害物回避機能のサブフロー

車が始動すると、障害物を検出して周期的に距離を測定したり、判断を下したり、行動を起こす。ここは三つのケースがある:障害物までの距離がしきい値と等しい場合、車は方向を変える。距離がしきい値を下回る場合、車は方向を変える前に後退する。距離がしきい値を超えると、続けて前進する。

機能説明¶
ua = Ultra_Sonic.UltraSonic_Avoidance(17)
Ultra_SonicモジュールでUltraSonic_Avoidanceクラスのオブジェクト ua を作成する。丸括弧内の数字は、モジュールのSIGが接続されているピン番号を表す初期パラメーターである。BCM命名方法が適用されているため、Raspberry Piの対応するピンは#17である。
back_distance と turn_distance の2つの定数は測距距離のしきい値を設定するためのものである。
while() loop
検出された距離が back_distance より小さい場合、車は後方に移動する。距離は back_distance と turn_distance の間にある場合、車は方向を変える(前述のパラメータ turning_angle で回転角度を設定でき、角度は正または負の数で、それぞれ左または右に曲がることができる。サーボの最大回転角度を考慮すると、回転角度は -90〜90度 であることを 注意 してください。そうしないと、サーボが焼ける恐れがある。)検出された距離が turn_distance より大きい場合、車は続けて前進する。
bw.backward()、後輪を後方に回転させる。bw.forward()、後輪を前方に回転させる。後輪駆動モジュールback_wheelsのこれら2つの機能は車輪の回転方向を設定するために使用される。
bw.set_speed(speed)、back_wheelsの関数で、ホイールの回転速度を設定します。数値が大きいほど(0〜100の範囲内)、ホイールの回転が速くなります。
fw.turn(angle)、back_wheelsの関数で、回転角度を設定します。 車がまっすぐ進むときの角度は90度です。 数を減らして左に曲がり、数を増やして右に曲がります。
fw.turn_straight()、前輪を直進する角度に戻す。
詳細:
back_distance と turn_distance
定数を変更して、車をオフに戻し、障害物回避中に希望の距離と角度で離れるようにしてください。
ライトフォロワー¶
動作原理¶
ライトフォロアモジュールは周囲の光源を検出し、データをプロセッサに転送する。プロセッサはデータを分析し、光源の方向を見つけるため、前輪と後輪の動きを制御してリソースにアプローチするコマンドを送信する。
手順¶
ステップ1 組み立て
M3*10ネジ と M3ナット を使用してライトフォロアをセンサーコネクタに接続し、2つの M3*10ネジ と2つの M3ナット を使ってそれらを車に組み立てる。指でナットを下に持ってください。

ステップ2 配線
以下に示すように、5ピンのアンチリバースケーブルでライトフォロアをロボットHATSに接続する。

注釈
なぜ5Vを3.3に接続するのか質問を持っているかもしれない。さて、ライトフォロア上のSTM8チップの動作電圧は2.7-5.5Vなので、ここで3.3Vに接続できる。5Vを5Vに 接続しない でください!Robot HATSのすべてのアナログポートは3.3Vで動作するPCA8591から導かれる。したがって、電圧が3.3V〜5Vの場合、出力値は常に255になるため、5Aに接続するとPCA8591が損傷する恐れがある。必ず 3.3V に接続してください。
配線は次の通りである:

ステップ3 テスト
まずライトフォロワーをテストしよう。
cd ~/SunFounder_PiCar-S/example/
python3 test_light_module.py

フォトトランジスタを懐中電灯の光点に当てる。光量を増やすと、より多くのLEDが点灯し、出力値が減少する。
ここで、青色の調整可能な抵抗器を回転させて、同じ光の輝度で値を変更できる。最良のステータスは次のとおりである:

LEDが1つしか点灯していない場合、出力値は255である。
ライトが最も明るく、すべてのLEDが点灯する場合、出力値は約10〜25である。
ステップ4 旅に出よう!
git submodule update --init
python3 light_follower.py

上記のコードを実行すると、車は次の light followingモードに入る。円を描くように右に曲がり続け、さまざまな方向の光の状態に関する情報を収集する。車をより広い場所に置いて待ってください。
補正が完了すると、車は一時停止する。ライトフォロアモジュールの電灯を照らすと、車は移動するときにライトスポットに追従する。

- light_follower.pyのコードの説明¶
ワークフロー全体
環境の光条件が複雑なので、感光センサーは実際に使用する前に補正する必要がある。環境光の輝度の情報を収集する。光源が周囲より明るい場合のみ、車は光に追従できる。

ここでは、補正後のライトとメインプログラム内のライトフォローを含む2つの主要な関数/モジュールを書き込む。
ライトフォロア補正機能のサブフロー
3つの感光性コンポーネントを個別に構成する必要があるため、何回に収集されたA0、A1、とA2に値を保存する3つのリストを設定する。次に、最も明るい条件での出力アナログ値である最小値を選ぶ。
使用する光源は環境光よりもはるかに明るいため、最も明るい条件での出力値を参照として使用してください。
さらに、しきい値を設定する必要がある-収集された光源の値と環境の値のギャップがしきい値を超えた場合、値を0または1に設定する。ここでは、[0,0,0]を使用して、トリガーされていないときの3つのフォトレジスターのステータスを表す。対応するフォトレジスタの検出値がしきい値よりも高い場合、「0」は「1」になる。したがって、3つの要素のリストに従って車の関連アクションを設定できる。
光が検出された場合、車は動き、それに追跡する。光が検出されない場合、車は一時的に停止し、旋回を続けて円を検出する。
ライトフォロアー機能のサブフロー

ライトフォロワーには3つのフォトトランジスターが含まれるため、そのステータスリストは8つのステータスを表す3つの要素で構成される(順列と組み合わせに基づく)。ここでは、これらのステータスに関連する応答を設定する必要がある。
3つの要素は3つのプローブのステータスを示す:1は検出された光を表し、0は検出されなかったことを表す。たとえば、[1,0,0]は光が左側のプローブによってのみ検出されることを示し、つまり、光源が車の左側にあり、車の応答アクションを左折として設定する。 [1,1,0]は光が左側と中央のプローブで検出されることを意味するため、その応答アクションも左折に設定する必要がある。対応するステータスに従って同様に右折するように設定する。光が検出されない場合、ステータスは[0,0,0]であるため、応答アクションを停止してスタンバイモードに戻るように設定する。

ここでは、大角度と小角度の回転を区別するために、別の変数(ステアリング角度)を設定してください。ライトが左側の中心にある場合(ステータス[1,1,0])、小角度の回転を適用する必要がある。ライトが左側の端にある場合(ステータス[1,0,0])、大きな角度の回転を適用する。
機能説明¶
コードを理解するには、上記のソフトウェアサブフローを参考にしてください。
以前にインポートされた light_follower_module、front_wheels、と back_wheel を含む3つのPythonモジュールがコードに使われる。これらはこのキットのドライバーであり、それぞれライトフォロー、前輪と後輪となっている。
関連クラスはここで定義されている。モジュールを適用して使用すると、関連するクラスのオブジェクトが作成され、ハードウェアのさまざまな部分がクラスオブジェクトによる関数を呼び出すことによって駆動される。
たとえば、ライトフォローモジュールの場合、lf という名前のオブジェクトを作成する:
lf = Light_Follower.Light_Follower()
それからクラスオブジェクトによって関数を呼び出す。
A0 = lf.read_analog()[0]
この関数 read_analog() は、3つのプローブの検出されたアナログ値を保存する3つの要素のリストを返す。ここでは、A0=lf.read_analog()[0], A1=lf.read_analog()[1] と A2=lf.read_analog()[2] を使用して、戻り値の3つの要素を変数A0-A2に個別に保存する 。
ここでは for() ループを10回使用する。つまり、補正モードで車が円を描くように走行すると、車はアナログ値を10回取得する。ここでは、最小値を参考している。より多くのサンプルが必要な場合は、ループの回数を増やしてください。
env0_list.append(A0) 関数によって、検出された値を各ループのリストに保存する。ループが終了すると、Pythonの組み込みリスト関数 reference[0] = min(env0_list) がリストの最小値を選ぶ。
lt_status_now = lf.read_flashlight()
この目的は3要素のリストを返すモジュールのステータスを読み取ることである。この機能は輝度が調節可能な懐中電灯によって引き起こされる問題を解決するために使用される。PWM方式による輝度変化で繰り返し点滅するので、この機能をドライバーライブラリーに追加し、光源が急に消灯したり、ON/OFFの比率で輝度が変化したりしても、車が何度も動いたり止まったりしないようにする。
fw.turn(turning_angle)
前輪ステアリング機能。前輪がステアリングに適用されている場合、メインプログラムはこの関数を呼び出す。パラメータは回転角度となっている。
bw.forward()
bw.set_speed(forward_speed)
後輪には2つの機能が必要である。最初の関数は回転方向を順方向に制御する(逆方向の関数は bw.backward() である)。2つ目は車輪の回転速度を設定すること。パラメータは速度の値である(範囲:0-100)。パラメータが大きければ大きいほど、ホイールの回転が速くなる。
ラインフォロー¶
動作原理¶
ラインフォロワーは周囲の環境でラインを検出し、データをプロセッサーに転送する。プロセッサはデータを分析し、前輪と後輪の動きを制御するコマンドを送信する。
手順¶
ステップ1 組み立て
ライトフォロアを M3*10ネジ と M3ナット でセンサーコネクタに接続し、2つの M3*10ネジ と2つの M3ナット で車に組み立てます。ナットを指で下に保持することをお勧めします。

ステップ2 配線
以下に示すように、4ピンのアンチリバースケーブルでラインフォロアモジュールをロボットHATSに接続する。

ステップ3 テスト
ディレクトリの例をチェックする:
cd ~/SunFounder_PiCar-S/example
i2c-toolsを介してi2cデバイスが認識されているかどうかを確認する
sudo i2cdetect -y 1

11がラインフォロワーのi2cアドレスであることが判明した。表示されない場合は、配線が正しくなく、Raspberry Piとのi2c通信も失敗したことを示す。次のステップの前に配線を確認する必要がある。
テストコードを実行する。
python3 test_line_module.py

注釈
ラインフォローモジュールをより適切に機能させるために、感度を調整してください。手順は次のとおりである:
モジュールを白い表面に置き、値を読み取る。白い表面に置き、値を読み取る。
差を計算し、最大値になるまで、次のモジュールのポテンショメーターを時計回りと反時計回りに回転させる。これでデバッグは完了した。
ステップ4 実行を開始する!
ラインフォロワーコードを実行する
python3 line_follower.py
プログラムの実行が開始されると、補正のヒントが画面に表示される。まずは白い表面でモジュールを補正する。ラインフォロアの5つのプローブすべてを白いボードの上に配置する。完了した補正のプロンプトが数秒後に画面に表示される。次に、黒い線の補正に進む。また、開始のプロンプトが画面に表示され、すべてのプローブが黒い線の上に配置される。完了した補正のプロンプトが数秒後に画面に表示される。
モジュールの補正がすべて完了すると、車を走らせることができる。プローブ付きのPiCar-Sをホワイトボードの黒い線の上に置くと、線自体に従って進む。
ラインフォローの追跡を作る方法¶
車が黒い線をたどるように追跡を作成するには、次の材料を準備しなければならない:
大きな紙、黒いテープのロール(黒い線)、ハードカードボード(サイズはトラックのサイズによって異なる)、または床や机などの平らな面。
1.紙をハードボードに滑らかに広げ、ボードまたは平らな面に貼り付けます。
テープを紙に貼り付ける。
作成のルール:
- 黒い線の幅:約18〜30mm、2つのプローブ間の距離、2つの隣接していないプローブ
の最小距離以下
- 2本の線の間隔:モジュール全体の幅である125mm以上で、2本の線を同時に検出した
ときに車が混乱することを防ぐ。
- 曲線の直径:138mm以上。前輪が左または右に45度回転する場合、車が曲がる経路の
半径はホイールベース(前輪の中心と後輪の中心間の距離)と等しくなる。カーブの半径が小さすぎると、車はカーブをスムーズに曲がったり、通過したりことはできない。
追跡のサンプルを以下に示す(元のマップファイルは github のフォルダー マップ の下にある):

line_follower.pyのコードの説明¶
ワークフロー全体
マイナスの環境要因の干渉を考慮して、実際に使用する前にラインフォロワーセンサーを補正しなければならない。

ここでは、ラインフォロワー補正とラインフォロイングを含む2つの主要な機能がメインプログラムに含まれている。
ラインフォロワー補正機能のサブフロー
ラインフォロア構成を実行するときは、センサーの上限と下限に近い、白色、次に黒色から始める。それから黒と白の平均値を基準値として使用し、検出された値が基準よりも高い場合、白でなければならない。検出された値が参照よりも低い場合は、黒になる。5つの検出器のステータスを5つの要素[0,0,0,0,0]で示す。

ライン追跡機能のサブフロー

ラインフォロー機能では、プローブの検出結果に応じてサーボの回転角度を異なるレベルに設定する。車の前の線が小さなカーブとして検出された場合、車は小さな角度で曲がる。大きいと車は大きい角度で曲がる。したがって、ここでは、a_step、b_step、c_step、d_stepの4つの角度回転定数を設定する。

もともと車が前進するとき、サーボは90度である。車を運転して左折するには、サーボを90度以上の角度にしなければならない。右折するには、サーボは90ステップの角度でなければならない。
特別な場合もある:車がコースから外れ、すべてのプローブが黒い線を検出できなくなった場合、以下のプログラムが続行される。

場合によっては、特にカーブの半径が非常に小さい方向(1)に車が曲がる場合、車が軌道を使い果たして黒い線を検出できない場合がある(2)。このような場合に応答プログラムがないと、車は再び軌道を追うことができなくなる。したがって、車を反対方向に後退させるように応答プログラムを設定し(3)、次に黒い線が再び検出されるまで元の方向に戻り、前に進む(4)。
機能説明¶
コードのロジックは、上記のフローチャートに示すとおりである。
インポートされた SunFounder_Line_Follower、front_wheels、back_wheels を含む3つのPythonモジュールがコードで使用されている。これらはこのキットのドライバーであり、それぞれラインフォロー、前輪と後輪となっている。
関連クラスはここで定義されている。モジュールを適用して使用すると、関連するクラスのオブジェクトが作成され、ハードウェアのさまざまな部分がクラスオブジェクトによる関数を呼び出すことによって駆動される。
次のモジュールと同様に、lf 上という名前のオブジェクトを作成する:
lf = Line_Follower_module.Line_Follower(references=REFERENCES)
パラメータは初期値であり、クラスオブジェクトを呼び出して関数を適用する。
lf.read_digital()
この機能はすべてのプローブのアナログ信号を読み取り、それをデジタル信号に変換するために使用される。信号が参照よりも大きい場合、対応するパラメーターは0になり、基準より低い場合、パラメーターは1になる。プローブは5つあるため、5つのパラメーターのリストを取得する。
fw.turn(turning_angle)
前輪回転機能。メインプログラムは前輪を回す場合にこの関数を呼び出す。パラメータは回転角度となっている。
bw.forward()
bw.set_speed(forward_speed)
後輪には2つの機能が必要である。1つは回転方向を順方向に制御する(後ろに回転するには、bw.backward())。2つ目は回転速度を設定する。パラメータは速度の値である(範囲0〜100)。パラメータが大きければ大きいほど、ホイールの回転が速くなる。
組合せ¶
したがって、このスマートカーは3つの異なる機能でスマートになる。しかし、1つのセンサーモジュールだけでは十分ではないと思っているか?それらのセンサーモジュールを1つに組み合わせてみてください!ここでは、実験を示す-参照用の障害物回避によるライトフォロー。
ライトフォロアを使用して車を走行させると、ライトを追うときに障害物にぶつかる場合がある。また、車を後退させるのはあまり便利ではない(ただし、配列が[1,0,1]である場合、車を後退させると設定したが、車が動いていて、ライトが時々正確にできない場合があるため、これらの値を取得することは難しい)。だから、板紙や足で車を後退させることもできるので、それがとても簡単である。
この例のプログラムを以下で確認してください。
まず、車のライトフォロアモジュールと超音波障害物回避モジュールを組み立てる。
ssh経由でコンピューターのRaspberry Piにログインし、ディレクトリに入る
cd ~/SunFounder_PiCar-S/example
コードを実行する。
python3 light_with_obsavoidance.py
動作原理¶
障害物回避をライトフォローよりも優先順位を高く設定する。車の前に障害物がある場合、障害物から離れて軌道に戻る。そうでない場合、車はライトを追従する。
車のライトフォローと障害物回避はセンサーモジュールに依存するため、2つのセンサーのステータスを個別に読み取る2つの関数を設定し、それらの関数から返されるフラグに値を割り当てる:state_light() と state_sonic()。
関数 state_sonic() は、戻り値は avoid_flag である。
車が障害物に 接近している 場合は、avoid_flag=2 を返す;
障害物に 近すぎる 場合は、avoid_flag = 1 を返す;
前方に障害物が 検出されない 場合は、avoid_flag = 0 を返す。
関数 state_light() では、戻り値は light_flag である。
ライトスポットが車の 前にある 場合、light_flag = 0 を返す;
スポットが 右側にある 場合、light_flag = 1 を返す;
スポットが 左側にある 場合、light_flag = 2 を返す;
スポットが 後ろにある 場合、light_flag = 3 を返す;
光点が検出されない 場合、light_flag = 4 を返す。
メインプログラム main() は、8avoid_flag と light_flag に従って対応するプログラムを実行し、avoid_flag は優先順位となっている。

付録¶
手動でインストールする¶
aptリストを更新する。
sudo apt-get update
python-smbusをインストールする。
sudo pip3 install smbus2
PiCarモジュールをインストールする。
cd~
git clone --recursive https://github.com/sunfounder/SunFounder_PiCar.git
cd SunFounder_PiCar
python3 setup.py install
I2Cを作動させる。
/boot/config.txtファイルを編集する
sudo nano /boot/config.txt
各行の前の "#" は、スケッチでは有効にならない以下の内容をコメント化するためのものである。I2C構成部分もデフォルトでコメント化されている。ファイルの最後に次のコードを追加するか、または関連する行の先頭にあるポンド記号 "#" を削除する。どちらもいい。
dtparam=i2c_arm=on
再起動する。
sudo reboot
モジュール¶
ロボットHATS¶

ロボットHATS は40ピンRaspberry Piに特別に設計されたHATであり、Raspberry Pi世代3モデルB、世代3モデルB +、世代4モデルBで動作し、GPIOポートからRaspberry Piに電力を供給する。HATSのルールに基づいた理想的なダイオードの設計により、USBケーブルとDCポートの両方を介してRaspberry Piに電源を供給できるため、バッテリーの電力不足によってTFカードが損傷することを防ぐことができる。PCF8591はI2C通信とアドレス0x48を備えたADCチップとして使用される。

1. デジタルポート:3線式デジタルセンサーポート、信号電圧:3.3V、VCC電圧:3.3V。
2. アナログポート:3線4チャネル8ビットADCセンサーポート、基準電圧:3.3V、VCC電圧:3.3V。
3. I2Cポート:3.3V I2Cバスポート
4. 5V電源出力:PWMドライバーへの5V電源出力。
5. UARTポート:4線UARTポートと5V VCCはUSBへのSunFounder FTDIシリアルと完全に連携する。
6. モーター制御ポート:モーター用5V、モーターMAとMBの方向制御、フローティングピンNC、モータードライバーモジュールとの連携。
7. スイッチ:電源スイッチ
8. 電源インジケータ:電圧を指示する-2つのインジケータが点灯:> 7.9V。1つのインジケーター:7.9V〜7.4V。インジケータ点灯なし:<7.4V。バッテリーを保護するために、インジケーターが点灯していない場合は、充電する際にこれを取り出してください。電源インジケータは単純なコンパレータ回路によって測定された電圧に依存する。負荷によっては検出電圧が通常より低下する場合があるので参考値としてご利用ください。
9. 電源ポート:5.5/2.1mm標準DCポート、入力電圧:8.4〜7.4V(制限された動作電圧:12V〜6V)。
PCA9865¶

PCA9685 16チャネル12ビットI2CバスPWMドライバー。独立したPWM出力電力をサポートし、並列接続用の4線式I2Cポート、PWM出力用の区別された3色ポートをより簡単に利用できる。

1. PWM出力ポート:3色ポート、独立したパワーPWM出力ポート、サーボへの直接接続。
2&3. I2Cポート:4線式I2Cポートは並列で使用できる。3.3V/5.5Vに対応
3. PWM電源入力:最大12V。
4. LED:チップとPWM電源入力用電源インジケータ。
モータードライバーモジュール¶
モータードライバーモジュールは低発熱の小型パッケージモータードライブである。

1.電源とモーター制御ポート:チップとモーターに電力を供給し、モーターの方向を制御するためのピンが含まれている。
2.モーターのPWM入力:2つのモーターの速度を調整するためのPWM信号入力。
3.モーター出力ポート:2つのモーターの出力ポート
ラインフォロワーモジュール¶


TCRT5000赤外線光電スイッチは高送信電力赤外線フォトダイオードと高感度フォトトランジスタを採用している。これは、オブジェクトのIR反射光の原理を適用することによって機能する。光は放射され、次に反射され、同期回路によって感知される。そして、光の強弱によって物体の有無を判断する。白黒の線を簡単に識別できる。
言い換えると、フォトトランジスタが黒と白のラインを通過するときの異なる伝導レベルにより、異なる出力電圧が生成される可能性がある。したがって、必要なのは、Atmega328のADコンバーターによってデータを収集し、I2C通信を介してマスターコントロールボードにデータを送信することだけである。
このモジュールは5つのTRT5000センサーを使用する赤外線追跡センサーである。TRT5000の青色LEDは発光管であり、通電すると人間の目には見えない赤外光を発する。センサーの黒い部分は受信に使用される。内部の抵抗器の抵抗値は、受信した赤外線によって変化する。
ライトフォロワーモジュール¶


フォトトランジスターはフォトダイオードとも呼ばれ、光を電流に変換するデバイスである。フォトンがPNジャンクションで吸収されると、電流が生成される。逆電圧が印加されると、デバイスの逆電流は光の輝度とともに変化する。光が強いほど、逆電流が大きくなる。ほとんどのフォトトランジスタはこのように動作する。
HATSのADCチップは8ビットのアナログ信号を受信して整数に変換し、信号をRaspberry Piに転送する。Raspberry Piはデータを分析して、最も明るい領域(光源)の方向を決定し、4つの車輪のステアリングと動きを制御して光源に近づける。
この実験では、光に焦点を当てた懐中電灯が必用する。少なくとも、モジュールの3つのフォトトランジスタに同時に到達するために、トーチのスポットサイズは大きすぎてはならない。まあ、あなたは小さなスポットサイズを得るために車の近くに懐中電灯を照らすこともできる。
超音波障害物回避モジュール¶

原理
Trigに10usの短いパルスを供給してレンジングを開始し、モジュールは40 kHzで8サイクルの超音波バーストを送信し、Echoにエコーを上げる。エコーはパルス幅と距離に比例した距離オブジェクトである。トリガー信号を送信してからエコー信号を受信するまでの間に、Time Intervalを通じてRangeを計算できる。
式:
または:
または:
エコーへのトリガー信号を防ぐために、60ms以上の測定サイクルを使用してください。
SunFounder SF006Cサーボ¶

SunFounder SF0180サーボは180度の3線式デジタルサーボである。60HzのPWM信号を利用し、物理制限はない。最大180度までの内部ソフトウェアのみによって制御される。
電気仕様:

著作権表示¶
このマニュアルのテキスト、画像とコードを含むがこれらに限定されないすべての内容は、SunFounder Companyが所有している。関連する規制と著作権法に基づき、著者と関連する権利所有者の法的権利を侵害することなく、個人的な研究、調査、享楽、またはその他の非営利目的でのみ使用してください。許可なく営利目的でこれを使用する個人または組織については、会社は法的措置を取る権利を留保する。
ありがとうございました¶
私たちの製品を評価した評価者、チュートリアルのための提案を提供したベテラン、そして私たちをフォローしてサポートしてきたユーザーのおかげで。私たちにあなたの貴重な提案は、より良い製品を提供する私たちのモチベーションです!
特定の感謝
レン・ヴィセソン
カレン・ダニエル
フアン・デラコスタ
さて、このアンケートに記入するのに少し時間を割いてもらえますか?
注釈
アンケートを送信した後、トップに戻って結果を確認してください。
著作権表示¶
このマニュアルのテキスト、画像とコードを含むがこれらに限定されないすべての内容は、SunFounder Companyが所有している。関連する規制と著作権法に基づき、著者と関連する権利所有者の法的権利を侵害することなく、個人的な研究、調査、享楽、またはその他の非営利目的でのみ使用してください。許可なく営利目的でこれを使用する個人または組織については、会社は法的措置を取る権利を留保する。