טלפון עם ארדואינו

אין דבר טוב יותר מלקום בשישי בבוקר ולבנות טלפון עם ארדואינו

המטרה: לבנות טלפון סלולרי תוך 4 שעות עם ארדואינו

הרכיבים:

  • ארדואינו פרו מיני 3.3V
  • מודול סלולרי sim800
  • מיקרופון אלקטרט
  • לוח מקשים
  • רמקול קטן 8Ω
  • מסך OLED
  • בטריה נטענת 3.7V

דרגת הקושי: קשה

התוצאה: כשלון חרוץ

טוב, לא צריך להסחף הטלפון עובד כמו שצריך אבל בטח לא תוך כמה שעות, לקח פה לפחות כמה ימים כדי להפעיל את כל הסיפור הזה. אולי זה הלחץ בעבודה, אולי החום הכבד (תירוצים, תירוצים).

בדרך כלל כשאנחנו מוצאים מדריך באינטרנט אנחנו רואים את התוצאה המוגמרת וזה נראה פשוט למדי, כמה עבודה הושקעה בפרויקט? כמה בעיות היו בדרך?  אנחנו לא תמיד יודעים.

מודול סלולרי SIM800 הוא שער הכניסה של הרבה מייקרים לעולם הסלולרי, אפשר לעשות ולקבל שיחות, SMS, ואפילו לגשת לאינטרנט. כמו תמיד השבב עצמו הוא תמיד אותו דבר ומה שמשתנה זה המודול(מודול הוא לוח מודפס שנותן גישה אל שבב מסויים וחושף פינים שלו החוצה). השבב SIM800 תמיד עובד על 3.3V ואפשר לשלוט בו דרך פקודות AT.

המודולים הם רבים ושונים יש גדולים שכל הרכיבים והחיבורים כבר נמצאים עליהם ויש קטנים יותר שבהם צריך להוסיף כל מיני רכיבים. הנה דוגמה למודול מוכן שחסר בו רק מיקרופון ורמקול:

והנה דוגמה למודול קטן בהרבה כמעט ללא רכיבים:

לפני הכנת הפרויקט צריך להחליט אם רוצים שהטלפון יהיה נייד או נייח כי זה מה שיקבע את רמת המתח שניתן למערכת, אם הוא נייד זה הגיוני להשתמש בבטריה נטענת ליתיום יון או ליתיום פולימר 3.7V עם לפחות 2000mAh . למה כל כך הרבה זרם? כי מודול סלולרי צורך הרבה זרם כשהוא מתחבר לרשת לעשות שיחה.

יש מודולים שאפשר לתת להם 5V מארדואינו אבל גם אז לא נוכל להשתמש בארדואינו שמקור המתח שלו הוא כבל USB (המחשב יכול לספק רק 500mA) מהמחשב אלא מקור מתח חיצוני כמו ספק כח 5V 2A .

בכל מקרה אני עובד פה עם המודול האדום למעלה וצריך לתת לו 3.5V-4.2V עם זרם של 2 אמפר. אפשר לעשות את זה עם ספק כח שמורד למתח הזה או ישירות עם בטריה 3.7V.

בעיה נוספת היא שמתח הלוגיקה(TX/RX) של SIM800 הוא 2.8V בעוד שארדואינו אונו עובד על 5V. אפשר לפתור את זה די בקלות עם נגדים מחלקי מתח לכל החיבורים בין המודול לארדואינו או עם ממיר מתח לוגי.

אפשרות אחרת היא להשתמש בארדואינו פרו מיני 3.3V ואז התקשורת ביניהם תעבוד כמו שצריך. כבונוס ארדואינו פרו-מיני גם חסכוני בבטריה אז מתאים לפרויקט נייד.

 

שימו לב לכל החיבורים. יש פה מקור מתח אחד של 3.7V.

לגבי המודול הוא פועל ברשת 2G ונבדק לעבוד כמו שצריך עם סלקום וגולן, אורנג’ גם אמור לעבוד אבל לא בדקתי.  מומלץ לקנות סים PRE-PAID שאפשר להשיג בכל פיצוציה ולמלא אותו בדקות.

הכנסת סים כמו בכל טלפון אחר מצויר על המתכת כיוון ההכנסה.

אנטנה – יש אנטנה יעודית או שאפשר להלחים חוט בשקע NET.

 

 

ברגע שנותנים למודול את המתח המתאים (3.5V-4.2V) הוא מתחיל להבהב כל שניה ולחפש רשת, במידה והוא מתייצב הוא מתחיל להבהב באיטיות פעם אחת כל 3 שניות. זה סימן שהוא מחובר.

כדי לשלוט בכל ההגדרות שלו דרך תוכנה הייתי ממליץ קודם כל על פקודות AT, ואפשר לעשות את זה עם ספריית aspen sim800 ולהשתמש בדוגמה bidirectional serial. את הספרייה אפשר להוריד מתוך מאגר הספריות דרך סביבת הפיתוח של ארדואינו.

שימו לב לדף פקודות AT יש פה המון אפשרויות אז לגעת רק במה שצריך. אם עושים טעות אז תמיד אפשר לאפס את המודול עם הפקודה  ATZ.

