ETWEST2014 ヒートアップセッション3 組込み技術教育から見た電子工作

Preview:

DESCRIPTION

Embedded Technology West 2014 / 組込み総合技術展 関西 ET WEST2014 ヒートアップセッション3 組込み技術教育から見た電子工作 ~組込みマイコン VS Arduino(アルデュイーノ)  -その、似て非なるもの-~ http://www.jasa.or.jp/etwest/2014/conf/conf_hu3.html

Citation preview

~組込みマイコン 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/ まで

Recommended