DIY Si4730オールバンドラジオ(LW、MW、SW、FM)
コンポーネントと消耗品
> | | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
アプリとオンラインサービス
> | | |
このプロジェクトについて
Arduinoラジオについて言及するとき、あなたは常に現代のFMラジオ(ヨーロッパでは88-108 MHz)を思い浮かべます。 LW、MW、およびSW帯域は、0.2〜30MHzの範囲をカバーします。 SWは特に興味深いです。短波帯の電波は、電離層と呼ばれる大気中の帯電した原子の層で反射または屈折する可能性があります。したがって、短波ラジオは、大陸全体またはそれ以降の非常に長距離の通信に使用できます。
以下に、上記のすべての帯域をカバーするラジオの開発を紹介します。このラジオの「心臓部」はSiliconLabsのSi4730ICで、AliExpressから小さな開発ボードの形で数ドルで購入できます。
<図>
このボードは、I2Cプロトコルを使用してArduinoによって制御されます。コードはJulioC。Rosaによって作成され、コードとスキームとともに以下に示すSi4735-I2C-R4ライブラリに基づいています。このチップ(Si4730)はAM / FM専用であるとメーカーが言っていますが、実際にはSWでも動作します。オーディオ出力には、非常に安価で機能的なミニデジタルアンプボード2 * 3WPAM8403クラスDを使用しています。
このデバイスは適切なハウジングに組み立てられており、完全な小型のワールドバンドラジオを表しています。それ以外の場合、私は比較的人口密度の高い1階に住んでいて、長さ10メートルのアンテナを使用しているため、受信はかなり弱いですが、それでも私が所有する商用品質のポケットラジオに匹敵します。
そして最後に、このチップは、TECSUN、DEGEN、SANGEANなどの多くの有名な携帯ラジオブランドで使用されていることを述べておきます。
コード
コード C / C ++
/ ********************************************** ************************************************** ** JCR Si4730 / 5レシーバーLW / MW / SW / FM-共有するバージョン。配線の詳細については、回路図を参照してください。 Julio C. Rosa著-CesarSound- 2019年5月コマンド:radio.volumeUp(); radio.volumeDown(); radio.seekDown(); radio.seekUp(); radio.mute(); radio.unmute(); radio.setMode(FM); radio.tuneFrequency(9490); radio.getStatus(); radio.getVolume(); radio.getMode(); radio.getMute(); radio.toggleMute(); RSQMetrics rsq; radio.getRSQ(&rsq); (rsq.stereo); print_number(rsq.stereoBlend); print_number(rsq.SNR); (rsq.seekable); print_number(rsq.RSSI); print_mode(); print_station_freq(); print_volume(); print_mute(); print_home(); radio.getCallSign(callSign); printp(rds1); Serial.write(callSign); radio.getProgramTypeStr(programType); Serial.write(programType); (rds1); (rds2); (rds3); (rds4); (rds5); ********************************************** ************************************************** ***** /// Library#include #include #include #include "Wire.h" // I / O設定ロータリーr =ロータリー(2、3 ); LiquidCrystal lcd(12、13、7、6、5、4); const byte band =A0; //変数設定unsignedint freq =880; unsigned int freqmax =10800; unsigned int freqmin =50; unsigned int fstep =10; unsigned int freqold; unsigned int buttonstate; unsigned int count =15; //radio.Si4735という名前のSi4730 / 5のインスタンスを作成しますradio; void setup(){lcd.begin(16、2); PCICR | =(1 <>"); lcd.setCursor(3、0); lcd.print( ":"); lcd.setCursor(13、0); lcd.print( "kHz");} //エンコーダーInterruptISR(PCINT2_vect){unsigned char result =r.process(); if(result){if(result ==DIR_CW){freq =freq + fstep; if(freq> =freqmax){freq =freqmax; }} else {freq =freq --fstep; if(freq <=freqmin){freq =freqmin; }}}} void loop(){if(freqold!=freq){tune(); } freqold =freq; lcd.setCursor(5、0); lcd.print(freq); lcd.print( ""); buttonstate =digitalRead(band); // Seletor de bandas if(buttonstate ==LOW){inc_preset(); while(digitalRead(band)==0); } // Medidor-S-Meter(dBu)e SNR(dB)-RSQMetricsrsqを使用する場合はコメントを解除します。 radio.getRSQ(&rsq); lcd.setCursor(0、2); lcd.print( "dBu:"); lcd.print(rsq.RSSI); lcd.setCursor(9、2); lcd.print( "dB:"); lcd.print(rsq.SNR);} //プリセットINCvoidinc_preset(){count ++; if(count> 15)count =1; bandpresets(); delay(100);} //プリセットSeletorde Bandasvoid bandpresets(){lcd.setCursor(0、0);スイッチ(カウント){ケース1:周波数=370; radio.setMode(LW); radio.tuneFrequency(freq); command_am(); fstep =5; lcd.print( "LW1");壊す;ケース2:周波数=620; radio.setMode(AM); radio.tuneFrequency(freq); fstep =5; lcd.print( "MW1");壊す;ケース3:周波数=840; radio.setMode(AM); radio.tuneFrequency(freq); fstep =5; lcd.print( "MW2");壊す;ケース4:周波数=3700; radio.setMode(SW); radio.tuneFrequency(freq); fstep =5; lcd.print( "SW0");壊す;ケース5:freq =4985; radio.setMode(SW); radio.tuneFrequency(freq); fstep =5; lcd.print( "SW1");壊す;ケース6:freq =6010; radio.setMode(SW); radio.tuneFrequency(freq); fstep =1; lcd.print( "SW2");壊す;ケース7:freq =7200; radio.setMode(SW); radio.tuneFrequency(freq); fstep =1; lcd.print( "SW3");壊す;ケース8:freq =10000; radio.setMode(SW); radio.tuneFrequency(freq); fstep =5; lcd.print( "SW4");壊す;ケース9:freq =11940; radio.setMode(SW); radio.tuneFrequency(freq); fstep =5; lcd.print( "SW5");壊す;ケース10:freq =13710; radio.setMode(SW); radio.tuneFrequency(freq); fstep =5; lcd.print( "SW6");壊す;ケース11:freq =15400; radio.setMode(SW); radio.tuneFrequency(freq); fstep =5; lcd.print( "SW7");壊す;ケース12:freq =17560; radio.setMode(SW); radio.tuneFrequency(freq); fstep =5; lcd.print( "SW8");壊す;ケース13:freq =21505; radio.setMode(SW); radio.tuneFrequency(freq); fstep =5; lcd.print( "SW9");壊す;ケース14:freq =27015; radio.setMode(SW); radio.tuneFrequency(freq); fstep =5; lcd.print( "CB1");壊す;ケース15:freq =9700; radio.setMode(FM); radio.tuneFrequency(freq); fstep =10; lcd.print( "FM1");壊す; }} // Sintonizador-tunnervoid tune(){radio.tuneFrequency(freq);} //コマンドソフトミュートオフ/ AVC max gainvoid command_am(){radio.setProperty(PROP_AM_SOFT_MUTE_MAX_ATTENUATION、0); // 0(オフ)-63 radio.setProperty(PROP_AM_AUTOMATIC_VOLUME_CONTROL_MAX_GAIN、0x3A98); // 1000-7800}
ライブラリ C / C ++
プレビューなし(ダウンロードのみ)。