ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Arduino UNOをWindows 7に接続しVisual Studio 2010 Expressを使ってC#でプログラミングし制御する – その2 – 光センサの値をArduinoで読みとりシリアルポートでPCに送信する

with one comment

ArduinoはUSBインタフェースをもっており、PCで作った「スケッチ」と呼ぶプログラムをArduinoにアップロードするために使われるが、このUSBインターフェースを介してArduinoとPCの間でデータ通信をさせることもできる。このとき、物理的にはUSBインタフェースを使うが、プログラム上はシリアル通信でデータを送受信する。なぜUSBでシリアル通信ができるかといえば、ArduinoにはシリアルコンバーターATmega8U2が組み込まれており、一方PC側にはArduino用のシリアルUSBドライバをインストールしてあるからである。

コンピュータのコントロールパネルから「デバイスマネージャ―」を開き「ポート」を展開すると「Arduino UNO R3 (COM3)」ドライバがあるのがわかる。そしてドライバのプロパティを開き「ポートの設定」をみると、シリアル通信の定義がわかる。またここで「詳細設定」のボタンをクリックすれば「COMポート番号」を変更することができる。

Arduino_002_Serial_001_mid_640

<Fig.1 : デバイスマネージャでArduino UNO R3ドライバを確認する>

Arduino_002_Serial_002

<Fig.2 : Arduino UNO R3ドライバのプロパティでポートの設定を確認する>

まずArduinoとPCでシリアル通信のテストをしてみよう。Arduinoには一定の間隔でデータをシリアルポートに送信するスケッチを書き、実行する。PC側ではシリアル通信のデータを受け取るコンソールアプリケーションを作る。

Arduinoのスケッチは次のようになる。一定の間隔で変数iをカウントアップし、シリアルポートに送信するものだ。

Arduino_002_Serial_003

<Fig.3 : シリアルポートからカウントアップした値を連続出力するスケッチ>

次にVisual Studioでシリアルポートからデータを受信するコンソールアプリケーションを作る。System.IO.Ports名前空間を追加しておくことを忘れずに。

————————————————————————————

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;

namespace Arduino_001_Com_Read
{
    class Program
    {
        static bool running = true;
        static void Main(string[] args)
        {
            SerialPort mySerialPort = new SerialPort("COM3");
            mySerialPort.BaudRate = 9600;
            mySerialPort.Open();
            while (running)
            {
                string myData = mySerialPort.ReadLine();
                Console.WriteLine(myData);
            }
        }
    }
}

————————————————————————————

Arduinoに作ったスケッチを書き込んでおく。スケッチを書き込むとArduinoはシリアルポートに対して数字をカウントアップしながらデータを出力し始める。一方PCではシリアルデータを受け取るコンソールアプリケーションをビルドし起動する。するとコンソールにArduinoから数字データが連続して受信されることが確認できる。これでArduinoからPCにシリアルデータが送受信できたことが確かめられた。

Arduino_002_Serial_004_mid_640

<Fig.4 : コンソールアプリケーションでArduinoからシリアルポートに送信される数字データを受信する>

ではArduinoに光センサを取り付け、センサの値を読み取ってシリアルポートに送信してみよう。光センサとArduinoの接続はブレッドボードを使うといいだろう。Arduinoのアナログ入力はA0を使うこととし、ピンA0を光センサの一方の端子に接続する。次の写真では緑色のジャンパワイヤを使っている。光センサのもう一方の端子はArduinoの5V出力に接続する。写真では赤色のジャンパワイヤだ。ArduinoのピンA0に接続した光センサの端子には、10kΩの抵抗をつけ、ArduinoのGNDへ接続する。

Arduino_002_Serial_005_circuit_2_mid_640

<Fig.5 : Arduinoと光センサ、抵抗の接続図>

先に作ったArduinoのテスト用スケッチをスケッチを次のように変更する。シリアルポートに出力するiの値をアナログI/OのA0から取得し、改行する。Serial.print()の第2引数「DEC」は出力フォーマットを10進数にするという意味だ。また値を取得する間隔を一定程度あけるため、delay(1000)を書いている。delayの単位はミリ秒なので、delay(1000)は1秒だ。

Arduino_002_Serial_006

<Fig.6 : Arduinoで光センサの出力をシリアルポートに送信するスケッチ>

Arduinoにスケッチを書きこんだら、シリアルポートに光センサの値を出力しはじめる。Visual Studioで作ったシリアルポートの値を取得するコンソールアプリケーションは最初に作ったテスト用のものでいい。コンソールアプリケーションを起動すると次のように光センサの出力を受信しはじめる。光センサを手で覆ったり、部屋の明かりを強くしたりしてセンサの出力が変わることを確かめよう。

Arduino_002_Serial_007_mid_640

<Fig.7 : Arduinoから光センサの出力を受け取るコンソールアプリケーション>

Arduinoはスタンドアロン型のマイコンボードだが、このようにセンサの値ををシリアル出力にするインタフェースとして使うこともできる。光センサを温度センサや距離センサに置き換えると、温度や距離をPCで受け取ることもできる。Arduinoで各種センサを使う方法はいくつかの書籍で紹介されており、Webでも公開されている。Arduinoとブレッドボードを使えば、はんだ付けをする必要なくセンサの実験ができる。教科「情報」でセンサの実習に使うこともできるだろう。

●関連記事

「Arduino UNOをWindows 7に接続しVisual Studio 2010 Expressを使ってC#でプログラミングし制御する – その1 – シリアルポートで文字を送信しLEDをON、OFFする」
https://matsumotoyoshio.wordpress.com/2013/02/03/arduino-uno%e3%82%92windows-7%e3%81%ab%e6%8e%a5%e7%b6%9a%e3%81%97visual-studio-2012-express-for-windows-desktop%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6c%e3%81%a7%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9/

コメント / トラックバック1件

Subscribe to comments with RSS.

  1. […] 「Arduino UNOをWindows 7に接続しVisual Studio 2010 Expressを使ってC#でプログラミングし制御する – その2 – 光センサの値をArduinoで読みとりシリアルポートでPCに送信する」 https://matsumotoyoshio.wordpress.com/2013/06/02/arduino-uno%e3%82%92windows-7%e3%81%ab%e6%8e%a5%e7%b&#8230; […]


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。