etwest2014 ヒートアップセッション3 組込み技術教育から見た電子工作
DESCRIPTION
Embedded Technology West 2014 / 組込み総合技術展 関西 ET WEST2014 ヒートアップセッション3 組込み技術教育から見た電子工作 ~組込みマイコン VS Arduino(アルデュイーノ) -その、似て非なるもの-~ http://www.jasa.or.jp/etwest/2014/conf/conf_hu3.htmlTRANSCRIPT
~組込みマイコン VS Arduino(アルデュイーノ) -その、似て非なるもの-~
トライアングルエレクトロニクス
久保 幸夫
カンファレンス/ヒートアップセッション
7月30日(水) 12:30-13:30 【ルーム5】
組込み技術教育から見た「電子工作」
カンファレンスの内容
• 組込み技術の入門として、Arduino(アルデュイーノ)などの電子工作用マイコンを使用することが増えている。また、hackathon(ハッカソン)などのイベントでの高速プロトタイピングツールとしても、良く使われている。初心者でも扱いやすく、手軽な反面、組込み技術教育の観点から見ると、落とし穴もある。組込みマイコンとArduinoの違いを把握して、組込みマイコン初心者からステップアップするための処方箋を示す。 と、大きく書いてしまった
久保幸夫 @tentenV3って誰やねん?
• 自称 IT&組み込み講師・コンテンツライター
– 電子工作マガジン、エレキジャック、日経ネットワーク、などの雑誌記事や書籍を書いている人
– JASAでは ETEC試験関連のお仕事担当
• 最近は 地元・大阪日本橋(にっぽんばし)に生息
– 日本橋ロボット連絡会幹事
– 日本橋ものづくり拠点 robobaのメンバー
昨年から3Dプリンタ作りに嵌り…
http://roboba.jp/
組込み技術の入門といえば・・・
昔々その昔 Z80マイコンなどを 自分で作る
シングルチップマイコンの ボードを使って実習 H8やPICマイコンがポピュラー
今どきは、ARM系
レゴマインドストーム
Arduino(アルドゥイーノ)など お手軽マイコンボード
Arduino(アルドゥイーノ)
Arduinoは、AVRマイコン、入出力ポートを備えた基板、C++風のArduino言語とそれの統合開発環境から構成されるシステム。 (Wikiより引用)
フィジカルコンピューティング
フィジカルコンピューティングとは? ものをコントロール、センシング いままで無かった、おもろい、楽しい、役に立つ、システムをつくる(考える) ちょっと先の未来を発想するワクワク感
Arduinoは、フィジカル コンピューティングのためのツール 新たな、モノ、サービスを 考えるための教育用訓練ツール
Arduinoは、フィジカルコンピューティングのためのツール
実体は、AVRマイコン(ATmega168など)を使った、マイコンボード
専門家以外でも、 マイコンを扱えられるように工夫
ハードウェア知らなくても大丈夫
使いやすい開発環境
多くのサンプルプログラム
けっこう丈夫なハードウェア!
Arduinoの開発環境
PC上で開発
C++言語風
簡単にサクサク プログラムを 作成できる
USBで基板に 書き込む
使いやすい
わかりやすい
Arduinoの開発事例
• 使いやすい開発環境 – スケッチと呼ぶプログラム
• C言語風のプログラム言語 でスケッチを記述
• 豊富なサンプルで、手早く プログラミング
赤外線リモコン の信号を解析する スケッチとモータの PWM制御の事例
赤外線リモコン の信号を解析する スケッチ
9 yukio kubo 2010
Arduinoは、使いやすい
開発環境の導入が楽
コストがやすい 2500円~
ブレッドボードでお手軽 電子工作
書籍など参考資料が多い
壊れにくい
いろんな意味で、敷居が低い 教える方も 楽
学校の教育現場でも
ハードウェアの敷居が低い 非電子系(情報系)の大学での授業・実習
芸術・アート系の作品つくり
電気電子系の大学や専門学校でも 教えやすい
基板が安い
壊れにくい
ハンダ付け要らない 半田付けの体験が↓
Arduinoと組込み教育
その1 Arduinoは組込み?
その2
Arduinoを使った 組込み技術の教育のポイント
その3 ブレッドボード電子工作のポイント
その1 Arduinoは組込み?
ArduinoはAVRの組込みマイコンを 使っている
『Arduinoを使いこなせる』 ⇒『組込みマイコンを使いこなせる』 ⇒『組込み技術を身につけている』
という、勘違いが発生しやすい!
例 Arduino のLED点灯プログラム
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
}
LEDは13番ピン
13番ピンを出力に
13番ピンをHに
実質 4~5行で、スケッチを書けてしまう
じゃ、組込みマイコンの場合
STM32ディスカバリの場合
STM32 Value line discovery
1000円のマイコンとして有名
ARMコア
STMicroelectronics のSTM32F100マイコンを 搭載した格安マイコン基板 インサーキットデバッガ・プログラマ内蔵(USB) 開発環境は、無償版を ダウンロード使用
Cortex-M3ベースFlashマイクロコントローラ
STM32ディスカバリの場合
開発環境の整備
ネットからのダウンロード・インストール
半日仕事
マイコンの初期設定に10数行
ハードウェアの知識が必要
LEDの点灯まで 準備が長い
LEDの点灯までの長い旅… //ペリフェラルのライブラリのインクルード
#include "stm32f10x.h"
//ペリフェラルの初期化用構造体を用意
GPIO_InitTypeDef GPIO_InitStructure;
int main(void)
{
volatile int i;
//ペリフェラルのクロックをオンにして起動
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
//ペリフェラルの初期化用構造体を初期化
GPIO_StructInit(&GPIO_InitStructure);
//ペリフェラルの初期化用構造体にパラメータを設定
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //pin8に設定
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //出力モードpush-pullに設定
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //スイッチング速度 50MHz(MAX)
//ペリフェラルの初期化関数の呼出し
GPIO_Init(GPIOC, &GPIO_InitStructure);
//ペリフェラルの操作
GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_SET);
while (1);
}
いろいろと準備
IOポートにクロック供給
8番ピンを指定 プッシュプル モードで出力
IOポートのクロックを50MHzに IOポートの
初期化
GPIOの初期化でモードを設定
ディジタル・デザイン・テクノロジ No.14 マイコンでハードウェア制御 超入門 久保幸夫著(2012年CQ出版)より引用
GPIOのモード設定には ハードウェアの知識が必要
最近のシングルチップマイコン
高機能・高性能 豊富な内蔵ペリフェラル
1個のピンが、複数の機能を持つ 適切に設定切り替える必要がある
省電力のため、 細かい有効、無効の設定
細かいクロック設定
ハードウェアの知識が必要
今どきマイコンを生で使うには int main(void) { <省略> 以下はEMI/EMC対策のため、いったん全GPIOのポートをアナログ入力に設定 /* Configure all unused GPIO port pins in Analog Input mode (floating input trigger OFF), this will reduce the power consumption and increase the device immunity against EMI/EMC *************************************************/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE); RCC_APB2PeriphClockCmd() 関数で、ペリフェラルバスB(APB2)に属するGPIOにクロックを与え、一時的に有効にしている GPIO初期化用構造体のメンバ変数への代入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIOの全ピンを指定 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIOのモードをアナログINに GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO Aの初期化 GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO Bの初期化 GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO Cの初期化 GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO Dの初期化 GPIO_Init(GPIOE, &GPIO_InitStructure); GPI0 Eの初期化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
ハードウェアの設定
メインクロック・サブクロック
プロセッサの設定
省電力の設定
割込みの設定
・・・・・
お膳立てしてから、やりたいことを記述
Arduinoと組込みマイコン
Arduinoは、やりたいことをすぐに 記述できる
細かい面倒なことは、横に置いて…
すぐに結果がでる
組込みマイコンは、 そこへ行くまでが大変
初心者は、途中で挫折! orz
Arduinoと組込みマイコン
Arduinoの 環境
組込みマイコン ハードウェア
スケッチ
C言語 プログラム
マイコンの初期化クロック・動作
モード 割込み・省電力
容易
難
プロとして組込みマイコンを扱うには
便利なAPI
ハードウェア
アプリケ―ション
めんどうな ところ ここを、きちんと意識する必要がある
RTOS
割込みハンドラ
デバイスドライバ
と、言っても・・・・
現場の先生の声
教える時間が足らない
学生のハードウェアのスキルが 年々、下がっている
学生のモチベーションが続かない
教える(若い)先生の方も、 ハードウェア苦手の人が増える傾向
ハードを基礎から教えることができない
少なくとも 少なくとも、 以下のことを理解させてあげたい Arduinoと組込みマイコンは違う!
プロとして組込みマイコンを使うには、 もっと細かいことが要求される
組込みで飯を食うには、ハードウェアの どろどろしたところも知っておきたい。
違いを解った上で、 使うとArduinoも立派な組込み技術の教材に
できれば、 ちょとだけでも、裸のマイコンを弄る体験も
Arduinoと組込み教育
その1 Arduinoは組込み?
その2
Arduinoを使った 組込み技術の教育のポイント
その3 ブレッドボード電子工作のポイント
Arduinoで組込み
なんだかんだ言っても、 Arduinoは教育現場で便利なツール
Arduinoを組込み教育のツールとして 使うときの注意点
Arduinoの工作記事
Arduinoを使った電子工作の記事は、
良くも悪くも
やってみた 的なものも多い
手早く動かすことを優先 細かい仕組み とかは、横に置いて
趣味の電子工作や 発想(アイデア)のトレーニング なら、それでよいが …
組込み教育のツールとして使う場合
行き当たりばったり やってみた ×
組込み開発の教育ツールとして使うには… 設計する
V字モデルの開発工程を意識させる
ドキュメントを書く 簡単なもので良い
テスト・評価を行う
簡単でも良いから、これらを体験
設計する・開発工程を意識させる
要求分析
外部設計
内部設計
詳細設計
実装
単体テスト
結合テスト
システムテスト
システム評価
デバッグ
V字モデル型開発モデルを体験
要求定義
古臭くてもいいから、設計させよう
ディジタル・デザイン・テクノロジ No.14 CQ出版 2012年 P.108より引用
例えば、状態遷移図を書いてみる
できれば、イレギュラーやエラーも考慮
ディジタル・デザイン・テクノロジ No.14 CQ出版 2012年 P.108より引用
状態遷移図をステートマシンとして実装
それをソフトに 落とし込む
ステートマシンをソフトで実装
古くさいけど、FPGAなどでハードウェア化するときに、移植しやすい
オブジェクト指向もいいけど
古くさいやり方の方が、わかりやすい
基本を理解するには、適している
と、五十路オヤジ(私)は考える
もっとも、学習ではなく、大規模開発や ソフトウェア部品の再利用…などを考えると今どきのオブジェクト指向などなど 必要かと
Arduinoの落とし穴 全ての処理をループで考えてしまう // the loop routine runs over and over again forever:
void loop() { hoge; delay(500); hoge; delay(200); hoge; }
組込みのプログラムは コンテキストスイッチにより、細切れのプログラム実行にな
ることがよくある
割込みハンドラ RTOSの タスクスイッチング
ぶつ切れ、非同期のプログラム
組み込みマイコンのプログラムには、 ループだけではなく、ぶつ切れ、非同期のプログラムもある 割り込み
RTOSによるタスクの切替え
RTOSまで、言わないが、 「割り込み」は(少しでも)体験して欲しい
Arduinoで割り込みを使うのは、 なにかと制約がある
できれば、 裸の組込みマイコンで体験して欲しい
Arduinoの落とし穴
変数
メモリが少ないので、charを多用
へんな癖がつく
ARM系Arduinoでは、この心配がない。
クリティカルセクション
割込み制御に制限
排他制御がやりにくい
デバックしくい(デバッガが無い)
Serial.println() ; でIDEヘ送信する手法が多い
Arduinoと組込み教育
その1 Arduinoは組込み?
その2
Arduinoを使った 組込み技術の教育のポイント
その3 ブレッドボード電子工作のポイント
Arduinoのハード拡張
シールド(専用の基板)で拡張
機能が固定
動作が安定
ブレッドボードで電子工作
お手軽 半田付け不要
自由に電子回路を試すことができる
不安定
半田付けの スキル必要
ブレッドボードで電子工作
半田付け不要 お手軽!
お手軽・半田付け不要のデメリット
定番のLEDチカチカをブレッドボードで 部品の極性をよく確認せずに接続
LEDから煙・・・・・
抵抗のカラーコードをよく確認せずに接続 わー明るい!
ブレッドボートが、熱で溶けている
トランジスタの ECB…
オペアンプのV+、V- orz
「やってみた」的に適当につなぐと…壊れる
LEDと抵抗
A K
黄 紫 茶 470Ω
先生!電源リセットしても直りません
デジタル世代(ネイティブ)は、 思いもかけないことを言う (この発想は、無かった!)
ハードウェアは一回壊れると、元に戻りません!中の半導体が焼けて壊れています!
当たり前と思っていたことを、最初に、きちんと説明しなければならない
でんしこうさく のやくそく(ちゅうい)
プラス(+)とマイナス(-)をまちがえない
でんせんはあかがプラス(+)、くろがマイナス(ー)
ぶひん の とりつけをたしかめる
ぶひんの しゅるい、いち、ほうこう、むきは あっている?
ショートさせない
でんきょくを、まちがってつなげないこと
あそんだら、でんち をぬいていく
プラス(+)とマイナス(-)を逆にすると部品が壊われます
部品の種類、方向、位置を確認してください
異なる電極を誤ってつなぐと、ショート(短絡)して、発熱等の危険があります。
事故防止のため、使用後は、電池を抜いてください
指導者・保護者のみなさまへ 1~2個の単3乾電池を使った電子工作は、電圧が低いので、危険性は高くはありませんが、念のため、子供たち
が上記の注意点を守っているか、常に確認をお願い致します。万が一、異常な発熱、焼けたような匂い等を感じられた場合、すぐに電池を抜いてください。
考えてみれば…
例えば、小学校の理科の実験教材
モータと電磁石
最初から、エナメル線、磨いてある
3個の内、2個は、コイル巻いてある
配線は、コネクタのようなもの
プラス、マイナスを間違わない
その教材の 教員向けの説明書き
限られた時間で、必ず動く…(失敗しない)
失敗しない実験って!
失敗しない、失敗をさせない実験
それって実験なの!?
そこで…
やってはイケない(失敗する)ことを 実際に、体験してもらう 小さな危険体験で、大きな危険を抑止する
例えば、ブレッドボードで電子工作する前に、LEDに乾電池2個(3V)つないで、 (電流制限抵抗なし)で、LEDが どうなるか、体験してもらう!
あかるい!熱い!切れた…くさっー プチやけどする子も出たので、講師が実演…
実演!
ここでも、実演しようかと、おもいま
したが、地下の会場で換気ができないので、
自粛させていただきます。
「GFOで異臭騒ぎ…犯人は自称…」 明日の朝刊に載りたくありません
ハードウェアは壊れる
ハードウェアは壊れることを キチンと説明する
その上で、電子部品の説明を キチンとする
キチンと配線する
ショートさせない
プラスとマイナス
端子、方向…
過電流・過電圧放熱
Ⓒシリコン教
不幸にして 逝ってしまったデバイス
できれば、正しく回路を組む
例 Arduinoなどのマイコンに、 アナログ出力の温度センサーをつなぐ
LM35 ANALOG IN
良くある回路! でも、正確に動きますか
温度 センサー
+5V
GND
Arduinoなどのマイコン
OUT
LM35 温度センサー
こんな3端子の温度センサー
こんな形の 温度センサー
良くある回路!が動かない
動くこともあるが、 思ったように動かないことも (精度が出ない、ずれが大きい…)
原因 AD変換器のインピーダンスミスマッチング
ブレッドボートからの長い線にノイズがのる
USB給電 PCの電源ラインからノイズ
VCC が +5Vよりも低い
などなど
例 H8マイコンのADCの場合
(4) 許容信号源インピーダンスについて 本LSIのアナログ入力は、信号源インピーダンスが10kΩ以下の入力信号に対し、変換精度が保証される設計となっております。これはA/D変換器のサンプル&ホー
ルド回路の入力容量をサンプリング時間内に充電するために設けている規格で、センサの出力インピーダンスが10kΩを越える場合充電不足が生じ、A/D変換精度
が保証できなくなる場合があります。単一モードで変換を行う場合で外部に大容量を設けている場合、入力の負荷は実質的に内部入力抵抗の10kΩだけになります
ので信号源インピーダンスは不問となります。ただし、この場合ローパスフィルターとなりますので、微分係数の大きなアナログ信号(例えば電圧の変動率が5mV/μs以上)には追従できない場合があります(図15.11)。高速のアナログ信号を変換する場合や、スキャンモードで変換を行う場合には、
低インピーダンスのバッファを入れてください。
日本語で書いてあるので(汗;)
要はインピーダンスとか
インピーダンスとか電気的特性とか、 アナログ的なことを、 ちゃんと考えて接続しなさい ・・・と書いてある
よくよく考えれば、 AD変換器って、アナログだ!
デジタル回路みたいに、線でつなげば 良いわけではない!
…で、
オペアンプでバッファを入れさせたが…
その他の要因
ブレッドボートからの線にノイズがのる 短くする、ツイストペア化、シールド線 結合(容量的、電磁的)しそうなものから 離す
USB給電 PCの電源ラインからノイズ VCC が +5よりも低い
外部電源の使用 バッテリ給電など
USB電源アイソレータ―
なんか、とっても、アナログな対策!
ブレッドボート向きの回路
半田付けの基板とブレッドボートの回路同じでいいの?
ブレッドボートは、 部品や線が抜けたりして、 不安定になりやすい
場合によっては、部品や線が抜けたりして、事故が起きることもある。
フィジカルコンピューティングの注意事項
例えば、モータドライバ
ディジタル・デザイン・テクノロジ No.14 CQ出版 2012年 P.118より引用
焼損!
鉄道模型の電動ポイント駆動
フェールセーフを考えた ブレッドボート向きの回路
ディジタル・デザイン・テクノロジ No.14 CQ出版 2012年 P.118より引用
断線してもHで安定
断線や接触不良を 前提に設定する
デメリットを逆手に取る
ブレッドボートのデメリットを 逆手に取って…
安全性
フェールセーフ
などを、考える教材にする
AC100VをON/OFFしたい
最近、 家電などのAC100VをON/OFFしたい との 要望があるようだ
ネットワークを介したリモート制御 IoT( Internet of Thing)
モノのインターネット がらみで 興味?
ネットを見ると、ブレッドボートでAC100Vを、扱う事例が見受けられる
危険です!
ブレッドボートでAC100V制御
感電!漏電!短絡!の危険があります
特に、非接地側(Line)を触ると 大変危険です!
接地側 (Neutral )は、大丈夫ですが…
少なくとも、接地側、非接地側がわかない人は、触っては危険です。
とは、言っても AC100Vを制御したい場合
こんな方法もあります
USB電圧検知電源タップ
USB電圧検知電源タップとは
USB電圧感知式の電源タップ例 (エレコム T-Y12USBA)
USBコネクタがついており、 AC100Vをオン・オフできる
USBの電圧を検知して、 AC100Vをオン・オフするタップ
mbed/ARM活用事例 (2012年 CQ出版) より引用
DOS/V機用USBケーブル 先がバラバラのタイプの DOS/V機用のケース用 USBケーブルを使用
USB検知連動タップの USBコネクタに接続
先バラ
安全なAC100V制御
USB感知式連動タップ ・エレコム USB電圧感知式PC 連動タップ T-Y12USBA ・サンワサプライ USB連動タップ TAP-RE8U (その他同等品)
USBコネクタ
4 3 2 1
USB標準Aプラグ(オス)
1 電源(+5V) 2 データ(-) 3 データ(+) 4 GND
非連動口
連動 口
PC
AC100V
オス
メス
AC100Vの機器
arduino
DOS/V機 ケース用 USBケーブル40cm Aメス―バラピン(オス)
黒 GND 赤 +5V 白 未接続 緑 未接続
緑・白 つながない
digital out
GND 黒
+5V 赤
GND(0V)
安全のために
紹介した 安全なAC100V制御方法を つかっても、 無人のリモート運用は要注意
キチンとリモートで監視する
裸の火(電熱器)とかは、危険です
万が一を考えて、別の方法でOFFにできる 手法を組み合わせる。
ブレッドボード電子工作のポイント
キチンと電子回路を組む
安全のためにも
アナログは、デジタルのように つなげばOK とはいかない
ブレッドボートを前提にした、 フェールセーフを考慮した回路
AC100Vを扱う場合は、安全な方法で
リモート運用は要注意
そのほか・・・
電波の事 2.4GHz凄いことに
ノイズの事
電源の事…
ネットワークのこと
セキュリティのこと 伝えたいことは、 やまほどありますが、またの機会に…
Arduinoと組込み教育 まとめ
その1 Arduinoと裸のマイコンの違いを意識する。
その2 開発工程や、設計、見える化、文書化などを意識すれば、Arduinoも、立派な組込み技術の教材になりうる!
その3 ブレッドボードを使うときも、キチンと電子回路を組む。フェールセーフや安全に注意する。
これらに、留意すれば、 Arduinoも良い 組込み教育のツールになる!
ご清聴ありがとうございました
お問い合わせ
講演依頼・執筆依頼等は、
Tw:@tentenV3 もしくは、FB または
http://triangle-ele.com/ のフォームから
大阪日本橋・ロボット連絡会 では勉強会を毎月開催しています 詳しくは、 http://roboba.jp/ まで