- يعمل راديو FM العام
- المكونات مطلوبة
- جهاز استقبال RDA5807
- مضخم الصوت
- مخطط دائرة استقبال FM Arduino
- شرح كود راديو FM اردوينو
- عمل راديو اف ام اردوينو
اليوم يستخدم الجميع تقريبًا هواتفهم المحمولة للاستماع إلى الموسيقى والأخبار والبودكاست وما إلى ذلك. ولكن منذ وقت ليس ببعيد كنا نعتمد جميعًا على راديو FM المحلي للحصول على أحدث الأخبار والأغاني ، تفقد هذه الراديو شعبيتها ببطء ولكن في حالات الطوارئ عندما يكون الإنترنت معطلة ، تضع أجهزة الراديو دورًا مهمًا لنقل المعلومات إلى المستخدمين. توجد إشارات الراديو دائمًا في الهواء (التي تبثها المحطات) ، وكل ما نحتاجه هو دائرة مستقبل FM لالتقاط تلك الإشارات اللاسلكية وتحويلها إلى إشارات صوتية. في دروسنا السابقة ، قمنا أيضًا ببناء عدد قليل من أجهزة إرسال واستقبال FM الأخرى المدرجة أدناه.
- Raspberry Pi FM مرسل
- راديو FM Raspberry Pi FM
- دارة مرسل FM
- دائرة مرسل FM بدون محث
في هذا البرنامج التعليمي ، سنقوم ببناء جهاز استقبال FM Arduino ، وإضافته إلى ترسانة مشروعنا. سنستخدم RDA5807 FM Receiver IC مع Arduino ونبرمجها لذلك ، قم بتشغيل أي محطة راديو FM يمكن ضبطها بواسطة المستخدم باستخدام مقياس الجهد. سنستخدم أيضًا مضخم صوت مع الدائرة للتحكم في حجم إخراج راديو Arduino FM ، هل يبدو الأمر مثيرًا للاهتمام ، أليس كذلك؟ اذا هيا بنا نبدأ.
يعمل راديو FM العام
تقوم محطات الراديو بتحويل الإشارات الكهربائية إلى إشارات راديو ، ويجب تعديل هذه الإشارات قبل إرسالها عبر الهوائي. هناك طريقتان يمكن من خلالهما تعديل الإشارة وهما AM و FM. كما يوحي الاسم ، يعدل تعديل الاتساع (AM) السعة قبل إرسال إشارة بينما في تعديل التردد (FM) ، يتم تعديل تردد الإشارة قبل الإرسال عبر الهوائي. في محطات الراديو ، يستخدمون تعديل التردد لتعديل الإشارة ثم نقل البيانات. الآن ، كل ما نحتاجه هو جهاز استقبال يمكن ضبطه على ترددات معينة ، واستقبال تلك الإشارات ، وبعد ذلك لتحويل هذه الإشارات الكهربائية إلى إشارات صوتية. سنقوم باستخداموحدة استقبال RDA5807 FM في هذا المشروع ، مما يبسط دائرتنا.
المكونات مطلوبة
- اردوينو نانو
- جهاز استقبال RDA5807
- مضخم الصوت
- توصيل الأسلاك
- وعاء - 100 ألف
- مجلس بيرف
جهاز استقبال RDA5807
RDA5807 عبارة عن وحدة موالف راديو استريو FM ذات رقاقة واحدة مزودة بمركب متكامل تمامًا. تدعم الوحدة نطاق التردد العالمي من 50 إلى 115 ميجا هرتز ، والتحكم في مستوى الصوت وكتم الصوت ، وإلغاء التركيز القابل للبرمجة (50 / 75us) ، واستقبال مؤشر قوة الإشارة و SNR ، ومذبذب بلوري 32.768 كيلو هرتز ، والتحكم التلقائي في الكسب التلقائي ، وما إلى ذلك. رسم تخطيطي لموالف RDA5807M.
يحتوي على بنية رقمية منخفضة IF ويدمج مضخمًا منخفض الضوضاء (LNA) ، والذي يدعم نطاق بث FM (50 إلى 115 ميجاهرتز) ، والتحكم في الكسب القابل للبرمجة (PGA) ، ومحول تناظري رقمي عالي الدقة ، و محولات رقمية إلى تمثيلية عالية الدقة (DACs). يمنع المحدد التحميل الزائد ويحد من عدد منتجات التشكيل البيني التي تم إنشاؤها بواسطة القنوات المجاورة. يقوم PGA بتضخيم إشارة خرج الخلاط ثم يتم تحويلها رقميًا باستخدام ADCs. يدير قلب DSP اختيار القناة ، وإزالة تشكيل FM ، وفك تشفير MPX الاستريو ، وإشارة خرج الصوت. يتم إعطاء مخطط pinout RDA5807 لـ IC أدناه.
تعمل الوحدة على مصدر طاقة 1.8 - 3.3 فولت. عند تحديد واجهة التحكم والراحة ، تعيد الوحدة ضبط نفسها عندما يكون VIO قيد التشغيل ، كما تدعم إعادة الضبط الناعم بواسطة مشغل البت 1 من 0 إلى 1 من عنوان 02H. تستخدم الوحدة اتصال I2C للتواصل مع MCU ، وتبدأ الواجهة بشرط البدء ، وبايت الأمر ، وبايت البيانات. يحتوي RDA5807 على 13 تسجيلًا ذات 16 بت ، كل منها يؤدي وظيفة معينة. تبدأ عناوين السجل بـ 00H ، وهي مخصصة لمعرف الشريحة وتنتهي بـ 0FH. في جميع السجلات الـ 13 ، يتم حجز بعض البتات بينما يكون البعض الآخر R / W. يقوم كل سجل بأداء مهام مثل الحجم المتغير ، وتغيير القنوات ، وما إلى ذلك اعتمادًا على البتات المخصصة لهم.
لا يمكننا استخدام الوحدة مباشرة عند توصيلها بدائرة حيث يتم إغلاق المسامير. لذلك ، استخدمت لوحة perf وبعض دبابيس الذكور وقمت بلحام كل دبوس للوحدة لكل دبوس ذكر كما هو موضح في الصورة أدناه.
مضخم الصوت
مضخم الصوت هو جهاز إلكتروني يقوم بتضخيم الإشارات الصوتية الإلكترونية منخفضة الطاقة إلى مستوى حيث يكون مرتفعًا بما يكفي لقيادة مكبرات الصوت أو سماعات الرأس. لقد قمنا ببناء مضخم صوت بسيط باستخدام LM386 ، وتظهر الدائرة نفسها أدناه ويمكنك أيضًا التحقق من الرابط لمعرفة المزيد حول هذه الدائرة ، وكذلك التحقق من دوائر مكبر الصوت الأخرى.
مخطط دائرة استقبال FM Arduino
استخدمنا اثنين من مقاييس الجهد لضبط نطاق FM والتحكم في حجم مكبر الصوت. لتغيير وحدة التخزين التي يمكن أن تختلف إما في وعاء، وهذا مرتبط في الفترة ما بين 1 و 8 تشرين دبوس من LM386 أو وعاء، وهذا مرتبط في دبوس 3 من LM386. توضح الصورة أدناه مخطط الدائرة الكامل لراديو Arduino FM.
لقد أجريت تغييرات طفيفة في مكبر الصوت. بدلاً من استخدام اثنين من مقاييس الجهد في مكبر الصوت ، استخدمت مقياسًا واحدًا فقط. قمت بتبديل القدر ، الذي يستخدم لتغيير الكسب ، بمقاوم. إذن ، يحتوي مشروعنا الآن على مقياستي فرق جهد ، أحدهما لضبطه والآخر لتغيير الحجم. مقياس الجهد ، الذي يستخدم لضبط القناة متصل بـ Arduino nano. يتم توصيل الدبوس المركزي للوعاء بالدبوس A0 الخاص بـ Arduino nano ، ويتم توصيل أي من الدبابيس المتبقية بـ 5V والآخر متصل بـ GND. يتم استخدام وعاء آخر للتحكم في حجم الراديو ويتم توصيله كما هو موضح في الشكل أعلاه.
الدبوس A4 و A5 من Arduino متصلان بـ SDA و SCL pin من RDA5807M. ضع في اعتبارك أن وحدة الاستقبال تعمل فقط على 3.3 فولت. لذا ، قم بتوصيل دبوس 3v3 من Nano بدبوس VCC لوحدة الاستقبال. بمجرد إجراء الاتصالات ، بدا الإعداد الخاص بي هكذا
شرح كود راديو FM اردوينو
سيقوم الكود بتهيئة وحدة الاستقبال ثم يقوم بتعيين القناة بالتردد المحدد مسبقًا. عندما تتغير القيمة التي تقرأها النانو عند دبوس A0 (عن طريق تغيير الوعاء) يتغير التردد والذي بدوره يغير القناة. الكود الكامل موجود في نهاية الصفحة.
نبدأ برنامجنا بإضافة مكتبة الأسلاك المطلوبة للتواصل مع RDA5807. ثم في المتغير "القناة" نقوم بتعيين قيمة القناة. عندما يبدأ الراديو ، سيتم ضبطه على هذه القناة تلقائيًا.
#تضمن
بعد ذلك ، سنقوم بتحميل البايت لكل سجل في RDA5807 IC الخاص بنا لتعيين التكوين الأولي الخاص بنا. في هذه المرحلة ، نقوم بإعادة ضبط جهاز الاستقبال.
uint8_t boot_config = {/ * التسجيل 0x02 * / 0b11000001 ، 0b00000011 ، / * التسجيل 0x03 * / 0b00000000 ، 0b00000000 ، / * السجل 0x04 * / 0b00001010 ، 0b00000000 ، / * السجل 0x05 * / 0b10001000 ، 0b00001111 ، / * التسجيل 0x06 * 0b00000000 ، 0b00000000 ، / * تسجيل 0x07 * / 0b01000010 ، 0b00000010 ،} ؛
بعد إعادة ضبط الجهاز ، يمكننا ضبط الجهاز. لضبط القناة ، نحتاج فقط إلى برمجة أول 4 بايت. سيغير هذا الجزء من الكود القناة إلى التردد المطلوب. في I2C في البداية ، نبدأ الإرسال أو كتابة أو قراءة البيانات ثم إنهاء الإرسال. في جهاز الاستقبال IC هذا ، لا يتعين علينا تحديد العنوان لأن ورقة البيانات توضح بوضوح أن واجهة I2C بها سجل بدء ثابت ، مثل 0x02h لعملية كتابة و 0x0Ah لعملية قراءة.
uint8_t tune_config = {/ * تسجيل 0x02 * / 0b11000000 ، 0b00000001 ، / * تسجيل 0x03 * / (قناة >> 2) ، ((قناة & 0b11) << 6) - 0b00010000} ؛
في الإعداد ، نقوم بتهيئة تهيئة التمهيد (إعادة التعيين) ثم ضبط القناة عن طريق كتابة توليف بايت التكوين على RDA5807M.
إعداد باطل () {Serial.begin (9600) ؛ pinMode (A0، INPUT) ؛ / * ربط إلى موالف FM RDA5807M: * / Wire.begin () ؛ Wire.beginTransmission (RDA5807M_ADDRESS) ؛ Wire.write (boot_config، BOOT_CONFIG_LEN) ؛ Wire.endTransmission () ؛ Wire.beginTransmission (RDA5807M_ADDRESS) ؛ Wire.write (tune_config ، TUNE_CONFIG_LEN) ؛ Wire.endTransmission () ؛ }
عند استخدام وعاء لضبط التردد ، واجهت مشكلة. القيم التي يقرأها دبوس A0 ليست ثابتة. هناك ضوضاء مصحوبة بالقيمة المرغوبة. لقد استخدمت مكثف سيراميك 0.1 فائق التوهج متصل بين A0 و GND ، على الرغم من تقليل الضوضاء إلى الحد الأدنى ، فإنه لا يصل إلى المستوى المطلوب. لذلك ، كان علي إجراء بعض التغييرات على الكود. في البداية ، لاحظت القراءات المتأثرة بالضوضاء. اكتشفت أن الحد الأقصى لقيمة الضوضاء هو 10. لذلك كتبت البرنامج بطريقة لن يأخذ في الاعتبار القيمة الجديدة إلا إذا كان الفرق بين القيمة الجديدة والقيمة القديمة لنفس الدبوس أكبر من 10 ثم يضبط القناة المطلوبة.
حلقة فارغة () {int channel1 = 187، avg = 0، newA؛ ثابت int oldA = 0 ؛ نتيجة int = 0 ؛ newA = analogRead (A0) ؛ if ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA) ؛ إذا (newA! = oldA) {channel = channel1 + (newA / 10) ؛ myChangeChannel (قناة) ؛ oldA = newA ؛ }}} // حلقة نهاية
تُستخدم هذه الوظيفة لتعيين وحدات البايت الخاصة بمصفوفة tune_config ثم نقل البيانات إلى RDA5807M IC باستخدام بروتوكول I2C.
void myChangeChannel (قناة int) {/ * void إذا لم يتم إرجاع أي شيء else int * / tune_config = (channel >> 2) ؛ tune_config = ((القناة و 0 ب 11) << 6) - 0b00010000 ؛ Wire.begin () ؛ Wire.beginTransmission (RDA5807M_ADDRESS) ؛ Wire.write (tune_config ، TUNE_CONFIG_LEN) ؛ Wire.endTransmission () ؛ }
عمل راديو اف ام اردوينو
عندما يتم تشغيل الوحدة النمطية ، يعيد الكود الخاص بنا تعيين RDA5807-M IC ويضبطه على قناة المستخدم الذي يرغب فيه (ملاحظة: يتم أخذ هذا التردد على أنه التردد الأساسي الذي سيتم زيادة التردد بناءً عليه). عن طريق تغيير مقياس الجهد (متصل بـ A0) ، تتغير القيم التي يقرأها Arduino Nano. إذا كان الفرق بين القيمة الجديدة والقديمة أكبر من 10 ، فسوف يأخذ الكود لدينا هذه القيمة الجديدة في الاعتبار. يتم تغيير القناة تبعا للتغيير في القيمة الجديدة من القيمة القديمة. تعتمد زيادة الحجم أو خفضه على مقياس الجهد المتصل بين الدبوس 3 و GND.
في نهاية البناء والترميز ، سيكون لديك راديو FM خاص بك. يمكن العثور على العمل الكامل لراديو FM في الفيديو المرتبط أسفل هذه الصفحة. آمل أن تكون قد استمتعت بالمشروع وتعلمت شيئًا مفيدًا. إذا كانت لديك أي أسئلة حول تشغيل هذا المشروع ، فيمكنك تركها في قسم التعليقات أو استخدام منتدياتنا للحصول على مساعدة فنية أخرى.