Мобильный телефон на основе Arduino и GSM модуля

Иногда у начинающих радиолюбителей возникают трудности при реализации основных функций GSM модуля (совершение вызовов, передача текстовых сообщений и т.д.) с помощью микроконтроллеров. Поэтому в данной статье мы спроектируем простой мобильный телефон на основе платы Arduino, в котором с помощью GSM модуля можно будет делать звонки, отвечать на звонки, передавать и принимать SMS. Также наш простейший мобильный телефон на Arduino будет иметь микрофон и динамик для осуществления голосовых вызовов. Также этот проект можно рассматривать как «правильное» подключение GSM модуля к Arduino, с программным кодом, реализующим все основные функции мобильного телефона.

Необходимые компоненты

  1. Плата Arduino Uno.
  2. GSM модуль SIM900.
  3. ЖК дисплей 16х2.
  4. Клавишная панель (клавиатура) 4×4.
  5. Микрофон.
  6. Динамик.
  7. SIM-карта.
  8. Источник питания.
  9. Макетная плата или печатная плата.
  10. Соединительные провода.

Принципы работы проекта

В рассматриваемом нами проекте плата Arduino Uno управляет всеми процессами. Буквенно-цифровая клавишная панель 4×4 используется в качестве универсального устройства ввода: для ввода номера мобильного абонента, набора сообщений, осуществления вызова, приема вызова, передачи SMS, приема SMS и т.д. GSM модуль используется для взаимодействия с сетью GSM. Микрофон и динамик используются для передачи и приема голоса. ЖК дисплей 16×2 используется для отображения различных сообщений. Структурная схема рассматриваемого устройства приведена на следующем рисунке.

Структурная схема мобильного телефона на основе Arduino и GSM модуля

С помощью буквенно-цифровой клавишной панели можно осуществлять ввод как букв, так и цифр. Более подробно о работе с ней вы можете прочитать в статье про подключение клавишной панели к Arduino.

Все команды в рассматриваемом нами проекте вводятся с буквенно-цифровой клавишной панели. Более подробно все аспекты функционирования проекта можно посмотреть в видео в конце статьи.

Основные функции мобильного телефона на основе платы Arduino

1. Осуществление вызова.

Для осуществления вызова на нашем устройстве мы должны нажать клавишу ‘C’ и затем набрать с помощью клавишной панели номер интересующего нас мобильного абонента. После набора номера необходимо снова нажать ‘C’. После этого плата Arduino начнет процесс соединения с набранным номером при помощи использования AT команд.

ATDxxxxxxxxxx; <Enter> где xxxxxxxxx – набранный мобильный номер

2. Прием вызова.

Когда кто то будет звонить на номер SIM-карты, которая вставлена в ваш GSM модуль, устройство будет высвечивать на экране ЖК дисплея сообщение ‘Incoming…’ и после него номер вызывающего абонента. Чтобы принять вызов необходимо нажать ‘A’. При нажатии этой кнопки Arduino передает соответствующую команду на GSM модуль:

ATA <enter>

3. Передача SMS.

Для передачи SMS с помощью нашего устройства мы должны нажать на клавишной панели клавишу ‘B’. После этого система запросит номер (сообщение ‘to whom’), на который необходимо передать SMS. После набора номера необходимо нажать ‘D’ и после этого ЖК экран запросит текст SMS. После этого необходимо с помощью клавишной панели ввести текст SMS так, как вы это делаете на обычном мобильном телефоне и снова нажать ‘D’ для передачи SMS. Для передачи SMS плата Arduino передает на GSM модуль следующую команду.

AT+CMGF=1 <enter>
AT+CMGS=”xxxxxxxxxx” <enter> where: xxxxxxxxxx is entered mobile number

И передать 26 на GSM модуль для передачи SMS.

4. Прием и чтение SMS.

