- RDA5807M IC
- IC PT2258
- Schematické
- Požadované komponenty
- Jak získáváme data od Google Assistant?
- Založení účtu Adafruit pro komunikaci
- Nastavení zprostředkovatele IFTTT pro FM rádio
- Arduino kód a vysvětlení
- Testování hlasem ovládaného FM rádia pomocí Arduina
- Další vylepšení
V dnešní době většina z nás ráda poslouchá hudbu pomocí našich chytrých telefonů. Ale před několika lety tomu tak nebylo, v té době byla FM rádia první volbou pro poslech hudby, podcastů, zpráv a dalších. V dnešní době nikdo neposlouchá rádio pro hudbu, zprávy a další, babička a děda jsou výjimkou.
Abych trochu oživil starou slávu FM rádia, chystám se v tomto projektu vybudovat hlasově ovládané FM rádio pomocí Google Assistance a populárního IC RDA5870M Superheterodyne Receiver.
Zkontrolujte také naše předchozí rádiové obvody FM:
- FM rádio založené na Arduinu
- Rádio FM ovládané chytrým telefonem pomocí Arduina
- Jednoduchý obvod vysílače FM
- Jak vytvořit obvod vysílače FM
RDA5807M IC
RDA5807M je velmi moderní jednočipový stereofonní rádiový tuner FM s plně integrovaným syntetizátorem, IF selektivitou, RDS / RBDS a dekodérem MPX, který podporuje frekvenční rozsah 50 MHz až 115 MHz. Jedná se o velmi levný jednočipový FM přijímač IC, který pro svou funkčnost vyžaduje velmi málo externích komponent. Tento IC používá rozhraní I2C ke komunikaci s jakýmkoli hlavním zařízením, takže díky této vlastnosti je velmi vhodný pro přenosná zařízení.
Tento IC má interní zvukový procesor, který je zodpovědný za jeho vynikající kvalitu zvuku.
Mezi základní funkce patří
- Podpora celosvětových frekvenčních pásem
- Podpora RDS / RBDS
- Digitální tuner s nízkým IF
- Plně integrovaný digitální frekvenční syntetizátor
- Digitální automatické řízení zisku (AGC)
- Zvýraznění basů
- Přímo podporuje zatížení odporem 32 Ω
- Integrovaný regulátor LDO a další
Další informace o tomto integrovaném obvodu se dozvíte v tomto projektu Rádia FM založeného na Arduinu pomocí RDA5807.
IC PT2258
PT2258 je integrovaný obvod vyrobený jako šestikanálový elektronický regulátor hlasitosti, tento integrovaný obvod využívá technologii CMOS speciálně navrženou pro vícekanálové audio-video aplikace.
Tento IC poskytuje ovládací rozhraní I2C s rozsahem útlumu 0 až -79 dB při 1 dB / krok a je dodáván v 20kolíkovém DIP nebo SOP balíčku.
Mezi základní funkce patří -
- 6 vstupních a výstupních kanálů (pro domácí audio systémy 5.1)
- Volitelná adresa I2C (pro aplikaci Daisy-chain)
- Vysoká kanálová separace (pro aplikace s nízkou hlučností)
- Poměr S / N> 100 dB
- Provozní napětí je 5 až 9V
Dříve jsme o tomto IC vysvětlili v projektu ovládání hlasitosti digitálního zvuku PT2258. Tento projekt můžete zkontrolovat, pokud se chcete o tomto IC dozvědět více.
Schematické
Schéma zapojení FM rádia řízeného asistentem Google je uvedeno níže:
Požadované komponenty
- Mikrokontrolér NodeMCU - 1
- Digitální regulátor hlasitosti PT2258 - 1
- Rádiový modul FM RDA5807 - 1
- SPDT relé 6V - 1
- Dioda 1n4007 - 1
- Šroubová svorka 5mmx2 - 1
- 3,5 mm konektor pro sluchátka - 1
- Převodník logické úrovně - 1
- 10K rezistor, 5% - 4
- 150K rezistor, 5% - 4
- 100K rezistor, 5% - 2
- Kondenzátor 10uF - 6
- Kondenzátor 0,1 uF - 1
- Propojovací vodič - 10
Jak získáváme data od Google Assistant?
Výše uvedený obrázek poskytuje základní představu o procesu komunikace mezi Google Assistant a NodeMCU.
Asistent Google má oprávnění upravovat data na serveru Adafruit IO tak, aby IFTTT s MQTT pracovala jako makléř.
Pokud dojde ke změně dat na straně serveru (Adafruit IO), projeví se to na straně NodeMCU. Abyste toho dosáhli, musíte postupovat podle níže uvedených pokynů -
Založení účtu Adafruit pro komunikaci
Nejprve si vytvořte účet Adafruit IO. Přihlaste se do služby Adafruit IO pomocí svých přihlašovacích údajů nebo se zaregistrujte, pokud nemáte účet. Dříve jsme použili Adafruit IO k vytvoření LED řízené Alexou, domácí automatizace Raspberry Pi a mnoha dalších projektů založených na IoT.
Po přihlášení k účtu Adafruit, Klikněte na Dashboards, potom klikněte na Action> Create a New Dashboard .
Dále přidáme nový název a krátký popis našeho nového řídicího panelu.
Po vytvoření řídicího panelu musíte ze svého účtu získat uživatelské jméno a aktivní klíč, jak je požadováno v kódu Arduino. To získáte kliknutím na ikonu KLÍČ.
Poté udělejte tři bloky; jeden přepínací blok, jeden měřicí blok, jeden textový blok.
Bloky jsou velmi důležité, protože tyto bloky jsou zodpovědné za komunikaci mezi asistencí google a NodeMCU.
Chcete-li vytvořit blok, musíte kliknout na znaménko + v pravém horním rohu.
Dále uděláme bloky.
Dále musíte nastavit každý blok, proto musíte zaškrtnout konkrétní blok a kliknout na Další krok.
U tohoto projektu není třeba měnit žádná nastavení kromě přepínacího tlačítka.
Text v přepínacím tlačítku je velkými písmeny, musíte z něj udělat malé písmeno a aktualizovat změny.
A je to, jsou to všechny věci, které musíte nastavit v IO adafruit.
Moje poslední obrazovka vypadá takto-
Nastavení zprostředkovatele IFTTT pro FM rádio
Jako vždy, Registrace jestli nemáte účet nebo se přihlaste se, pokud již máte účet.
Nyní musíte vytvořit applet. Postupujte podle následujících kroků:
Chcete-li vytvořit applet, klikněte na ikonu svého účtu a klikněte na Vytvořit.
Na obrazovce pro vytvoření klikněte poté na ikonu +.
Poté musíte povolit přístup ke svému účtu Google.
Za tímto účelem musíte vyhledat Google Assistant ve vyhledávací liště a kliknout na ikonu Google Assistant.
Na další obrazovce musíme vybrat spouštěč, Nezapomeňte, že jsme na serveru Adafruit IO Server vytvořili tři bloky, musíme pro tyto tři bloky vytvořit spouštěče.
Nejprve je to blok rozhlasové stanice, proto musíme vybrat Vyslovte frázi s textovou přísadou .
Na další obrazovce musíme zadat, co chcete říct a čím by vám měl asistent Google odpovědět.
Poté klikněte na tlačítko Vytvořit spoušť.
Na další obrazovce vypadá asi takto, jak jste dokončili If část, je čas pro tehdejší součásti, klikněte na + znaménko po poté .
Zobrazí se vám obrazovka jako na následujícím obrázku, vyhledejte Adafruit a klikněte na ikonu Adafruit.
Dále autorizujte svůj účet Adafruit u IFTTT a klikněte na Připojit.
Dále musíte kliknout na Odeslat data do Adafruit IO.
Poté se zobrazí rozevírací seznam zdrojů, které jste dříve vytvořili v účtu Adafruit.
Vyberte libovolný a klikněte na vytvořit akci, musíte to udělat pro všechny tři.
A tím je konec procesu IFTTT, moje poslední obrazovka appletu vypadá takto,
Arduino kód a vysvětlení
Kód Arduino je tam pro správu veškeré komunikace mezi IC a komunikací mezi Adafruit IO IFTTT a WIFI. Kompletní kód pro toto rádio Arduino Nano FM je uveden na konci tohoto tutoriálu. Kód je trochu zdlouhavý a složitý, zde jsme vysvětlili celý kód po řádku.
Nejprve musíme zahrnout všechny požadované knihovny, jsou to:
#zahrnout
Poté definujte SSID a heslo pro WI-FI, jedná se o SSID a HESLO vašeho routeru.
const char * ssid = "Android"; // SSID routeru const char * heslo = "12345678"; // Heslo vašeho routeru
Poté definujeme dva booleans a proměnnou, booleans se používají k udržení stavu komunikace integrovaných obvodů a proměnná hlasitosti se používá k nastavení úrovně hlasitosti.
bool potStatus; // 1 když je navázána komunikace mezi MCU a IC bool radioStatus; // 1 když je navázána komunikace mezi MCU a IC int volume = 15; // výchozí úroveň hlasitosti s IC začíná
Poté jsme nastavili pin GPIO s názvem Relay_Pin pro zapnutí nebo vypnutí zesilovače.
#define Relay_Pin D7 // Tento pin se používá k zapnutí a vypnutí rádia
Dále musíme definovat všechny nezbytné definice pro komunikaci s Adafruit IO.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 // použijte 8883 pro SSL #define AIO_USERNAME "debashis13" // Nahraďte jej svým uživatelským jménem #define AIO_KEY "aio_Qyal47xo1fYhc55QB1lEPEirnoFp"
Níže uvedené definice FIX_BAND je vlastní definice používaná knihovnou.
Další definovaný příkaz nastaví vnitřní objem modulu.
#define FIX_BAND RADIO_BAND_FM // <Pásmo bude naladěno podle tohoto náčrtu je FM. #define FIX_RADIO_VOLUME 6 /// <Výchozí hlasitost modulu.
Dále vytvořte požadované objekty pro PT2258, RDA5807M a WiFiClient.
PT2258 digitalPot; // Rádio PT2258 RDA5807M Object; // Klient RDA5807M Object WiFiClient; // Objekt WiFiClient
Poté nastavte třídu klienta MQTT předáním klienta WiFi a serveru MQTT a přihlašovacích údajů.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// Nastavení třídy klienta MQTT předáním klienta WiFi a serveru MQTT a přihlašovacích údajů.
Poté se musíme přihlásit k odběru kanálu. Na co se tím můžete ptát?
Pokud se některé hodnoty, některé parametry na serveru Adafruit změní, změny se zde projeví.
Adafruit_MQTT_Subscribe Radio_Station = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Radio_Station"); // Metody používané k přihlášení k odběru zdroje Adafruit_MQTT_Subscribe Toggle_FM = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Toggle_FM"); // Metody použité k přihlášení k odběru kanálu Adafruit_MQTT_Subscribe Volume = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Volume"); // Metody používané k přihlášení k odběru kanálu
Níže je uveden prototyp funkce pro funkci MQTT_connect () .
void MQTT_connect (); // Prototyp funkce pro MQTT Connect
Poté zahájíme proces nastavení. Nejprve zahájíme komunikaci UART metodou start.
Serial.begin (9600); // UART begin Serial.println (); // přidá další řádek pro řádkování Serial.println (); // přidá další řádek pro řádkování Dále provedeme vše obvyklé pro připojení k WiFI **************** všechny obvyklé věci potřebné pro připojení WiFi ************************ / Serial.print ("připojení k"); Serial.println (ssid); WiFi.mode (WIFI_STA); WiFi.begin (ssid, heslo); while (WiFi.status ()! = WL_CONNECTED) {zpoždění (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi připojeno"); Serial.println ("IP adresa:"); Serial.println (WiFi.localIP ()); / ***************** všechny obvyklé věci potřebné pro připojení WiFi *********************** /
Dále zavolejte metodu Wire.begin () k vytvoření instance připojení I2C a voláme metodu Wire.setClock () k opravení frekvence I2C na 100 KHz, protože je to plná rychlost PT2258 IC.
Wire.begin (); // začátek počáteční sekvence I2C Wire.setClock (100000); // nastavení hodin I2C na 100 KHz
Dále zavolejte metodu init () pro PT2258 i RDA5807 IC a podržte návratový stav do dříve definovaných booleanů.
potStatus = digitalPot.init (); radioStatus = radio.init ();
Dále zkontrolujte, zda MCU byl schopen komunikovat s IC nebo ne. Děláme to dvěma výroky if else .
if (potStatus) {Serial.println ("Nalezeno zařízení PT2258!"); } else {Serial.println ("Nepodařilo se zahájit PT2258"); } if (radioStatus) {Serial.println ("Nalezeno zařízení RDA5807M!"); } else {Serial.println ("Nepodařilo se zahájit RDA5807M"); }
Dále volejte metodu přihlášení z knihovny MQTT. O změnách v našich odebíraných informačních kanálech budeme informováni serverem MQTT.
mqtt.subscribe (& Radio_Station); // Nastavení předplatného MQTT pro zdroj Radio_Station mqtt.subscribe (& Toggle_FM); // Nastavení předplatného MQTT pro zdroj Toggle_FM mqtt.subscribe (& Volume); // Nastavení MQTT předplatného pro Volume feed
Dále nastavíme pin relé jako výstup a stav pinu na LOW
pinMode (D7, VÝSTUP); digitalWrite (D7, LOW);
Dále nastavte předem stanovenou hlasitost rádia, tento parametr nastaví vnitřní hlasitost RDA5807 IC, což znamená konec našeho procesu nastavení.
radio.setVolume (FIX_RADIO_VOLUME); // dále nastavíme normalizovanou hlasitost rádia radio.setMono (false); // nechceme, aby čip dával mono výstup radio.setMute (false); // nechceme, aby se čip na začátku ztlumil
Smyčku zahájíme voláním funkce MQTT_connect (), která naváže připojení k serveru MQTT.
Ve funkci připojení MQTT se třikrát pokusíme vytvořit připojení k serveru MQTT.
Pokud je úspěšný, dostaneme zprávu o úspěchu, jinak dostaneme chybovou zprávu.
void MQTT_connect () {int8_t ret; // 8bitové celé číslo pro uložení opakování // Zastavit, pokud je již připojen. if (mqtt.connected ()) {návrat; } Serial.print ("Připojení k MQTT…"); uint8_t opakuje = 3; while ((ret = mqtt.connect ())! = 0) {// connect vrátí 0 pro připojený Serial.println (mqtt.connectErrorString (ret)); Serial.println ("Opakování pokusu o připojení MQTT za 5 sekund…"); mqtt.disconnect (); zpoždění (5 000); // počkat 5 sekund opakuje--; if (retries == 0) {// v podstatě zemřít a počkat, až mě WDT resetuje while (1); }} Serial.println ("MQTT připojeno!"); }
Dále začněte vytvořením ukazatele na objekt Adafruit_MQTT_Subscribe . Použijeme to k určení, které předplatné bylo přijato.
Adafruit_MQTT_Subscribe * předplatné;
Dále čekáme na zprávu o předplatném.
mqtt.readSubscription (timeInMilliseconds) bude poslouchat určitý čas pro všechny zprávy přicházející ze serveru MQTT.
Pokud obdrží zprávu před vypršením časového limitu, odpoví ukazatelem na předplatné nebo pouze vyprší časový limit a vrátí 0. V takovém případě bude čekat 2 s.
while ((předplatné = mqtt.readSubscription (20000)))
Pokud dojde k vypršení časového limitu, vyplnění smyčky while selže. Pokud ne, porovnáme předplatné a získáme naše známá předplatná.
V tomto kódu to děláme pro všechny tři naše předplacené kanály.
if (předplatné == & Toggle_FM) if (předplatné == & Radio_Station) if (předplatné == & Volume)
To byly hlavní tři parametry, kterým musíte v části smyčky porozumět.
Tato část kódu se používá ke sledování a nastavení kanálu Toggle_FM .
if (subscription == & Toggle_FM) // je to zpráva z kanálu Toggle_FM {Serial.print (F ("Got:")); Serial.println ((char *) Toggle_FM.lastread); // tisk dat Feedu pouze pro ladění if (String ((char *) Toggle_FM.lastread) == String ("on")) // porovnáme přijatá data se známým parametrem, v tomto případě očekáváme, že "on „pochází ze severu {//, ale než to uděláme, musíme z něj udělat řetězec, díky kterému je porovnávání super snadné digitalWrite (D7, HIGH); // pokud dostaneme řetězec„ on “ze serveru, který vytváříme pin D7 HIGH} if (String ((char *) Toggle_FM.lastread) == String ("off")) // znovu kontrolujeme řetězec off {digitalWrite (D7, LOW); // pokud dostaneme řetězec „off“ ze serveru, z něhož děláme pin D7 LOW}}
Tato část kódu se používá ke sledování a nastavení kanálu Radio_Station .
if (předplatné == & Radio_Station) {Serial.print (F ("Got:")); Serial.println ((char *) Radio_Station.lastread); if (String ((char *) Radio_Station.lastread) == String ("Big FM")) // slyšíme, že kontrolujeme řetězec Big FM {radio.setBandFrequency (FIX_BAND, 9270); // je-li výše uvedená podmínka pravdivá, nastavujeme radoi kanál na 92,7MHz} // Výše uvedený proces pokračuje níže if (String ((char *) Radio_Station.lastread) == String ("Red FM")) { radio.setBandFrequency (FIX_BAND, 9350); } if (String ((char *) Radio_Station.lastread) == String ("Radio Mirchi")) {radio.setBandFrequency (FIX_BAND, 9830); }}
Tato část kódu se používá ke sledování a nastavování posuvu hlasitosti.
if (subscription == & Volume) // // slyšíme, že kontrolujeme řetězec Volume a jedná se o celočíselnou hodnotu ve formátu řetězce // Musíme ji převést zpět na celé číslo, abychom změnili hlasitost pomocí PT2258 IC Serial.print (F ("Got:")); Serial.println ((char *) Volume.lastread); volume = atoi ((char *) Volume.lastread); // Metodu atoi () používáme k převodu znakového ukazatele na celé číslo volume = map (volume, 0,100,79,0); // map (value, fromLow, fromHigh, toLow, toHigh) // as the pt2258 only understand integer values in dB // we are maping the 0dB - 79dB value to 0% - 100%. digitalPot.setChannelVolume (objem, 0); // po tom všem, co nastavujeme hlasitost pro kanál 0 na PT2258 IC digitalPot.setChannelVolume (volume, 1); // po tom všem, co nastavujeme hlasitost pro kanál 1 IC PT2258}}
Testování hlasem ovládaného FM rádia pomocí Arduina
K testování obvodu byl použit následující přístroj -
- Transformátor, který má 13-0-13 Tap
- Dva 4Ω 20W reproduktory jako zátěž.
- Telefon pro použití Asistenta Google.
V předchozím článku jsem vám ukázal, jak vyrobit jednoduchý zesilovač zvuku 2x32 Watt s TDA2050 IC, který použiji pro tuto ukázku také, Narušil jsem mechanický potenciometr a zkratoval dva vodiče dvěma malými propojovacími kabely. Nyní jsem pomocí dvou tlačítek dokázal změnit hlasitost zesilovače.
Další vylepšení
Existuje mnoho dalších vylepšení, která lze v tomto obvodu provést.
- Existují různé problémy s hlukem, protože zdroj zvuku pracuje vedle NodeMCU, takže musíme zlepšit další stínění, abychom zlepšili odolnost proti rušení.
- Budování celkového obvodu na desce plošných spojů zlepší imunitu proti rušení.
- K tomuto IC lze přidat další filtry, které eliminují šum.
Doufám, že se vám tento článek líbil a dozvěděli jste se z něj něco nového. Máte-li jakékoli pochybnosti, můžete se zeptat v komentářích níže nebo můžete použít naši fóra pro podrobnou diskusi.