771_8bitのアイコン画像

【Lチカの先へ】データシートを読んでセンサーをArduinoで使えるようになる最短ルート

771_8bit 2022年01月03日に作成  (2022年01月12日に更新) セットアップや使用方法 セットアップや使用方法

【Lチカの先へ】データシートを読んでセンサーをArduinoで使えるようになる最短ルート

はじめに

センサーの専用ライブラリに頼らず「データシートを読んでセンサーをArduinoで使える」人が、初心者を同じレベルまで電子工作ができるように教育することを想定しています。Lチカまではたくさん資料があるけど、そこから先はどうすれば…と思って自分のメモとして書きました。そのため、初心者の人がこれを読んで自力で学ぶには不親切かもしれません。目標のセンサーは秋月のセンサーモジュールぐらいのつもりです。

質の高い書籍や資料は存在しますが、何か一つの資料だけで完璧に習得できるということはまずなく、完璧な入門書を使うとその先が分からなくなるということもあるので、様々な資料を使いながら電子工作に慣れていくというのが良いかなと思います。その主軸として、特に以下のことを考えてこのプランを作りました。

  • 本やネットの内容をコピーするのではなく、自分でものを作れること
  • 問題を解決する能力をつけること、問題を回避する能力をつけること
  • 自分でさらに知識をつけることができる基盤を作ること

やること

やることを順番にまとめて、学べることを箇条書きにしました。

魚ではなく魚の釣り方を教えるイメージで以下の通りにすれば、電子工作がある程度できるようになると思います。

チカチカ

チカチカ(非安定マルチバイブレータ)を回路図を読んで作ります。できればコンデンサや抵抗を変えて周期の変化を確かめたり、波形をオシロで見せつつ仕組みの解説をしたいところです。

  • 回路図の読み方
  • ブレッドボードの使い方
  • はんだ付け
  • 電子回路
    • LEDと保護抵抗
    • コンデンサ(RC回路)
    • トランジスタのスイッチング

Lチカ

まずはLチカでArduinoの基本的な使い方を学びます。プログラミングも初心者の場合はここからゆっくりプログラミングについて教えます。

  • Arduino IDEの使い方
  • デジタル出力

スイッチでLEDのON/OFF

スイッチを押したらLEDが光るようにします。

  • デジタル入力
  • プルアップ・プルダウン

PCとシリアル通信

スイッチが押されたらPCにシリアル通信をするプログラムを書きます。printデバッグ用に早めにこれをやると良いかなと思います。押されている間ずっと通信するのではなく押された瞬間に通信するプログラムにします。

  • PCとのシリアル通信
  • スイッチのチャタリング

可変抵抗でLEDの明るさ調整

可変抵抗で分圧回路を作り、それをADCで読み取ってLEDの明るさを調整します。LEDの降下電圧を確認するため、DAC→PWMの順で実践します。PWMの出力波形をオシロで見せられると良いです。

  • 分圧
  • ADC
  • DAC
  • PWM

圧電ブザー

LEDだけだとつまらないので音を出してみます。圧電ブザーはミニゲームでも活用できます。

  • PWM

サーボモータ

PWMを素直に書いたあと、Servoライブラリを導入すればライブラリについても学べます。

  • PWM
  • ライブラリ

スイッチでLEDの点灯/点滅

スイッチでLEDの点灯/点滅を切り替えられるようにします。まずはタイマや割り込みを使わないでプログラムを組んで、delay中はスイッチの判定ができないことを確認します。タイマと割り込みについて解説した後、この2つの方法を試します。

  • スイッチの入力をピン変化割込みで検知する方法
  • 点滅をタイマ割り込みで行う方法

学ぶのは以下の内容です。

  • タイマ
  • 割り込み

LEDとスイッチでミニゲーム

数個のLEDとスイッチのセットで作れるミニゲームを実装します。光ったLEDに当たるスイッチを制限時間内に押すモグラ叩きゲームがちょうど良いと思います。これに圧電ブザーを加えてみても良いです。ここでじっくり自力でプログラムを組むことが重要です。

  • 変数や制御文などの"プログラム"
  • デバッグ

部品を壊す

