HOME > 微弱無線モジュール

 微弱無線モジュール 

昨年度に買ったこれ↓
http://strawberry-linux.com/catalog/items?code=82003
http://strawberry-linux.com/catalog/items?code=82004
使ってみました。
まずはArduinoからデジタル信号を周期的にON-OFFさせて無線で送信、 同じArduinoで受信してLEDを点滅させてみました。
目視だと問題なく点滅してる。 ただ、微妙にノイズが乗ってる感じがするかも。


次に、USB-シリアルポートを使ってシリアル信号を無線で送信、 Arduino側で受信うまくいかない、(削除)
何も送らなくても不規則な値のら列を受信し続けています。
やっぱりノイズを適当に解釈して受信し続けているようです。 やはり、シリアルポートを直接使って送受信することはできないようです。
プログラムでノイズを判別して、誤り検出を含めてデータ送受信する必要が ありそうで、ちょっと面倒ですね。


-----------------------------

昨日の続き。
素直に動かないのでオシロで信号を確認。 信号なしの場合、ミリ秒オーダーのノイズがひっきりなしに出てる。
これにシリアル信号乗せても判別できるはずがない。
おもいっきり速度を下げて300bpsで大文字の”U"、コードはバイナリで 01010101を連続して送ってみると認識されたのがこちら↓


速度を倍の600bps以上に上げると、信号にこんな風に隙間が開く。
(この間にノイズが入ったらダメになるかもしれない?)


1200bpsだと、信号の最初がなまって読み取れない。


つまり、300bpsまたは600bpsでソフト的に送り方を工夫してエラー処理 を行えば送信できそうではある。

--------------------------------

プログラム作って送受信してみました。
アドレスとコマンドとして2バイトのデータを送るとして、アドレスとコマンドの 和をチェックサムとし、ヘッダとデリミタをつけて送ります。
受信側ではデリミタを監視して、受信したらそこまでのデータのヘッダを探して その後の2バイト抜き取ってチェックサムが正しければOKとしました。
ノイズの影響で1度で確実に送れませんが、数回送れば受信できるので、 これにて終了。


----------------------------------

参考URL
http://www.sparkfun.com/products/8945
http://strawberry-linux.com/images/tx-ask315.jpg
http://winavr.scienceprog.com/example-avr-projects/running-tx433-and-rx433-rf-modules-with-avr-microcontrollers.html

----------------------------------

Arduinoのスケッチ
送信側


byte hder, delim;
byte adr, cmd;

void setup()
{
  Serial.begin(600);      // 

  hder=0xff;
  delim=0x00;
}

void loop()
{
 
  adr=0x01;
  cmd=0x02;
  
  Serial.write(hder); 
  Serial.write(adr);       // adr,cmd ともdelimと異なること!
  Serial.write(cmd); 
  Serial.write(adr+cmd);   // adrとcmdの和が255を越えないこと!
  Serial.write(delim);     
  delay(1000);
}  


----------------------------------------------

Arduinoのスケッチ
受信側



byte str[90]; // string buffer
int adr, cmd, sum;
byte hder, delim;

  
void recvStr(byte *buf)
{
  int i = 0;
  byte c;
  while (1) {
    if (Serial.available()) {
      c=Serial.read();
      buf[i] = c;
      if (c ==delim ) break;  
      i++;
    }
  }
}

void setup()
{
  Serial.begin(600);    
  
  hder=0xff;
  delim=0x00;

}

void loop()
{
  int cnt, i;

  if (Serial.available() > 0){ 
    recvStr(str);
    i=0; cnt=0;
    while(str[i]!= hder) i++;    // char strに0xffを入れて比較に使うと-1になるので
      adr=(int)str[i+1];
      cmd=(int)str[i+2];
      sum=(int)str[i+3];
      if ((adr+cmd)==sum && sum!=0) {     // adrもcmdも0の時があるので除外
        Serial.print("adr:"); Serial.println(adr); 
        Serial.print("cmd:"); Serial.println(cmd); 
      }
  }
} 

< 前の記事へ次の記事へ >


ページトップに戻る



ESP32 Wifi Bluetooth開発ボード

Arduino Nano Every
​​
Raspberry Pi pico

FPGA XILINX Artix-7