[電子工作入門] Arduinoでシリアル通信

電子工作

みなさん,こんにちは
おかしょです.

電子工作ではさまざまなセンサを使ってロボットを作ることができます.このブログの電子工作の目標は倒立振子ロボットを作って,自立させることです.

それができたら,また目標を立てて作っていこうとは思いますが,とりあえずはこれが目標になります.

さて,その目標を達成させるため,ロボットを自立させるためにはロボットの情報をセンサを使って把握する必要があります.センサからのデータを見るためには,ロボットからパソコンへとデータを送り,パソコンに表示させなければなりません.

そこで,今回はArduinoからデータを送り,パソコンで表示するということを行っていきます.

この記事を読むと以下のようなことがわかる・できるようになります.

  • Arduinoとシリアル通信をする方法
  • Arduinoで計算をする方法

 

この記事を読む前に

この記事では,まず最初にArduinoと通信をして「Hello World」を表示する方法について解説をします.

これはマイコンを始めて扱う人が最初にやることの定番です.

最初にやることの定番と言えば,LEDの点灯などもあります.

LEDの点灯については以下の記事で解説をしているので,マイコン・電子工作初心者の方は上から順番に読んでいってください.

 

用意するもの

今回,使用したのは下記のものになります.

  • Arduino基板
  • Arduinoにプログラムを書きこむためのUSBケーブル

センサなどのデータを送りたい場合は,センサが必要となりますが, 今回はArduinoからパソコンにデータを送るだけなので,これだけでできます.

Arduinoとパソコンとの通信はシリアル通信と呼ばれる通信方式で行います.これはパソコンとAruinoをケーブルでつなぎ,有線でデータのやり取りをします.

無線での通信もできますが,その場合は別の電子部品が必要となり,電子工作初心者向けではないので有線で行います.

 

プログラムを書く

それではシリアル通信を行うプログラムを書いていきます.今回はArduinoから文字をパソコンに送信して,パソコンに表示するということをやります.

そのために作成したプログラムが以下になります.

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.print("Hello World!\n");
  delay(1000);
}

これだけです.これだけのプログラムで1秒に一回,パソコンに”Hello World!”と表示させることができます.

それではプログラムを見ていきます.

最初のsetup関数内ではシリアル通信の設定を行います.

Serial.begin(9600);

では,シリアル通信の初期設定を行い,()の中の数字でボーレートの指定をします.

ボーレートとは,正確に書くとbaud rateのことで,1秒間に何回変復調できるのかを表します.

つまり,1秒間にやり取りできるデータの量を表しています.この値が大きいほど多くのデータを1秒間に扱うことができます.

特別な理由がない限りは,上記のままで問題ありません.

次にloop関数内では

Serial.print("Hello World!\n");

というコマンドで,シリアル通信で文字列”Hello World!”という文字列を送信しています.

このコマンドによって()内の文字列が送信できます.

()内の文字に注目すると

\n

とWorld!の後に書いてあります.これは改行を行うコマンドで,この後に改行されて,次に表示される文字列が1行下に表示されるようになります.

この\nは別のコマンドを利用すれば省略することができます.そのコマンドとは

Serial.println("Hello World!");

です.printの後にlnをつけるだけで,自動的に改行されるようになります.

そのあとは,delay(1000)を使って,次のプログラムが実行されるのを遅らせています.

この時の()の中身の値によって,遅らせる時間を変更することができ,今回は1000 ms,つまり1秒遅らせています.

1秒遅らせたら,loop関数の先頭に戻り,再度Hello World!と表示するようになっています.

 

パソコンにHello World!と表示させる

それでは上記のプログラムを使って,パソコンにデータを送信・表示させます.

Arduinoに先程のプログラムを書き込んだら,シリアルモニタというモニタを表示させます.

シリアルモニタとは,通信によって受信したデータを表示させるための便利なツールです.

シリアルモニタはArduino IDEのタブの「ツール」をクリックして,続いて「シリアルモニタ」をクリックします.

もしくは[Ctrl]+[Shift]+[M]でも開くことができます.

ここで,Arduinoと接続しておかないと,シリアルモニタが開かないことがあるので,Arduinoは接続しておくようにしてください.

以上のようにすると,以下のようにシリアルモニタが表示され,Hell World!と何度も出てきます.

以上のようにやっても,シリアルモニタが表示されない方は,Arduino IDEの初期設定が済んでいない可能性があります.その場合は,使用しているマイコンなどの初期設定を行ってからやるようにしてください.

 

計算結果を表示する

今度はArduinoに簡単な計算をさせて,その結果をシリアルモニタで確認します.

プログラムは以下です.

int a, b;

void setup() {
  Serial.begin(9600);
  a = 5;
  b = 3;
  Serial.print(a);
  Serial.print('*');
  Serial.print(b);
  Serial.print('=');
  Serial.println(a*b);
}

void loop() {
}

このプログラムではsetup関数の前にint型(整数型)の変数a, bを定義し,setup関数で数値をそれぞれに代入し,掛け算をさせています.

先程のように複数の文字を表示させたい場合は,その文字列を””で囲んでいました.

しかし,今回は数値を表示したいので,その場合は何も付けずに直接,その数値の入った変数を()の中に入れます.

さらに*や=のように一文字だけ表示させたいときは,”ではなく’で囲ってあげます.

このようなプログラムを作ることで,計算結果をシリアルモニタに表示させることができます.

 

count UP表示する

最後にloop関数が実行された回数を数えて表示するプログラムを作ります.その結果以下のようなプログラムになりました.

int count = 0;
char name[] = "count:";

void setup() {
  Serial.begin(9600);
}

void loop() {
  for(int i=0;i<6;i++)
  {
    Serial.print(name[i]);
  }
  Serial.println(count);
  delay(1000);
  count = count+1;
}

ここでは,少し特殊な方法で文字を表示させています.

setup関数では先程と同じように,シリアル通信の設定を行っています.

新しいのはsetup関数の前で定義されている

char name[] = "count:";

です.これはchar型と言って,文字列を定義する際に使用する型です.そして,nameという格納庫に”count:”を代入しています.

loop関数内では,for文でこのnameから一文字ずつ取り出して,表示させるようにしています.

for文が実行し終わったら,countした数を表示して改行しています.

このプログラムによってシリアルモニタには以下のように表示されます.

 

まとめ

この記事では,パソコンとマイコンを通信させてHello Worldと表示させる方法について解説しました.

ロボットを作ってセンサからのデータを表示するときは,計算結果を表示させたプログラムと同じように,数値を表示することになります.

なので,今回行ったことは忘れないようにしましょう.

 

続けて読む

ここまでの内容は基礎中の基礎でしたが,次回はただの基礎のモータを回転させるということをやります.

次の記事は以下から読めるので,読んでみてください.

それでは最後まで読んでいただきありがとうございました.

Twitterもやっているので,良ければフォローお願いします.

コメント

タイトルとURLをコピーしました