

Arduinoを使った可視光通信の実装をしているのですが、調歩同期式通信においてデータのビット幅を100msecから70msec等に狭めていくと、正しく受信することができません。  
この理由を知りたいです。

ここで、ストップビットから次のデータのスタートビットまで(データの送信間隔)は1000msecに設定しています。

追記：  
ご指摘があったのでより詳細な状況を説明します。  
送信者はスタートビットから100msecで次々にビットを送り、受信者はスタートビットを確認すると、100msecで信号を読み取るとるようにしており、  
そのビット間隔100msecを70msec等に狭めていくと、データが抜け落ちたりと正しく受信することができないということです。
(すなわち、送信者においてビット間の送信間隔を狭め、受信者においてもビットの検出間隔を同じだけ狭めるという意味合いです。)

また、この可視光通信の実装は、自然光の全くない暗室で行っています。

具体的なスケッチを簡単に述べると、送信側が送った可視光の明滅に対して、受信側においては可視光の強度をセンサによって数値化したものを、analogRead()で読み取り、その値が閾値を超えていれば"1"とし超えていなければ"0"としています。また、スタートビットを受信すると、データの読み取りをはじめ、データの読み取りごとにdelay(ビット間隔時間)を複数回行うことによって、ビット列を受信するようにしています。


CC BY-SA 4.0
2021-06-29T05:52:44.477
77847
2021-06-30T02:07:18.060
2021-06-29T10:24:58.110
question
arduino シリアル通信
Arduinoにおける可視光による調歩同期式通信のデータビット幅


まずはオシロスコープを用意して、受信側の波形がどうなっているのか、というのを確認しましょう。  
可視光を使っている、といってますが、送信側はどういう発光体を使って、受信側はどういうセンサを使っているのか全く記述がないところを見ると、ハードウエアについては全く頓着してなさそうに思えます。

当てずっぽで、推測で物事をすすめるのではなく、確実な観測事実を積み重ねていきましょう。  
そうでないと、なにかわからないけど、だめでした、という結果にしかなりませんよ。


CC BY-SA 4.0
2021-06-29T13:59:25.393
77860
2021-06-29T13:59:25.393
27481
77847
answer


送信側つまり発光側の光波形と、受信側つまり受光素子自体 (フォトトランジスタとか CdS とか)
と復調装置の回路設計によっては、発光側で与えた波形と受光側で得られた波形の信号形状が違う（単に変形しているレベルではなくて全く似ても似つかないものになる）なんてのはごく普通にあります。なので
100msec = 10bit/sec で送受信できているシステムであっても実はハードウエア的・ソフトウエア的に余裕が全くなくて速度アップ 70msec =
14bit/sec を図ると破綻するなんてのはおかしな事態であるとは思いません。

> 理由を知りたい

実に様々な個所に様々な原因がありえて、現状の質問文では推測すらできないです。

というわけで現状の質問文からは「推定不能」としか答えられません。なのでエビデンス（証拠）を集めてください。設計者の意図と異なる動きをしている個所がわからないと直しようが無いです。

  * 送信プログラム的にはこんな駆動波形を出しているつもり⇒本当にそうなっている証拠が必要
  * 送信素子からこんな光が発しているはず⇒本当に以下略
  * 受光素子からこんな信号が出ているはず
  * マイコンの入力にこんな信号が来ているはず

そのためにはオシロスコープとかアナライザとか測定装置が必要ですし、使う側にも知識と経験が必要になるでしょう。

ハードウエア側は触れないということなら、現状の回路でどこまでできるかとか、現ソフトは現回路の挙動を理解して最適仕様なものを作れているかなどなど、検討できることはいくつもあるでしょう。でもいかんせん今の質問内容だと情報量が足らないです。

質問内の情報量を増せば答えられるかというと、そうとも限らなくて仕事の丸投げになりかねないです。範囲の広すぎる質問は SO
ではクローズ対象になってしまいます。質問範囲を絞って１問１答が可能な範囲を探ってみてください。


CC BY-SA 4.0
2021-06-30T02:07:18.060
77872
2021-06-30T02:07:18.060
8589
77847
answer