はりうすブログ (のすけのメモ)

湘南にある小さな会社 代表 ”のすけ”のブログです

Arduinoでモールス信号練習機を作った話 | さいぞうのArduino初心者日記5

f:id:hollywis:20151211180054j:plain

こんばんは。

さいぞうです。

Arduino入門連載の5回目だ。 前回はArduinoでLEDを点滅させるという初歩の初歩でふざけてLチカモンスターを作って楽しかった。  
hollywis.hatenablog.com

今回やることは、実は前回とほとんどからない。 参考にしているチュートリアルのタイトルは、

  前回はChapter 2 Blink LED

  今回はChapter3 LED Blink

何が違うのか全然わからない。  
 
なので、チュートリアルは無視して、今ある知識だけで作れる応用として、さっき思いついたモールス信号練習機を作ろうと思う。

 

回路を組む

抵抗をかませる

ここは前回と全く同じでも構わないのでなのでそちらを見てほしい。

一応、チュートリアルでは前回と違い220オームの抵抗を噛ませている。

使ってるセットを探してみると、220オームのはなかった...

しかもパッケージには220オームがあるって書いてあるけど手書きのメモで200オームとあるのが入ってたり、よくわからない。

カラーコードみても200に見えないんだが... カラー抵抗早見表!

f:id:hollywis:20151211175728j:plain とりあえず気にしないことにしてこれを使う

 
f:id:hollywis:20151211180054j:plain これが組んだ回路。

前回のやつに抵抗を噛ませただけ。

比較

前回の構成(左)と、今回の構成(右)で動画をとって比較してみた。

やはり抵抗をかませるとちょっと暗くなっている事がわかる。

プログラムを確認する

現段階では、プログラムは前回のまま。光らせて、1秒まって、光らせるのやめて、1秒まって、を永遠に繰り返している。

int ledPin = 13; // 出力するピンを13番に指定
void setup()
{
  pinMode(ledPin, OUTPUT);//うえで選んだピンを出力モードに指定
}
void loop()
{
  digitalWrite(ledPin, HIGH); //LEDを光らせる
  delay(1000); // 1秒待つ    
  digitalWrite(ledPin, LOW); //LEDを光らせるのをやめる
  delay(1000); // 1秒待つ   
}

すぐわかると思うが、 上記のloop()内をちょっと変えて、delay(1000)のところの1000を別な数字に変えれば、 光ったりやめたりのタイミングが変わる。 また、光らせるのとやめるのを1回ずつしか書いてないが、別に何回書いても良い。

これを応用すれば、モールス信号を示させるのは簡単だ。

モールス信号

モールス信号では短い音と長い音の組み合わせで文字を表す。

長点1つは短点3つ分の長さに相当し、各点の間は短点1つ分の間隔をあける。また、文字間隔は短点3つ分、語間隔は短点7つ分あけて区別する。

らしい。

モールス符号 - Wikipedia

実際の符号は

モールス符号一覧表

「イ」が・(短い) - (長い)、

「レ」が- (長い)- (長い)- (長い)

という感じだ。

ホントは音でやるもんなんだろうが、これをLEDのチカチカでやってみよう。

長いのと短いの

まず、これを表現した、「イ」=・-を表示する短いプログラムをつくる。

長点1つは短点3つ分の長さに相当し、各点の間は短点1つ分の間隔をあける。また、文字間隔は短点3つ分、語間隔は短点7つ分あけて区別する。

int ledPin = 13; //13番をアウトプットに指定
void setup()
{
  pinMode(ledPin, OUTPUT);//13番をアウトプットに指定
}
void loop()
{
  digitalWrite(ledPin, HIGH); // 光らせる
  delay(1000); // ・1つは、1秒にする

  digitalWrite(ledPin, LOW); //光らせるのやめる
  delay(1000); // 各点の間は・ひとつ分なので、1秒まつ

  digitalWrite(ledPin, HIGH); // 光らせる
  delay(3000); // ーは・の3つ分なので、3秒まつ

  digitalWrite(ledPin, LOW); //光らせるのやめる
  delay(3000); // 文字の間は・の3つ分あけるので、3秒末
}

これでずっと「イ」を光らせる。

 

  できた

好きな文字を出す。

次に、好きな文字のモールス信号が表示できるようにする。

先ほどのページの表を利用させてもらって、AとかZとか文字を指定するとそれをずっと光らせるというプログラムにした。 日本語はなんか動かなかったのでアルファベットのみ。

 
String mojiには、表示できる文字をいれてある。

String tonTuには、mojiに対応する順番で、ある文字を表す符号をいれてある。

符号はsが短点、lが長点を表す。

gist.github.com (GISTに公開した)  

 

実行結果はこんな感じ。 「B」のツートントントンがわかるだろうか。

 

シリアルモニタにも、長い、短いのパターンを出すようになっている。

 

入力に合わせた信号を出す

次に、キーボードからの入力を受け付けて、押したキーのモールス信号を出すようにしてみる。

本当はこの連載のもっと先でやるはずなのだろうが、フライングして出すと、Serial.available()とSerial.read()という2つの関数でキーボードからの入力を受け取れる。

gist.github.com

先ほどのコードをちょっと修正したこのプログラムで、キーボードに英字(大文字)を入力するとそれに対応するモールス信号がでる。  

 

LEDのモールス信号を当てる!

更に改造して、LEDで表示されたモールス信号をあてるクイズゲームみたいにしてみる。  
ランダムなモールス信号を出し、それとキーボード入力が合っていたら、素早くチカチカ、まちがってたらもう一度同じ信号を出す。  

gist.github.com


Arduinoでモールス信号あてゲーム

モールス信号の勉強に使ってください。

今日はここまで。  
 
 


次回はこちら

第4章 hollywis.hatenablog.com

総合もくじ

hollywis.hatenablog.com