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

ArduinoでRC受信機のPPM信号をデコードする──ステップバイステップガイド

必要な部品と材料

使用するアプリとオンラインサービス

プロジェクト概要

RC送信機は暗号化されたリンクと長距離通信が可能で、ワイヤレスリンクが必要なプロジェクトに最適です。RC受信機はサーボ駆動用に設計されており、各チャンネルにGND、VCC、信号の3ピンがあります。信号はパルス幅変調(1.5msで中立、1-2msで最小/最大)です。

各チャンネルをArduinoのピンにつなぐ方法だと、配線とピン数が大量に必要になり、Arduinoの割り込みピン(通常2本)以上のチャンネルを読むには遅延が生じます。これを解決するため、多くの受信機には全チャンネルデータを1信号にまとめたPPMピンが備わっています。

PPMピン信号の構成

ArduinoでRC受信機のPPM信号をデコードする──ステップバイステップガイド
ArduinoでRC受信機のPPM信号をデコードする──ステップバイステップガイド

PPM信号は、データパケットがブランク期間(約11500μs)で区切られています。パケット内のパルス間隔が各チャンネルの値に対応します。6チャンネル受信機なら7つのパルス(同期用1つ+チャンネル6つ)が含まれます。

コードではまずブランク期間を検出し、その後の6パルスを各チャンネル値として記録します。

コードの使い方

ArduinoでRC受信機のPPM信号をデコードする──ステップバイステップガイド

read_me() 関数:割り込み(Pin 2立ち下がり)で呼ばれ、15個の時間間隔を配列に格納します。

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;
}

read_rc() 関数:メインループで呼ばれ、ch1配列から10000μs以上の間隔(ブランク期間)を探し、その直後の6値をチャンネル値 ch[1]〜ch[6] として抽出します。

for (k = 14; k >= 0; k--) { if (ch1[k] > 10000) { j = k; } }
for (i = 1; i <= 6; i++) { ch[i] = (ch1[i + j] - 1000); }

Arduinoスケッチ(RC受信機チャンネル読み取り)

unsigned long int a, b, c;
int x[15], ch1[15], ch[7], i;

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(2), read_me, FALLING);
}

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() {
  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;
  }
}

void read_rc() {
  int i, j, k = 0;
  for (k = 14; k > -1; k--) { if (ch1[k] > 10000) { j = k; } }
  for (i = 1; i <= 6; i++) { ch[i] = (ch1[i + j] - 1000); }
}

製造プロセス

  1. Raspberry Piダッシュボードで家庭の温度を監視する
  2. ArduinoだけでDTMFデコーダーを構築 – 外付けIC不要
  3. Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
  4. Arduinoで超音波レベーション(浮遊)装置を自作:ステップバイステップガイド
  5. Arduino UnoでAtmel AT89シリーズを簡単プログラミング──ステップバイステップガイド
  6. Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
  7. ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
  8. Arduino UNO WiFi Webサーバー:ブラウザからLEDをON/OFF制御
  9. スマート駐車場カウンター:Arduino、Processing、PHPでリアルタイム車両管理
  10. リアルタイム心拍LEDビジュアライザー – ECGパワード
  11. Arduinoで自動化するChrome恐竜ゲーム – LDRとPythonで障害物を検知してジャンプ