電子工作で大体何でも作れるようになった話

公開日: 2021年02月17日最終更新日: 2021年10月17日

壁を検知して止まるミニ四駆を作りました。

以前、壁を検知して止まるミニ四駆を作りました。

このミニ四駆の開発を通じて電子工作の応用範囲、自由度を大幅に上げることができました。
具体的には以下のことを学んで使えるようになったためです。

  • PICマイコンの使い方
  • 加速度センサー、測距センサーの使い方
  • モータードライバの使い方
  • 定電圧回路の使い方
  • デジタル回路の作り方
  • I2Cなどのチップ間通信

これらの基本的な知識を身につけて電子工作のレベルを上げるため、楽しみながらミニ四駆を作るというチャレンジをしてみるのはいかがでしょうか。

私自身この電子工作では、センサから入力を得て、マイコンで車体状態を推定し、モータードライバに出力して車体を制御する、という電子工作のフルコースを楽しみました。 また、モジュールを組み込むための回路設計とはんだ付けの練習にもなりました。 そして、ハードウェアとソフトウェアを統合して一つのシステムを作り上げる難しさと楽しさを実感しました。

※本記事は第一回RSP杯チキンレース 参戦レポートを再編集したものです。

作ったもの

これが製作したマシンです。コンパクトにまとめることができたと思います。

作ったマシン

サイクロンマグナムが好きなのでベースに選びました。 サイクロンマグナムのボディ内にすべてを収めたかったので、45mm x 30mm x 20mmのサイズに頑張って制御基板を詰め込みました。

それと以前から気になっていて、使ってみたいと思っていたPICを使ってみることにしました。

指先程度の小さなチップにCPUやメモリ、ADCやPWMの機能が詰め込まれていて100円程度で買えるって、もうワクワクが止まらなくて仕方がないです。 最近ではこれらのチップも性能が向上してきていますが、PCと比較するととても低スペックです。 このスペック制限の中でなんとかして機能を詰め込むというのも、またワクワクするところです。

部品の購入

いろんな部品があって迷いましたが、自分で選ぶことでどんな部品があるか勉強になりました。秋葉原の秋月、千石、マルツなどに何度も通うことになり、電子部品のお店にも少しだけ詳しくなりました。失敗して部品を壊すことが多いので、安いものは予備を含めて2~3個買っておくと何度も買いに行く手間が省けます(笑)。

部品一覧

部品は以下のものを選びました。 部品にリチウムイオンポリマー電池を使用していますが、液もれ、発熱、破裂、発火の危険があるため取り扱いに注意が必要です。代替可能な手段がある場合はそちらを使用したほうが良いです。専用のリチウムイオン電池充電器で充電し、保管時は防火性のケースに入れています(防火性の記載があっても燃えるものもあるので注意……)。使用時の出力も計算して設定しています。しかし、いま振り返るとリチウム一次電池のほうが良いと思います。

部品品名購入価格備考
シャシーサイクロンマグナム687円好きなので!
マイコンPIC12F1822110円選択理由は後述
ソケット8ピンソケット100円書き込みのために抜き差しするので必要
距離センサシャープ 測距モジュール GP2Y0E02A740円素直にレーザー測距モジュール買えばよかったかも
加速度センサMMA8452Q350円最低限の3軸センサ
モータードライバDRV8835300円お気に入り
定電圧モジュール低損失三端子レギュレーター 3.3V 1A TA48033S100円
電池(マイコン用)リチウムイオンポリマー電池 40mAh500円くらい?取り扱い注意!
電池(モーター用)リチウムイオンポリマー電池 280mAh500円くらい?取り扱い注意!
ユニバーサル基板AB-J11TH(43.18mm × 30.48mm)115円車体に収まるギリギリサイズ
抵抗、コンデンサ、ダイオード、LED中国製の安い詰め合わせをAmazonで購入100円(必要な個数だけなら)
ケーブルAWG20 耐熱ケーブル530円
コネクタSHコネクタXHコネクタ100円くらい
スズメッキ線スズメッキ線210円
スイッチ小型スライドスイッチ25円
デバッグ用LCDI2C接続小型キャラクタLCDモジュール 8×2行320円ブレッドボードで使用
合計4787円安くはない?

