MAKER UNO + で始めるSTEM (4) ピンヘッダの信号

 MAKER UNO + のピンヘッダの並びや位置はArduino UNO Rev.3と同じです。大半のディジタルI/OはArduino UNOと異なります。Arduino UNOではATMega328のピンがそのままピンヘッダにつながっていますが、MAKER UNO +は、3.3MΩでプルダウンされ、MOSFETが途中に入り、LEDをドライブします。回路図はこちらです。


 MOSFETの入力ゲートには電流がほとんど流れません。つまり、D2端子には、MOSFETはつながっていないとみなすことができます
 Arduino UNOでD2を入力に使うとき、不安定な状態にならないようにpinMode(2,INPUT_PULLUP);とマイコンの内部にある推定50kΩの抵抗を有効にします。そのとき、プルアップ抵抗が有効になるように3.3MΩという高い抵抗値が使われているのかもしれません。ただ、プルアップを有効にするとHIGHを出力したことと同等になるので、意図せずLEDが点灯します。

 ピン配置はArduino UNOとほとんど同じです。(*)はダイオードを通してVccにつながっています。カラーのシールが付属していて、親切です。ただ、使わないピンが白色の帯なので、GNDと間違えやすいです。

MAKER UNO +

- SCL 0.7V

IOref 5.1V SDA 0.8V
Reset Aref 0V
3.3V 3.3V GND
Vcc 5.1V D13 0V
GND D12 0V
GND D11~ 0V
(*) 5.1V D10~ 0V
  D9~ 0V
   
A0 0V D8 0V
A1 0V D7 0V
A2 0.9V D6~ 0V
A3 0.6V D5~ 0V
A4 0.9V D4 0V
  A5 0.8V D3~ 0V
    D2 0V
    D1 Tx 2.5V
    D0 Rx 3.3V  

 電圧を測定するために、setup()とloop()に何も書かないスケッチをコンパイルして実行しました。赤色文字の電圧は、テスタで測った値です。Arduino UNOの電圧はこちらで調べました。

信号の使い分け

 A0~A5はアナログ入力です。スケッチではanalogRead()関数を使います。setup()内の初期化は不要です。

 D0~D13はディジタル入力とディジタル出力に使います。入力か出力かをpinMode()関数で指定します。この指定は、A0~A5にも有効です。したがって、ディジタル入出力は合計20本利用できます。

 ディジタル入出力ピンをDxと表示していますが、スケッチではDは不要で、数字だけを書きます。

 ~(チルダ)がついているポートはPWM対応です。ディジタル・ポートなのに、analogWrite()関数が使えます。出力は0と5Vのディジタル値ですが、約500HzのON/OFFのデューティ比を変化させ、平均化されたアナログ電圧を出力できます。人の目は60Hz以上の高速な繰り返しは連続した明るさとして認識するので、LEDの明るさ調整などに応用できます。

 IOref は、通常、シールドを載せて使うとき、本体が何ボルトで動いているかを知らせるための端子です。Vccにつながっているので5V端子として利用できます。

 Aref信号は、A0~A5のアナログ入力を使うとき、A-D変換の基準電圧を外部から与えるときに使う端子です。基準電圧は3種類選べ、デフォルト(なにも指定しないとき)はVdd=5Vです。一つは内蔵の安定度の高い1.1Vです。最後はArefにつながった電圧です。5Vの電圧はUSBの電圧ですから、つなぐたびに、そしてPCを変えれば大きく変化します。
 基準電圧が変化すれば、同じスケッチを動かしても得られる結果は異なります。けれど、最後の桁が異なっても必要なデータの誤差範囲ならば、シビアに考えなくても大丈夫な使用例も多くあります。

周辺デバイス

 マイコンは、単純なON/OFFを行う汎用I/Oポートをたくさん持っています。汎用(はんよう)というのは、いろいろな使い方ができるからです。汎用I/OをUARTと同じようなタイミングでON/OFFして制御すれば、SoftwareSerialと呼ばれたりします。
 それ以外に、センサと通信をするための手順(プロトコル)をサポートしたデバイスが利用できます。非同期シリアル通信がUART、低速なセンサなどはI2C、高速なセンサなどはSPIです。

 D0(Rx)とD1(Tx)はマイコン内部のUARTモジュールにつながっています。調歩同期式シリアル通信は、信号が流れていないときはHIGHです。スタート=LOWになると、通信が開始されます。5~8ビットのデータとパリティ・ビットが送られ最後にストップ・ビットを送った後は、またHIGHに戻ります。
 1文字送るのが一つのシーケンスになっています。通信はデータとクロックがペアです。UARTのクロックは、マイコンのボーレート・ジェネレータを設定して利用します。

 LOWはATMega328では0.3*5.0V=1.5V以下を指し、HIGHは0.6*5.0V=3.0V以上を指します。では、実装したD1端子の2.5Vはどちらなのでしょうか。ATmega328はCMOSで作られています。おおくはVdd/2の電圧がHIGH/LOWのスレッショルド(しきい値)です。そうであっても2.5Vは判断のしにくい中途半端な電圧です。
 UARTのスタート・ビットはHIGH-LOWへ変化して既定の時間経過したときにLOWであれば、通信を開始します。2.5VはHIGHと判断されれば、正しく調歩同期通信は動作すると思われます。ちなみに、Arduino UNOのD0/D1ピンは5Vです。

 SDA/SCLはI2Cの信号です。Arduino UNO Rev.3からピンは独立していますが、SDA=A4、SCL=A5と内部でつながっています。利用時に、この二つの信号は電源へ数kから10kΩの抵抗でプルアップします。Arduino UNO、MAKER UNO + ともにプルアップ抵抗はボード上にはありません。センサなどのデバイスをつなげるときに追加します。

 SPIは、MISO(Master In Slave Out)、MISO(Master Out Slave In)、SCK(Serial Clock)、SS(Slave Select)四つの信号を使います。MISOは12番、MISOは11番、SCKは13番で、SSは任意のディジタル・ポートを使います。setup()内でpinMode(SSピン番号, OUTPUT);を実行しておき、実際の転送では、SS信号をLOWにしてSPIの転送が始まり、転送終了後にHIGHに戻します。

