2015年09月27日

番外編 -7セグメントLED基板の作成

シリアル通信を使って何かする予定でしたがまだ何をするか決めていないので、とりあえず今回は7セグメントLEDのArduino用シールド基板を作ります。
シールドとはArduinoの上に取り付けられる基板のことです。回路をシールドとして実装すれば、シールドを抜き差しするだけで回路を変更することが可能です。
7セグメントLEDの回路は以前も作成しており今後も出番が多そうですので、シールド化します。

IMG_8414.jpg



Sunhayato/サンハヤト UB-ARD03 Arduino用ユニバーサル基板

価格:345円
(2015/9/27 15:49時点)
感想(0件)


目次



1. 回路設計

基本的な設計は以前に作成したダイナミック点灯式の7セグメントLED回路と同じです。下図のLEDスイッチング回路を7セグメントLEDを制御するのに必要な数(LEDを7つ、トランジスタを4つ)へと増やします。

26_LEDスイッチング回路_1.png


下図が実際に作成するシールドの回路です。Arduinoに取り付け可能なよう7セグメントLEDの回路にArduinoと接続するためのコネクタ(部品記号:SV)を加えています。

26_7SegScheme.png



2. 基板実装

作成した回路図を元に必要な部品をまとめ、基板を実装しました。

部品番号部品数量
1R1-R4抵抗器 10[kΩ]4
2R5-R12抵抗器 330[kΩ]8
3TR1-TR4トランジスタ 2SC18154
4LED17セグメントLED OSL40562LR1
5SV1-SV2ピンソケット(8pin)2
6SV3ピンソケット(10pin)1
7SV4ピンソケット(6pin)1
8-Arduinoシールド用基板1

IMG_8402.jpg

IMG_8403.jpg


コネクタに白い箇所がありますが、これはただのテープです。
シールドのコネクタもArduinoのコネクタと同様に線を繋ぐことができます。ですが、シールドで使用しているピンに線を繋ぐと動作がおかしくなりますので、間違って線を繋がないようテープで防止しています。

26_LEDスイッチング回路_7.png


基板の設計で特筆するようなことはありませんが見栄えのことを考え、LED回路はLED回路、スイッチング回路はスイッチング回路でまとめています。

26_LEDスイッチング回路_2.png

26_LEDスイッチング回路_3.png


なお、基板は回路図通りに実装するつもりでしたが、この基板は回路図通りではありません。誤って、抵抗器を実装する際に接続する穴をずらしてしまいました。そのため、抵抗器とコネクタの接続が回路図と異なっています。
幸いにも抵抗器とコネクタの接続が回路図と異なっていても、Arduinoのスケッチで制御するピンを変更すれば修正可能ですので、基板実装は修正せずそのままにしています。

26_LEDスイッチング回路_4.png


3. スケッチ

動作確認用に、起動してからの時間を表示するスケッチを作成しました。(本来の拡張子は「.ino」ですが、「.txt」に書き換えています)

なお、以前のダイナミック点灯制御間違いがありましたので、今回のスケッチで修正しています。
以前の制御では "数字を数[ms]表示→桁を移動→数字を数[ms]表示→桁を移動→…" と繰り返していました。この制御だと数字を表示したまま桁を移動するので、直前の桁の数字がうっすらと表示されてしまいます

26_LEDスイッチング回路_5.png


そこで桁を移動する前に数字の消灯処理を入れ、 "数字を数[ms]表示→数字を一瞬消灯→桁を移動→数字を数[ms]表示→数字を一瞬消灯→桁を移動→…" に変更しました。これで直前の桁の数字がうっすらと表示されることはなくなりました。

26_LEDスイッチング回路_6.png


4. 動作

動作確認の動画です。起動すると1秒ごとにカウントアップしていますので、シールドは正常に動いていることがわかります。



これで7セグメントLEDのArduino用シールド基板ができました。
次回はこのシールドをパソコンで操作できるようにしたいと思います。