В этом случае GSM модуль принимает входящее SMS и сохраняет его на SIM-карте. Плата Arduino непрерывно мониторит принятые SMS через универсальный последовательный приемопередатчик (последовательный порт). Когда мы будем видеть на экране ЖК дисплея символ, свидетельствующий о поступлении нового SMS, нам необходимо будет нажать ‘D’ чтобы прочесть это SMS. Для выполнения этих операций необходимо на GSM модуль передать следующие команды:

+CMTI: “SM” <SMS stored location>
+CMTI: “SM”,6 Where 6 is message location where it stored in SIM card.

Когда Arduino получает индикацию ‘SMS received’ оно извлекает (находит) место хранения SMS и передает команду на GSM модуль прочесть принятое SMS. После этого на экране ЖК дисплея высвечивается сообщение ‘New Message Symbol’.

AT+CMGR=<SMS stored location><enter>
AT+CMGR=6

После этих команд GSM модуль передает хранившееся сообщение в Arduino, после чего Arduino извлекает главное SMS и отображает его на ЖК дисплее. После прочтения SMS на экран ЖК дисплея выдается сообщение ‘New SMS symbol’.

Более подробно все описанные процессы вы можете посмотреть в видео в конце статьи.

Работа схемы

Схема устройства представлена на следующем рисунке.

Принципиальная схема мобильного телефона на основе Arduino и GSM модуля

Контакты RS, EN, D4, D5, D6 и D7 ЖК дисплея 16×2 подключены к контактам Arduino 14, 15, 16, 17, 18 и 19. Контакты Rx и Tx GSM модуля подключены к контактам D3 и D2 платы Arduino соответственно. Земля (Ground) GSM модуля и платы Arduino должны быть соединены вместе.

Контакты строк клавишной панели 4×4 подключены R1, R2, R3, R4 непосредственно соединены с контактами 11,10, 9, 8 платы Arduino, а контакты ее столбцов C1, C2, C3, C4 соединены с контактами Arduino 7, 6, 5, 4. Микрофон (MIC) подключен к контактам mic+ и mic- GSM модуля, а динамик (Speaker) подключен к контактам SP+ и SP- GSM модуля.

Исходный код программы

Для использования клавишной панели мы в программе должны подключить библиотеку <Keypad.h>, а для ввода цифр с помощью этой клавишной панели мы должны создать функцию void alfakey(). Смысл создания этой функции заключается в том, чтобы мы могли вводить любые символы (буквы и цифры) с использованием всего 10 клавиш, находящихся на клавишной панели.

То есть если мы нажмем клавишу 2 (abc2), то на экране ЖК дисплея отобразится ‘a’, а если мы нажмем эту клавишу снова, то ‘a’ заменится на ‘b’, а если мы нажмем клавишу 3 раза, то ‘b’ заменится на экране дисплея на ‘c’. Если же после нажатия клавиши мы подождем некоторое время, то курсор автоматически передвинется на следующую позицию на экране ЖК дисплея, после чего мы сможем вводить новую цифру или букву. Аналогичные процессы будут происходить и при нажатии всех остальных клавиш.

#include <Keypad.h>
const byte ROWS = 4; //четыре строки
const byte COLS = 4; //четыре столбца
char hexaKeys[ROWS][COLS] =
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {11, 10, 9, 8}; //соединение с контактами строк клавиатуры
byte colPins[COLS] = {7, 6, 5, 4}; // соединение с контактами столбцов клавиатуры
//инициализация класса NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void alfakey()
{
int x=0,y=0;
int num=0;
while(1)
{
lcd.cursor();
char key=customKeypad.getKey();
if(key)
{
if(key=='1')
{
num=0;
lcd.setCursor(x,y);
.... .....
........ ....

Но кроме функций работы с клавиатурой мы должны создать несколько других функций для работы с GSM модулем: void call() – для совершения вызова, void sms() – для передачи SMS, void lcd_status() – для отображения статуса ЖК дсиплея, gsm_init() – для инициализации GSM модуля и т.д.

Далее представлен полный текст программы.

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
278 просмотров


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *