- RDA5807M IC
- IC PT2258
- Schematické
- Súčasti sú povinné
- Ako získavame údaje z Asistenta Google?
- Zriadenie účtu Adafruit pre komunikáciu
- Nastavenie sprostredkovateľa IFTTT pre rádio FM
- Arduino kód a vysvetlenie
- Testovanie hlasom ovládaného FM rádia pomocou Arduina
- Ďalšie vylepšenie
V dnešnej dobe väčšina z nás rada počúva hudbu pomocou svojich inteligentných telefónov. Ale pred niekoľkými rokmi to tak nebolo, v tom čase boli FM rádiá prvou voľbou pre počúvanie hudby, podcastov, správ a ďalších. V dnešnej dobe nikto nepočúva rádiá, hudbu, správy a iné, okrem babky a dedka.
Aby som teda trochu oživil starú slávu FM rádia, v tomto projekte sa chystám vybudovať hlasovo ovládané FM rádio pomocou Google Assistance a populárneho IC RHD5870M Superheterodyne Receiver.
Skontrolujte tiež naše predchádzajúce rozhlasové okruhy FM:
- FM rádio založené na Arduine
- Inteligentný telefón ovládaný FM rádiom pomocou Arduina
- Jednoduchý obvod vysielača FM
- Ako zostaviť obvod vysielača FM
RDA5807M IC
RDA5807M je veľmi moderný jednočipový stereofónny rádiový tuner FM s plne integrovaným syntetizátorom, IF selektivitou, RDS / RBDS a dekodérom MPX, ktorý podporuje frekvenčný rozsah 50 MHz až 115 MHz. Je to veľmi lacný jednočipový prijímač FM IC, ktorý na svoju funkčnú činnosť vyžaduje veľmi málo externých komponentov. Tento IC využíva rozhranie I2C na komunikáciu s akýmkoľvek hlavným zariadením, takže vďaka tejto vlastnosti je veľmi vhodný pre prenosné zariadenia.
Tento IC má interný zvukový procesor, ktorý je zodpovedný za jeho vynikajúcu zvukovú kvalitu.
Medzi základné funkcie patrí:
- Podpora celosvetových frekvenčných pásiem
- Podpora RDS / RBDS
- Digitálny tuner s nízkym IF
- Plne integrovaný digitálny frekvenčný syntetizátor
- Digitálna automatická regulácia zisku (AGC)
- Zvýraznenie basov
- Priamo podporuje zaťaženie odporom 32 Ω
- Integrovaný regulátor LDO a ďalšie
Viac informácií o tomto IC sa dozviete v tomto projekte FM rádia založeného na Arduine pomocou RDA5807.
IC PT2258
PT2258 je integrovaný obvod vyrobený ako šesťkanálový elektronický regulátor hlasitosti. Tento integrovaný obvod využíva technológiu CMOS špeciálne navrhnutú pre viackanálové audio-video aplikácie.
Tento IC poskytuje ovládacie rozhranie I2C s rozsahom útlmu 0 až -79 dB pri 1 dB / krok a dodáva sa v 20-pólovom balení DIP alebo SOP.
Medzi základné funkcie patrí:
- 6-vstupné a výstupné kanály (pre domáce zvukové systémy 5.1)
- Voliteľná adresa I2C (pre aplikáciu Daisy-chain)
- Vysoká separácia kanálov (pre aplikácie s nízkou hlučnosťou)
- S / N pomer> 100 dB
- Prevádzkové napätie je 5 až 9V
O tomto IC sme už hovorili v projekte riadenia hlasitosti digitálneho zvuku PT2258. Tento projekt môžete skontrolovať, ak sa chcete dozvedieť viac informácií o tomto IC.
Schematické
Schéma zapojenia pre rádio FM riadené asistentom Google je uvedené nižšie:
Súčasti sú povinné
- Mikrokontrolér NodeMCU - 1
- Digitálny regulátor hlasitosti PT2258 - 1
- Rádiový modul FM RDA5807 - 1
- Relé SPDT 6V - 1
- Dióda 1n4007 - 1
- Skrutkovacia svorka 5mmx2 - 1
- 3,5 mm konektor pre slúchadlá - 1
- Prevodník logickej úrovne - 1
- 10K rezistor, 5% - 4
- 150K rezistor, 5% - 4
- 100K rezistor, 5% - 2
- Kondenzátor 10uF - 6
- Kondenzátor 0,1 uF - 1
- Prepojovací drôt - 10
Ako získavame údaje z Asistenta Google?
Vyššie uvedený obrázok poskytuje základnú predstavu o komunikačnom procese medzi asistentom Google a NodeMCU.
Asistent Google má oprávnenie upravovať údaje na serveri Adafruit IO tak, aby IFTTT s MQTT fungovala ako sprostredkovateľ.
Ak dôjde k zmene údajov na strane servera (Adafruit IO), prejaví sa to na strane NodeMCU. Aby ste to dosiahli, musíte postupovať podľa pokynov uvedených nižšie -
Zriadenie účtu Adafruit pre komunikáciu
Najskôr si vytvorte účet Adafruit IO. Prihláste sa do služby Adafruit IO pomocou svojich poverení alebo sa zaregistrujte, ak nemáte účet. Predtým sme použili Adafruit IO na výrobu LED riadených Alexou, domácej automatizácie Raspberry Pi a mnohých ďalších projektov založených na IoT.
Po prihlásení do účtu Adafruit, Kliknite na informačné panely, potom kliknite na Akcia> Vytvoriť nový informačný panel .
Ďalej pridáme nový názov a krátky popis nášho nového informačného panela.
Po vytvorení informačného panela musíte zo svojho účtu získať používateľské meno a aktívny kľúč, ako sa to vyžaduje v kóde Arduino. To získate kliknutím na ikonu KĽÚČ.
Potom urobte tri bloky; jeden prepínací blok, jeden rozchodový blok, jeden textový blok.
Bloky sú veľmi dôležité, pretože tieto bloky sú zodpovedné za komunikáciu medzi asistenciou google a NodeMCU.
Ak chcete vytvoriť blok, musíte kliknúť na znamienko + v pravom hornom rohu.
Ďalej ideme robiť bloky.
Ďalej musíte nastaviť každý blok, musíte zaškrtnúť konkrétny blok a kliknúť na Ďalší krok.
Pre tento projekt nie je potrebné meniť žiadne nastavenie okrem prepínacieho tlačidla.
Text v prepínacom tlačidle je napísaný veľkými písmenami, musíte z neho urobiť malé písmeno a aktualizovať zmeny.
To je všetko, sú to všetky veci, ktoré musíte nastaviť v IO adafruit.
Moja posledná obrazovka vyzerá takto-
Nastavenie sprostredkovateľa IFTTT pre rádio FM
Ako vždy sa zaregistrujte, ak nemáte účet, alebo sa prihláste, ak už účet máte.
Teraz je potrebné vytvoriť applet. Postupujte podľa týchto krokov:
Ak chcete vytvoriť applet, kliknite na ikonu svojho účtu a potom na položku Vytvoriť.
Na obrazovke vytvorenia kliknite na ikonu +, ak.
Potom musíte povoliť prístup k svojmu účtu Google.
Preto musíte vyhľadať pomocníka Google na vyhľadávacom paneli a kliknúť na ikonu Google Assistant.
Na ďalšej obrazovke musíme zvoliť spúšťač, Pamätajte, že na serveri Adafruit IO sme vytvorili tri bloky, musíme tam vytvoriť spúšťače pre tieto tri bloky.
Najprv je to blok rozhlasovej stanice, preto musíme zvoliť možnosť Povedať frázu s textovou prísadou .
Na ďalšej obrazovke musíme napísať, čo chcete povedať, a s čím by vám mal asistent Google odpovedať.
Potom kliknite na tlačidlo Vytvoriť spúšťač.
Na ďalšej obrazovke vyzerá asi takto, ako ste dokončili If časť, je čas pre vtedajší súčasti, kliknite na + znamienko po potom .
Zobrazí sa vám obrazovka ako na nasledujúcom obrázku, vyhľadajte Adafruit a kliknite na ikonu Adafruit.
Ďalej autorizujte svoj účet Adafruit u IFTTT a potom kliknite na Pripojiť.
Ďalej musíte kliknúť na Odoslať údaje do Adafruit IO.
Potom sa zobrazí rozbaľovací zoznam informačných kanálov, ktoré ste predtým vytvorili v účte Adafruit.
Vyberte ktorúkoľvek z nich a kliknite na vytvorenie akcie, musíte to urobiť pre všetky tri.
A s týmto, znamená koniec procesu IFTTT, moja posledná obrazovka appletu vyzerá takto,
Arduino kód a vysvetlenie
Arduino kód je tu na riadenie všetkej komunikácie medzi IC a komunikáciou medzi Adafruit IO IFTTT a WIFI. Kompletný kód pre toto rádio Arduino Nano FM je uvedený na konci tohto tutoriálu. Kód je trochu zdĺhavý a zložitý, tu sme vysvetlili celý kód po riadkoch.
Najskôr musíme zahrnúť všetky požadované knižnice, ktorými sú:
#include
Potom definujte SSID a heslo pre WI-FI, jedná sa o SSID a HESLO vášho smerovača.
const char * ssid = "Android"; // SSID routra const char * heslo = "12345678"; // Heslo vášho smerovača
Potom definujeme dva logické hodnoty a premennú, logické hodnoty sa používajú na udržanie stavu komunikácie integrovaných obvodov a premenná hlasitosti sa používa na nastavenie úrovne hlasitosti.
bool potStatus; // 1 keď je nadviazaná komunikácia medzi MCU a IC bool radioStatus; // 1 keď je nadviazaná komunikácia medzi MCU a IC int volume = 15; // predvolená úroveň hlasitosti s IC začína
Potom sme nastavili pin GPIO s názvom Relay_Pin na zapnutie alebo vypnutie zosilňovača.
#define Relay_Pin D7 // Tento pin sa používa na zapnutie a vypnutie rádia
Ďalej musíme definovať všetky potrebné definície potrebné na komunikáciu s Adafruit IO.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 // použitie protokolu 8883 pre SSL #define AIO_USERNAME "debashis13" // Nahraďte ho svojím používateľským menom #define AIO_KEY "aio_Qyal47xo1fYhc55QB1lEPEirnoFp" svojim projektom
Nasledujúce definície FIX_BAND sú patentovanou definíciou používanou knižnicou.
Ďalej definovaný príkaz nastavuje vnútorný objem modulu.
#define FIX_BAND RADIO_BAND_FM // <Pásmo sa naladí podľa tohto náčrtu je FM. #define FIX_RADIO_VOLUME 6 /// <Predvolený objem modulu.
Ďalej urobte požadované objekty pre PT2258, RDA5807M a WiFiClient.
PT2258 digitalPot; // PT2258 Objekt RDA5807M radio; // RDA5807M objekt WiFiClient klient; // Objekt WiFiClient
Potom nastavte triedu klienta MQTT odovzdaním klienta WiFi a servera MQTT a prihlasovacích údajov.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// Nastaví triedu klienta MQTT odovzdaním klienta WiFi a servera MQTT a prihlasovacích údajov.
Potom sa musíme prihlásiť na odber informačného kanála. Čo vás preto môže položiť?
Ak sa niektoré hodnoty, niektoré parametre zmenia na serveri Adafruit, zmeny sa tu prejavia.
Adafruit_MQTT_Subscribe Radio_Station = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Radio_Station"); // Metódy použité na prihlásenie na odber krmiva Adafruit_MQTT_Subscribe Toggle_FM = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Toggle_FM"); // Metódy používané na prihlásenie na odber krmiva Adafruit_MQTT_Subscribe Volume = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Volume"); // Metódy používané na prihlásenie na odber informačného kanála
Ďalej je uvedený prototyp funkcie pre funkciu MQTT_connect () .
void MQTT_connect (); // Prototyp funkcie pre MQTT Connect
Potom začneme proces nastavenia. Spočiatku začíname komunikáciu UART metódou start.
Serial.begin (9600); // UART begin Serial.println (); // pridá ďalší riadok pre medzery Serial.println (); // pridá ďalší riadok pre medzery Ďalej urobíme všetko obvyklé pre pripojenie k WiFI **************** všetko obvyklé, čo je potrebné pre pripojenie WiFi ************************ / Serial.print („pripojenie k“); Serial.println (ssid); WiFi.mode (WIFI_STA); WiFi.begin (ssid, heslo); while (WiFi.status ()! = WL_CONNECTED) {oneskorenie (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi pripojené"); Serial.println ("IP adresa:"); Serial.println (WiFi.localIP ()); / ***************** všetko obvyklé, čo je potrebné pre pripojenie WiFi
Ďalej zavolajte metódu Wire.begin () na vytvorenie inštancie pripojenia I2C a voláme metódu Wire.setClock () na opravu frekvencie I2C na 100 kHz, pretože je to plná rýchlosť PT2258 IC.
Wire.begin (); // zacina startovnu sekvenciu I2C Wire.setClock (100000); // nastavenie taktu I2C na 100KHz
Ďalej zavolajte metódu init () pre PT2258 aj RDA5807 IC a podržte návratový stav do predtým definovaných boolovských hodnôt.
potStatus = digitalPot.init (); radioStatus = radio.init ();
Ďalej skontrolujte, či bol MCU schopný komunikovať s IC alebo nie. Robíme to pomocou dvoch výrokov if else .
if (potStatus) {Serial.println ("Nájdené zariadenie PT2258!"); } else {Serial.println ("Nepodarilo sa spustiť PT2258"); } if (radioStatus) {Serial.println ("Nájdené zariadenie RDA5807M!"); } else {Serial.println ("Nepodarilo sa spustiť RDA5807M"); }
Ďalej zavolajte metódu prihlásenia na odber z knižnice MQTT. O prípadných zmenách v našich prihlásených informačných kanáloch budeme informovaní serverom MQTT.
mqtt.subscribe (& Radio_Station); // Nastaviť predplatné MQTT pre feed Radio_Station mqtt.subscribe (& Toggle_FM); // Nastaviť predplatné MQTT pre informačný kanál Toggle_FM mqtt.subscribe (& Volume); // Nastaviť predplatné MQTT pre informačný kanál zväzku
Ďalej nastavíme pin relé ako výstup a stav pinov na LOW
pinMode (D7, VÝSTUP); digitalWrite (D7, LOW);
Ďalej nastavíme vopred určenú hlasitosť rádia, týmto parametrom nastavíme vnútornú hlasitosť RDA5807 IC, čo znamená koniec nášho procesu nastavenia.
radio.setVolume (FIX_RADIO_VOLUME); // dalej nastavime normalize radio volume volume radio.setMono (false); // nechceme, aby čip dával mono výstup radio.setMute (false); // nechceme, aby sa čip na začiatku stlmil
Začneme slučku volaním funkcie MQTT_connect (), ktorá nadviaže spojenie so serverom MQTT.
Vo funkcii pripojenia MQTT sa trikrát pokúsime vytvoriť pripojenie k serveru MQTT.
Ak je úspešný, dostaneme správu o úspechu, inak dostaneme chybovú správu.
void MQTT_connect () {int8_t ret; // 8-bitové celé číslo na uloženie pokusov // Zastaviť, ak už je pripojené. if (mqtt.connected ()) {návrat; } Serial.print ("Pripojenie k MQTT…"); uint8_t opakuje = 3; while ((ret = mqtt.connect ())! = 0) {// connect vráti 0 pre pripojený Serial.println (mqtt.connectErrorString (ret)); Serial.println ("Opakuje sa pripojenie MQTT o 5 sekúnd…"); mqtt.disconnect (); oneskorenie (5 000); // počkať 5 sekúnd opakuje--; if (retries == 0) {// v podstate zomri a počkaj, kým ma WDT resetuje while (1); }} Serial.println ("MQTT pripojené!"); }
Ďalej začnite vytvorením ukazovateľa na objekt Adafruit_MQTT_Subscribe . Pomocou toho určíme, ktoré predplatné sme dostali.
Adafruit_MQTT_Subscribe * predplatné;
Ďalej čakáme na správu o odbere.
mqtt.readSubscription (timeInMilliseconds) bude určitý čas počúvať správy prichádzajúce zo servera MQTT.
Ak dostane správu pred vypršaním časového limitu, odpovie smerovačom na predplatné alebo iba vyprší časový limit a vráti sa 0. V takom prípade počká 2 sek.
while ((predplatné = mqtt.readSubscription (20000)))
Ak dôjde k vypršaní časového limitu je zatiaľ čo slučka fill zlyhá. Ak nie, porovnáme, aké predplatné máme, a získame známe predplatné.
V tomto kóde to robíme pre všetky tri naše objednané kanály.
if (predplatné == & Toggle_FM) if (predplatné == & Radio_Station) if (predplatné == & Volume)
To boli hlavné tri parametre, ktoré musíte v sekcii slučky pochopiť.
Táto časť kódu sa používa na sledovanie a nastavenie informačného kanála Toggle_FM .
if (subscription == & Toggle_FM) // je to správa z informačného kanála Toggle_FM {Serial.print (F ("Got:")); Serial.println ((char *) Toggle_FM.lastread); // vytlačiť údaje informačného kanála iba na ladenie, ak (String ((char *) Toggle_FM.lastread) == String ("on")) // porovnáme prijaté údaje so známym parametrom, v tomto prípade očakávame, že „on „vychádza zo severu {//, ale skôr ako to urobíme, musíme z neho vytvoriť reťazec, vďaka ktorému je porovnávanie super ľahké, digitalWrite (D7, HIGH); // ak dostaneme reťazec„ on “zo servera, ktorý vytvárame pin D7 HIGH} if (String ((char *) Toggle_FM.lastread) == String ("off")) // znova kontrolujeme vypnutie reťazca {digitalWrite (D7, LOW); // ak dostaneme reťazec „off“ zo servera, z ktorého vyrábame pin D7 LOW}}
Táto časť kódu sa používa na sledovanie a nastavenie informačného kanála Radio_Station .
if (predplatné == & Radio_Station) {Serial.print (F ("Got:")); Serial.println ((char *) Radio_Station.lastread); if (String ((char *) Radio_Station.lastread) == String ("Big FM")) // počujeme, že kontrolujeme reťazec Big FM {radio.setBandFrequency (FIX_BAND, 9270); // ak je splnená vyššie uvedená podmienka, nastavujeme rádiový kanál na 92,7MHz} // Vyššie uvedený proces pokračuje ďalej if (String ((char *) Radio_Station.lastread) == String ("Red FM")) { radio.setBandFrequency (FIX_BAND, 9350); } if (String ((char *) Radio_Station.lastread) == Reťazec ("Radio Mirchi")) {radio.setBandFrequency (FIX_BAND, 9830); }}
Táto časť kódu sa používa na sledovanie a nastavenie posuvu hlasitosti.
if (subscription == & Volume) // // počujeme, že kontrolujeme reťazec Volume a jedná sa o celočíselnú hodnotu vo formáte reťazca // Musíme ju previesť späť na celé číslo, aby sme mohli zmeniť hlasitosť pomocou PT2258 IC Serial.print (F ("Mám:")); Serial.println ((char *) Volume.lastread); volume = atoi ((char *) Volume.lastread); // Používame metódu atoi () na prevod znakového ukazovateľa na celé číslo volume = map (volume, 0,100,79,0); // map (value, fromLow, fromHigh, toLow, toHigh) // keďže pt2258 rozumie iba celočíselným hodnotám v dB // mapujeme hodnotu 0dB - 79dB na 0% - 100%. digitalPot.setChannelVolume (objem, 0); // po tom všetkom, čo nastavujeme hlasitosť pre kanál 0 PT2258 IC digitalPot.setChannelVolume (volume, 1); // po tom všetkom, čo nastavujeme hlasitosť pre kanál 1 modulu PT2258 IC}}
Testovanie hlasom ovládaného FM rádia pomocou Arduina
Na testovanie obvodu sa použil nasledujúci prístroj -
- Transformátor, ktorý má odbočku 13-0-13
- Dva 4Ω 20W reproduktory ako záťaž.
- Telefón na použitie s Asistentom Google.
V predchádzajúcom článku som vám ukázal, ako vyrobiť jednoduchý zosilňovač zvuku 2x32 Watt s TDA2050 IC, ktorý použijem aj na túto ukážku.
Neusporiadal som mechanický potenciometer a skratoval dva vodiče s dvoma malými štartovacími káblami. Teraz sa mi pomocou dvoch tlačidiel podarilo zmeniť hlasitosť zosilňovača.
Ďalšie vylepšenie
Existuje mnoho ďalších vylepšení, ktoré je možné v tomto obvode urobiť.
- Existujú rôzne problémy so šumom, pretože zdroj zvuku pracuje vedľa NodeMCU, takže na zlepšenie odolnosti proti šumu musíme implementovať ďalšie tienenie.
- Budovanie celkového obvodu na doske plošných spojov zlepší imunitu proti šumu.
- K tomuto IC možno pridať ďalšie filtre na elimináciu šumu.
Dúfam, že sa vám tento článok páčil a dozvedeli ste sa z neho niečo nové. Ak máte pochybnosti, môžete sa opýtať v komentároch nižšie alebo môžete využiť naše fóra na podrobnú diskusiu.