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

TEA5767モジュールを備えたDIYレトロルックFMラジオ

コンポーネントと消耗品

>
Arduino Nano R3
× 1
TEA5767FMラジオモジュール
× 1
古いラジオからのアナログメーター
× 2
Adafruit標準LCD-16x2白地に青
× 1
ステレオポテンショメータ10kログ
× 1
Dクラスオーディオアンプモジュール2x3W
× 1
スピーカー:3W、4オーム
× 2
スピーカー:0.25W、8オーム
× 2
プッシュボタン付きロータリーエンコーダー
× 1
SparkFunプッシュボタンスイッチ12mm
× 4
1microFコンデンサ
× 2
LED(汎用)
× 3

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

>
Arduino IDE

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

このプロジェクトのベースは、16x2LCDに美しいアナログスケールを含むRodolfoBroco Manin(GitHubのRodLophus)のコードです。信号強度と周波数を読み取るための2つのアナログメーター、「ステレオ」LED、および「自動/手動検索」LEDを追加して、彼のコードを変更しました。また、レトロなディテールとして、周波数がコードで事前定義されている4つのメモリキーを追加したので、ラジオは完全にアンティークな外観になります。 TEA5767のオーディオ出力は、ステレオポテンショメータを介して、この目的には十分な2x3wの電力でDクラスのパワーアンプモジュールに接続されます。アンプには、適切な電力で2つの2ウェイスピーカーが接続されています。高音スピーカーは、1mfのコンデンサーで低音-中音域スピーカーから分離されています。アナログメーターは古い欠陥のあるラジオのものですが、どのメーターでも使用でき、針の完全な偏差はトリマーポテンショメーターで調整されます。このデバイスは、7805スタビライザーを介して直列に接続された2つのリチウム電池で駆動されるため、5V電源を安定させました。

<図>

TEA5767Arduinoライブラリはここにあります。回路図とコードを以下に示します。

周波数計の針は1Mhzごとに順次更新されますが、これはライブラリの結果だと思いますが、針のスムーズな動きの解決策を見つけたら喜んで受け入れます。特に強力なローカルFMステーションの場合、受信状態は良好ですが、弱いステーションでは、ステレオからモノラルへの、またはその逆の頻繁な中断のために、ステレオ/モノラルスイッチが必要です。次のコードアップデートでは、「ステレオ/モノラル」と「ミュート」スイッチを挿入する予定です。

アセンブリ全体が伸縮アンテナが取り付けられた適切なボックスに埋め込まれているため、レトロな外観の完全なFMステレオレシーバーがあります。

コード

  • コード