センサを選ぶ

センサー

今回の電子工作では壁との距離を測る必要があるので距離センサが必要です。主な距離センサとして以下のものがあります。

  • 超音波センサ:安価で測定距離も長いのですが、サイズが大きめ。
  • レーザー測距モジュール:測定距離が長く小型ですが少しお高いです。
  • 赤外線測距モジュール:測定距離は短めだが小型のものもあり比較的安価です。

超音波センサは車体に収まらず、レーザー測距モジュールは予算オーバーのため、赤外線測距モジュールでがんばります。 赤外線測距モジュールは4cm~50cmの距離しか計測できないため、フルスピードを出しているとセンサの範囲内に入ってからの減速が間に合いません。そのため速度を調整する必要があります。そこで距離センサの範囲内に入るまでは加速度センサを使って速度と距離を測定し、車体を制御する作戦にしました。 加速度センサは進行方向だけ観測できればいいので一番安い3軸のものにしました。

センサはアナログ、I2C、SPIなどで値を取るものがあります。今回選んだ距離センサはアナログ接続で、加速度センサはI2C接続です。I2Cは2本という少ない信号線に最大112個のデバイスを接続することができ、速度も100kbps、400kbps、1Mbpsと比較的高速でプログラム上も難しくなく、とても使いやすいです。I2CはSPIよりも扱いやすかったです(個人の感想です)。ブレッドボード上での検証を進める途中でシリアル出力用のピンを確保できなくなったため、I2C接続のLCDを追加しましたが容易に追加できました。

PICを選ぶ

PIC

以下の最低限必要な機能を満たす製品を探し、PIC12F1822を選択しました。

  • CPU Type: 8-bit PIC MCU
  • ADC Input: 2(0より大きい最低値)
  • UART: 1(デバッグ用)
  • I2C: 1
  • Max PWM Outputs: 1

PICの選び方についてはこちらの記事を確認してください。

PICKit3

構成部品ではないですがPICへのプログラム書き込みにはライターが必要です。今回はPICKit3を使います。正規品で5000円、Amazonで売っている互換品で2000円くらいです。ライターはちょっと高いですが、チップが安いのでたくさんモノを作るうちにもとが取れる、はず。

開発の準備

PICで動作するプログラムの開発にはMPLAB-X IDEを使用します。 セットアップ手順の概要はこちらの記事を確認してください

回路の設計と実装

ここからは実際にPICやセンサなどのモジュールを使って回路を作ります。

ブレッドボードモデル

まずはブレッドボード上で単体のモジュールを動作確認しながら使い方を確認していきます。いきなり複数のモジュールを組み合わせると問題が起きたときに原因の特定が難しいため、まず個別に確認を行います。

例として加速度センサの確認プログラムの記事の記事で、加速度センサMMA8452Qの動作を確認する場合について記載していますので、よければ読んでみてください。

モジュール単体での確認が終わったら、モジュールを結合しての確認を行います。 下の写真では、一通りの部品(PIC12F1822、加速度センサ、距離センサ、モータードライバ、モーター、バッテリー、定電圧回路、LCD)をブレッドボード上で接続した状態です。

BBM

PICで加速度センサの値を読み取ってY軸とZ軸の値をLCDに表示しています(動かしていないので0に近い値になっています)。同時に距離センサで計測した距離に応じてモーターの回転を制御しています。

ブレッドボード上ではモジュールをPICの対応するピンへ単純に接続していくだけで、大きな問題もなく動かすことができました。

基板実装

設計した回路をユニバーサル基板上に実装していきます。

まず、ブレッドボード上で確認した構成をもとに回路図を作成します。回路図の作成にはFritzingを使用しました。回路図と合わせて基板上での配置も確認できるため便利です。

