- RDA5807M IC
- IC PT2258
- Shematski
- Komponente potrebne
- Kako dolazimo do podataka od Google Asistenta?
- Postavljanje Adafruit računa za komunikaciju
- Postavljanje IFTTT brokera za FM radio
- Arduino kôd i objašnjenje
- Testiranje glasovno upravljanog FM radija pomoću Arduina
- Daljnje poboljšanje
U današnje vrijeme većina nas voli slušati glazbu sa svojim pametnim telefonima. No, prije nekoliko godina to nije bio slučaj, u tom trenutku FM radio prijemnici bili su prvi izbor za slušanje glazbe, podcastova, vijesti i drugih. U današnje vrijeme nitko ne sluša radio zbog glazbe, vijesti i ostalih, baka i djed su iznimka.
Dakle, kako bih malo oživio staru slavu FM radija, u ovom ću projektu izgraditi FM radio kojim se upravlja glasom pomoću Google Assistance i popularnog IC-a za primanje superheterodinskih RDA5870M.
Također, provjerite naše prethodne krugove FM radija:
- FM radio zasnovan na Arduinu
- FM radio kontroliran pametnim telefonom pomoću Arduina
- Jednostavni krug FM odašiljača
- Kako izraditi krug FM odašiljača
RDA5807M IC
RDA5807M je vrlo moderan FM-stereo radio tuner s jednim čipom s potpuno integriranim sintetizatorom, IF selektivnošću, RDS / RBDS-om i MPX dekoderom koji podržava frekvencijski raspon od 50 MHz do 115 MHz. Riječ je o vrlo jeftinom IC-u s FM prijemnikom s jednim čipom kojem je potrebno vrlo malo vanjskih komponenata za funkcionalan rad. Ovaj IC koristi I2C sučelje za komunikaciju s bilo kojim glavnim uređajem, pa ga sva ova značajka čini vrlo pogodnim za prijenosne uređaje.
Ovaj IC ima interni audio procesor koji je zaslužan za njegovu izvrsnu kvalitetu zvuka.
Neke od osnovnih značajki uključuju-
- Podrška za opsege frekvencija širom svijeta
- Podrška za RDS / RBDS
- Digitalni tuner s niskim IF
- Potpuno integrirani digitalni sintetizator frekvencija
- Digitalna automatska kontrola pojačanja (AGC)
- Pojačanje basa
- Izravno podržava opterećenje otpora od 32Ω
- Integrirani LDO regulator i još mnogo toga
O ovom IC-u možete saznati više prolazeći kroz ovaj projekt FM radija zasnovan na Arduinu koristeći RDA5807.
IC PT2258

PT2258 je IC koji je napravljen za upotrebu kao 6-kanalni elektronički kontroler glasnoće, ovaj IC koristi CMOS tehnologiju posebno dizajniranu za višekanalne audio-video programe.
Ovaj IC pruža upravljačko sučelje I2C s opsegom slabljenja od 0 do -79dB pri 1dB / koraku i dolazi u 20-pinskom DIP ili SOP paketu.
Neke od osnovnih značajki uključuju-
- 6-ulazni i izlazni kanali (za 5.1 kućne audio sustave)
- I2C adresa koja se može odabrati (za primjenu lanca tratinčica)
- Odvajanje visokih kanala (za primjenu s malim bukom)
- Omjer S / N> 100dB
- Radni napon je 5 do 9V
Prethodno smo objasnili ovu IC u projektu PT2258 Digital Audio Control Volume. Možete provjeriti taj projekt ako želite znati više o ovom IC-u.
Shematski
Shema kruga za FM radio pod nadzorom Google Asistenta dat je u nastavku:

