- RDA5807M IC
- IC PT2258
- Vázlatos
- Szükséges alkatrészek
- Hogyan kapjuk meg az adatokat a Google Segédtől?
- Adafruit-fiók létrehozása a kommunikációhoz
- IFTTT közvetítő beállítása az FM rádióhoz
- Arduino kód és magyarázat
- A hangvezérelt FM rádió tesztelése Arduino használatával
- További fejlesztés
Manapság a legtöbben szeretünk zenét hallgatni, okostelefonunkkal. Néhány évvel ezelőtt azonban nem ez volt a helyzet, abban az időben az FM-rádiók voltak az első választás a zene, podcastok, hírek és mások hallgatásához. Manapság senki nem hallgatja a rádiót zenére, hírekre és másokra, a nagymama és a nagypapa kivétel.
Tehát, hogy egy kicsit felélesszem az FM rádió régi dicsőségét, ebben a projektben egy hangvezérelt FM rádiót fogok építeni a Google Assistance és a népszerű RDA5870M Superheterodyne Receiver IC segítségével.
Ellenőrizze a korábbi FM rádió áramköröket is:
- Arduino alapú FM rádió
- Intelligens telefon által vezérelt FM rádió az Arduino segítségével
- Egyszerű FM adó áramkör
- Hogyan lehet felépíteni az FM adó áramkört
RDA5807M IC
Az RDA5807M egy nagyon modern, egy chipes FM sztereó rádió tuner, teljesen integrált szintetizátorral, IF szelektivitással, RDS / RBDS és MPX dekóderrel, amely támogatja az 50 MHz és 115 MHz közötti frekvenciatartományt. Ez egy nagyon olcsó egy chipes FM-vevő IC, amelynek működéséhez nagyon kevés külső alkatrészre van szükség. Ez az IC az I2C interfészt használja bármely mestereszközzel való kommunikációhoz, így mindez a szolgáltatás nagyon alkalmassá teszi hordozható eszközök számára.
Ennek az IC-nek van egy belső audio processzora, amely felelős a kiváló hangminőségért.
Néhány alapvető jellemző:
- Világméretű frekvenciasávok támogatása
- Az RDS / RBDS támogatása
- Digitális alacsony-IF tuner
- Teljesen integrált digitális frekvenciaszintetizátor
- Digitális automatikus erősítés vezérlés (AGC)
- Basszuserősítés
- Közvetlenül támogassa a 32Ω ellenállást
- Integrált LDO szabályozó és egyebek
Tudjon meg többet erről az IC-ről, ha végigmegy az Arduino alapú FM rádión az RDA5807 segítségével.
IC PT2258
A PT2258 egy IC, amelyet hatcsatornás elektronikus hangerőszabályozóként használtak, ez az IC CMOS technológiát használ, amelyet kifejezetten többcsatornás audio-video alkalmazásokhoz terveztek.
Ez az IC egy I2C vezérlő interfészt biztosít 0 és -79 dB közötti csillapítási tartományban 1 dB / lépés sebességgel, és 20 tűs DIP vagy SOP csomagban érkezik.
Néhány alapfunkció tartalmaz-
- 6 bemeneti és kimeneti csatorna (5.1 otthoni audiorendszerekhez)
- Választható I2C cím (Daisy-chain alkalmazáshoz)
- Magas csatorna elválasztás (alacsony zajszintű alkalmazásokhoz)
- S / N arány> 100dB
- Az üzemi feszültség 5–9 V
Korábban kifejtettük ezt az IC-t a PT2258 digitális hangerő-szabályozó projektben. Ellenőrizheti a projektet, ha többet szeretne megtudni erről az IC-ről.
Vázlatos
A Google Assistant által vezérelt FM rádió kapcsolási rajza az alábbiakban látható:
Szükséges alkatrészek
- NodeMCU mikrokontroller - 1
- PT2258 digitális hangerőszabályzó - 1
- RDA5807 FM rádió modul - 1
- SPDT relé 6V - 1
- 1n4007 Dióda - 1
- Csavaros kapocs 5mmx2 - 1
- 3,5 mm-es fejhallgató-csatlakozó - 1
- Logikai szint konverter - 1
- 10K ellenállás, 5% - 4
- 150K ellenállás, 5% - 4
- 100K ellenállás, 5% - 2
- 10uF kondenzátor - 6
- 0,1 uF kondenzátor - 1
- Jumper huzal - 10
Hogyan kapjuk meg az adatokat a Google Segédtől?
A fenti kép bemutatja a Google Assistant és a NodeMCU közötti kommunikációs folyamat alapgondolatát.
A Google asszisztens jogosult az Adafruit IO szerver adatainak módosítására, hogy az IFQT az MQTT-vel alkuszként működjön.
Ha bármilyen adatváltozás történik a szerver oldalon (Adafruit IO), az a NodeMCU oldalán is megjelenik. Ennek eléréséhez kövesse az alábbi utasításokat-
Adafruit-fiók létrehozása a kommunikációhoz
Először hozzon létre egy Adafruit IO fiókot. Jelentkezzen be az Adafruit IO-ba a hitelesítő adatokkal, vagy regisztráljon, ha nincs fiókja. Korábban az Adafruit IO-t használtuk az Alexa vezérelt LED, a Raspberry Pi otthoni automatizálás és sok más IoT alapú projekt felépítéséhez.
Miután bejelentkezett az Adafruit fiókba, Kattintson az Irányítópultok, majd a Művelet> Új irányítópult létrehozása elemre .
Ezután új nevet és rövid leírást adunk új irányítópultunkról.
Az irányítópult létrehozása után be kell szereznie a felhasználónevet és az aktív kulcsot a fiókjából, amint az Arduino kódban megköveteli. Ezt a KULCS ikonra kattintva érheti el.
Ezután készítsen három blokkot; egy Toggle blokk, egy nyomtávú blokk, egy szöveg blokk.
A blokkok nagyon fontosak, mivel ezek a blokkok felelősek a google segítség és a NodeMCU közötti kommunikációért.
Blokk létrehozásához kattintson a jobb felső sarokban található + jelre.
Ezután elkészítjük a blokkokat.
Ezután be kell állítania minden blokkot, ehhez be kell jelölnie egy adott blokkot, és kattintson a Következő lépés gombra .
Ennél a projektnél nincs szükség a beállítások megváltoztatására, kivéve a váltógombot.
A váltógomb szövege nagybetűvel jelenik meg, kis betűvé kell tennie, és frissítenie kell a módosításokat.
Ez az, minden, amire szüksége van az adafruit IO-ban.
Az utolsó képernyőm így néz ki-
IFTTT közvetítő beállítása az FM rádióhoz
Mint mindig, Regisztráció, ha nem regisztráltál vagy Bejelentkezés ha már van egy fiókot.
Most létre kell hoznia egy kisalkalmazást. Ehhez kövesse az alábbi lépéseket:
Kisalkalmazás létrehozásához kattintson a fiók ikonjára, majd a Létrehozás gombra.
A létrehozás képernyőn kattintson a + ikonra, ha.
Ezt követően engedélyeznie kell a hozzáférést a Google-fiókjához.
Ehhez meg kell keresnie a Google Segédet a keresősávban, és kattintson a Google Segéd ikonra.
A Következő képernyőn ki kell választanunk egy ravaszt, Ne feledje, hogy az Adafruit IO szerveren három blokkot készítettünk, ennek a három blokknak meg kell adnunk a triggereket.
Először is, a Rádióállomás blokkot, ehhez ki kell választanunk a Mondjon mondatot egy szövegösszetevővel .
A következő képernyőn be kell írnunk, mit akarsz mondani, és mire kell válaszolnia a Google asszisztensnek.
Ezután kattintson a Triger létrehozása gombra.
A következő képernyő valahogy így néz ki, ahogy befejezte a Ha részt, itt az ideje a majd részt, kattintson a + jel után majd .
Megjelenik az alábbi képhez hasonló képernyő, keresse meg az Adafruit szót, és kattintson az Adafruit ikonra.
Ezután engedélyezze Adafruit-fiókját az IFTTT-nél, majd kattintson a Csatlakozás gombra .
Ezután kattintson az Adatok küldése az Adafruit IO-ra elemre.
Ezután egy olyan legördülő menü jelenik meg, amelyet korábban létrehozott az Adafruit fiókban.
Válasszon egyet, és kattintson a művelet létrehozása gombra, ezt mindháromnál meg kell tennie.
És ezzel az IFTTT folyamat végét jelzi, a végső kisalkalmazásom képernyője így néz ki,
Arduino kód és magyarázat
Az Arduino kód az IC és az Adafruit IO IFTTT és a WIFI közötti kommunikáció kezelésére szolgál. Az Arduino Nano FM rádió teljes kódja a bemutató végén található. A kód kissé hosszú és összetett, itt soronként ismertettük a teljes kódot.
Először fel kell vennünk az összes szükséges könyvtárat, ezek:
#include
Ezután adja meg a WI-FI SSID-jét és jelszavát, ez az útválasztó SSID-je és JELSZÓJA.
const char * ssid = "Android"; // router SSID-je const char * password = "12345678"; // Az útválasztó jelszava
Ezután definiálunk két logikai értéket és egy változót, a logikai értékeket használjuk az IC kommunikációs állapotának megtartására, a hangerő változóval pedig a hangerő szintjét.
bool potStatus; // 1, amikor az MCU és az IC bool radioStatus között kommunikáció jön létre; // 1, amikor az MCU és az IC között kommunikáció jön létre int térfogat = 15; // az alapértelmezett hangerő az IC-vel kezdődik
Ezután felállítottunk egy Relay_Pin nevű GPIO tűt az erősítő be- vagy kikapcsolásához.
#define Relay_Pin D7 // Ez a csap a rádió be- és kikapcsolására szolgál
Ezután meg kell határoznunk az Adafruit IO-val való kommunikációhoz szükséges összes meghatározást.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 // 8883 használata SSL-hez #define AIO_USERNAME "debashis13" // Cserélje le #define AIO_KEY "aio_Qyal47xo1fYhc55QB1lEPEirnoF projekt felhasználónévvel
Az alábbi FIX_BAND definíciók a könyvtár által használt saját tulajdonú definíciók.
A következő definiált utasítás állítja be a modul belső térfogatát.
#define FIX_BAND RADIO_BAND_FM // <A sávot ez a vázlat fogja hangolni: FM. #define FIX_RADIO_VOLUME 6 /// <A modul alapértelmezett kötete.
Ezután készítse el a PT2258, az RDA5807M és a WiFiClient szükséges objektumait .
PT2258 digitalPot; // PT2258 Object RDA5807M rádió; // RDA5807M objektum WiFiClient kliens; // WiFiClient Object
Ezután állítsa be az MQTT kliens osztályt a WiFi kliens és az MQTT szerver és a bejelentkezési adatok megadásával.
Adafruit_MQTT_Client mqtt (& kliens, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// Állítsa be az MQTT kliens osztályt a WiFi kliens és az MQTT szerver és a bejelentkezési adatok megadásával.
Akkor fel kell iratkoznunk egy hírcsatornára. Mitől kérdezheti?
Ha néhány érték, néhány paraméter megváltozik az Adafruit szerveren, a változások itt fognak megjelenni.
Adafruit_MQTT_Subscribe Radio_Station = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Radio_Station"); // A hírcsatorna előfizetésére használt módszerek Adafruit_MQTT_Subscribe Toggle_FM = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Toggle_FM"); // A hírcsatorna előfizetésére használt módszerek Adafruit_MQTT_Subscribe Volume = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Volume"); // A hírcsatorna feliratkozására használt módszerek
Az alábbiakban látható az MQTT_connect () függvény prototípusa.
void MQTT_connect (); // Funkció prototípus az MQTT Connect számára
Ezután elkezdjük a beállítási folyamatot. Eleinte az UART kommunikációt a start módszerrel kezdjük.
Soros kezdet (9600); // UART begin Serial.println (); // hozzáad egy extra sort a Serial.println () közötti távolsághoz; // egy extra sort ad a térközökhöz. Ezután a szokásos dolgokat megtesszük, hogy csatlakozzunk a WiFI-hez **************** a WiFi-kapcsolathoz szükséges összes szokásos dolog ************************ / Serial.print ("csatlakozás a" -hoz); Soros.println (ssid); WiFi.mode (WIFI_STA); WiFi.begin (ssid, jelszó); while (WiFi.status ()! = WL_CONNECTED) {késleltetés (500); Soros.nyomtatás ("."); } Soros.println (""); Serial.println ("WiFi csatlakoztatva"); Serial.println ("IP-cím:"); Serial.println (WiFi.localIP ()); / ***************** a WiFi-kapcsolathoz szükséges összes szokásos dolog ************************ /
Ezután hívja meg a Wire.begin () metódust az I2C kapcsolat létrehozásához, és a Wire.setClock () metódust hívjuk meg az I2C frekvencia 100 kHz-re történő rögzítésére, mivel ez a PT2258 IC teljes sebessége.
Wire.begin (); // az I2C Wire.setClock (100000) kezdő sorrend megkezdése; // az I2C órajel beállítása 100KHz-re
Ezután hívja meg az init () metódust mind a PT2258, mind az RDA5807 IC számára, és tartsa vissza a visszatérési állapotot az előzőleg meghatározott logikai tartományokba.
potStatus = digitalPot.init (); radioStatus = radio.init ();
Ezután ellenőrizze, hogy az MCU képes volt-e kommunikálni az IC-vel, vagy sem. Ezt két, ha más állítással tesszük.
if (potStatus) {Serial.println ("Talált PT2258 eszköz!"); } else {Serial.println ("Nem sikerült elindítani a PT2258-at"); } if (radioStatus) {Serial.println ("Talált RDA5807M eszköz!"); } else {Serial.println ("Nem sikerült elindítani az RDA5807M-et"); }
Ezután hívja meg az előfizetési metódust az MQTT könyvtárból. Az MQTT szerver értesítést kap, ha bármilyen változás történt az előfizetett hírcsatornáinkban.
mqtt.subscribe (& Radio_Station); // MQTT előfizetés beállítása a Radio_Station hírcsatornához mqtt.subscribe (& Toggle_FM); // MQTT-előfizetés beállítása a Toggle_FM hírcsatornához mqtt.subscribe (& Volume); // MQTT-előfizetés beállítása a kötetcsatornához
Ezután a Relé csapot kimenetnek és a csap állapotát LOW-ra állítjuk
pinMode (D7, OUTPUT); digitalWrite (D7, LOW);
Ezután állítson be egy előre meghatározott rádióerősséget, ez a paraméter az RDA5807 IC belső hangerejét állítja be, amely a telepítési folyamatunk végét jelzi.
radio.setVolume (FIX_RADIO_VOLUME); // ezután beállítjuk a rádió hangerejének normalizálását.setMono (false); // nem akarjuk, hogy a chip mono kimenetet adjon a radio.setMute (false); // nem akarjuk, hogy a chip elnémuljon
A ciklust az MQTT_connect () függvény meghívásával kezdjük, amely kapcsolatot létesít az MQTT szerverrel.
Az MQTT connect funkcióban háromszor próbálunk kapcsolatot létesíteni az MQTT szerverrel.
Ha ez sikeres, kapunk egy Sikeres üzenetet, különben hibaüzenetet kapunk.
void MQTT_connect () {int8_t ret; // 8 bites egész szám az újrapróbálkozások tárolásához // Stop, ha már csatlakozik. if (mqtt.connected ()) {return; } Serial.print ("Csatlakozás az MQTT-hez…"); uint8_t újrapróbálkozás = 3; míg a ((ret = mqtt.connect ())! = 0) {// connect 0 értéket ad vissza a csatlakoztatott Serial.println (mqtt.connectErrorString (ret)) számára; Serial.println ("Az MQTT kapcsolat újrapróbálkozása 5 másodperc múlva…"); mqtt.donnonnect (); késés (5000); // várjon 5 másodpercet újra; if (újrapróbálkozás == 0) {// alapvetően meghal, és várja meg, amíg a WDT visszaállít (1); }} Serial.println ("MQTT csatlakoztatva!"); }
Ezután először hozzon létre egy mutatót egy Adafruit_MQTT_Subscribe objektumra. Ezt használjuk annak meghatározására, hogy mely előfizetés érkezett.
Adafruit_MQTT_Subscribe * előfizetés;
Ezután várunk egy előfizetői üzenetre.
Az mqtt.readSubscription (timeInMilliseconds) egy bizonyos ideig meghallgatja az MQTT szerverről érkező üzeneteket.
Ha időtúllépés előtt üzenetet kap, akkor egy mutatóval válaszol az előfizetésre, vagy csak időtúllépés és 0 értéket ad vissza. Ebben az esetben 2 másodpercet vár.
while ((előfizetés = mqtt.readSubscription (20000)))
Időtúllépés esetén a while ciklus kitöltése sikertelen. Ha nem, összehasonlítjuk az előfizetéseket, és megkapjuk az ismert előfizetéseket.
Ebben a kódban mindhárom feliratkozott hírcsatornánk esetében ezt tesszük.
if (előfizetés == & Toggle_FM) if (előfizetés == & Radio_Station) if (előfizetés == & mennyiség)
Ez volt a fő három paraméter, amelyet meg kell értenie a hurok szakaszban.
A kód ezen szakasza a Toggle_FM hírcsatorna figyelésére és beállítására szolgál .
if (subscription == & Toggle_FM) // ez a Toggle_FM hírcsatorna {Serial.print (F ("Got:")) üzenet; Serial.println ((char *) Toggle_FM.lastread); // csak a hibakereséshez nyomtassa ki a feed adatait, ha (String ((char *) Toggle_FM.lastread) == String ("be")) // a kapott adatokat összehasonlítjuk egy ismert paraméterrel, ebben az esetben arra számítunk, hogy "on "a sever-ből származik {//, de mielőtt ezt megtennénk, meg kell csinálnunk egy karakterláncot, amely szuper könnyűvé teszi az összehasonlítást a digitalWrite-ben (D7, HIGH); // ha kapunk egy" on "karakterláncot a készülő szerverről a D7 tű HIGH} if (String ((char *) Toggle_FM.lastread) == String ("off")) // ismét ellenőrizzük, hogy a sztring ki van-e kapcsolva {digitalWrite (D7, LOW); // ha kapunk egy "off" karakterlánc a szerverről, a D7 tűt LOW-ra állítjuk}}
A kód ezen szakasza a Radio_Station hírcsatorna figyelésére és beállítására szolgál .
if (előfizetés == & Radio_Station) {Serial.print (F ("Got:")); Serial.println ((char *) Radio_Station.lastread); if (String ((char *) Radio_Station.lastread) == String ("Big FM")) // halljuk, hogy ellenőrizzük a Big FM {radio.setBandFrequency (FIX_BAND, 9270) karakterláncot; // ha a fenti feltétel igaz, akkor a radoi csatornát 92,7 MHz-re állítjuk be radio.setBandFrequency (FIX_BAND, 9350); } if (String ((char *) Radio_Station.lastread) == String ("Radio Mirchi")) {radio.setBandFrequency (FIX_BAND, 9830); }}
A kód ezen szakasza a kötetadatok figyelésére és beállítására szolgál.
if (előfizetés == & Kötet) // // halljuk, hogy ellenőrizzük a Kötet karakterláncot, és ez egy egész karakterlánc string formátumban // Vissza kell alakítanunk egész számra a kötet megváltoztatásához a PT2258 segítségével IC Serial.print (F ("Got:")); Soros.println ((char *) Kötet.utolsó); kötet = atoi ((char *) Kötet.utolsó); // Az atoi () metódust használjuk arra, hogy a karaktermutatót egész számgá alakítsuk = map (kötet, 0,100,79,0); // map (érték, fromLow, fromHigh, toLow, toHigh) // mivel a pt2258 csak dB-ben érti az egész értékeket // a 0dB - 79dB értéket 0% - 100% -ra térképezzük fel. digitalPot.setChannelVolume (kötet, 0); // végül is beállítjuk a PT2258 IC digitalPot.setChannelVolume (0. kötet, 0) csatornájának hangerejét; // végül is beállítjuk a PT2258 IC 1. csatornájának hangerejét}
A hangvezérelt FM rádió tesztelése Arduino használatával
Az áramkör teszteléséhez a következő készüléket használták-
- Transzformátor, amelynek 13-0-13 csapja van
- Két 4Ω 20W-os hangszóró terhelésként.
- Telefon a Google Segéd használatához.
Egy korábbi cikkemben bemutattam, hogyan lehet egyszerű 2x32 Wattos erősítőt készíteni a TDA2050 IC-vel, ezt a bemutatót is felhasználom, Megszakítottam a mechanikus potenciométert, és két vezetéket rövidre zártam két kis jumper kábellel. Most két nyomógomb segítségével meg tudtam változtatni az erősítő hangerejét.
További fejlesztés
Számos további fejlesztés érhető el ezen az áramkörön.
- Különböző zajproblémák vannak, mivel a NodeMCU mellett egy hangforrás működik, ezért további árnyékolást kell bevezetnünk a zajvédelem javítása érdekében.
- A teljes áramkör kiépítése egy NYÁK-ra javítja a zajzavart.
- További szűrők adhatók ehhez az IC-hez a zaj megszüntetése érdekében.
Remélem tetszett ez a cikk, és valami újat tanultál belőle. Ha kétségei vannak, kérje az alábbi megjegyzéseket, vagy használhatja fórumunkat a részletes megbeszéléshez.