簡単な部品を壊す経験として、LEDを保護抵抗無しで電源(保護回路あり)に直接つなげます。電解コンデンサの逆接は危険ですが、LEDの破壊程度であれば何かカバーを被せれば十分安全に試せると思います。

  • 絶対最大定格
  • 故障モード
    2022/01/06追記
    LEDの破壊の様子はYouTube等で見ることができます。実験の前に動画を見て危険だと思われる場合は、LEDの破壊の代わりに適切な抵抗を挟んだうえでヒューズを溶断してみるのをおすすめします。

センサ(ADC)

いきなりシリアル通信は難しいので、ADCで読めるセンサを使います。

  • データシートの読み方

センサ(シリアル通信)

シリアル通信(ArduinoのSerial(UART)に限らず)で読めるセンサを使います。Arduinoのコードをなんとなく追うのではなく、まずシリアル通信のプロトコルについてしっかり理解して、どんな信号がやりとりされているのかを把握するべきです。その後Arduinoの関数の役割を理解すれば詰まることなく進められるはずです。

  • シリアル通信

必要な知識・スキル

知識そのものを自分で書くと時間が足りないので、いい感じの資料をまとめました。もちろん全部覚えてもらうことはないです。

ほぼ全ての基礎
電子工作のための電子回路基礎
Arduinoをはじめよう 第3版
組込みエンジニアの教科書

実際の製作

プログラミング

Arduino・マイコン

公式Arduinoリファレンス
garretlab
NOBのArduino日記!
spiceman

一般の回路・部品

単純な技術以外のスキル

問題解決・問題回避

もの作りで一番必要なのは失敗が許容される状況だと思います。無計画でいいというわけではなく、大きな失敗を避けること、失敗してもそれを解決できることが重要です。(チームの場合は人間関係がゴタゴタしないことも重要)

  • 問題回避
    最初から完璧を目指して全部作って最後に動作確認をすると、問題の原因特定が困難です。ある程度の機能を作ったら動作テストを心がけ、細かい失敗を前提とした製作をします。Done is better than perfect.
  • 問題解決
    経験があれば問題から直接原因を推測したり、よく観察してすぐに原因を特定できたりしますが、慣れないうちは以下の手順を丁寧に行うことをおすすめします。
    1. 分割する
      動かない理由を特定するには、当然ですが動く理由をしっかり理解していることが必要です。そのうえで、仕組みを小さな構成要素に切り分けて一つずつ調べていきます。仕組みの最初から最後まで順番に調べていくのは手間が手間がかかり、どの程度細かく分割すればいいか分からなくなるので、二分探索の要領で進めていくと良いです。
    2. チェックする
      切り分けた各部分について、以下の方法で問題ないか調べていきます。
      A 想定通り動作しているか調べる
      B 条件を変えて調べてみる(対照実験)
    3. 分からないことはググる/人に聞く
      質問の仕方

LEDが光らないなら、まずマイコン側と回路側で分割します。テスターを使ってマイコンから正しい電圧が出ていることが分かれば(A)、問題は回路側にあることになります。LEDが故障しているなら、LEDを交換する(B)ことで原因にたどり着くはずです。これは単純な例ですが、複雑な問題も同じように解決できます。

データシートの読み方

読んで慣れるしかない?
なにかアドバイスあればコメントください。

公式ドキュメントの扱い方

公式サイトと他のサイトはそれぞれどちらも長所短所があるので、使い分けを意識します。

  1. 他のサイトを見て全体像を把握する
  2. 公式サイトにたどり着く
  3. まずサイトの構成を知る
  4. 必要な所を読む
  • 公式ドキュメント(公式リファレンスとも)
    その技術や製品そのものについて書いてある
    それの仕様,使い方をちゃんと学べる
    信頼性が最も高い(外部サイトは情報が古いかも)
  • 他のサイト
    • それを外部の視点から書いたもの
      他の技術や製品と比べて書いてある
      外から見るので全体像が掴める
    • 公式に書いてないことを書いたもの
      バグは外部サイトに書いてある事が多い
    • 公式の記述を要約しているもの
      分かりやすいけど結局公式のトップページが神

最後に

おすすめの工具・測定器を布教して終わりにしたいと思います。

  • はんだごて FX600
  • こて台 633-01
  • こて先 2.4D型 T18-D24
  • ハンダ吸取器 SS-02
  • はんだ吸煙器
  • オシロスコープ HDS272S

最後まで読んでいただきありがとうございました。

ログインしてコメントを投稿する