По правде говоря, в настоящий момент нет логических целей для того, чтобы собирать мобильник своими руками. Особенно учитывая то, что самый простой покупной мобильник будет стоить дешевле. Но, тем не менее, изучение — это очень важный аспект процесса сборки. Более того, владение мобильником, который ты создал сам — это очень крутая идея для поделки.


Большинство из нас владеют мобильными, как и я. И после нескольких успешных проектов я задумался над тем, что создание мобильника своими руками будет хорошим вызовом. Я прекрасно осознавал, что у меня не получится воссоздать весь функционал современного телефона, но осуществление звонков и, возможно, отправка смс, вполне меня устраивала.

Шаг 1: Планирование




В качестве вдохновения я использовал проекты, найденные в интернете:

Another
Raspberry phone
Arduino phone
Adafruit FONA

Модуль сотового GSM

Самый главный компонент телефона — модуль GSM. После сёрфинга по интернету, я обнаружил, что на Ибэй можно найти такой модуль (модели SIM800L) по очень неплохой цене и при этом почти не придётся ничего паять. Моей целью было не устранить пайку вообще, но уменьшить время на паяльные работы в целом. Как впоследствии оказалось, Adafruit использует такой же чип SIM800L и, к моему удивлению, их код заработал сразу и без каких-либо модификаций.

Adafruit FONA

Модуль работает на частотах 850/900/1800/1900MHz, позволяя ловить радио в диапазоне FM и много другое. Радио не было важным для меня, но, возможно, в будущем я добавлю этот функционал. Важными функциями являются осуществление звонков, получение и отправка СМС и этого вполне достаточно.

В качестве бонуса, купленный модуль обладает антенной. На другом конце платы есть модуль для сим-карт, что также делает жизнь проще (не придётся производить мелкую и затратную по времени пайку).

Провода динамика “+” (SpkP) и “-” (SpkN) соединяются напрямую с SIM800L. То же касается и микрофона. “Net” — для антенны, но так как она уже встроена в плату, место оставлено пустым. “Vbat2” для соединения с “+” батарейки. “GND” – для соединения с ground на Arduino и “-“ на батарейке. “RST_sim800”, “RXD” и “TXD” соединяются с Arduino. “DTR” — не знаю для чего, оставил открытым.

Экран

В одной из инструкций использовался экран Nokia, в то же время я не очень хотел использовать LED-экран, таким образом, я решил использовать экран от Nokia, но LCD.

После некоторых изысканий, я обнаружил, что экраны Nokia испытывают проблемы из-за слишком высокого напряжения. На Sparkfun я выяснил, что при напряжении 5 вольт, нужно использовать резисторы. Напряжение источника питания должно быть 3,3V.

Нужно использовать резистор на 10 кОм между пинами SCLK (CLK), DN (DIN), D/C (DC), и RST. А с пином SCE (CS) нужно использовать резистор на 1 кОм. Для подсветки рекомендуется минимум 330 Ом. Для одних и тех же пинов могут использоваться разные обозначения: SCLK=CLK; DN=DIN; D/C=DC; SCE=CS.

Для экрана нужно 3.3 Вольта, поэтому необходимо использовать конвертер DC-DC. Все пины соединяются с Ардуино, который работает от 5 Вольт. Для того чтобы увеличить срок жизни экрана, между пинами нужно включить резисторы (смотрите схему: “Hand1_R4 – R8”).

Кнопки

Расположение кнопок схоже с расположением на множестве старых телефонов. Эта схема очень разумна.

Клавиатура состоит из 16 кнопок. Для использования всех 16 кнопок понадобится большой микроконтроллер или слегка более продвинутая клавиатура.

С использованием технологии разделения напряжения, клавиатуру можно подключить, используя лишь один аналоговый пин.

Шаг 2: Макетная плата — Кнопки



Создание клавиатуры с использованием разделителя напряжения достаточно просто и может быть очень легко рассчитано. Разделитель напряжения можно найти на схеме. Принцип очень прост, но фактические значения raw_data (напряжения), которые должны соответствовать нажатию разных кнопок слегка отличаются от теоритических вычислений.

В теории можно использовать лишь вычисления, но я обнаружил, что более точно будет замерить напряжение на готовой системе, а затем доработать скрипт. Это означает, что нужно донастраивать скрипт каждый раз, когда меняется система.

