工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduinoを使用したRCレシーバーPPM信号の読み取り

コンポーネントと消耗品

>
Arduino UNO
× 1

アプリとオンラインサービス

>
Arduino IDE

このプロジェクトについて

RC送信機は、適切な範囲の暗号化されたリンクを備えているため、ワイヤレスリンクが必要なプロジェクトに非常に適しています。

すべてのRCレシーバーはサーボモーターを駆動するように作られています。したがって、各チャネルには、グランド、Vcc、および信号の3つのピンがあります。ここでは、特別な種類の信号が使用されます。ある間隔でパルスを送信します。サーボが1.5msのパルスを受信すると、90度に設定され、この値を1〜2msから変化させることにより、サーボは最小値と最大値になります。 (上の写真では、6チャンネルの受信機がPPMピンで示されています)

とても簡単な方法は、各ピンのパルス幅を測定し、要件に従ってそのデータをマッピングすることです。しかし、ここでの問題は次のとおりです。

  • レシーバーのチャネルごとに、Arduinoピンにワイヤーを接続する必要があります。これには多くの接続が必要なだけでなく、Arduinoで多くのピンを消費します。
  • ほとんどのArduinoには2つの割り込みピンがあるため、2つ以上のチャネルを使用する場合は、それを読み取ってコードに遅延を追加します。これは、一部のアプリケーションで問題になる可能性があります。

この問題を解決するために、多くの受信機にはPPMと呼ばれる追加のピンが付属しています。このPPMピンは、すべてのチャネルのデータを1つの信号で送信します。

PPMピン信号はどのように構成されていますか?

<図> <図>

この信号は、空白で区切られたデータパケットで構成されます。ここで、ピーク間のスペースはチャネルの値を表します。この場合、私は6チャンネルの受信機を使用したので、7つのパルスがあります。

したがって、最初にコードで分離スペースを検出してから、各チャネルのパルスからデータの記録を開始する必要があります。

2番目の画像に見られるように、

すべてのデータは約11500マイクロ秒の時間で分離されます。各チャネルには6つ以上の値があります。

コードの使用:

<図>

ここで read_me() 関数として指定:

  a =micros(); c =a-b; b =a; x [i] =c; i =i + 1; if(i ==15){for(int j =0; j <15; j ++){ch1 [j] =x [j];} i =0; }}  

この部分は割り込みピンで実行され、15の時間値を取り、配列に格納します。

別の関数 read_rc()

この部分は、10000マイクロ秒を超えるスペースを探します。この場合、分離スペースを検出し、スペースコードが次のセクションに移動することを検出します。

このスペースの後、次の6つの値はチャネル位置ごとにあり、ch [channelno]という名前の配列に格納されます。ここでは ch [1]、ch [2]、ch [3]、ch [4]、ch [5 ]、ch [6] 各チャネルの値を表します。

コード

  • RCレシーバーチャネル読み取りのコード
RCレシーバーチャネルのコード読み取り Arduino
 unsigned long int a、b、c; int x [15]、ch1 [15]、ch [7]、i; //値を格納する配列と変数を指定するvoidsetup(){Serial.begin(9600); pinMode(2、INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(2)、read_me、FALLING); //ピン2で割り込みを有効にする} void loop(){read_rc(); Serial.print(ch [1]); Serial.print( "\ t"); Serial.print(ch [2]); Serial.print ( "\ t"); Serial.print(ch [3]); Serial.print( "\ t"); Serial.print(ch [4]); Serial.print( "\ t"); Serial.print (ch [5]); Serial.print( "\ t"); Serial.print(ch [6]); Serial.print( "\ n"); delay(100);} void read_me(){//このコードは、PPMピン(ピン2または3)からRCレシーバーから値を読み取ります//このコードは0〜1000の値のチャネル値を提供します//-:ABHILASH:-// a =micros(); //ピン値fallingc =a-b;の場合、時間値aを格納します。 // 2つのピーク間の時間を計算しますb =a; // x [i] =c; // 15個の値をarrayi =i +1に保存します; if(i ==15){for(int j =0; j <15; j ++){ch1 [j] =x [j];} i =0;}} //コピーは一時配列からのすべての値を別の配列に格納します15回の読み取り後voidread_rc(){int i、j、k =0; for(k =14; k> -1; k-){if(ch1 [k]> 10000){j =k;}} //別の配列で分離スペース10000usを検出for(i =1; i <=6; i ++){ch [i] =(ch1 [i + j] -1000);}} //分離スペースの後に6つのチャネル値を割り当てます

製造プロセス

  1. RaspberryPiを使用して自宅の温度を監視します
  2. Arduinoのみを使用するDTMFデコーダー
  3. Arduinoを使用してモニターをAmbilightにする
  4. ARDUINOを使用した超音波浮揚機
  5. Arduinoを介したAtmelAT89シリーズのプログラミング
  6. Arduinoとスマートフォンを使用したDIY電圧計
  7. IoTを使用した心拍数モニター
  8. Arduino UnoWiFiを使用したWebServerBlink
  9. Arduino +処理+ PHPを使用したカーカウンター
  10. ECGを使用した心拍インジケーター
  11. arduinoを使用した自動恐竜ゲーム