質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

2回答

1121閲覧

SOSメッセージを再生したいのですが、再生することができません! コードあっていますか?

band20010518

総合スコア14

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2018/03/04 03:01

編集2018/03/04 06:50

回路図Arduinoでモールス符号でSOSメッセージを再生したいのですが、再生することができません!
コードあっていますか?
コード

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/03/04 06:39

成功しないとはどうなるのでしょうか?
band20010518

2018/03/04 06:41

何も音が聞こえないという意味です
y_waiwai

2018/03/04 06:45

音はどういうふうに出すつもりですか?どうもプログラムの問題ではなくて、回路上(ハードウエア)の問題だと思われますが。
y_waiwai

2018/03/04 06:46

回路図も出してみてください
y_waiwai

2018/03/04 06:48

回路図を出してください。
band20010518

2018/03/04 06:50

出したのでみてください
y_waiwai

2018/03/04 06:54

回路が不明なので回答できません。まずは、13番ポートを操作して音が出るようにしてください
guest

回答2

0

ベストアンサー

1)モールス信号について

モールス信号の音の長さは以下のように決まっています(Recommendation ITU-R M.1677-1 (International Morse Code))
短点(dot)の長さを1とすると
長点(dash)の長さは3
1つの文字を構成する点(dot もしくは dash)の間は1
文字と文字の間は3
単語と単語の間は7

 質問のコードで、dotSpeed,dashSpeed,chorGap(文字間?)に代入されている値は正しくありません。
また、delay(20);が点と点の間だと思われますが、これも正しくありませんので全体としてモールス信号になりません。

 13ピン(LED(?))にモールス信号を出力する(モールス信号のようにLEDが点滅する)プログラムは、以下のようになります。

Arduino

1int ledPin=13; //モールス信号を出力するピン 2int dotDuration = 250; //dotの長さを250msにする 3 4int dashDuration = dotDuration*3 //dashの長さ 5int signalGap = dotDuration*1 //点間の無音時間 6int charGap = dotDuration*3 //文字間の無音時間 7int charGapPlus = dotDuration*2; //signalGapと足して文字間の無音時間にする 8int wordGapPlus = dotDuration*4 //charGapと足して語間の無音時間にする 9 10void setup() { 11 pinMode(ledPin, OUTPUT); 12} 13 14void loop() { 15 // S 16 morseS(); 17 // O 18 morseO(); 19 // S 20 morseS(); 21 delay(wordGapPlus); 22 23} 24 25void morseDot(){ 26 digitalWrite(ledPin,High); 27 delay(dotDuration); 28 digitalWrite(ledPin,Low); 29 delay(siganalGap) 30} 31 32void morseDash(){ 33 digitalWrite(ledPin,High); 34 delay(dashDuration); 35 digitalWrite(ledPin,Low); 36 delay(siganalGap); 37} 38 39// Sをモールス信号で出力 40// S のモールス符号は、dot dot dot 41void morseS(){ 42 morseDot(); 43 morseDot(); 44 morseDot(); 45 delay(charGapPlus); 46} 47 48// Oをモールス信号で出力 49// O のモールス符号は、dash dash dash 50void morseO(){ 51 morseDash(); 52 morseDash(); 53 morseDash(); 54 delay(charGapPlus); 55}

== 音を出す素子について ==
13ピンとGNDピンに、電圧が加わっている時に音が鳴り続けるタイプのブザーの両端をつなげば、ブザーからモールス信号が出るはずです。

写真を見るとブザーとGNDピンの間に220Ωの抵抗が入っているようですが、ブザーの線を直接GNDピンにつなぐと鳴るかもしれません。

もしも音が出ない(ポツ、ポツ、というような音になる)のであれば、ブザーではなく圧電ブザーが接続されているのだと思われます。

ブザーは、両端に直流電圧さえかければ音が出るように発信回路を内蔵しています。
圧電ブザーは圧電素子がついた(発信回路のない)金属板なので、方形波を加えないと音になりません。

もしも圧電ブザーを使うのであれば、ArduinoのTone関数を使って音をだします。
Tone関数を使ったmorseDotは、以下のような感じで、toneFreqの値で音の高さ(周波数)を設定します。
440は、下のラ(A)の音の周波数で、NHKのラジオの時報「ポ ポ ポ ピー」のポの音です。

int toneFreq = 440; void morseDot(){ tone(ledPin,toneFreq,dotDuration); delay(dotDuration); //音が鳴っている間待つ delay(siganalGap); }

投稿2018/03/04 08:08

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

band20010518

2018/03/04 08:17

ありがとうございます!圧電ブザーではないと思います
band20010518

2018/03/06 06:47

ごめんなさい。最初のコードでやったのですができませんでした
band20010518

2018/03/06 06:57

int signalGap = dotDuration*1 にエラーが出たのですが
guest

0

回路図が不明なので、推測で回答します
おそらく、写真上の黒い円筒形のものはブザーだと推測されますが、それだとポート出力が直接出すことができる電流では足らないのでブザーが鳴りません。
ということで、その場合は一旦FETかトランジスタでドライブ回路を構成して、その出力でブザーを駆動する必要があります。

#黒い円筒形のものがセラミック発音体である、という場合はまたべつの方法となります

投稿2018/03/04 07:07

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

band20010518

2018/03/04 07:09

ありがとうございます!黒い円筒形のものはブザーです!やってみます
y_waiwai

2018/03/04 07:12

おそらく直列に抵抗が入ってるものと見れますが、ブザーなら抵抗入れたらダメです。直接つないでください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問