Рассчитанные и измеренные значения raw_data показаны на приложенной таблице. Как можно заметить, выходит довольно большое отклонение, особенно на уровне низкого напряжения. Используемые резисторы имели погрешность до 5%, что и привело к такому результату.

Шаг 3: Макетная плата — Микроконтроллер


Мозг телефона планировалось собрать с использованием Arduino Pro-Micro. Плата дешевая, но достаточно мощная для наших нужд. У этой платы есть много преимуществ, и она может быть напрямую соединена с компьютером посредством USB. Это облегчает обновление кода и зарядку батареи (так как в ней есть готовый порт micro-USB).

Но в реальной жизни не всё так просто и она оказалась несовместимой с SIM800L. Я не знаю почему, но она не работала, хотя физически всё было соединено. Мне пришлось заменить Pro-Micro обычным Arduino UNO и всё заработало как надо.

Схема соединения Ардуино прикреплена выше. Также UNO использовался для окончательного дизайна соединения пинов, кроме D14-D16 (которые я всё равно не использовал)

Шаг 4: Макетная плата — Экран


Как говорилось выше, я использовал экран Nokia 5110.

Пин 7 экрана управляет подсветкой. Подав на него напряжение 3.3V можно включить подсветку. Я купил на Ибэй несколько экранов от разных производителей и один из них отличался. Этот экран требовал заземления пина для того, чтобы подсветка заработала. У экрана уже были резисторы, поэтому отпала нужда в последовательных резисторах (Hand1_R3). На макетной плате такое было легко доработать, но я обнаружил эту особенность после заказа печатной платы, поэтому данный факт был слегка раздражающим.

Шаг 5: Макетная плата — Питание

Для питания устройства я использовал литий-полимерную батарейку, напряжение с батареи подавалось напрямую на сотовый модуль (SIM800L). Сотовый модуль мог требовать до 2A и работал при напряжении 3.7 — 4.2 Вольт, также как и батарейка.

Для печатной платы я не использовал сколь бы то ни было сложной системы зарядки батареи. Я использовал обычную батарейку 18650 LiPo и соединил её напрямую с SIM800L.

Ардуино УНО питался от USB кабеля.

3.3 Вольта на экран подавались напрямую с УНО, поэтому не было нужды в дополнительных элементах.

Шаг 6: Макетная плата — Софт

[фото]

Большинство софта я написал сам, поэтому он был не очень хорошего качества, медленный и без сильного функционала. Но каждый из вас может улучшить его.

Для клавиатуры я нашел неплохой код от OtakuSanel. Я сильно модифицировал его код, но основа осталась та же, если сырые значения верны, то для проверки клавиатуры можно использовать приложенный файл (T-keyBoardTest1.ino).

Простую программу для коммуникации с SIM800L можно найти на adafruit (FONAtest в примерах). Вам может потребоваться лишь настроить пины. Также потребуется скачать библиотеки из Adafruit FONA. На этом шаге экран не нужен и вся коммуникация проходит через последовательный порт.

Простая программа для осуществления звонков также прилагается ниже (T-mobile_OnlyCalling.ino). Код был доработан для меня, так что он не слишком лёгкий для понимания.

Файлы

Файлы

Шаг 7: Мобильник на макетной плате





Первую систему тестирования я разработал для клавиатуры, затем для модуля SIM800L, а затем для всего этого и экрана. Перед заказом печатной платы я хотел быть уверенным, что я могу получить доступ ко всем модулям, и что компоненты подходят друг к другу. В предыдущих случаях я старался пропустить шаг с макетной платой и сразу купить печатную плату, но такие платы часто имели ошибки в проектировании.

Шаг 8: Прототип печатной платы







После того, как макетная плата была собрана и работала без ошибок, я сразу сделал дизайн для печатной платы. Несколько вещей, которые я не полностью испытал и не предполагал о них вначале, сделали результат не таким продуманным, как я надеялся, но в итоге я смог заставить свой мобильник работать. Далее я рассмотрю все трудности, возникшие после сборки печатной платы.

Микроконтроллер

Как говорилось выше, я собирался использовать в качестве контроллера Pro-Micro. В моих предыдущих проектах Pro-Micro и UNO были полностью совместимы, и с их заменой не было никаких проблем. Поэтому я не делал никаких специальных тестов с Pro-Micro перед тем, как заказал плату.

