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

Arduino Nanoで作るAMラジオ音楽送信機

部品と材料

部品数量備考
Arduino Nano R31他のArduinoでも可
抵抗 10kΩ2
コンデンサ 10µF1
ブレッドボード1

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

プロジェクト概要

ATmegaマイコンで面白いことができると思い、Arduino NanoでAM送信機を作ってみました(他のArduinoボードでも動作します)。

問題は、デジタルデバイスで振幅変調(AM)をどう実現するかです。AMとは、送信したい入力信号の振幅に応じて搬送波の振幅を変化させることです。数学的には、搬送波と入力信号を乗算することに相当します。しかしATmegaの出力はデジタル(High/Lowの2値)のみ。正直なところ、Arduinoから「真のAM」を得ることはできません。

それでも、通常のAMラジオ受信機で明確に聴取できる出力信号を生成することは可能です!

解決策は、アナログ入力信号をPWM信号に変換し、ATmega MCUのADCと16ビットタイマー/カウンター1を使用することです。タイマー/カウンター2で搬送波信号を生成し、31kHz〜8MHzの広い範囲で周波数を変えられます。この搬送波をピンD11からPWM信号のリズムで出力します。AMラジオがPWMに対してローパスフィルターとして働くため、元のオーディオ信号が復元されます。

これは概念実証(Proof of Concept)なのでシンプルにしました。本格的なRF送信機として使う場合は、オーディオ入力にアンチエイリアシング用ローパスフィルター、RF出力に高調波対策用ローパスフィルターを追加してください。

コード:Arduino AM Transmitter

/* This work is licensed under Creative Commons Attribution-ShareAlike 4.0 International License.
   https://creativecommons.org/licenses/by-sa/4.0/ */

#define ANTENNA_PIN PB3 // Arduino Nano/Uno D11

void setup() {
  Serial.begin(115200);
  
  // 搬送波周波数生成
  uint32_t fTransmit = 600; // kHz
  DDRB |= (1 << ANTENNA_PIN);
  TCCR2A = (0 << COM2A1) + (1 << COM2A0); // 比較一致でOC0Aトグル
  TCCR2A |= (1 << WGM21) + (0 << WGM20);  // CTCモード
  TCCR2B = (0 << CS22) + (0 << CS21) + (1 << CS20); // プリスケーラなし
  OCR2A = F_CPU / (2000 * fTransmit) - 1;
  
  char strbuf[255];
  sprintf(strbuf, "Will broadcast at %d KHz", (F_CPU / (2 * (1 + OCR2A)) / 1000));
  Serial.println(strbuf);
  
  // PWM信号生成(10ビット Fast PWM)
  TCCR1A |= (1 << WGM11) + (1 << WGM10);
  TCCR1B = (1 << WGM12);
  TCCR1B |= (0 << CS12) + (0 << CS11) + (1 << CS10); // プリスケーラなし
  TIMSK1 = (1 << OCIE1A) + (1 << TOIE1);
  
  // ADC設定
  ADMUX = (1 << REFS1) + (1 << REFS0); // 内部1.1V基準
  ADCSRA = (1 << ADEN) + (1 << ADSC) + (1 << ADATE); // オートトリガー、フリーランニング
  ADCSRA |= (1 << ADPS2) + (1 << ADPS1) + (0 << ADPS0); // 64分周 → 18.5kサンプルレート
  DIDR0 = (1 << ADC0D);
}

ISR(TIMER1_OVF_vect) {
  uint8_t adcl = ADCL;
  uint8_t adch = ADCH;
  OCR1A = (adch << 8) + adcl;
  DDRB |= (1 << ANTENNA_PIN);
}

ISR(TIMER1_COMPA_vect) {
  DDRB &= ~(1 << ANTENNA_PIN);
}

void loop() {
  // メインループは空(割り込み駆動)
}

回路図

Arduino Nanoで作るAMラジオ音楽送信機

注意: このプロジェクトは実験・教育目的です。電波法等の関連法規を遵守し、他の通信に干渉しないようご注意ください。

製造プロセス

  1. クラシックジュークボックスの遺産と進化
  2. 楽譜:中世写本から現代出版まで——業界概観
  3. 信号機:工学、歴史、未来の革新
  4. 自作LUMAZOID:Arduino音楽ビジュアライザーDIYガイド
  5. Bluetooth操作のArduinoスパイボットを自作する
  6. ArduinoでRC受信機のPPM信号をデコードする──ステップバイステップガイド
  7. FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
  8. 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
  9. 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
  10. ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
  11. サーミスタを使った温度測定: Arduinoステップバイステップガイド