Komponente potrebne
- NodeMCU mikrokontroler - 1
- PT2258 Digitalni regulator glasnoće - 1
- RDA5807 FM radio modul - 1
- SPDT relej 6V - 1
- 1n4007 Dioda - 1
- Vijčana stezaljka 5mmx2 - 1
- 3,5 mm priključak za slušalice - 1
- Pretvarač logičke razine - 1
- 10K otpornik, 5% - 4
- Otpornik 150K, 5% - 4
- Otpornik 100K, 5% - 2
- Kondenzator 10uF - 6
- Kondenzator 0,1uF - 1
- Žica kratkospojnika - 10
Kako dolazimo do podataka od Google Asistenta?
Gornja slika daje vam osnovnu ideju komunikacijskog procesa između Google asistenta i NodeMCU.
Google asistent ima ovlast mijenjati podatke na poslužitelju Adafruit IO kako bi IFTTT s MQTT radio kao posrednik.
Ako se dogodi bilo kakva promjena podataka na strani poslužitelja (Adafruit IO), to se odražava na strani NodeMCU. Da biste to postigli, morate slijediti upute dane u nastavku-
Postavljanje Adafruit računa za komunikaciju
Prvo napravite Adafruit IO račun. Prijavite se na Adafruit IO sa svojim vjerodajnicama ili se prijavite ako nemate račun. Prije smo koristili Adafruit IO za izradu LED-a pod nadzorom Alexa, automatizacije kuće Raspberry Pi i mnogih drugih projekata temeljenih na IoT-u.

Nakon prijave na račun Adafruit, Kliknite Nadzorne ploče, a zatim kliknite Akcija> Stvori novu nadzornu ploču .
Zatim ćemo dodati novo ime i kratki opis naše nove nadzorne ploče.
Nakon što izradite nadzornu ploču, sa svog računa morate dobiti korisničko ime i aktivni ključ kako je potrebno u Arduino kodu. To možete dobiti klikom na ikonu KLJUČ.

Nakon toga napravite tri bloka; jedan preklopni blok, jedan mjerni blok, jedan blok teksta.
Blokovi su vrlo važni, jer su ti blokovi odgovorni za komunikaciju između google pomoći i NodeMCU.
Da biste blokirali, morate kliknuti znak + u gornjem desnom kutu.

Dalje, napravit ćemo blokove.

Dalje, trebate postaviti svaki blok, za to trebate označiti određeni blok i kliknuti Sljedeći korak.
Za ovaj projekt nije potrebno mijenjati nijednu postavku osim gumba za prebacivanje.
Tekst na tipki za prebacivanje nalazi se velikim slovima, trebate ga učiniti malim slovom i ažurirati promjene.
To je to, to su sve stvari koje trebate postaviti u adafruit IO.
Moj posljednji zaslon izgleda ovako-

Postavljanje IFTTT brokera za FM radio
Kao i uvijek, prijavite se ako nemate račun ili se prijavite ako već imate račun.

Sada morate stvoriti Aplet. Za to slijedite korake u nastavku:
Da biste napravili aplet, kliknite ikonu računa i kliknite Stvori.
Na ekranu za stvaranje kliknite ikonu + nakon ako.

Nakon toga morate omogućiti pristup svom Google računu.
Za to trebate potražiti Google Asistenta na traci za pretraživanje i kliknuti ikonu Google Assistant.

Na Sljedećem zaslonu moramo odabrati okidač, Zapamtite, napravili smo tri bloka na Adafruit IO poslužitelju, moramo napraviti okidače za ta tri bloka.
Prvo, Blok radio stanice, za to moramo odabrati Izgovori frazu s sastojkom teksta .
Na sljedećem zaslonu moramo upisati što želite reći i s čim bi vam Googleov asistent trebao odgovoriti.

Zatim kliknite gumb Stvori okidač.
Sljedeći zaslon izgleda otprilike ovako, jer ste dovršili dio Ako je vrijeme za tadašnji dio, nakon toga kliknite znak +.

Prikazat će vam se zaslon poput donje slike, potražite Adafruit i kliknite ikonu Adafruit.

Zatim autorizirajte svoj Adafruit račun IFTTT-om, a zatim kliknite Poveži.
Zatim morate kliknuti na Pošalji podatke na Adafruit IO.
Tada će vam se prikazati padajući feed koji ste ranije kreirali na računu Adafruit.
Odaberite bilo koji i kliknite na stvaranje akcije, to morate učiniti za sve tri.

I time, označava kraj IFTTT procesa, moj zadnji zaslon apleta izgleda ovako,

