- RDA5807M IC
- IC PT2258
- Kaavamainen
- Tarvittavat komponentit
- Kuinka saamme tietoja Google Assistantilta?
- Perustetaan Adafruit-tili viestintää varten
- IFTTT-välittäjän asettaminen FM-radiota varten
- Arduino-koodi ja selitys
- Ääniohjatun FM-radion testaus Arduinolla
- Lisäparannus
Nykyään useimmat meistä haluavat kuunnella musiikkia älypuhelimillamme. Mutta muutama vuosi sitten, näin ei ollut, tuolloin FM-radiot olivat ensimmäinen valinta musiikin, podcastien, uutisten ja muiden kuunteluun. Nykyään kukaan ei kuuntele radiota musiikin, uutisten ja muiden suhteen, mummo ja isoisä ovat poikkeus.
Joten voidakseni herättää FM-radion vanhan kunnian hiukan, rakennan tässä projektissa ääniohjatun FM-radion käyttämällä Google-apua ja suosittua RDA5870M Superheterodyne -vastaanotin-IC: tä.
Tarkista myös edelliset FM-radiopiirimme:
- Arduino-pohjainen FM-radio
- Älypuhelimella ohjattu FM-radio Arduinolla
- Yksinkertainen FM-lähetinpiiri
- Kuinka rakentaa FM-lähetinpiiri
RDA5807M IC
RDA5807M on erittäin moderni yhden sirun FM-stereoradioviritin, jossa on täysin integroitu syntetisaattori, IF-selektiivisyys, RDS / RBDS ja MPX-dekooderi, joka tukee taajuusaluetta 50 MHz - 115 MHz. Se on erittäin halpa yhden sirun FM-vastaanotin IC, joka vaatii hyvin vähän ulkoisia komponentteja toimiakseen toiminnallisesti. Tämä IC käyttää I2C-liitäntää kommunikoimaan minkä tahansa isäntälaitteen kanssa, joten kaikki tämä ominaisuus tekee siitä erittäin sopivan kannettaville laitteille.
Tällä IC: llä on sisäinen ääniprosessori, joka vastaa sen erinomaisesta äänenlaadusta.
Joitakin perusominaisuuksia ovat
- Tuki maailmanlaajuisille taajuuskaistoille
- RDS / RBDS-tuki
- Digitaalinen matalataajuinen viritin
- Täysin integroitu digitaalinen taajuussyntetisaattori
- Digitaalinen automaattivahvistuksen hallinta (AGC)
- Basson korostus
- Tuetaan suoraan 32Ω: n vastuskuormitusta
- Integroitu LDO-säädin ja paljon muuta
Voit oppia lisää tästä IC: stä käymällä läpi projektin Arduino-pohjainen FM-radio käyttämällä RDA5807: tä.
IC PT2258
PT2258 on mikropiiri, joka on tarkoitettu käytettäväksi 6-kanavaisena elektronisena äänenvoimakkuuden säätimenä.
Tämä IC tarjoaa I2C-ohjausliitännän, jonka vaimennusalue on 0 - -79 dB 1 dB: ssä / askel ja toimitetaan 20-napaisella DIP- tai SOP-paketilla.
Jotkut perusasiat sisältävät-
- 6-tulo- ja lähtökanavat (5.1-kotiäänentoistojärjestelmille)
- Valittavissa oleva I2C-osoite (Daisy-ketjusovellukselle)
- Korkean kanavan erotus (hiljaiseen käyttöön)
- S / N-suhde> 100dB
- Käyttöjännite on 5 - 9 V
Selitimme aiemmin tästä mikropiiristä PT2258 Digital Audio Volume Control Project -projektissa. Voit tarkistaa projektin, jos haluat tietää enemmän tästä IC: stä.
Kaavamainen
Google Assistant -ohjatun FM-radion kytkentäkaavio on annettu alla:
Tarvittavat komponentit
- NodeMCU-mikrokontrolleri - 1
- Digitaalinen PT2258-äänenvoimakkuuden säädin - 1
- RDA5807 FM-radiomoduuli - 1
- SPDT-rele 6V - 1
- 1n4007 Diodi - 1
- Ruuviliitin 5mmx2 - 1
- 3,5 mm: n kuulokeliitäntä - 1
- Logiikkatason muunnin - 1
- 10K vastus, 5% - 4
- 150K vastus, 5% - 4
- 100K vastus, 5% - 2
- 10uF-kondensaattori - 6
- 0,1 uF kondensaattori - 1
- Hyppääjän lanka - 10
Kuinka saamme tietoja Google Assistantilta?
Yllä oleva kuva antaa sinulle perusajatuksen Google Assistantin ja NodeMCU: n välisestä viestintäprosessista.
Google Assistantilla on valtuudet muokata tietoja Adafruit IO -palvelimessa, jotta IFTTT MQTT: n kanssa toimii välittäjänä.
Jos palvelimella (Adafruit IO) tapahtuu muutoksia, se näkyy myös NodeMCU-puolella. Tämän saavuttamiseksi sinun on noudatettava alla annettuja ohjeita -
Perustetaan Adafruit-tili viestintää varten
Tee ensin Adafruit IO -tili. Kirjaudu Adafruit IO -palveluun kirjautumistiedoillasi tai rekisteröidy, jos sinulla ei ole tiliä. Aikaisemmin käytimme Adafruit IO: ta Alexa-ohjatun LED: n, Raspberry Pi -koti-automaation ja monien muiden IoT-pohjaisten projektien rakentamiseen.
Kun olet kirjautunut Adafruit-tilille, Napsauta Koontinäytöt ja sitten Toiminto> Luo uusi hallintapaneeli .
Seuraavaksi aiomme lisätä uuden nimen ja lyhyen kuvauksen uudesta hallintapaneelistamme.
Kun olet luonut koontinäytön, sinun on hankittava käyttäjätunnus ja aktiivinen avain tililtäsi, kuten Arduino-koodissa vaaditaan. Voit saada sen napsauttamalla KEY-kuvaketta.
Sen jälkeen tee kolme lohkoa; yksi vaihtolohko, yksi mittarilohko, yksi tekstilohko.
Lohkot ovat erittäin tärkeitä, koska nämä lohkot ovat vastuussa Googlen avun ja NodeMCU: n välisestä viestinnästä.
Lohkon tekeminen edellyttää, että napsautat oikeassa yläkulmassa olevaa + -merkkiä.
Seuraavaksi aiomme tehdä lohkot.
Seuraavaksi sinun on määritettävä jokainen lohko, sitä varten sinun on valittava tietty lohko ja napsautettava Seuraava vaihe.
Tämän projektin asetuksia ei tarvitse muuttaa, paitsi vaihtopainiketta.
Vaihtopainikkeen teksti on isoilla kirjaimilla, sinun on tehtävä siitä pieni kirjain ja päivitettävä muutokset.
Se on se, se on kaikki asiat, jotka sinun on määritettävä adafruit IO: hon.
Viimeinen ruutuni näyttää tältä -
IFTTT-välittäjän asettaminen FM-radiota varten
Kuten aina, Liity jos sinulla ei ole tiliä tai Kirjaudu sisään jos olet jo tili.
Nyt sinun on luotava sovelma. Noudata seuraavia ohjeita:
Voit tehdä sovelman napsauttamalla tilisi kuvaketta ja valitsemalla Luo.
Napsauta luomisnäytössä + -kuvaketta, jos.
Tämän jälkeen sinun täytyy sallia pääsyn oman Google-tilin.
Tätä varten sinun on haettava Google Assistant hakupalkista ja napsautettava Google Assistant -kuvaketta.
Seuraavassa näytössä meidän on valittava liipaisin, Muista, että teimme kolme lohkoa Adafruit IO Server -palvelimessa, meidän on tehtävä siellä laukaisimet näille kolmelle lohkolle.
Ensinnäkin radioasemalohko, sitä varten meidän on valittava Sano lause tekstiainesosan kanssa .
Seuraavassa näytössä meidän on kirjoitettava mitä haluat sanoa ja mitä Google-avustajan tulisi vastata sinulle.
Napsauta sitten Luo laukaisin -painiketta.
Seuraava näyttö näyttää tältä, kun olet suorittanut If- osan, on aika tällöin , napsauta + -merkkiä sen jälkeen .
Sinulle esitetään alla olevan kuvan kaltainen näyttö, etsi Adafruit ja napsauta Adafruit-kuvaketta.
Valtuuta sitten Adafruit-tilisi IFTTT: llä ja napsauta sitten Yhdistä.
Seuraavaksi sinun on napsautettava Lähetä tietoja Adafruit IO: lle.
Sitten sinulle näytetään avattava syöte, jonka olet luonut aiemmin Adafruit-tilillä.
Valitse mikä tahansa ja napsauta Luo toiminto, sinun on tehtävä tämä kaikille kolmelle.
Ja tämä merkitsee IFTTT-prosessin loppua, viimeinen sovelmani näyttö näyttää tältä,
Arduino-koodi ja selitys
Arduino-koodi on tarkoitettu kaiken IC: n ja Adafruit IO IFTTT: n ja WIFI: n välisen viestinnän hallintaan. Tämän Arduino Nano FM -radion täydellinen koodi annetaan tämän opetusohjelman lopussa. Koodi on vähän pitkä ja monimutkainen, tässä olemme selittäneet täydellisen koodin riveittäin.
Ensinnäkin meidän on sisällytettävä kaikki vaaditut kirjastot, ne ovat:
#sisältää
Määritä sitten WI-FI: n SSID ja salasana, tämä on reitittimesi SSID ja SALASANA.
const char * ssid = "Android"; // reitittimesi SSID const char * password = "12345678"; // Reitittimesi salasana
Sitten määritellään kaksi loogista arvoa ja muuttuja, tontteja käytetään pitämään IC: n tiedonsiirtotilaa ja äänenvoimakkuuden muuttujaa käytetään äänenvoimakkuuden tason asettamiseen.
bool-potti; // 1 kun tiedonsiirto on muodostettu MCU: n ja IC-bool radioStatus -laitteen välille; // 1 kun MCU: n ja IC: n välinen yhteys on muodostettu int tilavuus = 15; // oletusarvoinen äänenvoimakkuuden taso IC: n kanssa alkaa
Sitten asetimme GPIO-nastan nimeltä Relay_Pin vahvistimen kytkemiseksi päälle tai pois päältä.
#define Relay_Pin D7 // Tätä nastaa käytetään radion kytkemiseen päälle ja pois päältä
Seuraavaksi meidän on määriteltävä kaikki tarvittavat määritelmät yhteydenpitoon Adafruit IO: n kanssa.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 // käytä 8883 SSL: lle #define AIO_USERNAME "debashis13" // Korvaa se käyttäjätunnuksellasi #define AIO_KEY "aio_Qyal47xo1fYhc55QB1" Autohakemistonäppäin
Alla olevat määritelmät FIX_BAND on oma määritelmä, jota kirjasto käyttää.
Seuraava määritelty käsky asettaa moduulin sisäisen äänenvoimakkuuden.
#define FIX_BAND RADIO_BAND_FM // <Bändi viritetään tällä luonnoksella on FM. #define FIX_RADIO_VOLUME 6 /// <Moduulin oletustilavuus.
Tee seuraavaksi tarvittavat objektit PT2258: lle, RDA5807M: lle ja WiFiClientille.
PT2258 digitalPot; // PT2258 Object RDA5807M-radio; // RDA5807M Object WiFiClient client; // WiFiClient Object
Määritä sitten MQTT-asiakasluokka syöttämällä WiFi-asiakas ja MQTT-palvelin sekä kirjautumistiedot.
Adafruit_MQTT_Client mqtt (& asiakas, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// MQTT-asiakasluokan määrittäminen syöttämällä WiFi-asiakas- ja MQTT-palvelin sekä kirjautumistiedot.
Sitten meidän on tilattava syöte. Mitä tämä saa sinut kysymään?
Jos jotkin arvot, jotkut parametrit muuttuvat Adafruit-palvelimessa, muutokset näkyvät tässä.
Adafruit_MQTT_Subscribe Radio_Station = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ syötteet / Radio_Station"); // Menetelmät syötteen tilaamiseen Adafruit_MQTT_Subscribe Toggle_FM = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Toggle_FM"); // Syötteen tilausmenetelmät Adafruit_MQTT_Subscribe Volume = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Volume"); // Syötteen tilaamiseen käytetyt menetelmät
Alla on funktion prototyyppi MQTT_connect () -funktiolle.
void MQTT_connect (); // MQTT Connect -toiminnon prototyyppi
Sitten aloitamme asennusprosessimme. Aluksi aloitamme UART-viestinnän aloitusmenetelmällä.
Sarjan alku (9600); // UART begin Serial.println (); // lisää ylimääräisen rivin Serial.println () väliin; // lisää ylimääräisen rivin välilyönteihin. Seuraavaksi teemme kaikki tavalliset muodostaessamme yhteyden WiFI: hen **************** kaikki tavalliset WiFi-yhteyden edellyttämät asiat ************************ / Serial.print ("yhdistäminen"); Serial.println (ssid); WiFi.mode (WIFI_STA); WiFi.begin (ssid, salasana); while (WiFi.status ()! = WL_CONNECTED) {viive (500); Sarjaprintti ("."); } Sarja.println (""); Serial.println ("WiFi kytketty"); Serial.println ("IP-osoite:"); Serial.println (WiFi.localIP ()); / ***************** kaikki tavalliset WiFi-yhteyteen tarvittavat asiat ***********************
Seuraavaksi soita Wire.begin () -menetelmälle I2C-yhteyden muodostamiseksi ja kutsumme Wire.setClock () -menetelmää korjaamaan I2C-taajuus 100 KHz: ksi, koska se on PT2258-IC: n koko nopeus.
Wire.begin (); // aloita I2C-aloitussarja Wire.setClock (100000); // I2C-kellon asettaminen 100 KHz: ksi
Kutsu seuraavaksi init () -menetelmää sekä PT2258- että RDA5807-IC: lle ja pidä palautustila aiemmin määriteltyihin loogisiin.
potStatus = digitalPot.init (); radioStatus = radio.init ();
Tarkista seuraavaksi, pystyykö MCU kommunikoimaan IC: n kanssa vai ei. Teemme tämän kahdella, jos muuten lausunnolla.
if (potStatus) {Serial.println ("Löydetty PT2258-laite!"); } else {Serial.println ("PT2258: n aloittaminen epäonnistui"); } if (radioStatus) {Serial.println ("Löytyi RDA5807M-laite!"); } else {Serial.println ("RDA5807M: n aloittaminen epäonnistui"); }
Kutsu seuraavaksi tilausmenetelmää MQTT-kirjastosta. MQTT-palvelin ilmoittaa meille, jos tilatuissa syötteissämme tapahtui muutoksia.
mqtt.subscribe (& Radio_Station); // MQTT-tilauksen määrittäminen Radio_Station-syötteelle mqtt.subscribe (& Toggle_FM); // MQTT-tilauksen määrittäminen Toggle_FM-syötteelle mqtt.subscribe (& Volume); // MQTT-tilauksen määrittäminen volyymisyötteelle
Seuraavaksi asetamme Relay-nastan lähdöksi ja pin-tilaksi LOW
pinMode (D7, OUTPUT); digitalWrite (D7, LOW);
Aseta seuraavaksi ennalta määrätty radion äänenvoimakkuus, tämä parametri asettaa RDA5807 IC: n sisäisen äänenvoimakkuuden, mikä merkitsee asennusprosessimme loppua.
radio.setVolume (FIX_RADIO_VOLUME); // seuraavaksi asetamme radioaseman normalisoinnin.setMono (false); // emme halua sirun antavan monolähtöä radio.setMute (false); // emme halua sirun mykistyvän alussa
Aloitamme silmukan kutsumalla MQTT_connect () -toiminnon, joka muodostaa yhteyden MQTT-palvelimeen.
MQTT connect -toiminnossa yritämme muodostaa yhteyden MQTT-palvelimeen kolme kertaa.
Jos se onnistuu, saamme Menestys-viestin, muuten saamme virheilmoituksen.
void MQTT_connect () {int8_t ret; // 8-bittinen kokonaisluku yrittää tallentaa // Pysäytä, jos se on jo yhdistetty. if (mqtt.connected ()) {return; } Serial.print ("Yhdistetään MQTT: hen…"); uint8_t yrittää uudelleen = 3; while ((ret = mqtt.connect ())! = 0) {// connect palauttaa 0 yhdistetylle Serial.println-tiedostolle (mqtt.connectErrorString (ret)); Serial.println ("Yritetään MQTT-yhteyttä uudelleen 5 sekunnissa…"); mqtt.donnonnect (); viive (5000); // odota 5 sekuntia uudestaan--; if (yrittää uudelleen == 0) {// kuolee periaatteessa ja odota, että WDT nollaa minut, kun (1); }} Serial.println ("MQTT kytketty!"); }
Aloita seuraavaksi luomalla osoitin Adafruit_MQTT_Subscribe- objektille. Tämän avulla määritämme vastaanotetun tilauksen.
Adafruit_MQTT_Subscribe * -tilaus;
Seuraavaksi odotamme tilausviestiä.
mqtt.readSubscription (timeInMilliseconds) kuuntelee tiettyä aikaa MQTT-palvelimelta tuleville viesteille.
Jos se saa viestin ennen aikakatkaisua, se vastaa viitteellä tilaukseen tai se vain aikakatkaisee ja palauttaa 0. Siinä tapauksessa se odottaa 2 sekuntia.
while ((tilaus = mqtt.readSubscription (20000)))
Jos aikakatkaisu tapahtuu, silmukan while täyttö epäonnistuu. Jos ei, vertaamme tilausta ja saamme tunnetut tilauksemme.
Tässä koodissa teemme tämän kaikille kolmelle tilatulle syötteellemme.
if (tilaus == & Toggle_FM) if (tilaus == & Radio_Station) if (tilaus == & äänenvoimakkuus)
Nämä olivat kolme tärkeintä parametria, jotka sinun on ymmärrettävä silmukkaosassa.
Tätä koodin osaa käytetään Toggle_FM- syötteen seuraamiseen ja asettamiseen.
if (subscription == & Toggle_FM) // onko se viesti Toggle_FM-syötteestä {Serial.print (F ("Got:")); Sarja.println ((char *) Vaihda_FM.lukema); // tulosta syötetiedot vain virheenkorjausta varten, jos (String ((char *) Toggle_FM.lastread) == String ("päällä")) // verrataan vastaanotettuja tietoja tunnettuun parametriin, tässä tapauksessa odotamme, että "on "tulee erosta {//, mutta ennen kuin teemme sen, meidän on tehtävä siitä merkkijono, joka tekee vertailusta erittäin helppoa digitalWrite (D7, HIGH); // jos saamme" päällä "-merkkijonon tekemästämme palvelimesta D7-nasta HIGH} if (Merkkijono ((char *) Toggle_FM.lastread) == Merkkijono ("pois")) // tarkistamme jälleen merkkijonon pois päältä {digitalWrite (D7, LOW); // jos saamme "off" -merkkijono palvelimelta, jonka D7-nasta on LOW}}
Tätä koodin osaa käytetään seuraamaan ja asettamaan Radio_Station- syötettä.
if (tilaus == & Radio_Station) {Sarja.tulos (F ("Selvä:")); Serial.println ((char *) Radio_Station.lastread); jos (String ((char *) Radio_Station.lastread) == Merkkijono ("Big FM")) // kuulemme, että tarkistamme merkkijonoa Big FM {radio.setBandFrequency (FIX_BAND, 9270); // jos yllä oleva ehto on totta, asetamme radoi-kanavan arvoksi 92,7 MHz} // Edellä mainittua prosessia jatketaan alla, jos (String ((char *) Radio_Station.lastread) == String ("Punainen FM")) { radio.setBandFrequency (FIX_BAND, 9350); } if (String ((char *) Radio_Station.lastread) == Merkkijono ("Radio Mirchi")) {radio.setBandFrequency (FIX_BAND, 9830); }}
Tätä koodin osaa käytetään äänenvoimakkuuden seurantaan ja asetukseen.
if (subscription == & Volume) // // kuulemme, että tarkistamme merkkijonon Volume ja se on kokonaislukuarvo merkkijonomuodossa // Meidän on muunnettava se takaisin kokonaislukuksi, jotta voimme muuttaa äänenvoimakkuutta PT2258: n avulla. IC Serial.print (F ("sai:")); Sarja.println ((char *) Tilavuus.viimeistelty); tilavuus = atoi ((char *) Tilavuus.viimeistelty); // Muunnamme merkkiosoittimen atoi () -metodilla kokonaisluvuksi = kartta (tilavuus, 0,100,79,0); // map (arvo, fromLow, fromHigh, toLow, toHigh) // koska pt2258 ymmärtää vain kokonaislukuarvot desibeleinä // kartoitamme 0dB - 79dB-arvon 0% - 100%: iin. digitalPot.setChannelVolume (tilavuus, 0); // sen jälkeen, kun asetamme äänenvoimakkuutta PT2258 IC digitalPot.setChannelVolume -kanavan 0 kanavalle (äänenvoimakkuus, 1); // sen jälkeen, kun asetamme PT2258 IC: n kanavan 1 äänenvoimakkuutta}}
Ääniohjatun FM-radion testaus Arduinolla
Piirin testaamiseksi käytettiin seuraavaa laitetta -
- Muuntaja, jolla on 13-0-13 hana
- Kaksi 4Ω 20W kaiutinta kuormana.
- Puhelin käyttääksesi Google Assistantia.
Edellisessä artikkelissa olen osoittanut, kuinka tehdä yksinkertainen 2x32 watin audiovahvistin TDA2050 IC: llä, aion käyttää sitä myös tähän esittelyyn, Olen häirinnyt mekaanista potentiometriä ja oikosulussa kaksi johtoa kahdella pienellä hyppyjohdolla. Nyt pystyin kahden painikkeen avulla muuttamaan vahvistimen äänenvoimakkuutta.
Lisäparannus
Tähän piiriin voidaan tehdä monia muita parannuksia.
- Meluongelmia on useita, koska äänilähde toimii NodeMCU: n vieressä, joten meidän on toteutettava lisäsuojaus melun vastustuskyvyn parantamiseksi.
- Piirin rakentaminen piirilevylle parantaa melun vastustuskykyä.
- Tähän mikropiiriin voidaan lisätä muita suodattimia melun poistamiseksi.
Toivottavasti pidit tästä artikkelista ja opit siitä jotain uutta. Jos sinulla on epäilyksiä, voit kysyä alla olevista kommenteista tai käyttää foorumeitamme yksityiskohtaiseen keskusteluun.