コード Arduino
 / * ArduinoLeonardoとPhilipsTEA5767モジュール(Arduino Unoバージョン)を使用したシンプルなラジオチューナー注:------ TEA5767の最大電源電圧は5Vです。 Arduinoが5Vを超えて供給していないことを確認してください-TEA5767は読み取り時に信号レベルインジケータを更新しません。信号レベルはステーションの変更時にのみ更新されます-エンコーダーまたはプッシュボタンでグリッチが発生した場合は、次のようなスナバネットワークを使用してください:Arduinoピン> ---- + ---- / \ / \ / \ / --------->エンコーダまたはスイッチピン| 100オームの抵抗-------- 47nFキャップ| --- GND接続:------------エンコーダー(「プッシュ可能な」シャフトスイッチ付き):プッシュボタン---> Arduinoピン2エンコーダーピン "A" ---> Arduinoピン3エンコーダーピン "B "---> Arduinoピン4-LCD:D7 ---> Arduinoピン8D6 ---> Arduinoピン9D5 ---> Arduinoピン10D4 ---> Arduinoピン11RS ---> Arduinoピン13RW ---> GNDE ----> Arduinoピン12VO ---> GNDへの2k2抵抗(コントラスト)-TEA5756モジュール:上面図:+-10--9--8--7--6- + | + ------ + ++ || | TEA | || || | 5767 | || || + ------ + ++ | +-1--2--3--4--5- + 1 ----> Arduino SDA2 ----> Arduino SCL3 ----> GND5 ----> + 5V6 ----> GND7 ---->オーディオ出力(右チャンネル)8 ---->オーディオ出力(左チャンネル)10 --->アンテナご興味をお持ちいただきありがとうございます。楽しんでください! [email protected] * /#include  #include  //https://github.com/andykarpov/TEA5767#includeでTEA5767ライブラリを入手> //エンコーダピン#defineENCODER_SW2#define ENCODER_A 3#define ENCODER_B 4#define button_freq1 A0#define button_freq2 A1#define button_freq3 A2#define button_freq4 A3 //カスタム文字#defineSCALE_CLEAR5 //ラジオダイヤルスケール#defineSTEREO_CHAR_S 6 // S "#define STEREO_CHAR_T 7 //定型化された" T "//グローバルステータスフラグ#defineST_AUTO 0 //自動モード(プッシュボタンで切り替え)#define ST_STEREO 1 //無線モジュールがステレオパイロットを検出しました#defineST_GO_UP 2 //エンコーダーが時計回りに回されている#defineST_GO_DOWN 3 //エンコーダーがカウンになっているterclockwise#define ST_SEARCH 4 //無線モジュールが自動検索を実行していますconstint LED =0; int analogsignal =0; int analogscale =0; int Stereoled =0; TEA5767ラジオ;フロート周波数=88;バイトステータス=0; LiquidCrystal lcd(13、12、11、10、9、8); / ******************** *********************** \ * updateScale()**「針」をラジオスケール上に移動します* \ ********* ********************************** / void updateScale(){int lcdBase =(周波数-88)* 4; // LCD列のピクセルインデックス(0 <=lcdBase <=(16 * 5))if(lcdBase> 79)lcdBase =79; int lcdMajor =lcdBase / 5; // LCD文字インデックス(0 <=lcdMajor <=15)int lcdMinor =lcdBase%5; //文字内のLCDピクセル列インデックス(0 <=lcdMinor <=4)if(lcdMajor> 0){//ラジオダイヤル針が左端の位置にない://左側の文字をクリーンアップする(前の文字を消去する針の位置)lcd.setCursor(lcdMajor-1、0); lcd.write(SCALE_CLEAR); } else lcd.setCursor(lcdMajor、0); lcd.write(lcdMinor); if(lcdMajor <15)//右端の位置ではありません:右側の文字をクリアしますlcd.write(SCALE_CLEAR);} / ************************* ******** \ * isrEncoder()* *エンコーダの割り込みをキャッチします* \ **************************** ** / void isrEncoder(){delay(50); //デバウンス(くだらないエンコーダーの場合)if(digitalRead(ENCODER_B)==HIGH){bitWrite(status、ST_GO_UP、1); } else bitWrite(status、ST_GO_DOWN、1);} / ***************************** \ * isrSwitch()**キャッチスイッチの割り込み* \ ***************************** / void isrSwitch(){delay(50); //デバウンスif(bitRead(status、ST_AUTO))bitWrite(status、ST_AUTO、0); else bitWrite(status、ST_AUTO、1);} / ******************* \ * Arduino Setup()* \ *********** ******** / void setup(){Serial.end(); pinMode(button_freq1、INPUT); digitalWrite(button_freq1、LOW); pinMode(button_freq2、INPUT); digitalWrite(button_freq2、LOW); pinMode(button_freq3、INPUT); digitalWrite(button_freq3、LOW); pinMode(button_freq4、INPUT); digitalWrite(button_freq4、LOW); pinMode(LED、OUTPUT); pinMode(6、OUTPUT); pinMode(7、OUTPUT); pinMode(5、OUTPUT); int i;バイトneedleChar [8]; //定型化された「S」バイトstereoChar1 [8] ={0b01111、0b11000、0b11011、0b11101、0b11110、0b11000、0b01111、0b00000}; lcd.createChar(STEREO_CHAR_S、stereoChar1); //定型化された「T」バイトstereoChar2 [8] ={0b11110、0b00011、0b10111、0b10111、0b10111、0b10111、0b11110、0b00000}; lcd.createChar(STEREO_CHAR_T、stereoChar2); //ダイヤルスケールのバックグラウンドバイトscaleChar [8] ={0b00000、0b00000、0b00000、0b00000、0b00000、0b00100、0b10101、0b10101}; lcd.createChar(SCALE_CLEAR、scaleChar); //すべての(5)可能な針の位置を表すカスタム文字を作成しますfor(int j =0; j <5; j ++){for(i =0; i <8; i ++)needleChar [i] =scaleChar [i ] | (0b10000>> j); lcd.createChar(j、needleChar); } lcd.begin(16、2); lcd.clear(); //ダイヤルスケールの背景を描画しますfor(i =0; i <16; i ++)lcd.write(SCALE_CLEAR); pinMode(ENCODER_SW、INPUT); digitalWrite(ENCODER_SW、HIGH); pinMode(ENCODER_A、INPUT); digitalWrite(ENCODER_A、HIGH); pinMode(ENCODER_B、INPUT); digitalWrite(ENCODER_B、HIGH); attachInterrupt(0、isrSwitch、RISING); attachInterrupt(1、isrEncoder、RISING); //無線モジュールを初期化しますWire.begin(); Radio.init(); Radio.set_frequency(frequency);} / ****************** \ * Arduino Loop()* \ *************** *** / void loop(){unsigned char buf [5]; intステレオ; int signalLevel; int searchDirection; int i; i =0; //自動/手動インジケーターを更新しますlcd.setCursor(12、1); lcd.write(bitRead(status、ST_AUTO)? 'A': 'M'); if bitRead(status、ST_AUTO)//自動/手動LED {digitalWrite(LED、LOW); } else {digitalWrite(LED、HIGH); } if(Radio.read_status(buf)==1){//無線データの周波数を取得=floor(Radio.frequency_available(buf)/ 100000 + .5)/ 10;ステレオ=Radio.stereo(buf); // 0 <=Radio.signal_level <=15 signalLevel =(Radio.signal_level(buf)* 100)/ 15; analogsignal =map(signalLevel、0,100,0,255); analogscale =map(frequency、88,114,0,255); Stereoled =map(stereo、0.7,1,0,255); analogWrite(5、analogsignal); //シグナルメーターanalogWrite(6、analogscale); //周波数計analogWrite(7、stereoled); //ステレオLED //無線ダイヤルを更新updateScale(); //シグナルレベルインジケーターlcd.setCursor(0、1); lcd.write(183); //アンテナのように見える日本語文字:)if(signalLevel <100)lcd.write( ''); lcd.print(signalLevel); lcd.write( '%'); //頻度インジケーターlcd.setCursor(6、1); if(周波数<100)lcd.write( ''); lcd.print(frequency、1); //モノラル/ステレオインジケーターlcd.setCursor(14、1); if(stereo){lcd.write(STEREO_CHAR_S); lcd.write(STEREO_CHAR_T); } else lcd.print( ""); } if(bitRead(status、ST_SEARCH)){//ラジオは自動検索を実行していますか? if(Radio.process_search(buf、searchDirection)==1){bitWrite(status、ST_SEARCH、0); }} if(digitalRead(button_freq2)==HIGH){// "memory"ボタンif(frequency> 94​​.8){frequency =94.8; Radio.set_frequency(周波数); bitWrite(ステータス、ST_GO_DOWN、0); } else {頻度=94.8; Radio.set_frequency(周波数); bitWrite(status、ST_GO_UP、0); } precrtajScale(); } if(digitalRead(button_freq1)==HIGH){if(frequency> 92){frequency =92; Radio.set_frequency(周波数); bitWrite(ステータス、ST_GO_DOWN、0); } else {頻度=92; Radio.set_frequency(周波数); bitWrite(status、ST_GO_UP、0); } precrtajScale();} if(digitalRead(button_freq3)==HIGH){if(frequency> 97){frequency =97; Radio.set_frequency(周波数); bitWrite(ステータス、ST_GO_DOWN、0); } else {頻度=97; Radio.set_frequency(周波数); bitWrite(status、ST_GO_UP、0); } precrtajScale(); } if(digitalRead(button_freq4)==HIGH){if(frequency> 101.2){frequency =101.2; Radio.set_frequency(周波数); bitWrite(ステータス、ST_GO_DOWN、0); } else {頻度=101.2; Radio.set_frequency(周波数); bitWrite(status、ST_GO_UP、0); } precrtajScale();} //エンコーダーを時計回りに回す(+)if(bitRead(status、ST_GO_UP)){if(bitRead(status、ST_AUTO)&&!bitRead(status、ST_SEARCH)){//自動検索モード(のみ無線が現在検索を実行していない場合に処理されます)bitWrite(status、ST_SEARCH、1); searchDirection =TEA5767_SEARCH_DIR_UP; Radio.search_up(buf); delay(50); } else {//手動チューニングモードif(frequency <108){frequency + =0.1; Radio.set_frequency(周波数); }} bitWrite(status、ST_GO_UP、0); } //エンコーダーが反時計回りに回転している(-)if(bitRead(status、ST_GO_DOWN)){if(bitRead(status、ST_AUTO)&&!bitRead(status、ST_SEARCH)){//自動検索モード(無線が現在検索を実行していません)bitWrite(status、ST_SEARCH、1); searchDirection =TEA5767_SEARCH_DIR_DOWN; Radio.search_down(buf); delay(50); } else {//手動チューニングモードif(周波数> 88){周波数-=0.1; Radio.set_frequency(周波数); }} bitWrite(status、ST_GO_DOWN、0); }} void precrtajScale(){int i; lcd.clear(); for(i =0; i <16; i ++)lcd.write(SCALE_CLEAR);} 

回路図


製造プロセス

  1. Bluetoothメッシュを使用した設計:チップまたはモジュール?
  2. DIY Virtual Alike NEST Thermostat with Node-RED
  3. RPiを使用した環境センサーAPI
  4. RaspberryPiを使用した簡単なDIY赤ちゃん泣き検出器
  5. Arduinoを使用したDIYの最もシンプルなIV9Numitron時計
  6. 例を使用して Python でモジュールをインポートする
  7. Arduinoで水滴をキャプチャする
  8. DIYバーチャルリアリティスケートボード
  9. ArduinoベースのシャワーキャビンFMラジオ
  10. ArduinoMegaをNEO-6MGPSモジュールとインターフェースする方法
  11. ArduinoとNokia5110ディスプレイを備えたDIY電圧計