Когда печатная плата была доставлена, я был очень рад, припаял батарейку, Pro-Micro и SIM800L и попытался включить устройство. Но связи не было. Я поверил всё мультиметром, и всё выглядело так, будто должно работать. Я сделал отдельные тесты на макетной плате и получил тот же результат — нет связи…

Я решил, что просто использую UNO вместо Pro-Micro, и тогда не будет никаких проблем, тем не менее, мне пришлось спаять много проводов от слотов (расчитаных для Pro-Micro) к плате UNO.

Питание

Контроллер был не единственной проблемой.

Я планировал увеличить напряжение (с 3.7-4V до 5.0V) при помощи чипа RT9261A. Этот чип сам по себе не может держать большую силу тока. Поэтому он управляет небольшим переключателем BJT-NPN. Напряжение NPN фильтруется через резистор и конденсатор. Значения находятся непосредственно в таблице данных.

Конвертер работал хорошо без нагрузки, но, когда я подал на него минимум 0.1 мА, напряжение тут же упало до напряжения батарейки. Конвертер не был способен справиться с задачей. К счастью, я оставил небольшую площадку для подключения готового конвертера (купленного на Ибэй). Этот конвертер работал хорошо, но выходное напряжение было 5.2V. Это не очень серьёзная проблема, но я вернусь к ней в части о кнопках.

Конвертер вскрыл еще одну проблему, о которой я раньше не задумывался. Он издавал высокочастотный шум. Пока плата лежала на столе — это не было проблемой, но при совершении звонка я слышал этот звук.

Для питания экрана мне требовалось 3.3V. Это осуществлялось при помощи DC-DC конвертера PAM2305 (“Hand1_VoltReg1”). Опять же, это очень простое устройство и оно требует для работы только наличия индуктора (“Hand1_L2”). Конденсатор “Hand1_C3” нужен для стабилизации напряжения.

Кнопки

Кнопки работали хорошо в версии с макетной платой. Я надеялся, что то же самое будет и с печатной платой, но всё оказалось не так просто. Во-первых, из-за того, что соединения были другими, напряжение тоже поменялось. Мне пришлось перенастраивать эти значения в скрипте.

Я перенастроил сырые значения, в то время как UNO был подключен к компьютеру. С подключенным кабелем всё работало хорошо. После отключения кабеля кнопки тут же перестали работать. Почему? Я задал себе такой же вопрос.

Это очень интересная проблема. Мой конвертер на выходе имел 5.2V, но UNO ссылался на значения до 5.0V. Таким образом, напряжение последних двух кнопок было уже за пределами шкалы измерения (у обеих сырые значения были 1023). Другие кнопки можно было перенастроить и они бы заработали заново, но у меня не было возможности использовать кнопки “*” и “#”. На самом деле это не очень большая проблема, но мне есть над чем задуматься в следующий раз.

Фильтр

На других схожих проектах на микрофоне и динамике всегда находились фильтры. Понимая, для чего могут быть полезны фильтры, я не слишком задумывался и просто скопировал всё как есть. Оба фильтра почти одинаковые.

После сборки печатной платы я тут же обнаружил, что с динамиком происходит что-то странное. Он в принципе не работал. После того, как я убрал фильтр — он заработал. Что-то в управлении было спроектировано неверно и вызвало эти трудности. По крайней мере, это было моей ошибкой, и я учёл это.

Как оказалось, дизайн без фильтров работает достаточно хорошо, и для начала можно было не беспокоиться об этом.

Софт

Основная программа осталась той же, но сырые данные для кнопок нужно поменять на каждом устройстве. Главная проблема в коде связана с его основным циклом. Я планировал, что при нажатии кнопки “A” всё будет отменяться — если идёт входящий звонок, или я звоню, или я набрал чей-то номер, всё должно вернуться в начальное состояние. Но в реальности так не происходит и, чтобы отменить или закончить разговор, нужно выключить питание. Небольшая проблема в коде.

Для измерения напряжения на кнопках есть еще один набросок, на этот раз значения отображаются на экране 5110 Nokia.

Файлы

Шаг 9: итоги


Несмотря на то, что мой дизайн содержал несколько ошибок и подводных камней, мне удалось модифицировать всё таким образом, чтобы телефон заработал.