- RDA5807M إيك
- IC PT2258
- تخطيطي
- المكونات مطلوبة
- كيف نحصل على البيانات من مساعد جوجل؟
- إنشاء حساب Adafruit للتواصل
- إعداد وسيط IFTTT لراديو FM
- كود وشرح اردوينو
- اختبار راديو FM ذو التحكم الصوتي باستخدام Arduino
- مزيد من التحسين
في الوقت الحاضر ، يحب معظمنا الاستماع إلى الموسيقى باستخدام هواتفنا الذكية. لكن قبل بضع سنوات ، لم يكن هذا هو الحال ، في ذلك الوقت ، كانت راديو FM هي الخيار الأول للاستماع إلى الموسيقى والبودكاست والأخبار وغيرها. في الوقت الحاضر ، لا أحد يستمع إلى الراديو للموسيقى والأخبار وغيرها ، باستثناء الجد والجدة.
لذلك ، لإحياء المجد القديم لراديو FM قليلاً ، في هذا المشروع ، سأقوم ببناء راديو FM يتم التحكم فيه صوتيًا باستخدام Google Assistance و RDA5870M Superheterodyne Receiver IC.
تحقق أيضًا من دوائر راديو FM السابقة:
- راديو FM مقره اردوينو
- راديو FM يتم التحكم به بواسطة الهاتف الذكي باستخدام Arduino
- حلبة إرسال FM بسيطة
- كيفية بناء حلبة مرسل FM
RDA5807M إيك
RDA5807M هو موالف راديو FM استريو حديث للغاية ذو رقاقة واحدة مزود بمركب متكامل تمامًا ، وانتقائية IF ، و RDS / RBDS ، وفك تشفير MPX الذي يدعم نطاق التردد 50 ميجا هرتز إلى 115 ميجا هرتز. إنه جهاز استقبال FM ذو رقاقة واحدة رخيص للغاية يتطلب مكونات خارجية قليلة جدًا للعمل بشكل وظيفي. يستخدم هذا IC واجهة I2C للتواصل مع أي جهاز رئيسي ، لذا فإن كل هذه الميزة تجعله مناسبًا جدًا للأجهزة المحمولة.
يحتوي هذا IC على معالج صوت داخلي مسؤول عن جودة الصوت الرائعة.
تتضمن بعض الميزات الأساسية -
- دعم نطاقات التردد العالمية
- دعم RDS / RBDS
- موالف رقمي منخفض IF
- مركب تردد رقمي متكامل
- التحكم في الكسب التلقائي الرقمي (AGC)
- تعزيز الجهير
- دعم مباشرة تحميل مقاومة 32 درجة
- منظم LDO متكامل والمزيد
يمكنك معرفة المزيد حول هذا IC من خلال هذا المشروع راديو FM القائم على Arduino باستخدام RDA5807.
IC PT2258
PT2258 عبارة عن IC تم تصنيعه لاستخدامه كوحدة تحكم بحجم 6 قنوات إلكترونية ، ويستخدم هذا IC تقنية CMOS المصممة خصيصًا لتطبيقات الصوت والفيديو متعددة القنوات.
يوفر هذا IC واجهة تحكم I2C مع نطاق توهين من 0 إلى -79 ديسيبل عند 1 ديسيبل / خطوة ويأتي في حزمة DIP أو SOP ذات 20 سنًا.
تتضمن بعض الميزات الأساسية -
- 6-قنوات الإدخال والإخراج (لأنظمة الصوت المنزلي 5.1)
- عنوان I2C القابل للتحديد (لتطبيق سلسلة ديزي)
- فصل قناة عالية (لتطبيق ضوضاء منخفضة)
- نسبة S / N> 100 ديسيبل
- جهد التشغيل من 5 إلى 9 فولت
لقد أوضحنا مسبقًا حول هذا IC في مشروع التحكم بحجم الصوت الرقمي PT2258. يمكنك التحقق من هذا المشروع إذا كنت تريد معرفة المزيد عن هذا IC.
تخطيطي
فيما يلي مخطط الدائرة لراديو FM الخاضع للتحكم في Google Assistant:
المكونات مطلوبة
- متحكم NodeMCU - 1
- وحدة التحكم في مستوى الصوت الرقمية PT2258 - 1
- وحدة راديو FM RDA5807 - 1
- مرحل SPDT 6 فولت - 1
- 1n4007 ديود - 1
- برغي محطة 5mmx2-1
- مقبس سماعة رأس مقاس 3.5 ملم - 1
- محول المستوى المنطقي - 1
- 10 كيلو المقاوم ، 5٪ -4
- 150 كيلو المقاوم ، 5٪ -4
- 100 كيلو المقاوم ، 5٪ -2
- 10 فائق التوهج مكثف - 6
- 0.1 فائق التوهج مكثف - 1
- سلك توصيل - 10
كيف نحصل على البيانات من مساعد جوجل؟
تعطيك الصورة أعلاه الفكرة الأساسية لعملية الاتصال بين مساعد Google و NodeMCU.
يتمتع مساعد Google بسلطة تعديل البيانات في خادم Adafruit IO للقيام بذلك ، حيث يعمل IFTTT مع MQTT كوسيط.
في حالة حدوث أي تغيير في البيانات على جانب الخادم (Adafruit IO) ، ينعكس ذلك على جانب NodeMCU. لتحقيق ذلك ، عليك اتباع التعليمات الواردة أدناه-
إنشاء حساب Adafruit للتواصل
أولاً ، قم بإنشاء حساب Adafruit IO. قم بتسجيل الدخول إلى Adafruit IO باستخدام بيانات الاعتماد الخاصة بك أو قم بالتسجيل إذا لم يكن لديك حساب. استخدمنا سابقًا Adafruit IO لبناء LED يتم التحكم فيه بواسطة Alexa ، وأتمتة المنزل Raspberry Pi ، والعديد من المشاريع الأخرى القائمة على إنترنت الأشياء.
بعد تسجيل الدخول إلى حساب Adafruit ،
انقر فوق Dashboards ، ثم انقر فوق Action> Create a New Dashboard .
بعد ذلك ، سنضيف اسمًا جديدًا ووصفًا موجزًا للوحة القيادة الجديدة .
بعد إنشاء لوحة القيادة ، تحتاج إلى الحصول على اسم المستخدم والمفتاح النشط من حسابك كما هو مطلوب في كود Arduino. يمكنك الحصول على ذلك من خلال النقر على أيقونة KEY.
بعد ذلك ، اصنع ثلاث كتل ؛ كتلة تبديل واحدة ، كتلة قياس واحدة ، كتلة نصية واحدة .
تعتبر الكتل مهمة جدًا ، حيث أن هذه الكتل مسؤولة عن الاتصال بين مساعدة google و NodeMCU.
لإنشاء كتلة ، تحتاج إلى النقر فوق علامة + في الزاوية اليمنى العليا.
بعد ذلك ، سنقوم بعمل الكتل.
بعد ذلك ، تحتاج إلى إعداد كل كتلة ، لذلك ، تحتاج إلى تحديد كتلة معينة والنقر فوق الخطوة التالية.
بالنسبة لهذا المشروع ، ليست هناك حاجة لتغيير أي إعدادات باستثناء زر التبديل.
النص في زر تبديل في حروف وأرقام، تحتاج إلى جعله إلكتروني صغير و تحديث التغييرات.
هذا كل شيء ، إنها كل الأشياء التي تحتاج إلى إعدادها في adafruit IO.
تبدو شاشتي النهائية هكذا-
إعداد وسيط IFTTT لراديو FM
كما هو الحال دائمًا ، قم بالتسجيل إذا لم يكن لديك حساب أو قم بتسجيل الدخول إذا كان لديك حساب بالفعل.
الآن ، تحتاج إلى إنشاء تطبيق صغير. لذلك ، اتبع الخطوات أدناه:
لجعل الصغير، انقر على الخاص بك رمز الحساب و انقر فوق إنشاء.
في شاشة الإنشاء ، انقر فوق الرمز + بعد إذا.
بعد ذلك ، تحتاج إلى السماح بالوصول إلى حساب google الخاص بك .
لذلك ، تحتاج إلى البحث عن مساعد Google في شريط البحث والنقر على أيقونة مساعد Google.
في الشاشة التالية ، يتعين علينا اختيار مشغل ،
تذكر ، لقد صنعنا ثلاث كتل في Adafruit IO Server ، نحتاج إلى جعل هناك مشغلات لهذه الكتل الثلاث.
أولاً ، كتلة محطة الراديو ، لذلك ، نحتاج إلى تحديد قل عبارة بمكون نصي .
في الشاشة التالية ، يتعين علينا كتابة ما تريد قوله وما يجب أن يرد عليك به مساعد Google.
ثم انقر على زر إنشاء المشغل.
تبدو الشاشة التالية شيئًا من هذا القبيل ، نظرًا لأنك أكملت جزء If ، فقد حان وقت الجزء ثم انقر فوق علامة + بعد ذلك .
ستظهر لك شاشة مثل الصورة أدناه ، ابحث عن Adafruit ، وانقر على أيقونة Adafruit.
بعد ذلك ، قم بتفويض حساب Adafruit الخاص بك باستخدام IFTTT ، ثم انقر فوق اتصال.
بعد ذلك ، عليك النقر فوق إرسال البيانات إلى Adafruit IO.
ثم سيتم تقديمك مع المنسدلة الأعلاف التي قمت بإنشائها في وقت سابق من حساب Adafruit.
اختر أيًا وانقر على إنشاء إجراء ، ما عليك سوى القيام بذلك لجميع الثلاثة.
وبهذا ، تمثل نهاية عملية IFTTT ، تبدو شاشة التطبيق الصغيرة الأخيرة على هذا النحو ،
كود وشرح اردوينو
يوجد كود Arduino لإدارة جميع الاتصالات بين IC والتواصل بين Adafruit IO IFTTT و WIFI. يتم تقديم الكود الكامل لراديو Arduino Nano FM في نهاية هذا البرنامج التعليمي. الشفرة طويلة ومعقدة بعض الشيء ، لقد أوضحنا هنا سطر الكود الكامل بسطر.
أولاً ، نحتاج إلى تضمين جميع المكتبات المطلوبة ، وهي:
#تضمن
بعد ذلك ، حدد SSID وكلمة المرور لـ WI-FI ، وهذا هو SSID وكلمة المرور لجهاز التوجيه الخاص بك.
const char * ssid = "Android" ؛ // SSID لجهاز التوجيه الخاص بك const char * password = "12345678" ؛ // كلمة مرور جهاز التوجيه الخاص بك
ثم نقوم بتعريف نوعين منطقيين ومتغير ، ويتم استخدام القيم المنطقية للاحتفاظ بحالة اتصال IC ، ويتم استخدام متغير الحجم لضبط مستوى الصوت.
وعاء منطقي // 1 عندما يتم إنشاء اتصال بين MCU و IC bool radioStatus ؛ // 1 عندما يتم إنشاء الاتصال بين MCU وحجم IC int = 15 ؛ // يبدأ مستوى الصوت الافتراضي مع IC بـ
بعد ذلك ، قمنا بإعداد دبوس GPIO المسمى Relay_Pin لتشغيل أو إيقاف تشغيل مكبر الصوت.
#define Relay_Pin D7 // يستخدم هذا الدبوس لتشغيل وإيقاف الراديو
بعد ذلك ، نحتاج إلى تحديد جميع التعريفات اللازمة للتواصل مع Adafruit IO.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 // استخدم 8883 لـ SSL #define AIO_USERNAME "debashis13" // استبدلها باسم المستخدم #define AIO_KEY "aio_Qyal47xo1fYhc55QB1" AuthEirlace
التعريفات أدناه FIX_BAND هي تعريف خاص تستخدمه المكتبة.
يحدد البيان المحدد التالي الحجم الداخلي للوحدة.
#define FIX_BAND RADIO_BAND_FM // <سيتم ضبط النطاق بواسطة هذا الرسم التخطيطي FM. #define FIX_RADIO_VOLUME 6 /// <الحجم الافتراضي للوحدة.
بعد ذلك ، قم بعمل الكائنات المطلوبة لـ PT2258 و RDA5807M و WiFiClient.
PT2258 digitalPot ؛ // PT2258 راديو كائن RDA5807M ؛ // RDA5807M كائن عميل WiFiClient ؛ // كائن WiFiClient
ثم قم بإعداد فئة عميل MQTT عن طريق تمرير عميل WiFi وخادم MQTT وتفاصيل تسجيل الدخول.
Adafruit_MQTT_Client mqtt (والعميل ، AIO_SERVER ، AIO_SERVERPORT ، AIO_USERNAME ، AIO_KEY) ؛
// قم بإعداد فئة العميل MQTT عن طريق تمرير تفاصيل تسجيل الدخول وعميل WiFi وخادم MQTT.
ثم نحن بحاجة إلى الاشتراك في موجز. ما الذي يجعلك تسأل؟
إذا تغيرت بعض القيم ، بعض المعلمات في خادم Adafruit ، فستنعكس التغييرات هنا.
Adafruit_MQTT_Subscribe Radio_Station = Adafruit_MQTT_Subscribe (& mqtt، AIO_USERNAME "/ feeds / Radio_Station") ؛ // الطرق المستخدمة للاشتراك في موجز Adafruit_MQTT_Subscribe Toggle_FM = Adafruit_MQTT_Subscribe (& mqtt، AIO_USERNAME "/ feeds / Toggle_FM") ؛ // الطرق المستخدمة للاشتراك في موجز Adafruit_MQTT_Subscribe Volume = Adafruit_MQTT_Subscribe (& mqtt، AIO_USERNAME "/ feeds / Volume") ؛ // الطرق المستخدمة للاشتراك في موجز ويب
يوجد أدناه النموذج الأولي لوظيفة MQTT_connect () .
باطل MQTT_connect () ؛ // نموذج أولي لوظيفة MQTT Connect
ثم نبدأ عملية الإعداد لدينا. في البداية ، نبدأ اتصال UART بطريقة البدء.
Serial.begin (9600) ؛ // UART start Serial.println () ؛ // يضيف سطرًا إضافيًا للتباعد Serial.println () ؛ // يضيف سطرًا إضافيًا للتباعد التالي ، نقوم بكل الأشياء المعتادة للاتصال بشبكة WiFI ****************** كل الأشياء المعتادة المطلوبة لاتصال WiFi ************************* / Serial.print ("الاتصال بـ") ؛ Serial.println (ssid) ؛ WiFi.mode (WIFI_STA) ؛ WiFi.begin (SSID ، كلمة المرور) ؛ while (WiFi.status ()! = WL_CONNECTED) {delay (500) ؛ Serial.print (".") ؛ } Serial.println ("") ؛ Serial.println ("متصل بشبكة WiFi") ؛ Serial.println ("عنوان IP:") ؛ Serial.println (WiFi.localIP ()) ؛ / ****************** جميع الأشياء المعتادة المطلوبة لاتصال WiFi ************************* /
بعد ذلك ، اتصل بطريقة Wire.begin () لبدء اتصال I2C وندعو طريقة Wire.setClock () لإصلاح تردد I2C إلى 100 كيلو هرتز لأنها السرعة الكاملة لـ PT2258 IC.
Wire.begin () ؛ // ابدأ تسلسل البدء I2C Wire.setClock (100000) ؛ // ضبط ساعة I2C على 100 كيلو هرتز
بعد ذلك ، قم باستدعاء طريقة init () لكل من PT2258 و RDA5807 IC واحتفظ بحالة الإرجاع في القيم المنطقية المحددة مسبقًا.
potStatus = digitalPot.init () ، radioStatus = radio.init () ،
بعد ذلك ، تحقق مما إذا كانت MCU قادرة على التواصل مع IC أم لا. نفعل هذا ببيانين إذا كان آخر .
if (potStatus) {Serial.println ("Found PT2258 Device!") ؛ } else {Serial.println ("فشل في بدء PT2258")؛ } if (radioStatus) {Serial.println ("Found RDA5807M Device!")؛ } else {Serial.println ("فشل في بدء RDA5807M")؛ }
بعد ذلك ، اتصل بطريقة الاشتراك من مكتبة MQTT. سيتم إخطارنا بواسطة خادم MQTT في حالة حدوث أي تغييرات في موجز ويب المشترك لدينا.
mqtt.subscribe (& Radio_Station) ؛ // إعداد اشتراك MQTT لخلاصة Radio_Station mqtt.subscribe (& Toggle_FM) ؛ // إعداد اشتراك MQTT لـ Toggle_FM feed mqtt.subscribe (& Volume) ؛ // إعداد اشتراك MQTT لتغذية المجلد
بعد ذلك ، قمنا بتعيين دبوس الترحيل كإخراج وحالة الدبوس على LOW
pinMode (D7 ، الإخراج) ؛ الكتابة الرقمية (D7 ، منخفضة) ؛
بعد ذلك ، قم بتعيين حجم راديو محدد مسبقًا ، تحدد هذه المعلمة الحجم الداخلي لـ RDA5807 IC ، والذي يمثل نهاية عملية الإعداد الخاصة بنا.
radio.setVolume (FIX_RADIO_VOLUME) ، // بعد ذلك قمنا بتعيين حجم الراديو العادي radio.setMono (خطأ) ؛ // لا نريد أن تعطي الشريحة خرج أحادي radio.setMute (خطأ) ؛ // لا نريد أن تتوقف الشريحة في البداية
نبدأ الحلقة عن طريق استدعاء وظيفة MQTT_connect () التي تنشئ اتصالاً بخادم MQTT.
في وظيفة اتصال MQTT ، نحاول ثلاث مرات إجراء اتصال بخادم MQTT.
إذا نجحت ، فستتلقى رسالة نجاح ، وإلا فسنحصل على رسالة خطأ.
باطل MQTT_connect () {int8_t ret؛ // عدد صحيح 8 بت لتخزين عمليات إعادة المحاولة // إيقاف إذا كان متصلاً بالفعل. إذا (mqtt.connected ()) {عودة؛ } Serial.print ("الاتصال بـ MQTT…") ؛ uint8_t عمليات إعادة المحاولة = 3 ؛ while ((ret = mqtt.connect ())! = 0) {// سيعيد الاتصال 0 لـ Serial.println المتصل (mqtt.connectErrorString (ret)) ؛ Serial.println ("إعادة محاولة اتصال MQTT في 5 ثوانٍ…") ؛ mqtt.disconnect () ، تأخير (5000) ؛ // انتظر 5 ثوانٍ لإعادة المحاولة-- ؛ if (إعادة المحاولة == 0) {// تموت بشكل أساسي وانتظر حتى يعيدني WDT بينما (1) }} Serial.println ("MQTT متصل!")؛ }
بعد ذلك ، ابدأ بإنشاء مؤشر إلى كائن Adafruit_MQTT_Subscribe . سنستخدم هذا لتحديد الاشتراك الذي تم استلامه.
Adafruit_MQTT_Subscribe * الاشتراك ؛
بعد ذلك ، ننتظر رسالة اشتراك.
سيستمع mqtt.readSubscription (timeInMilliseconds) إلى وقت معين لأي رسائل واردة من خادم MQTT.
إذا تلقيت رسالة قبل انتهاء المهلة ، فسوف ترد بمؤشر إلى الاشتراك أو ستنتهي مهلتها وتعود 0. في هذه الحالة ، ستنتظر لمدة 2 ثانية.
بينما ((اشتراك = mqtt.readSubscription (20000)))
في حالة حدوث مهلة ، يفشل ملء الحلقة while . إذا لم يكن الأمر كذلك ، فنحن نقارن أي اشتراك وسنحصل على اشتراكاتنا المعروفة.
في هذا الكود ، نقوم بذلك لجميع الخلاصات المشتركة الثلاثة لدينا.
إذا (الاشتراك == & Toggle_FM) إذا (الاشتراك == & Radio_Station) إذا (الاشتراك == والحجم)
كانت هذه هي المعلمات الثلاثة الرئيسية التي تحتاج إلى فهمها في قسم الحلقة.
يُستخدم هذا القسم من الكود لمراقبة وتعيين موجز Toggle_FM .
if (subscription == & Toggle_FM) // هي رسالة من موجز Toggle_FM {Serial.print (F ("Got:")) ؛ Serial.println ((char *) Toggle_FM.lastread) ؛ // طباعة بيانات الخلاصة فقط لتصحيح الأخطاء إذا (String ((char *) Toggle_FM.lastread) == String ("on")) // قارنا البيانات المستلمة بمعامل معروف في هذه الحالة نتوقع ذلك "في "يأتي من الخادم {// ولكن قبل أن نفعل ذلك علينا أن نجعله سلسلة مما يجعل الكتابة الرقمية سهلة للغاية (D7، HIGH) ؛ // إذا حصلنا على سلسلة" on "من الخادم الذي نصنعه D7 pin HIGH} if (String ((char *) Toggle_FM.lastread) == String ("off")) // مرة أخرى ، نحن نتحقق من السلسلة خارج {digitalWrite (D7، LOW)؛ // إذا حصلنا على سلسلة "off" من الخادم الذي نجعله D7 pin LOW}}
يستخدم هذا القسم من الكود لمراقبة وتعيين تغذية Radio_Station .
إذا (اشتراك == & Radio_Station) {Serial.print (F ("Got:")) ؛ Serial.println ((char *) Radio_Station.lastread) ؛ if (String ((char *) Radio_Station.lastread) == String ("Big FM")) // اسمع أننا نتحقق من السلسلة Big FM {radio.setBandFrequency (FIX_BAND، 9270) ؛ // إذا كان الشرط أعلاه صحيحًا ، فنحن نضبط قناة radoi على 92.7 ميجا هرتز} // تتم متابعة العمليات المذكورة أعلاه أدناه إذا (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) ؛ }}
يستخدم هذا القسم من الكود لمراقبة وتعيين موجز الحجم.
if (subscription == & Volume) // // اسمع أننا نتحقق من حجم السلسلة وهي قيمة عدد صحيح في تنسيق سلسلة // يتعين علينا تحويلها مرة أخرى إلى عدد صحيح لتغيير الحجم بمساعدة PT2258 IC Serial.print (F ("Got:")) ؛ Serial.println ((char *) Volume.lastread) ؛ الحجم = atoi ((char *) Volume.lastread) ؛ // نحن نستخدم طريقة atoi () لتحويل مؤشر حرف إلى حجم صحيح = خريطة (حجم ، 0،100،79،0) ؛ // خريطة (قيمة ، من منخفض ، من مرتفع ، إلى منخفض ، إلى مرتفع) // نظرًا لأن pt2258 لا يفهم سوى قيم الأعداد الصحيحة بالديسيبل // نحن نقوم بتعيين القيمة 0dB - 79dB إلى 0٪ - 100٪. digitalPot.setChannelVolume (الحجم ، 0) ؛ // بعد كل ذلك نقوم بضبط مستوى الصوت للقناة 0 من PT2258 IC digitalPot.setChannelVolume (حجم ، 1) ؛ // بعد كل ذلك نقوم بتعيين مستوى الصوت للقناة 1 من PT2258 IC}}
اختبار راديو FM ذو التحكم الصوتي باستخدام Arduino
لاختبار الدائرة ، تم استخدام الجهاز التالي-
- محول يحتوي على 13-0-13 صنبور
- مكبرا صوت 4 × 20 وات كحمل.
- الهاتف لاستخدام مساعد جوجل.
في مقال سابق ، لقد أوضحت لك كيفية صنع مضخم صوت بسيط 2x32 وات مع TDA2050 IC ، سأستخدم ذلك في هذا العرض التوضيحي أيضًا ،
لقد قمت بخلل مقياس الجهد الميكانيكي واختصرت خيطين بكبلين صغيرين. الآن ، بمساعدة زري ضغط ، تمكنت من تغيير مستوى صوت مكبر الصوت.
مزيد من التحسين
هناك العديد من التحسينات الإضافية التي يمكن إجراؤها على هذه الدائرة.
- توجد العديد من مشكلات الضوضاء نظرًا لأن مصدر الصوت يعمل بجانب NodeMCU ، لذلك نحتاج إلى تطبيق حماية إضافية لتحسين مناعة الضوضاء.
- سيؤدي بناء الدائرة الكلية إلى ثنائي الفينيل متعدد الكلور إلى تحسين مناعة الضوضاء.
- يمكن إضافة مرشحات إضافية إلى هذا IC للقضاء على الضوضاء.
أتمنى أن تكون قد أحببت هذه المقالة وتعلمت شيئًا جديدًا منها. إذا كان لديك أي شك ، يمكنك أن تسأل في التعليقات أدناه أو يمكنك استخدام منتدياتنا لمناقشة مفصلة.