Вторая жизнь таксофона или Чем я на майских праздниках занимался
Для затравки сначала будет видео результата, а куча скучных подробностей для любопытствующих будет уже ниже.
Входящий звонок
Исходящий звонок
Итак, где-то полгода назад работали мы в одном из жилых домов. И встретился мне там таксофон, брошенный и всеми забытый. Само собой, моё сердце не выдержало и решил я приютить страдальца у себя. Но монтировки под рукой у меня тогда не оказалось: 4 дюбеля из пистолета ПЦ-84, загнанные по самую шляпку в бетонную стену - это вам не шутки.
Монтажный пистолет ПЦ-84 со всем знакомыми дюбелями и строительными патронами (прям снова почувствовал запах приключений и родительских звездюлей)
И вот, ровно полторы недели назад, мне посчастливилось снова оказаться там, на этот раз уже с монтировкой. Не буду утомлять подробностями об отрывании таксофона от стены, о взломе (читай: аккуратном раскурочивании) замка и прочих приключениях этого аппарата. В конце концов аппарат оказался у меня, и первого мая я приступил к работе над его реинкарнацией.
Решил делать всё антуражно, чтобы без всяких цифровых пищалок и прочего. Но без монетоприёмника, просто телефон - не хотелось переусложнять проект. Под рукой у меня оказались arduino uno, китайская arduino nano, китайский же GPRS-шилд на модуле SIM900, утащенный откуда-то звонок-колокольчики от старого телефона и еще немного радиорассыпухи по мелочи. Не то, чтобы это всё было нужно в домашнем хозяйстве, но раз начал заниматься мелким электронным колхозом, становится трудно остановиться.
Перво-наперво начал разбираться с кнопками. Как выяснилось, ничего сложного в них не было, обыкновенная матричная клавиатура, поэтому библиотека Keypad и несколько строк кода позволили легко и просто узнавать какая кнопка нажата.
Далее пришло время разобраться уже с самой логикой работы телефона. В процессе работы я нашел похожий и отлично задокументированный проект, который и использовал в качестве базы. Сначала ничего не заводилось - библиотека iarduino_GSM была написана под другой GPRS-модуль и не хотела работать с моим. И я уже начал переписывать основной код без использования библиотеки, отправляя одни лишь AT-команды, но решил поковыряться в коде библиотеки, тоже снабжённой, кстати говоря, отличными и подробнейшими комментариями. Спустя несколько часов проблема в библиотеке была найдена и исправлена, а также в процессе работы будут переписаны ещё несколько необходимых для работы функций (в основном были поправлены AT-команды, которые отправлялись на GPRS-модуль).
Дело пошло веселее, и вот я уже могу звонить и отвечать на звонки. На скорую руку была переделана трубка (немного изменил порядок проводов) и переделан капсюль микрофона: в нём был встроенный усилитель, который мне был не нужен - обрезал все ненужные дороги и подпаялся напрямую. Вуаля - теперь я могу ещё и разговаривать! А ещё слышать, что мне отвечают!
Следующие два дня прошли в модернизации, дописывании и оптимизации кода. Если в паре слов, то автор оригинального проекта в угоду простоте и читаемости кода не стал углубляться в даташит модуля и его AT-команды. А я стал. Поэтому гудки в трубке у меня самые настоящие - они генерируются самим GPRS-модулем, а не пьезопищалкой, как в оригинале. Также при наборе номера в трубке слышны те самые DTMF-сигналы - спасибо интернетам за функцию, которая позволяет генерировать их правильно. Этот функционал есть и в GPRS-модуле, но срабатывает он очень медленно, поэтому пришлось идти обходным путём. Кроме того, я при наборе номера не стал привязываться к его длине, а сделал отправку вызова, если телефон за 3 секунды не дождался следующей цифры (всегда бесило, когда при наборе номера с бумажки телефону было невтерпёж и он начинал вызов не дождавшись, пока я завершу набирать номер).
Далее встал вопрос с рычагом трубки - в самом таксофоне доступных контактов, которые бы замыкались при нажатии рычага нет. Сначала пытался пристроить куда-нибудь концевой выключатель, но места ему так и не нашёл. На помощь пришла моя работа: взял охранный датчик ИО-102-1 (по сути простой геркон) и вклеил его в корпус на эпоксидку, а на шток, который толкает рычаг трубки, приклеил магнит, который отшелушил из того же датчика.
Пришла очередь звонка - на предыдущей фотографии можно его увидеть. Звонок тоже необходимо было переделать, поскольку я планировал питать всю систему от 12 вольт постоянного тока, а катушка рассчитана 60-120 вольт переменки (именно поэтому, собственно, звонок и звенит). У ребят с работы очень удачно была найдена дохлая железка с живым соленоидом на 12 вольт. Его-то я и поставил. Немного сверления, немного пайки (полевой транзистор, стягивающий резистор, подстроечный резистор для настройки силы втягивания сердечника и диод для защиты транзистора и гашения импульса самоиндукции соленоида) - и вот готов звонок для нашего аппарата.
Горячие сопли здесь только для теста. В дальнейшем они были заменены на металлическую прижимную пластинку на двух винтах. На видео можно её увидеть
Вроде бы всё работает. Дописываю и причёсываю код, правлю последние косяки, пишу комментарии, чтобы через месяц не забыть что это за хрень я тут наваял. Осталось упаковать всё в корпус таксофона. Немного пилю бормашиной, чуть больше сверлю. Перепаял коммутацию в клеммнике и разъёме под себя.
Заливаю боевую прошивку в arduino nano, прикидываю как будут располагаться элементы в корпусе. Стараюсь по максимуму использовать родные несущие и токоведущие элементы и родной крепёж. Паяю коммутацию, по мере возможности аккуратно прокладываю провода (было бы ещё аккуратнее, но не вовремя закончились мелкие пластиковые хомутики), прозваниваю, перепроверяю всё ещё раз. Собираю всё в кучу, подкидываю питание, исправляю пару косяков (куда ж без них), пару часов борюсь со специфическими для сотовой связи наводками в трубке и микрофоне и в итоге получаю относительно аккуратный и рабочий вариант аппарата.
Кот, скотина, потоптался на ноутбуке. Неоднократно Т_Т
Я дико доволен получившимся результатом. Функционал телефона выполняется корректно и полноценнно:
- при входящем вызове звучит "правильный" звонок - тарахтение по колокольчикам;
- ответ на звонок поднятием трубки;
- входящие и исходящие вызовы (в том числе на городские и на экстренные номера даже в старом формате - 01 - 04) работают без нареканий;
- при поднятии трубки звучит гудок;
- при наборе номера в трубке звучит DTMF-сигналы;
- при окончании разговора в трубке звучат короткие гудки (причём все эти сигналы генерируются в соответствии со стандартами);
- разговор можно завершить опусканием трубки на рычаг.
Есть несколько вещей, которые я в дальнейшем хотел бы добавить, либо поправить (например аккуратно вскрыть замок монетоприёмника и воткнуть туда аккумулятор), но сейчас я кому-нибудь с него позвоню и дико довольный собой пойду пить пиво. Выходные ж всё таки)