コラム MOSFET

 MOSFETの読みは、モス・エフ・イー・ティーですが、モス・フェットとも読み、現在主流の電界効果トランジスタです。良好なスイッチング動作を期待する回路で、バイポーラ・トランジスタより使われます。日本では、古くから小電力(小信号)を扱うときバイポーラ・トランジスタが使われることが多く、MOSFETの製品はほとんど存在しません。日本では、MOSFETは中・大電力用途の製品が中心です。また、家電業界の応用が多かったので、ロー・ノイズ・アンプやラジオのフロントエンドなどの高周波用増幅がメイン用途のJ-FETがたくさん作られました。
 海外では小信号を扱うとき2N7000がよく使われます。チップ・タイプはBSS138が多いようです。こちらはゲートの駆動電圧Vth(gs)が低めなので、ロジック回路に直接つなげて駆動できます。秋月電子通商などで扱っているので入手しやすいです。

コラム LED

 半導体の素材がもつ固有のバンドギャップによって放出される光の波長が異なるのが、LEDの色の違いに現れます。pn結合の半導体なので、ダイオードです。歴史的に、光の輝度を高くするように研究開発が行われたため、素材も変化しました。昔は赤色と緑色の順方向電圧Vfは約1.7Vでしたが、最近の赤色は約2.0~2.3V、緑色は約2.0V(3Vくらいのもある)です。青色(白色)は3.0V前後です。電流が多く流れるほど低くなる傾向があります。

 20年前に比べると、「高輝度」とデータシートにうたわれていても、実際の明るさはとても異なります。ATMega328のI/Oは20mAの電流を流し出したり吸い込めます。古いLEDは20mA流さないとあまり明るくありませんでした。今は、数mA流すだけで十分な明るさが得られます。

 古い書籍では、信号確認用の小信号回路に、赤色LEDをつないで電流制限抵抗の値を求めるとき、10mA以上の電流を流し、Vf=1.7Vで計算している事例があります。最近のLEDを使うときは、電流は1もしくは2mA、Vfは2.0Vで計算するのが適切です。

 具体的に計算してみましょう。Vf=2.0VのLEDを使い、電源電圧は5.0V、電流を2mA流すとします。オームの法則から、

   電流制限抵抗 = 5.0 / 2 = 2.5 [kΩ]

 電流を1mA流すのであれば5kΩです。したがってE-6系列の抵抗値の中から3.3kΩを選びます。

 昔の書籍のように、20mAを流すような用途には、マイコン端子から直接LEDを駆動するのではなく、MAKER UNO +のようにMOSFETで駆動しマイコン本体の消費電流を下げるのが、最近の主流です。BSS138でも10倍の200mA程度を扱えます。

コラム VddとVcc

 電源電圧のプラス側を表す記号にVDDVCCの2種類があります。Cはコレクタ、Dはドレインという説があります。CとDは本当は大文字ですが、本Webでは下付き文字の書式を指定する手間が多大なので、小文字で代用しています。例えば、電流増幅率hfeのfeは大文字FEだと直流、小文字feでは交流を意味するのでうかつに小文字にしてはいけないのですが。イタリック体は変数だということを明確にするために使われますが、本Webでは指定が大変なので、立体のままです。

 VccとVddはあくまでも通説なので、メーカによっては、現代の製品がほとんどCMOSにかかわらずVccを使っている会社もあります。

 マイナス側は、VeeとVssです。接地していればGNDになります。
 回路図によってはV+、V-を使うこともあります。

コラム I2C

 フィリップス(現NXP)が特許をもっていたI2Cは、ATMega328ではTWIインターフェースと呼ばれます。PCの世界ではSMBUSと呼ばれます。
 読み方はアイ・スクエアド・シーらしいですが、筆者はずっとアイ・スクエア・シーと読んでいました。

前へ

vs Arduino UNO WiFi (2) 内蔵センサIMU

次へ

vs Arduino UNO WiFi (3) 温湿度センサHTU21D