في هذا الدرس ستتعرف على وحدة راديو (TEA5767 FM) و كيف تبرمجها مع اردوينو اونو، بحيث تتمكن من صنع جهاز راديو يحتوي على شاشة عرض تعرض قيمة تردد الإشارة، مع اثنين من ضغاط التحكم، يعمل الضغاط الأول على تغير قيمة التردد بزيادة 0.1 والثاني تغير القيمة بتنقيص 0.1. و يعمل الجهاز على التقاط اشارة محطات الراديو المتوفرة بمنطقتك ضمن نطاق تردد من 87.5 ميجاهرتز إلى 108 ميجاهرتز
المواد و الأدوات
X2 ضغاط التحكم
1X لوحة تجارب
X1 40 رأس دبوس
مجموعة أسلاك توصيل (ذكر / ذكر)
مجموعة أسلاك توصيل (أنثى / ذكر)
1 X1 مكبر صوت بمنفذ 3.5 مللي متر
توصيل الدائرة
وحدة (TEA5767 FM)
وحدة راديو (TEA5767 FM) عبارة عن شريحة واحدة، تدعم بروتوكول الاتصال IC للتطبيقات منخفضة الجهد وتمثل راديو مصغر مضبوط رقميًا. يعمل في نطاقات الترددات الأوروبية والأمريكية واليابانية. تتكون الوحدة من منفذين 3.5 ملم، يستخدم الأول لتوصيل الهوائي، و زيادة مساحة التقاط الموجات والآخر منفذ السماعات.
كما تحتوي على 4 دبابيس:
VCC: وحدة إمداد الطاقة – 5 فولت
GND: الأرض
SLC: تزامن بروتوكول I2C يوصل مع المنفذ التناظري A5
SDA: بيانات بروتوكول I2C يوصل مع المنفذ التناظري A4
البرمجة
بالبداية ستحتاج إلى تحميل مكتبة (TEA5767 FM) و من ثم تثبيتها في بيئة تطوير الاردوينو (اردوينو IDE) يمكنك الاطلاع على الدرس الأول -تنصيب برنامج اردوينو لمعرفة كيف يتم تثبيت المكتبات
#include<Wire.h> #include <TEA5767Radio.h> #include <LiquidCrystal.h> TEA5767Radio radio = TEA5767Radio(); LiquidCrystal lcd(7, 6, 5, 4, 3, 2); float frequency = 0; int fUP = A0; int fDOWN = A1; int count = 0; void setup() { delay(1000); Wire.begin(); frequency = 91.1; //starting frequency radio.setFrequency(frequency); lcd.begin(16,2); lcd.clear(); lcd.setCursor(0,0); lcd.print("FM: "); lcd.setCursor(0, 1); lcd.print(frequency); }void loop() { if(digitalRead(fUP)) { count=0; while (digitalRead(fUP)) { count++; if(count > 0 && count <= 6) { frequency += 0.1; frequencyUpdate(); delay(200); } else if (count > 6 && count <= 2) { frequency += 0.1; frequencyUpdate(); delay(80); } else { frequency += 0.1; frequencyUpdate(); delay(5); } }} if(digitalRead(fDOWN)) { count = 0; while (digitalRead(fDOWN)) { count--; if(count < 0 && count >= -6) { frequency -= 0.1; frequencyUpdate(); delay(200); } else if (count < -6 && count >= -12) { frequency -= 0.1; frequencyUpdate(); delay(80); } else { frequency -= 0.1; frequencyUpdate(); delay(5); } } } } void frequencyUpdate() { frequency = constrain(frequency, 88.0, 108.0); lcd.setCursor(0,0); lcd.print("ESTACION DE FM:"); lcd.setCursor(0,1); lcd.print(frequency); radio.setFrequency(frequency); }
شرح الكود البرمجي
بالبدية سيتم استدعاء المكتبات الضرورية في المشروع
#include<Wire.h> #include <TEA5767Radio.h> #include <LiquidCrystal.h>
نعرف كائن باسم (radio)
TEA5767Radio radio = TEA5767Radio();
نعرف منافذ الشاشة الكرستالية
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
نعرف متغيرات تشيل إلى التردد و منفذ ضغاط التحكم لزيادة و تنقيص قيمة التردد
يمثل ضغاط التحكم الموصل مع المنفذ A0 مفتاح التحكم بزيادة التردد بقيمة 0.1
و يمثل ضغاط التحكم الموصل مع المنفذ A1 مفتاح التحكم بتنقيص التردد بقيمة 0.1
float frequency = 0; int fUP = A0; int fDOWN = A1; int count = 0;
في دالة التهيئة نهيئة الاتصال و الشاشة الكرستالية
void setup() { delay(1000); Wire.begin(); frequency = 91.1; //starting frequency radio.setFrequency(frequency); lcd.begin(16,2); lcd.clear(); lcd.setCursor(0,0); lcd.print("FM: "); lcd.setCursor(0, 1); lcd.print(frequency); }
في دالة ال(void loop) نبرمج دوال التحكم زيادة ونقصان قيمة التردد بناء على مدخلات مفاتيح التحكم
void loop() { if(digitalRead(fUP)) { count=0; while (digitalRead(fUP)) { count++; if(count > 0 && count <= 6) { frequency += 0.1; frequencyUpdate(); delay(200); } else if (count > 6 && count <= 2) { frequency += 0.1; frequencyUpdate(); delay(80); } else { frequency += 0.1; frequencyUpdate(); delay(5); } }} if(digitalRead(fDOWN)) { count = 0; while (digitalRead(fDOWN)) { count--; if(count < 0 && count >= -6) { frequency -= 0.1; frequencyUpdate(); delay(200); } else if (count < -6 && count >= -12) { frequency -= 0.1; frequencyUpdate(); delay(80); } else { frequency -= 0.1; frequencyUpdate(); delay(5); } } } }
في دالة (frequencyUpdate) يتم تحديث قيم التررد بناء على المدخلات من المفاتيح
void frequencyUpdate() { frequency = constrain(frequency, 88.0, 108.0); lcd.setCursor(0,0); lcd.print("STACION FM:"); lcd.setCursor(0,1); lcd.print(frequency); radio.setFrequency(frequency); }