- RDA5807M IC
- IC PT2258
- Shematisks
- Nepieciešamās sastāvdaļas
- Kā mēs iegūstam datus no Google palīga?
- Adafruit konta izveide saziņai
- IFTTT brokera iestatīšana FM radio
- Arduino kods un skaidrojums
- Balss kontrolēta FM radio testēšana, izmantojot Arduino
- Papildu uzlabošana
Mūsdienās lielākajai daļai no mums patīk klausīties mūziku ar viedtālruņiem. Bet dažus gadus atpakaļ, tas tā nebija, tajā brīdī FM radio bija pirmā izvēle, lai klausītos mūziku, aplādes, ziņas un citus. Mūsdienās neviens neklausās radio mūziku, ziņas un citus, izņēmums ir vecmāmiņa un vectēvs.
Tātad, lai mazliet atdzīvinātu veco FM radio slavu, šajā projektā es gatavojos izveidot balss vadāmu FM radio, izmantojot Google palīdzību un populāro RDA5870M Superheterodyne Receiver IC.
Pārbaudiet arī mūsu iepriekšējās FM radio shēmas:
- Arduino bāzes FM radio
- Viedtālrunis, ko kontrolē FM radio, izmantojot Arduino
- Vienkārša FM raidītāja shēma
- Kā izveidot FM raidītāja shēmu
RDA5807M IC
RDA5807M ir ļoti mūsdienīgs vienas mikroshēmas FM stereo radio uztvērējs ar pilnībā integrētu sintezatoru, IF selektivitāti, RDS / RBDS un MPX dekodētāju, kas atbalsta 50 MHz līdz 115 MHz frekvenču diapazonu. Tas ir ļoti lēts vienas mikroshēmas FM uztvērēja IC, kura funkcionēšanai ir nepieciešami ļoti maz ārēju komponentu. Šis IC izmanto I2C saskarni, lai sazinātos ar jebkuru galveno ierīci, tāpēc visa šī funkcija padara to ļoti piemērotu pārnēsājamām ierīcēm.
Šim IC ir iekšējs audio procesors, kas ir atbildīgs par tā lielisko audio kvalitāti.
Dažas no galvenajām iezīmēm ir
- Atbalsts pasaules frekvenču joslām
- Atbalsts RDS / RBDS
- Digitāls uztvērējs ar zemu IF līmeni
- Pilnībā integrēts digitālais frekvences sintezators
- Digitālā automātiskās pastiprināšanas kontrole (AGC)
- Basa pastiprināšana
- Tieši atbalstiet 32Ω pretestības slodzi
- Integrēts LDO regulators un citas iespējas
Jūs varat uzzināt vairāk par šo IC, izejot cauri šim projektam, kura pamatā ir Arduino FM Radio, izmantojot RDA5807.
IC PT2258
PT2258 ir mikroshēma, kas paredzēta izmantošanai kā 6 kanālu elektroniskais skaļuma regulators, šajā mikroshēmā tiek izmantota CMOS tehnoloģija, kas īpaši izstrādāta daudzkanālu audio-video lietojumprogrammām.
Šis IC nodrošina I2C vadības saskarni ar vājināšanas diapazonu no 0 līdz -79dB pie 1dB / solī un nāk ar 20 kontaktu DIP vai SOP pakotni.
Daži no pamatfunkcijām ietver:
- 6 ieejas un izejas kanāli (5.1 mājas audio sistēmām)
- Atlasāma I2C adrese (Daisy-chain lietojumprogrammai)
- Augsta kanāla atdalīšana (lietošanai ar zemu trokšņa līmeni)
- S / N attiecība> 100 dB
- Darba spriegums ir no 5 līdz 9V
Mēs iepriekš skaidrojām par šo IC PT2258 digitālās audio skaļuma kontroles projektā. Jūs varat pārbaudīt šo projektu, ja vēlaties uzzināt vairāk par šo IC.
Shematisks
Google asistenta kontrolētā FM radio shēma ir dota zemāk:
Nepieciešamās sastāvdaļas
- NodeMCU mikrokontrolleris - 1
- PT2258 digitālais skaļuma regulators - 1
- RDA5807 FM radio modulis - 1
- SPDT relejs 6V - 1
- 1n4007 Diode - 1
- Skrūves spaile 5mmx2 - 1
- 3,5 mm austiņu ligzda - 1
- Loģiskā līmeņa pārveidotājs - 1
- 10K rezistors, 5% - 4
- 150K rezistors, 5% - 4
- 100K rezistors, 5% - 2
- 10uF kondensators - 6
- 0.1uF kondensators - 1
- Džempera vads - 10
Kā mēs iegūstam datus no Google palīga?
Iepriekš redzamais attēls sniedz pamatideju par saziņas procesu starp Google asistentu un NodeMCU.
Google palīgam ir tiesības modificēt datus Adafruit IO serverī, lai IFTTT ar MQTT darbotos kā starpnieks.
Ja servera pusē (Adafruit IO) notiek kāda datu maiņa, tas tiek atspoguļots NodeMCU pusē. Lai to panāktu, jums jāievēro tālāk sniegtie norādījumi-
Adafruit konta izveide saziņai
Vispirms izveidojiet Adafruit IO kontu. Piesakieties Adafruit IO, izmantojot savus akreditācijas datus, vai reģistrējieties, ja jums nav konta. Iepriekš mēs izmantojām Adafruit IO, lai izveidotu Alexa kontrolētu LED, Raspberry Pi mājas automatizāciju un daudzus citus IoT balstītus projektus.
Pēc pieteikšanās Adafruit kontā
Noklikšķiniet uz Informācijas paneļi, pēc tam noklikšķiniet uz Darbība> Izveidot jaunu informācijas paneli .
Tālāk mēs pievienosim jaunu nosaukumu un īsu mūsu jaunā informācijas paneļa aprakstu .
Kad esat izveidojis informācijas paneli, no sava konta jāiegūst lietotājvārds un aktīvā atslēga, kā tas ir nepieciešams Arduino kodā. To var iegūt, noklikšķinot uz ikonas KEY.
Pēc tam izveidojiet trīs blokus; viens pārslēgšanas bloks, viens gabarīta bloks, viens teksta bloks.
Bloki ir ļoti svarīgi, jo šie bloki ir atbildīgi par saziņu starp google palīdzību un NodeMCU.
Lai izveidotu bloku, jums augšējā labajā stūrī jānoklikšķina uz zīmes +.
Tālāk mēs gatavosim blokus.
Tālāk jums ir jāiestata katrs bloks, lai to izdarītu, jums jāatzīmē konkrētais bloks un jānoklikšķina uz Nākamā darbība.
Šim projektam nav jāmaina nekādi iestatījumi, izņemot pārslēgšanas pogu.
Pārslēgšanas pogas teksts ir ar lielajiem burtiem, jums tas jāpadara ar nelielu burtu un jāatjaunina izmaiņas.
Tas viss, tas ir viss, kas jums jāiestata adafruit IO.
Mans pēdējais ekrāns izskatās šādi-
IFTTT brokera iestatīšana FM radio
Kā vienmēr, reģistrējieties, ja jums nav konta, vai pierakstieties, ja jums jau ir konts.
Tagad jums ir jāizveido sīklietotne. Lai to izdarītu, rīkojieties šādi:
Lai izveidotu sīklietotni, noklikšķiniet uz sava konta ikonas un noklikšķiniet uz Izveidot.
Izveidošanas ekrānā pēc tam noklikšķiniet uz ikonas +.
Pēc tam jums jāļauj piekļūt savam Google kontam.
Lai to izdarītu, meklēšanas joslā jāmeklē Google asistents un jānoklikšķina uz Google asistenta ikonas.
Nākamajā ekrānā mums jāizvēlas aktivizētājs, Atcerieties, ka mēs izveidojām trīs blokus Adafruit IO serverī, mums ir jāizveido šo trīs bloku aktivizētāji.
Pirmkārt, radiostacijas bloks, tāpēc mums jāizvēlas Say frāze ar teksta sastāvdaļu .
Nākamajā ekrānā mums jāievada tas, ko vēlaties pateikt un ar ko Google palīgam jums jāatbild.
Pēc tam noklikšķiniet uz pogas Izveidot aktivizētāju.
Nākamais ekrāns izskatās kaut kas līdzīgs šim, jo esat pabeidzis If daļu, ir pienācis laiks, lai pēc tam daļu, noklikšķiniet uz + zīmi pēc tam .
Jums tiks parādīts ekrāns, piemēram, zemāk redzamais attēls, meklējiet Adafruit un noklikšķiniet uz Adafruit ikonas.
Pēc tam autorizējiet savu Adafruit kontu IFTTT, pēc tam noklikšķiniet uz Savienot.
Pēc tam jums jānoklikšķina uz Sūtīt datus Adafruit IO.
Tad jums tiks parādīta plūsmu nolaižamā izvēlne, kuru esat izveidojis iepriekš Adafruit kontā.
Izvēlieties jebkuru un noklikšķiniet uz Izveidot darbību, jums tas jādara visiem trim.
Un tas iezīmē IFTTT procesa beigas, mans pēdējais sīklietotnes ekrāns izskatās šādi,
Arduino kods un skaidrojums
Arduino kods ir paredzēts, lai pārvaldītu visu komunikāciju starp IC un saziņu starp Adafruit IO IFTTT un WIFI. Pilnīgs šīs Arduino Nano FM radio kods ir norādīts šīs apmācības beigās. Kods ir nedaudz garš un sarežģīts, šeit mēs esam izskaidrojuši pilnu kodu pa rindām.
Pirmkārt, mums jāiekļauj visas nepieciešamās bibliotēkas, tās ir:
# iekļaut
Pēc tam definējiet WI-FI SSID un paroli, tas ir jūsu maršrutētāja SSID un PASSWORD.
const char * ssid = "Android"; // maršrutētāja SSID const char * password = "12345678"; // Maršrutētāja parole
Tad mēs definējam divus boolean un mainīgo, booleans tiek izmantoti, lai saglabātu IC sakaru statusu, un skaļuma mainīgo izmanto, lai iestatītu skaļuma līmeni.
bool potStatus; // 1, kad ir izveidota komunikācija starp MCU un IC bool radioStatus; 1, kad ir izveidota saziņa starp MCU un IC int tilpums = 15; // noklusējuma skaļuma līmenis ar IC sākas ar
Pēc tam mēs izveidojām GPIO tapu ar nosaukumu Relay_Pin, lai ieslēgtu vai izslēgtu pastiprinātāju.
#define Relay_Pin D7 // Šo tapu izmanto, lai ieslēgtu un izslēgtu radio
Tālāk mums ir jādefinē visas nepieciešamās definīcijas saziņai ar Adafruit IO.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 // SSL izmantojiet 8883
Tālāk norādītās definīcijas FIX_BAND ir patentēta definīcija, kuru izmanto bibliotēka.
Nākamais definētais paziņojums nosaka moduļa iekšējo tilpumu.
#define FIX_BAND RADIO_BAND_FM // <Josla tiks noregulēta ar šo skici ir FM. #define FIX_RADIO_VOLUME 6 /// <Moduļa noklusējuma apjoms.
Pēc tam izveidojiet nepieciešamos objektus PT2258, RDA5807M un WiFiClient.
PT2258 digitalPot; // PT2258 Object RDA5807M radio; // RDA5807M objekta WiFiClient klients; // WiFiClient Object
Pēc tam iestatiet MQTT klienta klasi, ievadot WiFi klientu un MQTT serveri un pieteikšanās datus.
Adafruit_MQTT_Client mqtt (& klients, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// Iestatiet MQTT klienta klasi, ievadot WiFi klientu un MQTT serveri un pieteikšanās datus.
Tad mums jāabonē plūsma. Ko tas liek jums jautāt?
Ja dažas vērtības, daži parametri mainās Adafruit serverī, izmaiņas tiks atspoguļotas šeit.
Adafruit_MQTT_Subscribe Radio_Station = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Radio_Station"); // Metodes, kas izmantotas, lai abonētu plūsmu Adafruit_MQTT_Subscribe Toggle_FM = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Toggle_FM"); // Metodes, ko izmanto, lai abonētu plūsmu Adafruit_MQTT_Subscribe Volume = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / Volume"); // Metodes, ko izmanto plūsmas abonēšanai
Zemāk ir funkcijas MQTT_connect () funkcijas prototips.
void MQTT_connect (); // Funkcijas prototips MQTT Connect
Tad mēs sākam iestatīšanas procesu. Sākumā UART komunikāciju sākam ar sākuma metodi.
Sērijas sākums (9600); // UART sākas Serial.println (); // pievieno papildu rindiņu atstarpēm Serial.println (); // pievieno papildu rindiņu atstarpēm Tālāk mēs darām visu parasto, lai izveidotu savienojumu ar WiFI **************** visas parastās lietas, kas nepieciešamas WiFi savienojumam ************************ / Serial.print ("savienojums ar"); Serial.println (ssid); WiFi.mode (WIFI_STA); WiFi.begin (ssid, parole); while (WiFi.status ()! = WL_CONNECTED) {aizkave (500); Sērijas.druka ("."); } Serial.println (""); Serial.println ("savienots ar WiFi"); Serial.println ("IP adrese:"); Serial.println (WiFi.localIP ()); / ***************** visas parastās lietas, kas nepieciešamas WiFi savienojumam ************************ /
Pēc tam izsauciet metodi Wire.begin (), lai izveidotu I2C savienojumu, un mēs saucam par metodi Wire.setClock (), lai noteiktu I2C frekvenci līdz 100KHz, jo tas ir pilns PT2258 IC ātrums.
Wire.begin (); // sākt I2C sākuma secību Wire.setClock (100000); // I2C pulksteņa iestatīšana uz 100KHz
Pēc tam izsauciet metodi init () gan PT2258, gan RDA5807 IC un turiet atgriešanās statusu iepriekš definētajos būlainos.
potStatus = digitalPot.init (); radioStatus = radio.init ();
Pēc tam pārbaudiet, vai MCU varēja sazināties ar IC vai nē. Mēs to darām ar diviem paziņojumiem, ja citādi .
if (potStatus) {Serial.println ("Atrasta ierīce PT2258!"); } else {Serial.println ("Neizdevās uzsākt PT2258"); } if (radioStatus) {Serial.println ("Atrasta RDA5807M ierīce!"); } else {Serial.println ("Neizdevās uzsākt RDA5807M"); }
Pēc tam izsauciet abonēšanas metodi no MQTT bibliotēkas. MQTT serveris informēs mūs par izmaiņām mūsu abonētajās plūsmās.
mqtt.subscribe (& Radio_Station); // MQTT abonementa iestatīšana Radio_Station plūsmai mqtt.subscribe (& Toggle_FM); // MQTT abonementa iestatīšana Toggle_FM plūsmai mqtt.subscribe (& Volume); // MQTT abonementa iestatīšana plūsmas plūsmai
Pēc tam mēs iestatām releja tapu kā izvadi un tapas statusu uz LOW
pinMode (D7, OUTPUT); digitalWrite (D7, LOW);
Pēc tam iestatiet iepriekš noteiktu radio skaļumu, šis parametrs nosaka RDA5807 IC iekšējo tilpumu, kas iezīmē mūsu iestatīšanas procesa beigas.
radio.setVolume (FIX_RADIO_VOLUME); // pēc tam mēs iestatām radio skaļuma normalizēšanu radio.setMono (false); // mēs negribam, lai mikroshēma sniegtu mono izvades radio.setMute (false); // mēs nevēlamies, lai mikroshēma sākumā tiktu izslēgta
Mēs sākam cilpu, izsaucot funkciju MQTT_connect (), kas izveido savienojumu ar MQTT serveri.
MQTT savienojuma funkcijā mēs trīs reizes mēģinām izveidot savienojumu ar MQTT serveri.
Ja tas būs veiksmīgs, mēs saņemsim veiksmes ziņojumu, pretējā gadījumā mēs saņemsim kļūdas ziņojumu.
void MQTT_connect () {int8_t ret; // 8 bitu vesels skaitlis, lai saglabātu mēģinājumus // Pārtraukt, ja tas jau ir izveidots. ja (mqtt.connected ()) {return; } Serial.print ("Savienojums ar MQTT…"); uint8_t mēģinājumi = 3; kamēr ((ret = mqtt.connect ())! = 0) {// connect atgriezīs 0 savienotajam Serial.println (mqtt.connectErrorString (ret)); Serial.println ("MQTT savienojuma mēģinājums tiek veikts pēc 5 sekundēm…"); mqtt.donnonnect (); kavēšanās (5000); // pagaidiet 5 sekundes atkārtoti--; if (atkārtoti mēģina == 0) {// būtībā mirst un gaidiet, kamēr WDT mani atiestatīs, kamēr (1); }} Serial.println ("Savienots ar MQTT!"); }
Pēc tam vispirms izveidojiet rādītāju objektam Adafruit_MQTT_Subscribe . Mēs to izmantosim, lai noteiktu saņemto abonementu.
Adafruit_MQTT_Subscribe * abonements;
Tālāk mēs gaidām abonēšanas ziņojumu.
mqtt.readSubscription (timeInMilliseconds) noteiktu laiku noklausīsies visus ziņojumus, kas nāk no MQTT servera.
Ja tas saņem ziņojumu pirms noildzes, tas atbildēs ar abonementa rādītāju, vai arī tas vienkārši noildzīs un atgriezīs 0. Tādā gadījumā tas gaidīs 2 sek.
while ((abonements = mqtt.readSubscription (20000)))
Ja iestājas taimauts, kamēr loop aizpildīšana neizdodas. Ja nē, mēs salīdzinām abonementu un iegūsim mūsu zināmos abonementus.
Šajā kodā mēs to darām visām trim mūsu abonētajām plūsmām.
if (abonements == & Pārslēgt_FM) if (abonements == & Radio_Station) ja (abonements == & Apjoms)
Šie bija galvenie trīs parametri, kas jums jāsaprot cilpa sadaļā.
Šī koda sadaļa tiek izmantota, lai uzraudzītu un iestatītu plūsmu Toggle_FM .
if (subscription == & Toggle_FM) // vai tas ir ziņojums no Toggle_FM plūsmas {Serial.print (F ("Got:")); Serial.println ((char *) Toggle_FM.lastread); // drukāt plūsmas datus tikai atkļūdošanai, ja (String ((char *) Toggle_FM.lastread) == String ("on")) // mēs salīdzinām saņemtos datus ar zināmu parametru, šajā gadījumā mēs sagaidām, ka "on "nāk no katras {//, bet pirms mēs to izdarām, mums tā jāizveido par virkni, kas padara salīdzinājumu ļoti vienkāršu digitalWrite (D7, HIGH); // ja no izveidotā servera saņemam virkni" on " D7 pin HIGH} if (String ((char *) Toggle_FM.lastread) == String ("off")) // atkal mēs pārbaudām, vai virkne ir izslēgta {digitalWrite (D7, LOW); // ja mēs saņemam "off" virkne no servera, mēs veidojam D7 tapu LOW}}
Šī koda sadaļa tiek izmantota, lai uzraudzītu un iestatītu plūsmu Radio_Station .
if (abonements == & Radio_Station) {Serial.print (F ("Got:")); Serial.println ((char *) Radio_Station.lastread); if (String ((char *) Radio_Station.lastread) == String ("Big FM")) // dzirdam, ka mēs pārbaudām virkni Big FM {radio.setBandFrequency (FIX_BAND, 9270); // ja iepriekš minētais nosacījums ir taisnība, mēs iestatām radoi kanālu uz 92,7MHz} // Iepriekš minētais process tiek turpināts tālāk, ja (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); }}
Šī koda sadaļa tiek izmantota, lai uzraudzītu un iestatītu plūsmas plūsmu.
if (subscription == & Volume) // // dzirdam, ka mēs pārbaudām virkni Volume, un tā ir vesela skaitļa vērtība virknes formātā // Mums tas jāpārvērš atpakaļ par veselu skaitli, lai ar PT2258 palīdzību mainītu skaļumu. IC sērijas.druka (F ("Got:")); Seriālais.println ((char *) Apjoms.pagatavots); tilpums = atoi ((char *) Skaļums. pēdējais); // Mēs izmantojam metožu atoi (), lai rakstzīmju rādītāju pārveidotu par veselu skaitli tilpums = karte (apjoms, 0,100,79,0); // karte (value, fromLow, fromHigh, toLow, toHigh) // kā pt2258 saprot tikai veselu skaitļu vērtības dB // mēs 0dB - 79dB vērtību kartējam līdz 0% - 100%. digitalPot.setChannelVolume (apjoms, 0); // galu galā mēs iestatām PT2258 IC digitalPot.setChannelVolume (volume, 1) 0 kanāla skaļumu; // pēc visa tā mēs iestatām skaļumu PT2258 IC 1. kanālam}}
Balss kontrolēta FM radio testēšana, izmantojot Arduino
Lai pārbaudītu ķēdi, tika izmantots šāds aparāts:
- Transformators ar 13-0-13 pieskārienu
- Divi 4Ω 20W skaļruņi kā slodze.
- Tālrunis, lai izmantotu Google asistentu.
Iepriekšējā rakstā es jums parādīju, kā izveidot vienkāršu 2x32 vatu audio pastiprinātāju ar TDA2050 IC, es to izmantoju arī šai demonstrācijai, Esmu traucējis mehānisko potenciometru un saīsinājis divus vadus ar diviem maziem džempera kabeļiem. Tagad ar divu spiedpogu palīdzību es varēju mainīt pastiprinātāja skaļumu.
Papildu uzlabošana
Šajā ķēdē var veikt vēl daudz uzlabojumu.
- Ir dažādas trokšņa problēmas, jo blakus NodeMCU darbojas audio avots, tāpēc mums ir jāievieš papildu pasargāšana, lai uzlabotu trokšņa imunitāti.
- Veidojot vispārējo ķēdi PCB, tiks uzlabota trokšņa imunitāte.
- Lai novērstu troksni, šai IC var pievienot papildu filtrus.
Es ceru, ka jums patika šis raksts un uzzinājāt no tā kaut ko jaunu. Ja jums ir kādas šaubas, varat jautāt zemāk esošajos komentāros vai arī izmantot mūsu forumus detalizētai diskusijai.