טלפון עם ארדואינו חלק ב’

טלפון ארדואינו הסבר חיבורים

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

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

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

יש גם חיבורים חיצוניים לכל הרכיבים – למסך יש חיבורי I2C לתקשורת וחיבור מתח, יש חיבורים ללוח מקשים לרמקול למיקרופון ולבטריה.

החיבור המעניין שנוסף הוא אפשרות לתכנת את הבקר ושם יש את החיבורים RX,TX,RESET,3.3V,GND. ככה אפשר לשנות את התוכנה שנמצאת עליו עם כל מתכנת UART או עם ארדואינו אונו, ובנוסף לעשות דיבאגינג.

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

#include "Adafruit_FONA.h"
#include <Keypad.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include "ssd1306.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[11];
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();
ssd1306_128x64_i2c_init();
ssd1306_fillScreen(0x00);
ssd1306_setFixedFont(ssd1306xled_font6x8);
ssd1306_printFixedN (8, 8, "ARDUPHONE", STYLE_BOLD, FONT_SIZE_2X);
}

void loop(){
  char key = keypad.getKey();
  if (key){ // if press any key
    if (key == 'A' ){ 
    fona.pickUp(); // answer phone
   }
  else if(key == 'B'){ // make a call
    counter = 0; // initialize counter array
    fona.callPhone(number);
  }
  else if(key == 'C'){ // clear display and initialize counter
    ssd1306_fillScreen(0x00);
    ssd1306_printFixedN (8, 8, "ARDUPHONE", STYLE_BOLD, FONT_SIZE_2X);
    counter = 0;
    for(int i=0;i<11;i++){
      number[i] = ' ';
    }
  }
else if(key == 'D'){ // hang up phone
fona.hangUp();
}
  else{
    number[counter] = key; // put the key in number
    ssd1306_printFixedN (0, 50, number, STYLE_NORMAL, FONT_SIZE_2X);
    counter = counter + 1; // go up counter
    delay(500); // delay for buttons
  }
 }
}

יש בעולם שלושה סוגים של הלחמות – הלחמות יפות, הלחמות מכוערות והלחמות כל כך מגוחכות שזה מצחיק. ההלחמה פה שייכת לסוג השלישי:

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

arduino-phone-pcb

הלוח המודפס הזה לא הכי אסטתי אבל עושה את העבודה כמו שצריך, תמיד אפשר לשפר אחרי זה.

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

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

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

הפלאפון הזה הוא מוצר בעבודת יד וכל מה שנשאר עכשיו זה לארוז אותו…. יש לי הרגשה שאני יודע איפה לעשות את זה.

 

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

  1. דנה אומר:

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

כתיבת תגובה

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