Arduino kôd i objašnjenje
Arduino kôd je tu da upravlja cijelom komunikacijom između IC-a i komunikacijom između Adafruit IO IFTTT-a i WIFI-a. Kompletni kôd za ovaj Arduino Nano FM radio dan je na kraju ovog vodiča. Kôd je malo dugačak i složen, ovdje smo objasnili kompletan kod redak po redak.
Prvo, moramo uključiti sve potrebne knjižnice, a to su:
#include
Zatim definirajte SSID i lozinku za WI-FI, ovo je SSID i LOZINKA vašeg usmjerivača.
const char * ssid = "Android"; // SSID vašeg usmjerivača const char * password = "12345678"; // Lozinka vašeg usmjerivača
Zatim definiramo dvije logičke vrijednosti i varijablu, logičke vrijednosti se koriste za zadržavanje statusa komunikacije IC-a, a varijabla glasnoće koristi se za postavljanje razine glasnoće.
bool potStatus; // 1 kada se uspostavi komunikacija između MCU-a i IC bool radioStatus; // 1 kada se uspostavi komunikacija između MCU-a i IC-a int volume = 15; // zadana razina glasnoće s IC-om započinje s
Zatim smo postavili GPIO pin pod nazivom Relay_Pin za uključivanje ili isključivanje pojačala.
#define Relay_Pin D7 // Ovaj pin služi za uključivanje i isključivanje radija
Dalje, moramo definirati sve potrebne definicije za komunikaciju s Adafruit IO.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 // upotrijebi 8883 za SSL #define AIO_USERNAME "debashis13" // Zamijeni ga svojim korisničkim imenom #define AIO_KEY "aio_Qyal47xo1fYhc55QB1lEPEirnoF KeyHP ProjectHirfFnoFPrvFrEfnoFOhFnoFPrEFnoFOhFnoFPrEFnoFnoFEOnoFeOnoFeOnoFeOnoFeOrnoF
Dolje navedene definicije FIX_BAND vlasnička su definicija koju koristi knjižnica.
Sljedeća definirana izjava postavlja unutarnji volumen modula.
#define FIX_BAND RADIO_BAND_FM // <Bend će biti podešen prema ovoj skici FM. #define FIX_RADIO_VOLUME 6 /// <Zadani volumen modula.
Zatim izradite potrebne objekte za PT2258, RDA5807M i WiFiClient.
PT2258 digitalPot; // PT2258 Predmet RDA5807M radio; // RDA5807M objekt WiFiClient klijent; // WiFiClient objekt
Zatim postavite klasu MQTT klijenta prosljeđivanjem WiFi klijenta i MQTT poslužitelja i detalja za prijavu.
Adafruit_MQTT_Client mqtt (& klijent, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// Postavljanje klase MQTT klijenta unošenjem WiFi klijenta i MQTT poslužitelja i podataka za prijavu.
Tada se moramo pretplatiti na feed. Što vas to natjera da pitate?
Ako se neke vrijednosti, neki parametri promijene na poslužitelju Adafruit, promjene će se ovdje odražavati.
Adafruit_MQTT_Subscribe Radio_Station = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Radio_Station"); // Metode korištene za pretplatu na feed Adafruit_MQTT_Subscribe Toggle_FM = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Toggle_FM"); // Metode korištene za pretplatu na feed Adafruit_MQTT_Subscribe Volume = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Volume"); // Metode korištene za pretplatu na feed
Ispod je prototip funkcije za funkciju MQTT_connect () .
void MQTT_connect (); // Prototip funkcije za MQTT Connect
Tada započinjemo postupak postavljanja. U početku započinjemo UART komunikaciju metodom begin.
Serial.begin (9600); // UART započinje Serial.println (); // dodaje dodatni redak za razmak Serial.println (); // dodaje dodatni redak za razmak Dalje, radimo sve uobičajene stvari za povezivanje s WiFI **************** sve uobičajene stvari potrebne za WiFi vezu *********************** / Serial.print ("povezivanje s"); Serial.println (ssid); WiFi.mode (WIFI_STA); WiFi.begin (ssid, lozinka); while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi povezan"); Serial.println ("IP adresa:"); Serial.println (WiFi.localIP ()); / **************** sve uobičajene stvari potrebne za WiFi vezu *********************** /
Dalje, pozovite metodu Wire.begin () da biste uspostavili instancu I2C veze, a mi zovemo metodu Wire.setClock () da popravimo I2C frekvenciju na 100KHz jer je to puna brzina PT2258 IC.
Wire.begin (); // započinjemo I2C početnu sekvencu Wire.setClock (100000); // postavljanje I2C takta na 100KHz
Zatim pozovite metodu init () i za PT2258 i za RDA5807 IC i zadržite status povratka u prethodno definiranim logičkim vrijednostima.
potStatus = digitalPot.init (); radioStatus = radio.init ();
Zatim provjerite je li MCU uspio komunicirati s IC-om ili nije. To radimo s dvije izjave ako ne .
if (potStatus) {Serial.println ("Pronađen PT2258 uređaj!"); } else {Serial.println ("Pokretanje PT2258 nije uspjelo"); } if (radioStatus) {Serial.println ("Pronađen RDA5807M uređaj!"); } else {Serial.println ("Pokretanje RDA5807M nije uspjelo"); }
Zatim pozovite metodu pretplate iz biblioteke MQTT. MQTT poslužitelj obavijestit će nas ako se dogodi neka promjena u našim pretplaćenim feedovima.
mqtt.subscribe (& Radio_Station); // Postavljanje MQTT pretplate za feed Radio_Station mqtt.subscribe (& Toggle_FM); // Postavljanje MQTT pretplate za Toggle_FM feed mqtt.subscribe (& Volume); // Postavljanje pretplate na MQTT za količinsko napajanje
Dalje, postavljamo pin releja kao izlaz, a status pin-a na LOW
pinMode (D7, IZLAZ); digitalWrite (D7, LOW);
Dalje, postavite unaprijed određenu glasnoću radija, ovaj parametar postavlja internu glasnoću RDA5807 IC, što označava kraj našeg postupka postavljanja.
radio.setVolume (FIX_RADIO_VOLUME); // sljedeći postavljamo normaliziranje glasnoće radija radio.setMono (false); // ne želimo da čip daje mono izlaz radio.setMute (false); // ne želimo da čip na početku priguši zvuk
Petlju započinjemo pozivanjem funkcije MQTT_connect () koja uspostavlja vezu s MQTT poslužiteljem.
U funkciji MQTT povezivanje pokušavamo tri puta uspostaviti vezu s MQTT poslužiteljem.
Ako je uspješno, dobit ćemo poruku o uspjehu, inače ćemo dobiti poruku o pogrešci.
void MQTT_connect () {int8_t ret; // 8-bitni cijeli broj za spremanje pokušaja // Zaustavi ako je već povezan. if (mqtt.connected ()) {return; } Serial.print ("Povezivanje s MQTT…"); uint8_t pokušava ponovo = 3; while ((ret = mqtt.connect ())! = 0) {// connect vratit će 0 za povezani Serial.println (mqtt.connectErrorString (ret)); Serial.println ("Ponovni pokušaj MQTT veze za 5 sekundi…"); mqtt.disconnect (); kašnjenje (5000); // pričekaj 5 sekundi pokušaja--; if (retries == 0) {// u osnovi umrijeti i pričekati da me WDT resetira dok (1); }} Serial.println ("MQTT povezan!"); }
Dalje, počnite stvaranjem pokazivača na objekt Adafruit_MQTT_Subscribe . Pomoću toga ćemo odrediti koja je pretplata primljena.
Pretplata na Adafruit_MQTT_Subscribe *;
Dalje, čekamo poruku pretplate.
mqtt.readSubscription (timeInMilliseconds) preslušat će određeno vrijeme za sve poruke koje dolaze s MQTT poslužitelja.
Ako dobije poruku prije isteka vremena, odgovorit će pokazivačem na pretplatu ili će samo isteći vrijeme i vratiti 0. U tom će slučaju pričekati 2 sek.
while ((pretplata = mqtt.readSubscription (20000)))
Ako se pojavi Timeout je dok petlja punjenje ne uspije. Ako ne, uspoređujemo koju pretplatu i dobit ćemo naše poznate pretplate.
U ovom kodu to radimo za sva tri naša pretplaćena feeda.
if (pretplata == & Toggle_FM) if (pretplata == & Radio_Station) if (pretplata == & Volume)
To su bila glavna tri parametra koja morate razumjeti u odjeljku petlje.
Ovaj odjeljak koda koristi se za nadgledanje i postavljanje Toggle_FM feeda.
if (pretplata == & Toggle_FM) // je li to poruka iz feeda Toggle_FM {Serial.print (F ("Dobio:")); Serial.println ((char *) Toggle_FM.lastread); // ispisati podatke feeda samo za otklanjanje pogrešaka ako (String ((char *) Toggle_FM.lastread) == String ("on")) // primljene podatke uspoređujemo s poznatim parametrom, u ovom slučaju očekujemo da je "uključeno "dolazi iz sever {// ali prije nego što to učinimo, moramo ga napraviti u nizu što usporedbu čini super jednostavnom digitalWrite (D7, HIGH); // ako dobijemo niz" on "od poslužitelja kojeg izrađujemo D7 pin HIGH} if (String ((char *) Toggle_FM.lastread) == String ("off")) // opet provjeravamo je li niz isključen {digitalWrite (D7, LOW); // ako dobijemo niz "isključen" s poslužitelja izrađujemo D7 pin LOW}}
Ovaj odjeljak koda koristi se za nadgledanje i postavljanje feeda Radio_Station .
if (pretplata == & Radio_Station) {Serial.print (F ("Dobio:")); Serial.println ((char *) Radio_Station.lastread); if (String ((char *) Radio_Station.lastread) == String ("Big FM")) // čujemo da provjeravamo niz Big FM {radio.setBandFrequency (FIX_BAND, 9270); // ako je gornji uvjet istinit postavljamo kanal radoi na 92,7MHz} // Gore navedeni postupak nastavlja se u nastavku 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); }}
Ovaj odjeljak koda koristi se za nadgledanje i podešavanje unosa glasnoće.
if (pretplata == & Volume) // // čujemo da provjeravamo postoji li niz Volume i to je cijela vrijednost u formatu stringa // Moramo ga pretvoriti natrag u cijeli broj da bismo promijenili glasnoću uz pomoć PT2258 IC Serial.print (F ("Dobio:")); Serial.println ((char *) Volume.lastread); volume = atoi ((char *) Volume.lastread); // Koristimo metodu atoi () za pretvaranje pokazivača znakova u cjelobrojni volumen = karta (volumen, 0,100,79,0); // map (value, fromLow, fromHigh, toLow, toHigh) // pošto pt2258 razumije samo cjelobrojne vrijednosti u dB // mi mapiramo vrijednost 0dB - 79dB na 0% - 100%. digitalPot.setChannelVolume (glasnoća, 0); // nakon svega što postavljamo glasnoću za kanal 0 PT2258 IC digitalPot.setChannelVolume (glasnoća, 1); // nakon svega što postavljamo glasnoću za kanal 1 IC PT2258}}
Testiranje glasovno upravljanog FM radija pomoću Arduina
Za ispitivanje sklopa korišten je sljedeći aparat -
- Transformator koji ima slavinu 13-0-13
- Dva zvučnika od 4Ω od 20 W kao opterećenje.
- Telefon za upotrebu Google asistenta.
U prethodnom članku pokazao sam vam kako napraviti jednostavno pojačalo od 2x32 W s IC-om TDA2050, upotrijebit ću to i za ovu demonstraciju, Poremetio sam mehanički potenciometar i spojio dva kabela s dva mala kratkospojnika. Sada sam uz pomoć dvije tipke uspio promijeniti glasnoću pojačala.
Daljnje poboljšanje
Postoje mnoga daljnja poboljšanja koja se mogu napraviti u ovom krugu.
- Postoje različiti problemi s bukom jer pored NodeMCU radi izvor zvuka, pa moramo implementirati dodatnu zaštitu kako bismo poboljšali otpornost na buku.
- Izgradnja ukupnog kruga na PCB poboljšat će otpornost na buku.
- Dodatni filtri mogu se dodati ovom IC-u za uklanjanje buke.
Nadam se da vam se svidio ovaj članak i da ste iz njega naučili nešto novo. Ako sumnjate, možete pitati u komentarima ispod ili možete koristiti naše forume za detaljnu raspravu.
