第三項 アクチュエータの基本
電子工作創作表現(2019/5/9)
スライドPDF
評価について
- 前期・後期で1度ずつ提出の課題
- 出席も参考程度にとります
初回の時にふわっとしか話せておらず、前回質問されたので改めて書いておきます。
成績については前期と後期で1回ずつ簡単な課題を出そうと思っています。
課題メインですが、出席も一応取ります。
今日の内容
- LEDを使って、Arduinoからのデジタル/アナログ(PWM)出力
- ピエゾスピーカーで簡単な発音
- 各部品について解説
アクチュエータ=出力部品について
- センサーは現実で起きていることを「数値」に置き換える装置
- アクチュエータはその逆で、数値を何らかのエネルギーとして出することができる
前回のセンサーに続き、今回はアクチュエータをいくつか触ってみようと思います。
センサーは起きている事を数値=電気信号に置き換える装置であるということは前回話しましたが、アクチュエータはその逆で、電気エネルギーを別のエネルギーに変換するための装置です。
アクチュエータの例
- LED
- スピーカー
- モーター
代表的なものとしてはLED・スピーカー・モーターなどです。
LEDやスピーカーは小さいものならArduinoから簡単な制御ができるので、今日はこの2つを実際に触ってみますが、その前に先週の復習も兼ねてArduinoについてもう少し詳しく解説していこうと思います。
Arduinoの「ピン」
- アナログ入力ピン
- デジタルピン
- 電源・GNDなどその他システムピン
前回も使ったArduinoの黒いソケット部分ですが、穴のひとつひとつを「ピン」と呼びます。中には金属のバネが入っていて、これが回路を通じてArduinoのマイコンと電気的に繋がっています。
ピンにも種類があるのですが、大きくアナログ入力ピン・デジタルピン・その他のピンに分けて説明します。
アナログ入力ピン
- UNOではA0~A5までの6本
- 0~5Vまでの電圧を0~1023まで
まず前回使ったアナログピンですが、これはUNOの場合A0からA5までの6本のピンがあって、同時に使うことができます。
0~5Vまでの電圧を0~1023までの1024段階で計測することができます。
補足
- 電圧の高さは、基準電圧によって決まる。デフォルトでは5V
- AREFピンとanalogReference関数でより低電圧で細かい入力も可能
ちなみに補足すると、5Vというのはデフォルトの値なのでここは変更することが可能です。(5V以上には設定できない)
AREFピンに基準となる電圧を加えて、analogReference関数で設定を変更することで例えば0~1Vの範囲を1023段階で刻むなど、より細かいパラメータを見ることができるようにもなります。
デジタルピン
- デジタルピンは「入力」「出力」両方できる
- 入出力とも0(=0V)か1(=5V)の二種類しか区別することができない
- なんちゃってアナログ出力「PWM」が使えるピンがいくつかある
そして今日使うのが、13本あるデジタルピンです。アナログピンは入力だけなのですが、デジタルピンは入力と出力を切り替えて使うことができます。
このデジタルピンは0か1の2種類の状態にしかなれません。出力はArduinoの場合、0Vか5Vを出す事ができ、入力の場合は、2.5V周辺を境目に、それより高いか低いかで0か1の数値を取ることができます。
なので微妙な変化を取ることは難しいですが、スイッチを使う時なんかは6個しかないアナログ入力ピンを使わずにデジタル入力ピンを使えば良いわけです。
そしてこのデジタルピンには番号にチルダ(~)が付いているものもあります。これらのピンには「PWM」という技があって、コレを使うと「アナログ出力っぽい」ことができるのですが、それについては後述します。
その他のピン
- 外部の部品に電源を供給したい時に便利なVIN/GNDピン
- RESET・AREF・IOREF
- TXD・RXDはなるべく使わないようにするのがオススメ
最初のうち主に使うピンはデジタルピンとアナログピン、そしてPOWERと書かれている電源ラインのピンになってくると思います。
VIN/5V/3V3はそれぞれ所定の電圧が出ているピンです。5Vはそのまま5V、3V3は3.3Vの事で、VINは電源のプラスに直結していますが、USBを使っている限りはここからも5Vが出ています。
RESETピンはArduinoのプログラムを最初からやり直すためのピンで、自動で再起動させたい時などに使います。AREFは先ほど補足したピンで、IOREFはデジタル入力の基本電圧5Vが流れているだけなので、殆ど使う事はないでしょう。
あとは0番・1番ピンを見るとTXD・RXDと書かれたピンがあります。これはデータ通信用のピンでUSB側とも繋がっています。ここを埋めてしまうとプログラムを書き込めない場合があったりするので、使うピンが少ないうちは使わない方が何かと便利です。
補足
- ArduinoUNOはUSBじゃなくてもACアダプタから5~12Vの電源でも動作可能
- VCCが電源電圧、5V3Vはレギュレータに繋がっている
VINについてもう少し詳しく説明すると、ArduinoにはUSB以外に外部のACアダプタを接続するポートがついていて、こっちの電源で動作できるようにもなっています。電源からきた電圧は一度レギュレータと呼ばれる部品によって5Vまで落とされてArduinoのCPU部分に供給されるようになっています。
こちらは推奨最大12Vまで突っ込めるようになっており、高い電圧で動くモーターのような部品を1つの電源で動かしたい時などはこっちを使うと便利です。その場合5Vピンからは5V、VINピンからは12Vが出てくるということになります。
LEDを点灯してみる
結線&書き込み
それではLEDを点灯させてみようと思います。
図のように結線をしたら、以下のコードを記述して前回同様Arduinoにアップロードしていきます。
1秒ごとにLEDが点滅したら成功です。
digitalWriteというのが、デジタル出力をするための「関数」と呼ばれるものです。
Arduinoのプログラムについては次回じっくりやっていこうと思っていますが、ここではdigitalWriteの後のカッコに命令の詳細を書いていて、「9番ピンをデジタル出力のHIGH/LOWにする」という意味を持っています。HIGHの時には9番ピンの電圧が5Vに、LOWの時は0Vに変化します。
その次のdelayというのはディレイ=遅延という意味で、指定した数値のミリ秒分何もせずにプログラムを停止させます。ここでは1000ミリ秒な1秒止まってはHIGH、1秒止まってはLOWという具合に切り替えることで、LEDの点滅を繰り返しています。
void setup()
{
pinMode(9, OUTPUT);
}
void loop()
{
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(1000);
}
PWM出力をしてみる
デジタルピンからPWM出力を試す
点滅だけでは少し味気ないので、先ほど少し触れたPWMを使ってもう少し気の利いた表現をしてみましょう。今のスケッチは後で使いたいので、好きな名前で保存しておいてください。
保存したら新しいスケッチを立ち上げて、今度は以下のようなコードを書きます。少しかっこの数が多いので注意しながら書いてみてください。
正しくコーディングできると、LEDがふわふわと点滅します。
void setup()
{
pinMode(9, OUTPUT);
}
void loop()
{
analogWrite(9, (sin(millis() / 300.0) + 1) * 128);
}
PWM出力は仮想のアナログ出力
- Pulse Width Modulation(パルス幅変調)
- デジタルのHIGHとLOWを高速に切り替えて、間を表現している
- 漫画のトーンに近いイメージ
digitalWriteの時は消えてるか点いているかハッキリしてましたが、今度のプログラムではanalogWriteという関数を使いました。これは0~255の数字を指定すると、0~5Vの中間の電圧を指定できるものです。ここでは、Arduinoのプログラムが実行されてからの時間millis()関数と、三角関数であるサイン関数を使って0~255の間を上下するようなプログラムを書いています。
これはPWM(パルス幅変調)という方式で、デジタルのHIGHとLOWを目に見えないスピードで高速に切り替えながら、その割合を変化させることで中間の電圧がかかっているように振る舞うというものです。iPhoneのハイスピードカメラで見ると、チラつきが見えたりします。
漫画のスクリーントーンを想像してもらうと分かりやすいと思います。漫画雑誌の印刷は通常白か黒の2色だけで印刷しているのですが、黒をものすごく細かくまばらに点在させることで見せかけのグレーを表現しています。それと同じで、HIGH=5Vにしている時間をまばらにすることで「見せかけの低電圧」を作っているということです。
PWMはケース次第で使えない
- 綺麗な「アナログ出力」はコストが上がる
- PWMではないアナログ出力はDACと呼ばれる
そのため、LEDなどで諧調のある表現をする分には問題ないのですが、スピーカーやモーターなど一部の部品についてはこのPWMでは都合の悪い場合が出てきます。なので厳密な原理はまだそこまで理解しなくても大丈夫ですが、あくまで「それっぽいアナログ出力」として認識しておいた方が良いでしょう。
補足:何故こんな回りくどいやり方をするかというと、基本的にデジタルの世界であるマイコンでアナログ電圧を出力するというのは地味に部品数が多くなって、コストがかさむ傾向があります。ケース次第で使えないといいつつ、大抵のことはPWMで十分対応ができるので、アナログ出力はデジタルピンでPWMしてくださいよ、ということになってるんですね。
ちなみにPWMではなく純粋なアナログ電圧を出力する方法はDAC(Digital-Analog-Convert)と呼ばれます。DAWをやってたりすると聞く言葉かもしれません。電子工作ではこのDAC専用のICをArduinoと通信させて扱うというような事ができるので、それもいずれ解説していこうと思います。
圧電スピーカー
同様にスピーカーも試してみます
同じように、スピーカーも試してみましょう。先ほどと同じように9番ピンとGNDに、圧電スピーカーを接続します。スピーカーの場合抵抗は必要ありません。
LEDの時に保存したプログラムを再利用しますが、delayの値2か所を1000から1に変更します。とても簡単な方法ですが、圧電スピーカーから矩形波が出てきます。delayの値を変えると周波数が変わるので、音程が変わってきます。
void setup()
{
pinMode(9, OUTPUT);
}
void loop()
{
digitalWrite(9, HIGH);
delay(1);
digitalWrite(9, LOW);
delay(1);
}
部品解説
- カーボン抵抗
-
圧電素子
- LED
前回説明を省略してしまったカーボン抵抗とLED、圧電素子について説明しようと思います。
抵抗について
- 地味だけどよく使う「抵抗器」 一般的なのは「カーボン抵抗」
- 原則、部品には抵抗を付ける。流れる量は「オームの法則」で決まる
- I = V / R (電流=電圧÷抵抗)
電子部品の多くは、単体では殆ど抵抗が無い(0ではない)ように作られています。回路に流れる電流は電圧(V) / 抵抗値(Ω)で決まるので、そのまま電源やICに直結すると大量の電流が流れてしまいます。
条件によって流したい電流は変わってくるので、その都度必要な電流を流すための抵抗値を差し込んであげる必要があります。
直結について
- LEDを直結した図もたまにあるが、よくは無い
- GNDに向かう線は、原則一度は抵抗があるようにする
まれにArduinoにLEDを直接差してる図や写真があったりしますが、あまりよろしくありません。
最近のLEDが多少電流を多く流しても壊れにくくなったというのと、オームの法則とは別にArduinoのデジタル出力からは20mAしか流せないという条件からこういうことが出来てしまうのですが、LEDとArduino両方の寿命を縮めることになります。
GNDに向かっていく線をたどった時には原則として抵抗が存在しているように回路を組みましょう。(例外として抵抗内蔵型のLEDというのもあって、直接差して大丈夫なものもあります)
圧電(ピエゾ)素子
- 電圧をかけると形が変化する薄い膜状の素材(水晶など)が使われる
- この素材が、スピーカーのコーンに当たる役割を持っている
続いてスピーカーとして使った圧電素子について。これは電圧をかけると形が変化する膜状の素材が使われていて、それがコーンの代わりになって音を出すことができます。
そのためあまり繊細な表現はできませんが、簡単な電子音を鳴らすブザーなどによく使われています。
ピエゾは電流が流れない
- 電圧で押し込むようなイメージ
- コンデンサなど「電流が流れない」部品も一定数存在する
- 一般的なスピーカーはこの限りではない
先ほど回路には原則抵抗を入れるという話をしましたが、ピエゾには抵抗を入れませんでした。
これは何故かというと、ピエゾの線には電流が流れず、電圧が加わるだけで形が変化するためです。
このように電流が流れない部品も一部あって、コンデンサなどが代表的な例ですが、そういう時には特に抵抗が必要ない場合が多いです。入れても動きます。
ただし気を付けたいのが一般的なコーンの入っているスピーカーは全く違う原理で動くためこの限りではないので、電流のコントロールは必須です。
LEDについて
- Light Emitting Diode(発光ダイオード)の略
- 電流の入り口「アノード」と、出口「カソード」がある
- 電球と違い流れる方向は一方向
LEDは今や電子部品に限らず照明としても超定番の素子です。白熱電球や蛍光灯よりも少ない電流でより明るい光を出す事ができて、発熱も少ないので寿命も長いためです。
元々「ダイオード」という電気を一方向だけに流すための部品があったのですが、その性質を応用して発明されたので「Light Emitting Diode=LED」という名前がついています。
ダイオードなので電源側を接続する「アノード」と、GND側に接続する「カソード」があります。今日使った砲弾型のLEDの場合は大抵片方の線が長くなっていて、長い方がアノードというのが定番になっています。
補足:足の長さで分かるようになっているので、配線の都合で切ってしまったりすると分からなくなることが多くありますが、そういう時は中の金属部分を見ると分かることがあります。素子の小さい方がアノード側になっていることが多いので、大量に切って使ったりする時は参考にすると良いでしょう。
LEDの種類
- 色や形で非常に多くのバリエーションがある
- 大量に制御したい時にはNeoPixelことWS2812が便利
今日使ったのは単色の青色LEDでしたが、当然色々なLEDがありますし、1個の樹脂に3色のLEDが封入されたフルカラーLEDというのも存在します。
1個あたりの値段が100円しないものも多くあるので、色々買って試すだけでも楽しいと思います。
LEDをたくさん使ってコントロールしたい時に便利なWS2812、通称NeoPixelと呼ばれるLEDがあるのでそれの制御についても解説しようと思います。
次回予告
- Arduino IDEのコーディングについて
- TinkerCADを使ってやってみます
次回ですが、ArduinoIDEのコーディングについてやっていきたいと思います。
ソフトウェアが中心になるので、TinkerCADを使ってみようと思います。TinkerCADを使うにはアカウントの作成が必要なので、前もって登録しておいてもらえると助かります!