- רדיו FM כללי עובד
- רכיבים נדרשים
- מקלט RDA5807
- מגבר שמע
- תרשים מעגלי מקלט FM של Arduino
- הסבר קוד רדיו FM של ארדואינו
- עבודה של רדיו FM Arduino
כיום כמעט כולם משתמשים בטלפונים הניידים שלהם כדי להאזין למוזיקה, חדשות, פודקאסטים וכו '. אך לא מזמן היינו תלוי במכשירי FM מקומיים כדי לקבל את החדשות והשירים האחרונים, לאט לאט מכשירי הרדיו הללו מאבדים פופולריות אך במקרי חירום כאשר האינטרנט אינו פעיל, מכשירי הרדיו ממלאים תפקיד חשוב להעברת מידע למשתמשים. אותות רדיו תמיד נמצאים באוויר (המשודרים על ידי התחנות), וכל מה שאנחנו צריכים זה מעגל מקלט FM כדי לתפוס את אותות הרדיו ולהעביר אותם לאותות שמע. בהדרכות הקודמות שלנו, בנינו גם כמה משדרי FM ומקלטים אחרים המפורטים להלן.
- משדר FM פטל פי
- רדיו מקלט FM של פטל פי
- מעגל משדר FM
- מעגל משדר FM ללא משרן
במדריך זה אנו הולכים לבנות מקלט FM Arduino ולהוסיף אותו לארסנל הפרויקט שלנו. אנו נשתמש ב- RDA5807 FM מקלט IC עם Arduino ונתכנת אותו כך, נשמיע כל תחנת רדיו FM שניתן לכוון על ידי המשתמש בעזרת פוטנציומטר. נשתמש גם במגבר שמע יחד עם המעגל כדי לשלוט על עוצמת הפלט של רדיו ה- FM של ארדואינו, נשמע מעניין, לא? אז בואו נתחיל.
רדיו FM כללי עובד
תחנות הרדיו ממירות אותות חשמליים לאותות רדיו, ויש לווסת את האותות הללו לפני שהם מועברים דרך האנטנה. ישנן שתי שיטות בהן ניתן לווסת אות, כלומר AM ו- FM. כפי שהשם מרמז, אפנון משרעת (AM) מווסת את המשרעת לפני העברת אות ואילו, באפנון תדרים (FM), תדר האות מווסת לפני השידור דרך האנטנה. בתחנות הרדיו הם משתמשים באפנון תדרים כדי לווסת את האות ואז להעביר את הנתונים. כעת, כל מה שאנחנו צריכים לבנות הוא מקלט שניתן לכוון אותו לתדרים מסוימים ולקבל את האותות האלה, ובהמשך להמיר את האותות החשמליים האלה לאותות שמע. אנו הולכים להשתמש ב-מודול מקלט RDA5807 FM בפרויקט זה, מה שמפשט את המעגל שלנו.
רכיבים נדרשים
- ארדואינו ננו
- מקלט RDA5807
- מגבר שמע
- חוטי חיבור
- סיר - 100K
- לוח Perf
מקלט RDA5807
RDA5807 הוא מודול מקלט רדיו סטריאו FM עם שבב יחיד עם סינתיסייזר משולב לחלוטין. המודול תומך בפס התדרים העולמי של 50 - 115 מגה הרץ, בקרת עוצמת קול והשתקה, הדגשה ניתנת לתכנות (50/75 us), מחוון עוצמת אות וקבלת SNR, מתנד קריסטל 32.768 קילוהרץ, בקרת רווח אוטומטי דיגיטלי וכו '. דיאגרמת חסימה של טיונר RDA5807M.
יש לו ארכיטקטורה דיגיטלית נמוכה של IF ומשלב מגבר רעש נמוך (LNA), התומך ברצועת השידור FM (50 עד 115 מגה הרץ), בקרת רווח לתכנות (PGA), ממיר אנלוגי לדיגיטלי ברזולוציה גבוהה, ו ממירים דיגיטליים-אנלוגיים (DAC) באיכות גבוהה. המגביל מונע עומס יתר ומגביל את מספר מוצרי האינטמודולציה שנוצרו על ידי ערוצים סמוכים. ה- PGA מגביר את אות הפלט של המיקסר ואז דיגיטציה באמצעות ADC. ליבת ה- DSP מנהלת את בחירת הערוץ, הפחתת FM, פענוח MPX סטריאו ואות שמע פלט. Pinout RDA5807 הדיאגרמה עבור IC היא כדלקמן.
המודול עובד על אספקת החשמל של 1.8 - 3.3V. בבואנו למנוחה ולבקרת ממשק שנבחר, המודול מאפס את עצמו כאשר VIO מופעל, ותומך גם באיפוס רך על ידי ההדק של bit1 מ 0 ל 1 של כתובת 02H. המודול משתמש בתקשורת I2C כדי לתקשר עם ה- MCU, והממשק מתחיל במצב ההתחלה, בתים של פקודה, ובית נתונים. ל- RDA5807 13 רושמים של 16 סיביות, שכל אחד מהם מבצע פונקציה מסוימת. כתובות הרישום מתחילות ב- 00H, המוקצה למזהה שבב ומסתיים ב- 0FH. בכל 13 הרישומים, חלק מהסיביות שמורות ואילו חלקן R / W. כל רשם מבצע משימות כמו עוצמת קול משתנה, החלפת ערוצים וכו 'בהתאם לסיביות שהוקצו להם.
איננו יכולים להשתמש ישירות במודול כאשר אנו מחברים אותו למעגל מכיוון שהסיכות נסגרות על ידי. אז השתמשתי בלוח מושלם ובכמה סיכות זכר והלחמתי את כל הסיכה של המודול לכל סיכה זכר כפי שמוצג בתמונה למטה.
מגבר שמע
מגבר שמע הוא מכשיר אלקטרוני, המגביר אותות שמע אלקטרוניים בעלי עוצמה נמוכה עד לרמה שהוא גבוה מספיק להפעלת רמקולים או אוזניות. בנינו מגבר שמע פשוט באמצעות LM386, המעגל עבור אותו מוצג למטה ותוכלו גם לבדוק את הקישור למידע נוסף על מעגל זה, לבדוק גם מעגלי מגבר שמע אחרים.
תרשים מעגלי מקלט FM של Arduino
השתמשנו בשני פוטנציומטרים לצורך כוונון פס FM ושליטה על עוצמת הקול של מגבר השמע. כדי לשנות את עוצמת הקול או שאתה יכול להשתנות לסיר, אשר מחובר ב בין 1 ו 8 th סיכה של LM386 או בסיר, אשר מחובר ב פינים 3 של LM386. בתמונה למטה מוצגת תרשים המעגל השלם עבור רדיו FM Arduino.
ביצעתי שינויים קטנים במגבר. במקום להשתמש בשני פוטנציומטרים במגבר, השתמשתי רק באחד. החלפתי את הסיר, המשמש לשינוי הרווח, נגד. אז עכשיו לפרויקט שלנו יש שני פוטנציומטרים אחד לכוון, ואחד לשנות את עוצמת הקול. הפוטנציומטר, המשמש לכוונון התעלה מחובר לננו הארדואינו. הסיכה המרכזית של הסיר מחוברת לסיכה A0 של הנאנו של ארדואינו, ואחד משני הסיכות הנותרים מחובר ל- 5V והשני מחובר ל- GND. סיר אחר משמש לשליטה בעוצמת הרדיו ומחובר כמוצג באיור לעיל.
הסיכה A4 ו- A5 של הארדואינו מחוברים לסיכה SDA ו- SCL של ה- RDA5807M. זכור כי מודול המקלט עובד רק על 3.3 וולט. לכן, חבר את סיכת 3v3 של הננו לסיכת VCC של מודול המקלט. ברגע שהחיבורים נוצרו המערך שלי נראה כך
הסבר קוד רדיו FM של ארדואינו
הקוד יאותחל את מודול המקלט ואז מגדיר את הערוץ עם התדר הקבוע מראש. כאשר הערך שקורא הננו בסיכה A0 משתנה (על ידי החלפת סיר) התדר משתנה אשר בתורו משנה את הערוץ. הקוד המלא ניתן בסוף העמוד.
אנו מתחילים את התוכנית שלנו על ידי הוספת ספריית החוטים הנדרשת לצורך תקשורת עם RDA5807. ואז, במשתנה "ערוץ" הגדרנו את ערך הערוץ. בכל פעם שהרדיו מתחיל הוא יכוון לערוץ זה באופן אוטומטי.
#לִכלוֹל
לאחר מכן נטען בתים לכל רשום ב- RDA5807 IC שלנו כדי להגדיר את התצורה הראשונית שלנו. בשלב זה אנו מאפסים את המקלט.
uint8_t boot_config = {/ * לרשום 0x02 * / 0b11000001, 0b00000011, / * לרשום 0x03 * / 0b00000000, 0b00000000, / * לרשום 0x04 * / 0b00001010, 0b00000000, / * לרשום 0x05 * / 0b10001000, 0b00001111, / * 0b00000000, 0b00000000, / * הרשמה 0x07 * / 0b01000010, 0b00000010,};
לאחר שנאפס את המכשיר, נוכל לכוון את המכשיר. כדי לכוונן את הערוץ עלינו לתכנת רק את 4 הבתים הראשונים. חלק זה של הקוד ישנה את הערוץ לתדר הרצוי. בהתחלה ב- I2C, אנו מתחילים את השידור, כותבים או קוראים את הנתונים ואז מסיימים את השידור. ב- IC המקלט הזה, אנחנו לא צריכים לציין את הכתובת שכן בגליון הנתונים כתוב בבירור שלממשק I2C יש רישום התחלה קבוע, כלומר 0x02h עבור פעולת כתיבה, ו- 0x0Ah עבור פעולת קריאה.
uint8_t tune_config = {/ * לרשום 0x02 * / 0b11000000, 0b00000001, / * לרשום 0x03 * / (ערוץ >> 2), ((ערוץ & 0b11) << 6) - 0b00010000};
בהתקנה, אנו מאתחלים את תצורת האתחול (reset) ואז מכוונים לערוץ על ידי כתיבת בתים לתצורה של כוונון ל- RDA5807M.
הגדרת חלל () {Serial.begin (9600); pinMode (A0, INPUT); / * קשר ל- RDA5807M טיונר FM: * / 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.1uF המחובר בין A0 ו- GND, למרות שהרעש הצטמצם, הוא לא מגיע לרמה הרצויה. אז הייתי צריך לעשות כמה שינויים בקוד. בהתחלה רשמתי את הקריאות המושפעות מהרעש. גיליתי שהערך המקסימלי של הרעש הוא 10. אז כתבתי את התוכנית בצורה כזו, שהיא תשקול רק את הערך החדש אם ההפרש בין הערך החדש לערך הישן של אותו סיכה גדול מ -10 ואז מכוון לערוץ הרצוי.
לולאה בטל () {int channel1 = 187, avg = 0, newA; סטטי int oldA = 0; תוצאת int = 0; newA = analogRead (A0); אם ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); אם (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (ערוץ); oldA = newA; }}} // סוף לולאה
פונקציה זו משמשת להגדרת בתים של מערך tune_config ואז להעביר את הנתונים ל- IC RDA5807M באמצעות פרוטוקול I2C.
בטל myChangeChannel (ערוץ int) {/ * בטל אם שום דבר לא מוחזר אחר int * / tune_config = (ערוץ >> 2); tune_config = ((ערוץ & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
עבודה של רדיו FM Arduino
כאשר המודול מופעל, הקוד שלנו מאפס את ה- RDA5807-M IC ומגדיר אותו לערוץ של המשתמש הרצוי (הערה: תדר זה נלקח כתדר הבסיס עליו תוגדל התדר). על ידי שינוי פוטנציומטר (מחובר ל- A0), הערכים שנקראו על ידי Arduino Nano משתנים. אם ההבדל בין הערך החדש והישן הוא גדול מ -10, הקוד שלנו יתחשב בערך החדש הזה. הערוץ משתנה בהתאם לשינוי בערך החדש מהערך הישן. הגדלה או הקטנה של עוצמת הקול תלויה בפוטנציומטר, המחובר בין סיכה 3 ל- GND.
בסוף הבנייה והקידוד, יהיה לך רדיו FM משלך. את העבודה המלאה של רדיו FM ניתן למצוא בסרטון המקושר בתחתית עמוד זה. מקווה שנהניתם מהפרויקט ולמדתם משהו שימושי. אם יש לך שאלות בהפעלת פרויקט זה תוכל להשאיר אותן בסעיף ההערות או להשתמש בפורומים שלנו לעזרה טכנית אחרת.