基板に実装してからも少し手直しが発生しましたが回路図は以下のようになりました。

circuit

モーターの駆動でバッテリー電圧が下がってPICがリセットすると嫌だなと思ったのでモーター用と制御用の電源を分けています。通電確認用にLEDを入れたり、各モジュールのデータシートに従って抵抗やコンデンサを入れています。ダイオードは電流の逆流が心配だったので入れてみました。LCDはミニ四駆に組み込むときには接続しません。

この回路をユニバーサル基板上に配置するのですが、サイズに制限があるためどのように組み込むか苦労しました。Frizting上で作ってはやり直しを3回ほど繰り返して下の写真のような配置にしました。正直、このユニバーサル基板によく詰め込んだと思います(笑)。

基板に実装

しかしこのサイズでは空中配線(裏側)も仕方なし……。もっと小さくきれいに実装するために、次はプリント基板に挑戦したくなりました。はんだづけも精進が必要ですね。 配線したらテスターで通電チェックし、意図通りのところが接続しているかと意図しないところが接触していないかをしっかり確認します。 確認したにもかかわらず、意図しない配線が接触しておりMMA8452Qを2個壊しました……。

ミニ四駆の電池を入れる部分をくり抜いてこの基盤を収めます。距離センサ、スイッチ、バッテリーはコネクタで接続できるようにして、シャシーにボンドで接着しています。距離センサ前面はボディのウィンドウの部分をくり抜いて前が見えるようにしています。これでようやくハードウェアが形になりました。 基板の固定はシャシーにプラネジをボンドで付けて、ネジで止めるようにしました。車重は105g(バッテリー込み)、ノーマルモーターを使用しています。

ミニ四駆に取り付け

何度もシャシーに基板をつけたり取り外したりしているうちに配線がちぎれてしまうことがありました……。しっかりはんだ付けした上でボンドで配線の根元を固めるとちぎれにくくなります。

基板実装後にI2Cの通信がうまくいっているかわからない状態になったので、ロジックアナライザを導入しました。問題を物理的な配線か、ソフトウェアの問題化を切り分けられるので、I2Cなどの通信のデバッグにはロジックアナライザがあると便利です(オシロスコープもあると良い)。 使ったのは1000円程度の低価格ロジックアナライザですが、ちゃんとI2Cの信号を見ることができました。

制御ソフトウェアの開発

ハードウェアが完成したのでソフトウェアを仕上げていきます。

今回作成したプログラムの詳細は「PICプログラミングでセンサーとモータードライバを使いこなす」の記事に記載しています。

まとめと感想

レースマシン製作を通じてPICマイコンの使い方を覚えたことで工作の幅が広がりました。プリント基板と表面実装チップを使えばさらなる小型化も可能だと思います。また、回路設計をしたことがなくても必要な部品をデータシートどおりに接続すれば動く回路が作れるんだな、と回路に対するハードルが下がった気がします。

以下のことも学びました。

  • リチウムイオンポリマー電池は絶対必要でない限り代替手段を使うほうが安全で良い。
  • I2Cは2本の信号線に最大112個のデバイスを接続することができ、比較的高速でとても使いやすい。
  • 開発中は高性能のマイコンを使い、組み込み時にピン互換性のある下位のマイコンに切り替える。
  • MPLAB X IDE、特にMCCが便利。
  • データシートは必ず読むべし。
  • 回路もソフトと同じくブレッドボード上の単体試験から行う。
  • 配線したらテスターで通電チェック(身にしみた)。
  • ボンドで配線の根元を固めるとちぎれにくくなる。
  • I2Cなどの通信のデバッグにはロジックアナライザがあると便利。
  • センサの精度は確認する。加速度センサから求められる速度や距離は誤差が大きい。

関連文書

  • C言語によるPICプログラミング大全
    PICでやりたいことから逆引きできるリファレンスです。開発環境の解説やPICの一覧もついており、これがあればPICでやりたいことは一通り調べることができます。今回とても役立ちました。