עכשיו כדי לבצע את הפקודות בצורה פרוגרמטית עדיף להשתמש בפונקציות מוכנות ובשביל זה נשתמש בספרייה של אדהפרוט אותה גם אפשר להוריד מסביבת הפיתוח. הפונקציות העיקריות:

fona.callPhone(“0530000000”); – מתקשר למספר

fona.pickUp(); – עונה לשיחה

fona.hangUp(); – ניתוק שיחה

fona.sendSMS(“0538888888”, “Hello”); – שליחת סמס

אחרי שלמדנו לתפעל אותו בצורה בסיסית צריך לחבר את כל הרכיבים ולבנות את הלוגיקה של הטלפון.

צריך לבחור מסך כלשהו לחיווי, אני משתמש במסך OLED בגלל שהוא קטן ודורש רק שני חיבורים A4,A5 וגם רואים בו ממש טוב במיוחד הצבע טורקיז על שחור שנותן הרגשה כמו של פלאפונים מפעם. אפשר גם להשתמש במסך נוקיה 5010 שהוא במקור מסך של טלפון.

צריך לקחת מיקרופון אלקטרט פשוט ולחבר את הפלוס והמינוס שלו לחיבורים של המודול(mic). צריך רמקול שמשמש לצלצול נכנס, צלצול חיוג וגם כמובן לשמוע את הדיבור.

בלוח המקשים צריך להיות את כל המספרים + עוד כמה מקשים להוציא שיחה ולקבל שיחה. אני משתמש בכפתור A לענות לשיחה, כפתור B להתקשר למספר וכפתור C לנקות את המסך.

התוכנה כרגע היא די פשוטה – כשלוחצים על מספרים הם נכתבים על המסך וכשלוחצים על מקש B הטלפון מתקשר למספר.

במקרה ומקבלים שיחה פשוט לוחצים על מקש A והשיחה מתחילה, איכות השמע היא סבירה בתור התחלה, בצד של המודול דווקא שומעים טוב אולם בצד של הטלפון השני לא משהו. לדעתי אפשר לסדר את זה על ידי כיוון ההגבר של המיקרופון עצמו או דרך המודול(אפשר לכוון את ההגברה עם פקודת AT). הרעש שנוצר לדעתי הוא תוצאה של clipping שזה עודף הגבר.

אפשר לשדרג למיקרופון יותר טוב כמו MAX9814 שכולל סינון רעשים ו-gain אוטומטי.

זה הקוד הבסיסי ביותר להפעלה של הטלפון:

#include "Adafruit_FONA.h"
#include <SoftwareSerial.h>
#include <Keypad.h>
#include <Wire.h>
#include <SeeedOLED.h>

#define FONA_RX 2
#define FONA_TX 3
#define FONA_RST 4

SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX);
SoftwareSerial *fonaSerial = &fonaSS;
Adafruit_FONA fona = Adafruit_FONA(FONA_RST);
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
 {'1','2','3','A'},
 {'4','5','6','B'},
 {'7','8','9','C'},
 {'*','0','#', 'D'}
};

int counter = 0;
char number[10];
byte rowPins[ROWS] = {5, 6, 7, 8}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {9, 10, 11, 12}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
 fonaSerial->begin(9600);
 if (! fona.begin(*fonaSerial)) {
 while (1);
}
 Wire.begin(); 
 SeeedOled.init(); 
 SeeedOled.clearDisplay(); 
 SeeedOled.setNormalDisplay(); 
 SeeedOled.setPageMode(); 
 SeeedOled.setTextXY(0,0); 
 SeeedOled.putString("ready...");
}
 
void loop(){
 char key = keypad.getKey();
 if (key){
   if (key == 'A' ){
     fona.pickUp();
   }
   if(key == 'B'){
     counter = 0;
     SeeedOled.putString("dial");
     fona.callPhone(number);
   }
   if(key == 'C'){
     SeeedOled.clearDisplay();
     counter = 0;
   }
 else{
   number[counter] = key;
   SeeedOled.setTextXY(0,0);
   SeeedOled.putString(number);
   counter = counter + 1;
   delay(500);
   }
 }
}

אם חשבתם שסיימנו אז יש לכם טעות. בפעם הבאה נוסיף מעגל טעינה לבטריה , נוסיף עוד פונקציות כמו ניתוק שיחה, זיהוי מספר ו-SMS וכמובן נלחים הכל על מעגל ונארוז את הטלפון במארז מדליק.

נסיון לבנות טלפון מאפס הוא קשה ונותן לנו להעריך את חברות הטלפון הגדולות כמו סמסונג ואפל. איך לעזאזל הם עושים את זה כל כך קטן ויחסית בזול?

 

2 תגובות על “טלפון עם ארדואינו

  1. יובל אומר:

    האם אתה מתכוון להציע למכירה מודולים סלולאריים כאלה מתישהו?
    חוץ מזה זו הזדמנות להודות לך על הכתיבה והתכנים המעניינים שאתה מפרסם כאן.

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *