ретро gsm телефон на arduino
Проект RetroGSM, или как удивить бабушку
(если вдруг Vimeo отказывается работать, ссылка)
«Сначала была идея», как гласит забытый файл в текстовом редакторе. Действительно, идея была. Она прорабатывалась, обдумывалась, а потом — р-раз — и нечто похожее было найдено уже реализованным на одном американском сайте. Впрочем, это не помешало ее претворению в жизнь, а в чем-то даже упростило.
Негласные законы жанра Pin-Up требовали, чтобы «главное» демонстрировалось только намеком, а не напрямую.
Western Electric рекламирует свои телефонные аппараты. «Соедините это в единое целое и звоните, куда угодно».
Все началось давным-давно, когда в рекламе только начали появляться полуобнаженные девушки в чулках, а в рекламе телефонных аппаратов чаще упоминалось слово надежность. Эти устройства с их единственной функцией изменили культуру, став вполне романтичными свидетелями эпохи.
Итак, чтобы напомнить о ней, я задумал сделать телефон. Казалось бы, что в этом такого? И, главное, зачем это делать, очередной велосипед? Впрочем, эти вопросы оставим на потом.
Оформление богатого внутреннего мира, или — корпус
Многие люди, решившие сделать устройство, сталкиваются с проблемой корпуса, и часто хорошее дело остается лежать на столе в виде макета, постепенно растворяясь в новых разработках, становясь донором деталей. Или пылится в шкафу, будучи мало приспособленным к использованию. Чтобы этого не произошло, было принято стратегическое решение —начать с подборки корпуса. А так как мы делаем телефон, то и корпус должен быть соответствующим. Однако, заказывать литье по трехмерным моделям —идеологически правильно, но дорого в 2012 году, так что обойдемся донором. В качестве донора нам достался телефонный аппарат с дисковым номеронабирателем польского производства FeTap-611. Просто так сложилось, что он был в хорошем состоянии, пригодном для модификации.
Из него были вынуты детали схемы, но оставлена плата, на которую был запаян переключатель под трубкой, а также родной механический звонок (Рис.4). На фото уже видна небольшая плата, о ней чуть позже.
Модуль сердца
По сути, схема устройства проста, но встал вопрос за ее сердцем — модулем сотовой связи. Был рассмотрен вариант использования начинки старого телефона Siemens, благо они управляются простыми AT-командами, но позже, волею судьбы, забросившей меня на полгода в Финляндию учиться, я получил возможность заказывать товары с Ebay, и ждать при этом всего две недели, и получать удовольствие от прихода на почту. Чего я только не поназаказывал… Но главное я получил в первую очередь — плату для прототипирования и GSM модуль Siemens TC35i. На рис. 5 приведен общий вид платы. К ней в комплекте прилагается антенна и плата для подключения аудиогарнитуры.
На плате распаян чип MAX232 для согласования уровней с COM портом. После примерки всего этого внутри телефона стало ясно, что просто перемычками к контроллеру я не отделаюсь. Пришлось отсоединить модуль, выпаять разъем шлейфа, так как в продаже он не был найден во время очередной валазки на Родину. Это было нечто, с горелым текстолитом от перегретого жала паяльника, но все закончилось благополучно. Вторая плата лишилась всех гнезд и разьемов, и была припаяна напрямую к витому шнуру телефонной трубки. К слову, в телефоне был установлен электретный микрофон, и ничего придумывать для получения нужного уровня сигнала для gsm-модуля не пришлось. Динамик также заработал сразу и как надо.
Для соединения разъема шлейфа и контроллера сначала была предпринята попытка напаять проводков напрямую к контактам с шагом в 0.5 мм. Однако, надежной эта конструкция не оказалась. В итоге я решил сделать дополнительную плату, так называемый breakout. Вытравив и напаяв основной разъем, все-таки я не смог заранее просчитать, что мне понадобится, и то, что придется переносить разъем для SIM-карты на шлейф, и это привело к некоторому хаосу из МГТФ. На рис.6 можно увидеть, как все это выглядело в ответственный момент проверки после сборки. SIM карта еще находится на обратной стороне breakout-платы.
AT. OK!
Звонок
Помните, я оставил штатный механический звонок? Настало время и его пустить в дело! Но как сделать из 3.6 вольт литиевого аккмуулятора переменные 25÷30 В? Спасибо SparkFun, которые сделали это раньше меня, и выложили все в открытый доступ. Был собран DC-DC преобразователь на микросхеме MC34063 с типовой схемой включения, и путем долгих экспериментов с катушками, резисторами и конденсаторами, на выходе я получил 30 В постоянного тока. Однако, далее надо сделать из этого переменный ток! Нам на помощь приходит драйвер двигателя, H-bridge, L298B. Ему подается два питания – для схемы управления Uсх, и коммутируемое напряжение Uкомм. Два входа, при наличии разрешающих логических единиц, коммутируют два выхода на +Uкомм или на землю. При этом, Uкомм может быть вплоть до… это надо смотреть в спецификации на конкретную ревизию.
В качестве генератора частоты применена старая добрая микросхема ЛА7, которая генерирует пачки импульсов частотой 20-30 Гц длительностью примерно 1 сек с перерывом около 1,5 сек. Кто хочет пятерку, может посчитать скважность. Параметры частоты задаются настроечными резисторами. Для того, чтобы все это не съедало во время простоя батарейку, весь блок звонка подключается по сигналу с контроллера через полевой транзистор. Вся схема потребляет примерно 0.4 А во время звонка. Конденсатор нужен для сглаживаия просадки напряжения во время включения звонка. Рекомендуется подобрать частоту звонка для достижения частоты резонанса самого звонка, и тогда он будет громче звенеть. Использована макетная плата, так как под рукой не было утюга, хлорного железа, сверлильного станка и текстолита, по понятным причинам обратную сторону не покажу, впрочем, макетка с соединенными по три отверстия пятачками из меди очень удобна, хотя и не обошлось без МГТФ. Для обдумывания трассировки были напечатаны листы, изображающие макетку.
Контроллер
Небольшой «отказ от ответственности за срач в комментах» для тех, кто зарабатывает на хлеб ассемблером и Си. Я ценю свое время, и в данном случае выбрал платформу, прости господи, Arduino в качестве управляющего контроллера. Она позволила быстро выдать работающее устройство, а особого быстродействия тут и не требовалось.
Избыточность основной платы была решена путем заказа модуля Arduino-mini, который самый компактный, несет микроконтроллер Atmega328 и не имеет ничего лишнего. После тестирования кусков скетча, отвечающих за считывание органов управления (поднятие трубки, набор номера, общение с gsm-модулем), все это было собрано в единый скетч. В принципе, ничего сложного тут не было, для подавления дребезгов контактов была применен программный метод. Внутренних подтягивающих резисторов контроллера хватает для уверенной работы.
Питание
Настал самый сложный этап, как оказалось. Задача была все это сделать мобильным, соотетственно, на аккумуляторе. Чтобы упростить себе жизнь, был заказан li-ion аккуммулятор без защиты, а также держатель для него (типоразмер 18650) и плата защиты, отключающая потребителя при снижении напряжения на аккумуляторе до 3 В. Несмотря на комментарии на форуме известного онлайн магазина китайчатины, характеристики прибывшего были вполне сносные. Позже на самодельном стенде я замерил емкость аккумуляторов, и она оказалась не ниже 90 % обещанной. Возможно, я просто везучий.
Сложностей возникло две:
— при входящем звонке резко возросший ток вырубал защиту, возможно, это ее фича, но скорее баг, и в итоге модуль терял связь с сетью.
— контроллер жрал вместе с модулем непозволительные 60÷100 мА. По расчетам, при таком раскладе аккумулятора надолго не хватит.
Первая проблема была решена путем включения схемы звонка в обход защиты. Это не очень хорошо, но уж очень надоело возиться с выбором контроллеров защиты от переразряда аккумулятора. По идее, если контроллер будет обесточен, то он не запустит звонок, то есть не откроет полевой транзистор. Смоделировать эту ситауцию так и не получилось, но вскоре, наверное, через неделю, я все же дождусь разрядки аккумулятора…
Вторая проблема решилась путем внимательного чтения документации на gsm-модуль. Командой AT+CFUN=0 модуль переводится в состояние сна. Потребление снижается с 10 мА до 3 мА (типовые значения). При этом он на связи с базовой станцией, и может проснуться от входящего звонка, или встроенного будильника. Чтобы разбудить модем, нужно линию RTS посадить на землю.
Энергопотребление контроллера решилось вдумчивым чтением datasheet и примером, найденным в сети. Контроллер вводится в состояние сна если в течение 10 секунд не совершается никаких манипуляций с ним и трубка положена на аппарат. Просыпается он по ниспадающему фронту на выводах, имеющих вектор прерывания, один “следит” за поднятием трубки, второй — за линией RING gsm-модуля.
В итоге общее потребление снизилось до 0.5÷1 мА в режиме простоя, если верить моему авометру. В режиме разговора редко поднимается до 100 мА, думаю, это из-за хорошего покрытия сети.
Зарядка аккумулятора производится от приобретенного модуля ЗУ на контроллере TP4056, схема его проста, несколько резисторов, на входе 5÷7 В, два светодиода индикации работы. Для подключени блока питания в технологическом отверстии телефонного аппарата устроен штырьковый разъем, удобно закрывающийся крышечкой.
Морошка на десерт
Чего нам еще не хватает? Конечно, сигнализации о том, что модуль успешно соединился с сетью и готов к звонку. Для этого через резистор соединяем один из выводов, идущих на динамик, с контроллером, и подаем “гудок” стандартной для АТС частоты, соответствующей сигналу “ответ АТС” в момент поднятия трубки, после прохождения проверки регистрации модуля в сети GSM.
Также добавлены некоторые специальные функции, для реинициализации модема или отключения его от сети, если это необходимо. Все это делается путем набора трехзначного сервисного номера. В ответ контроллер пищит в трубку спец. последовательностью. Если цифр было набрано больше 7, то первая «8» заменяется на «+», чтобы корректно набрать номер.
Сборка
Настало время собрать все в корпус. Держатель аккумулятора, плата звонка, модуль были закреплены на прочный двусторонний скотч на вспененном полиэтилене. Держит хорошо, но смывать его клей – не самое приятное занятие.
Удалось все собрать без вспомогательной платы с разъемами номеронабирателя и т.п., но проводов получилось прилично. Частично их количество увеличилось из-за необходимости вывода последовательного порта контроллера и модуля к технологической нише на дне аппарата для диагностики аппарата и обновления прошивки, где также расположился разъем SIM-карты. Bluetooth? Нет, спасибо, нам хватит.
Неприлично замотанные красной, а не синей изолентой – платы защиты и зарядки аккумулятора. Нет, они не греются настолько, чтобы это учитывать.
Торжественная сборка и завинчивание последнего винта, и… вот, главный инструмент для развлечения и “троллинга” прохожих и посетителей кафетериев. Выдает его только антеннка, но какие люди делают глаза, когда слышат гудок в трубке!
Характеристики проекта
Стоимость деталей составила примерно 3000 рублей.
Заняло неизвестно сколько времени, но можно сделать за месяц по выходным, если не встретить особых граблей и все купить заранее.
Блок-схема начинки устройства:
Планы
Доработать сервисные номера аппарата. Добавить возможность управлять телефонной книгой, хотя возможность звонить по номерам из книги на SIM-карте уже есть. Также как и возможность набрать последний набранный номер. Если вдруг когда-нибудь кто-то захочет сделать что-то похожее – сделайте печатную плату. Очень вас прошу.
Ретро GSM телефон на Arduino 1958 года, с дисковым номеронабирателем
В этом уроке мы дадим вторую жизнь телефонному аппарату с дисковым номеронабирателем, превратив его в мобильный (переносной) ретро-аппарат сотовой связи.
Есть стационарные телефонные аппараты у которых нет провода между трубкой и базой, но есть провод к розетке АТС. В нашем проекте у телефона останется провод между трубкой и базой, но пропадёт провод к розетке, так как связь будет осуществляться по сети GSM.
Описание работы ретро GSM телефона:
Нам понадобится:
Схема сборки:
Arduino / Piranha UNO:
Если Вы собираетесь разместить устройство в корпусе телефона, найдите место для установки Arduino / Piranha UNO и закрепите её.
Batery Shield:
Установите Battery Shield на Arduino / Piranha UNO:
Во время установки Battery Shield должен быть в выключенном состоянии.
GSM/GPRS Shield:
На плате GSM/GPRS Shield A6 имеется слот для SIM-карт и переключатель UART. Установите SIM-карту в слот, выберите положение переключателя RX-7/TX-8.
Trema Shield:
Номеронабиратель:
Подключите номеронабиратель к выводам GND, D5, D6 и Трема кнопку к выводу D4:
Если Вы собираете устройство в корпусе телефона, то вместо Trema кнопки подключите кнопку фиксации опускания трубки, между выводами GND и D4).
Колокольный звонок:
Подключите модули управления колокольным звонком:
Напряжение питания 5В подводится на вход повышающего DC-DC преобразователя, а напряжение с его выхода (уровень напряжения регулируется потенциометром преобразователя) подводится к соленоиду или родной катушке звонка телефона, через Trema силовой ключ, управление которым осуществляется через вывод D2.
Колокольный звонок можно собрать не на соленоиде, а на сервоприводе, подключив его к выводу D2:
Преимуществом данной схемы является меньшее число деталей. Но в скетче нужно присвоить переменной modeBEEL значение 2 (разкомментировать строку в начале скетча), а так же указать углы сервопривода при которых боёк касается колокола и удаляется от него (углы указываются в функции funcBELL в конце скетча).
Устройство ввода/вывода звука:
Если Вы собираетесь разместить динамик, микрофон и зуммер в трубке телефона, то подключите их согласно схеме: (трубка соединяется с аппаратом четырехпроводным кабелем).
В телефонной трубке, рядом с динамиком, необходимо разместить и зуммер. Он подключается к выводу D3 и нужен для подачи сигналов «готов к набору» (гудок при снятой трубке) и «занято» (прерывистые гудки после разрыва голосового соединения).
Если Вы не собираетесь размещать элементы ввода/вывода звука в телефонной трубке, то более простым вариантом является использование гарнитуры, которая подключается к соответствующему разъёму на плате GSM/GPRS Shield A6, а сигналы «готов к набору» и «занято» будут выводиться отдельно, через Trema зуммер, так же подключённый к выводу D3.
Если Вы не собираетесь размещать элементы ввода/вывода звука в телефонной трубке, но и не желаете использовать гарнитуру, то реализуйте вот такую схему:
Полная схема устройства:
Пример схемы с использованием гарнитуры и колокольного звонка на базе соленоида:
Код программы (скетч):
В скетче предусмотрена возможность выбора типа колокольного звонка modeBEEL =0,1,2 и алгоритма работы кнопки фиксирующей опускание телефонной трубки flgHANG =0,1. Для выбора необходимого значения закомментируёте существующее и разкомментируйте требуемое.
В скетче используются библиотеки iarduino_GSM, SoftwareSerial и Servo (две последние входят в стандартный набор Arduino IDE).
В разделе функции funcBELL отвечающем за управление сервоприводом указаны углы 50° и 60° (три последние строки). Если Вы используете колокольный звонок на сервоприводе, измените угол 50° на тот при котором сервопривод ударяет бойком по колоколу, а угол 60° на тот при котором боёк удаляется от него.
Алгоритм работы скетча:
До кода Setup() определяются номера выводов, тип колокольного звонка, алгоритм работы кнопки фиксирующей опускание трубки, объявляются переменные и функции, подключаются библиотеки, и создаются объекты для работы с ними.
В коде setup() конфигурируются выбранные выводы, инициируется работа GSM/GPRS Shield, звук переводится на разъём гарнитуры, выполняется цикл ожидания готовности GSM/GPRS Shield к работе (регистрация в сети оператора). И после выполнения всех указанных действий выполняется оповещение о готовности к работе, путем включения колокольного звонка на 1 секунду.
Код цикла loop() разделён на две основные части: совершение исходящих звонков (данная часть выполняется если телефонная трубка снята) и приём входящих вызовов (данная часть выполняется если трубка лежит на телефоне).
Совершение исходящих звонков состоит из следующих действий:
Приём входящих вызовов состоит из следующих действий:
Делаем из Arduino сотовый телефон
Говорите, задолбали обзоры часов на сайте? Ну так держите ещё один обзор по теме Arduino 🙂
В комментариях к предыдущему обзору кто-то ворчал, что, мол, «купи Arduino и затем готовься выложить ещё баксов двести на дополнения, когда интерес проснётся». Незвестный собрат — ты был прав 🙂
Итого, герой обзора — нахлобучка (или «shield») для Arduino с GSM/GPRS модулем на борту. Вся идея Arduino состоит в том, что размеры плат и контакты — стандартные и изделия разных производителей можно стыковать меж собой.
Вставляем SIM-карту в держалку хлипковатого вида:
затем втыкаем shield на Arduino UNO — встаёт, как влитой:
Подключаем к shield комплектный блок питания на 9 вольт и 1А (к сожалению, идёт с американской вилкой, т.е. нужен переходник), подцеляем этот «бутерброд» к компьютеру. Светодиод на корпусе начинает мигать, через секунд десять SIM-карта регистрируется в сети и мигания становятся редкими.
Но мы не светодиод за 57 баксов разглядывать собирались; руки чешутся сделать что-нибудь прикольное. Сначала попробуем проверить работоспособность модуля. С внешним миром он общается через последовательный порт, так что по инструкции с сайта производителя запихиваем в Arduino с компьютера простую программку, которая будет выступать мостом между компьютером и GSM-модулем. Arduino будет передавать туда команды как есть и возвращать в компьютер ответы.
Копируем программу, компилируем, запихиваем в Arduino, открываем Serial monitor. Не работает. Чертыхаемся, идём читать инструкцию, бъём себя по лбу, выставляем рекомендованные — скорость порта в 19200 байт в секунду, символ конца строки — CR. Перезапускаем.
Вводим в окно Serial monitor стандартную «модемную» команду «AT» и в ответ получаем «OK». Ааааа, оно работает. Набираем вручную зубодробительную команду отправки SMS — отправляет!
Лезем на Google Code и скачиваем библиотеку, написанную яйцеголовыми умниками под эту железку, распаковываем и открываем пример с тестом GPRS-соединения.
В примере прописываем МегаФоновскую точку доступа GPRS, поправив единственную строчку и запускаем. Через секунд двадцать Arduino заходит в интернет по GPRS и показывает нам содержимое одной из страниц Яндекса:
Надо отметить, что всё это добро занимает только 11 килобайт памяти Arduino, т.е. ещё остаётся приличный запас для других полезных задач.
— относительно недорогую штуку, с помощью которой можно управлять Arduino по SMS. Например, хотите включать бойлер на даче, пока ещё стоите в пятничной пробке? Подключайте к Arduino нормальные, качественные реле, закодируйте в программе пароль, чтобы шальная рекламная SMS не включила ваш котёл — и будете каждый раз к приезду иметь нагретую воду для душа.
— возможность собирать данные с Arduino не с помощью дорогих SMS, а через Web. Лично я буду собирать OBD-II + GPS логгер для машины, который будет складывать данные о пробеге мне на домашний компьютер.
Несколько впечатлений по самой железке. Плюсы:
— добротная пайка
— можно поставить более крутую антенну (винтовое SMA-соединение позволяет)
— на плате есть встроенные часы и конденсатор, который их питает
— есть коннектор для «нокиевского» LCD-экранчика
— используется чип Simcom SIM900, на который в интернетах полно документации.
— комплект приехал в крепкой картонной коробке.
— есть гнёзда для наушников и микрофона (не тестировал).
— хлипковатый слот для SIM-карты
— нет 3G, только четырёхдиапазонный GSM/GPRS
— для работы требуется внешнее питание 9 вольт, питания от USB не хватает
— стали появляться в продаже модули с чипом следующего поколения, SIM908, в который уместили заодно GPS-приёмник. Скоро они подешевеют, а я буду локти кусать 🙁
— библиотеки расчитаны на Arduino UNO или Mega, если у вас, например, Leonardo, то могут быть проблемы.
— в комплекте БП с американской вилкой, нужен переходник.
Мобильный телефон на основе Arduino и GSM модуля
Иногда у начинающих радиолюбителей возникают трудности при реализации основных функций GSM модуля (совершение вызовов, передача текстовых сообщений и т.д.) с помощью микроконтроллеров. Поэтому в данной статье мы спроектируем простой мобильный телефон на основе платы Arduino, в котором с помощью GSM модуля можно будет делать звонки, отвечать на звонки, передавать и принимать SMS. Также наш простейший мобильный телефон на Arduino будет иметь микрофон и динамик для осуществления голосовых вызовов. Также этот проект можно рассматривать как «правильное» подключение GSM модуля к Arduino, с программным кодом, реализующим все основные функции мобильного телефона.
Необходимые компоненты
Принципы работы проекта
В рассматриваемом нами проекте плата Arduino Uno управляет всеми процессами. Буквенно-цифровая клавишная панель 4×4 используется в качестве универсального устройства ввода: для ввода номера мобильного абонента, набора сообщений, осуществления вызова, приема вызова, передачи SMS, приема SMS и т.д. GSM модуль используется для взаимодействия с сетью GSM. Микрофон и динамик используются для передачи и приема голоса. ЖК дисплей 16×2 используется для отображения различных сообщений. Структурная схема рассматриваемого устройства приведена на следующем рисунке.
С помощью буквенно-цифровой клавишной панели можно осуществлять ввод как букв, так и цифр. Более подробно о работе с ней вы можете прочитать в статье про подключение клавишной панели к Arduino.
Все команды в рассматриваемом нами проекте вводятся с буквенно-цифровой клавишной панели. Более подробно все аспекты функционирования проекта можно посмотреть в видео в конце статьи.
Основные функции мобильного телефона на основе платы Arduino
1. Осуществление вызова.
Для осуществления вызова на нашем устройстве мы должны нажать клавишу ‘C’ и затем набрать с помощью клавишной панели номер интересующего нас мобильного абонента. После набора номера необходимо снова нажать ‘C’. После этого плата Arduino начнет процесс соединения с набранным номером при помощи использования AT команд.
ATDxxxxxxxxxx; где xxxxxxxxx – набранный мобильный номер
2. Прием вызова.
Когда кто то будет звонить на номер SIM-карты, которая вставлена в ваш GSM модуль, устройство будет высвечивать на экране ЖК дисплея сообщение ‘Incoming…’ и после него номер вызывающего абонента. Чтобы принять вызов необходимо нажать ‘A’. При нажатии этой кнопки Arduino передает соответствующую команду на GSM модуль:
3. Передача SMS.
Для передачи SMS с помощью нашего устройства мы должны нажать на клавишной панели клавишу ‘B’. После этого система запросит номер (сообщение ‘to whom’), на который необходимо передать SMS. После набора номера необходимо нажать ‘D’ и после этого ЖК экран запросит текст SMS. После этого необходимо с помощью клавишной панели ввести текст SMS так, как вы это делаете на обычном мобильном телефоне и снова нажать ‘D’ для передачи SMS. Для передачи SMS плата Arduino передает на GSM модуль следующую команду.
AT+CMGF=1
AT+CMGS=”xxxxxxxxxx” where: xxxxxxxxxx is entered mobile number
И передать 26 на GSM модуль для передачи SMS.
4. Прием и чтение SMS.
В этом случае GSM модуль принимает входящее SMS и сохраняет его на SIM-карте. Плата Arduino непрерывно мониторит принятые SMS через универсальный последовательный приемопередатчик (последовательный порт). Когда мы будем видеть на экране ЖК дисплея символ, свидетельствующий о поступлении нового SMS, нам необходимо будет нажать ‘D’ чтобы прочесть это SMS. Для выполнения этих операций необходимо на GSM модуль передать следующие команды:
+CMTI: “SM”
+CMTI: “SM”,6 Where 6 is message location where it stored in SIM card.
Когда Arduino получает индикацию ‘SMS received’ оно извлекает (находит) место хранения SMS и передает команду на GSM модуль прочесть принятое SMS. После этого на экране ЖК дисплея высвечивается сообщение ‘New Message Symbol’.
После этих команд GSM модуль передает хранившееся сообщение в Arduino, после чего Arduino извлекает главное SMS и отображает его на ЖК дисплее. После прочтения SMS на экран ЖК дисплея выдается сообщение ‘New SMS symbol’.
Более подробно все описанные процессы вы можете посмотреть в видео в конце статьи.
Работа схемы
Схема устройства представлена на следующем рисунке.
Контакты 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 модуля.
Исходный код программы
То есть если мы нажмем клавишу 2 (abc2), то на экране ЖК дисплея отобразится ‘a’, а если мы нажмем эту клавишу снова, то ‘a’ заменится на ‘b’, а если мы нажмем клавишу 3 раза, то ‘b’ заменится на экране дисплея на ‘c’. Если же после нажатия клавиши мы подождем некоторое время, то курсор автоматически передвинется на следующую позицию на экране ЖК дисплея, после чего мы сможем вводить новую цифру или букву. Аналогичные процессы будут происходить и при нажатии всех остальных клавиш.
#include
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);
Но кроме функций работы с клавиатурой мы должны создать несколько других функций для работы с GSM модулем: void call() – для совершения вызова, void sms() – для передачи SMS, void lcd_status() – для отображения статуса ЖК дсиплея, gsm_init() – для инициализации GSM модуля и т.д.