参考資料

  1. 作者名:J.Sugita . "7セグのセグメントが薄っすら光ってしまう件". サイト名:『昼夜逆転』工作室. http://jsdiy.web.fc2.com/seg7dynamicdrive/, (参照日:2015-09-27)
posted by ました at 16:47| Comment(0) | TrackBack(0) | 電子工作の実践 | このブログの読者になる | 更新情報をチェックする

2015年09月20日

シリアル通信 -第2回:シリアル通信の使用

今回はシリアル通信を使って、Arduinoとパソコンでデータのやり取りをします。
シリアル通信自体は以前にも温度センサーで使いましたが、使い方の説明はしていませんでした。今回はArduinoとパソコンの接続やシリアルモニタの使い方を説明します。


オーム社 Arduinoをはじめよう 第2版

価格:2,160円
(2015/9/20 10:25時点)
感想(0件)


目次



1. 接続


Arduinoとパソコンでシリアル通信を行うために、USBケーブルで接続します。

18_シリアル通信2回目_1.png


USBとシリアル通信は別物ですが、Arduinoの中にはUSB-シリアル通信変換ICが内蔵されています。このICがあることでArduinoとパソコンをUSBで接続しても、シリアル通信が行えます。
また、シリアル通信の線は外部コネクタにも繋がっていますので、Arduinoと他の部品でシリアル通信を行うこともできます。ただし、他の部品と接続した場合はパソコンとシリアル通信を行うことはできません。

18_シリアル通信2回目_2.png


Arduinoでなくとも、パソコンでシリアル通信を行うにはUSB-シリアル通信変換を行うのが一般的です。Arduinoは変換ICが内蔵されておりますが、変換用の基板やケーブルなども売られています。

サンハヤト USB⇔シリアル変換モジュール MM-FT232

価格:2,000円
(2015/9/18 16:02時点)
感想(0件)

エレコム USBtoシリアルケーブル/USBオス_RS-232C用/グラファイト UC-SGT1

価格:3,238円
(2015/9/18 16:05時点)
感想(4件)


パソコンとArduinoを接続しドライバーのインストールが正常に行われれば、パソコン側でArduinoを認識できるようになります。
なお、パソコンとシリアル通信できる機器を接続すると、このポートという欄に機器が表示されます。シリアル通信のポートですので、シリアルポートといいます。Arduino Uno (COM3)と表示されていますが、このCOM3というのはポート番号です。シリアル通信を行う際にはポート番号を指定して、どのシリアルポートを使うのかをパソコンに教える必要があります。(3. 動作参照)

18_デバイスマネージャー.png


Arduinoを認識できれば接続は完了です。正しく認識できないようであればArduino IDEをインストールしなおすなど試してみてください。


2. スケッチ

スケッチは自作せずにArduino公式のavaiable()関数のサンプルスケッチを使います。

概要

このスケッチはパソコンからArduinoへ送られてきた文字の文字コードを10進数に変換して、パソコンへ送り返します。

18_シリアル通信2回目_4.png


詳細

このスケッチは主に4つの関数から成り立っています。

シリアル通信を使用可能な状態にして、通信速度をbpsで設定します。通信速度は9600[bps]に設定することが多いです。通信速度以外のことも設定できますが、基本的には通信速度だけ設定します。

シリアル通信のデータバッファ(やってきたデータを一時的に溜めるバケツのようなもの)にあるデータが何[Byte]かを知ることができます。基本的にはこの関数でバッファを確認し、データが0[Byte]より多い(=1[Byte]でもデータがある)なら、何か動作(データの読み込みなど)を実行します。

18_シリアル通信2回目_3-2.png


バッファに溜まったデータを読み出します。

Arduinoからデータを送ります。送る際に10進数や2進数、16進数などを指定することができます。
Serial.println()関数も同様のデータを送る関数です。Serial.print()関数は改行無し、Serial.pringln()関数は改行有りです。

setup()分の説明

Serial.begin()関数でシリアル通信を使用可能な状態にし、通信速度を9600[bps]に設定します。

loop()分の説明

Serial.avaiable()関数でバッファの状態をチェックし続けます。
バッファにデータが1[Byte]以上あるなら、Serial.read()関数でデータを読み出し、Serial.print()関数とSerial.println()関数を使ってそのデータの文字コードを送ります。
バッファのデータが0[Byte]ならば何もしません。


3. 動作

接続とスケッチの書き込みが出来たので、シリアル通信を使いパソコンとArduinoでやり取りを行います。全ての動作をArduinoだけで行いますので、回路はありません。

まず、Arduino IDEのツールからシリアルモニタを起動します。
起動する前にArduinoがどのシリアルポートに接続されているか設定する必要があります。今回は1. 接続のデバイスマネージャーで確認したCOM3に設定します。

18_シリアル通信2回目_5-2.png


起動すると下図のような画面になります。上の入力欄に文字を入力して送信をクリックすると、Arduinoに文字を送ることができます。
なお、シリアル通信は非同期方式ですので、Arduinoとパソコン側で通信速度を合わせなくてはなりません。下の方にある通信速度をスケッチのSerial.begin()関数で設定した速度に合わせます。今回は9600[bps]です。

18_シリアル通信2回目_6.png


通信速度を合わせ文字を送信すると、このように文字の文字コードが10進数で返ってきます。

18_シリアル通信2回目_7.png



今回はArduinoでのシリアル通信の仕方を一通り説明しました。今回はArduino単体でしたが、部品を制御する際もSerial.avaiable()関数でバッファを確認してから動作を行うという流れは同じです。
次回の内容は未定です。今のところはシリアル通信を使って部品を動かすか、シリアル通信をBluetoothで行おうかと考えています。


参考資料

  1. 著書名:Massimo Banzi. 書名:Arduinoをはじめよう 第2版.  出版社:(株)オライリー・ジャパン, 出版年:2012, 参照頁(pp.158-163)
posted by ました at 16:55| Comment(0) | TrackBack(0) | 電子工作の実践 | このブログの読者になる | 更新情報をチェックする

2015年09月13日

シリアル通信 -第1回:シリアル通信とは

今回からはArduinoのシリアル通信という機能を使っていきます。
以前にも温度センサーで温度や電圧の値を取得するのに使ったように、シリアル通信によってArduinoとパソコン間でデータのやり取りを行うことができるようになります。
今回はシリアル通信について説明を行い、Arduinoでシリアル通信を使う方法は次回説明します。

なお、シリアル通信といった場合、シリアル伝送の通信全般を指す場合と特定の通信を指す場合の2つがあります。本ブログでシリアル通信といった場合は、基本的に後者の意味です。


Arduinoで計る,測る,量る [ 神崎康宏 ]

価格:3,024円
(2015/9/13 17:18時点)
感想(2件)



目次



1. 概要

シリアル通信と関係が深いものとしてRS-232というシリアル伝送の通信規格と、それを行うために必要なUARTという集積回路(≒部品)があります。雑に述べると、RS-232の一部のみ使用している通信がシリアル通信です。ただし、「一部のみ」というのがどこまでなのか曖昧ですので、単純にシリアル通信といってもRS-232の機能の内最小限だけのことを指す場合もあれば、電圧レベル以外はほぼRS-232と同じようなシリアル通信もあります。場合によってはシリアル通信をRS-232の意味で使ってることもあります。
UARTは元々集積回路を指す言葉でしたが、シリアル通信とセットで使われることが多いため、今ではUARTがシリアル通信そのものを指すことも多いです。

シリアル通信の特徴をデジタル通信のルール12で説明した言葉で表すと以下のようになります。
  • 電圧レベルは未定(※RS-232では決められている)
  • シングルエンド
  • シリアル伝送
  • 非同期式(=調歩同期式)

このような特徴を持っており、基本的には少量のデータのやりとりに向いています。そのほかの特徴として、元々のRS-232が多くの機器で使われていたため、シリアル通信を行うための部品は安価で入手しやすいです。さらに、後ほど説明しますがシリアル通信は最低3本の線があればいいため、回路の設計も簡単です。

通信速度は低速であるものの、部品の入手性や設計の容易性という利点があるため、シリアル通信は電子工作でよく使われる通信方式です。


2. 接続

基本的なシリアル通信を行うには3本の線が必要です。その3本の内訳は通信用が2本、GNDが1本です。
通信用の線を繋ぐ端子をTxDRxDといいます。TxD(Transmitted Data)は送信、RxD(Received Data)は受信のことです。
互いの部品のTxDとRxDを接続し、GNDを接続すればシリアル通信の回路は完成です。

13_シリアル通信接続_1-2.png

なお、3本の線で行えるのは最低限のシリアル通信です。シリアル通信(というよりRS-232)の機能を活用するためにはあといくつか線を接続する必要があります。


3. 波形

下図は実際にArduinoとパソコン間で基本的なシリアル通信を行ったときの波形です。上側は文字"A"(文字コード:0x41)、下側は文字"Z"(文字コード:0x5A)の波形です。

13_シリアル通信波形_1.png

13_シリアル通信波形_2.png

シリアル通信は基本的に1回の通信で1[Byte]分のデータを送り、データの前後にスタートビットストップビットを付けます。
上図の流れを説明します。2[Byte]以上のデータを送る際は下記を繰り返します。
  1. 通信をしていないとき(=待機)はHigh状態
  2. 通信開始時にスタートビット(Low)を送る
  3. データを送る(※データは下位ビットから送る
  4. データを1[Byte]分送ったら、ストップビット(High)を送る
  5. High状態(=待機)に戻る

3番目に書いてあるように、シリアル通信ではデータを下位ビットから送ります。ですので、文字"A"の文字コードは"41(16)"="0100 0001(2)"ですが、下位から送るのデータ波形ではひっくり返り左から"1000 0010(2)"になります。Zも同様に"5A(16)"="0101 1010(2)"がひっくり返り、波形は左から"0101 1010(2)"となります。

なお、これはあくまでシリアル通信の基本的な波形です。シリアル通信の設定によってはこれ以外の情報も送ったりすることができます。


今回説明したことは知らなくてもArduinoでシリアル通信を行うことはできます。ですが、知っておくと自分でシリアル通信できる電子機器を設計したりする際に便利と思ったので説明しました。
次回はArduinoとパソコンでのシリアル通信の使い方を説明します。


参考資料

  1. 作者名:ルネサスエレクトロニクス株式会社. "マイコン活用基礎:周辺機能を学ぼうー(3)シリアル通信". サイト名:ルネサスエレクトロニクス. http://japan.renesas.com/edge_ol/engineer/18/index.jsp, (参照日:2015-09-13)
  2. 作者名:不明. "RS232規格". サイト名:easy labo. http://easylabo.com/2014/08/standards/3267/, (参照日:2015-09-13)
  3. 作者名:株式会社コンテック. "シリアル通信の基礎知識 - RS-232C / RS-422 / RS-485 -". サイト名:CONTEC. https://www.contec.co.jp/product/device/serial/basic.html, (参照日:2015-09-13)
  4. 作者名:株式会社インセプト. "調歩同期". サイト名:IT用語辞典 e-Words. http://e-words.jp/w/%E8%AA%BF%E6%AD%A9%E5%90%8C%E6%9C%9F.html, (参照日:2015-09-13)

posted by ました at 17:25| Comment(0) | TrackBack(0) | 電子工作の知識 | このブログの読者になる | 更新情報をチェックする