Подключение кнопочного телефона к ардуино
Набор телефонного номера на стационарном телефоне ардуиной по сигналу с компа.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Открой учебник и читай. Так прикладные задачи решаются.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
До набора номера, надо хотя бы трубку поднять, или спикерфон включить. И скорее всего у вас наверно IP телефоны стационарные, и цеплять ардуину к кнопкам, будет большой проблемой
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Не надо трубку поднимать. Набрал номер, нажал вызов. При соединении будет работать по громкой связи, если снять трубку то громкая связь отключается, и можно разговаривать по трубке.
Касаемо "большой проблемы" это уже второй вопрос и он решаемый.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
На данный момент из всего озвученного я не понимаю.
На самом деле Вы не понимаете гораздо больше, а именно: выводы Ардуино не могут сами про себе замыкать кнопки, они могут только формировать напряжения низкого либо высокого уровня. Поэтому задача сопряжения Ардуино с кнопками не такая простая, как Вам кажется.
. какими средствами передать сигнал с компа на ардуино (по проводам или по воздуху не суть важно, что проще).
А вот как раз здесь проблем нет - самый простой и надежный способ через USB.
И еще: что эта тема делает в разделе "Проекты"?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
выводы Ардуино не могут сами про себе замыкать кнопки
реле решит эту проблему
А вот как раз здесь проблем нет - самый простой и надежный способ через USB
это я прекрасно понимаю, но глубже этого понимания данных нет. Это я к тому, каким образом приложение должно передать сигнал. Подключив Ардуино через USB, я через приложение должен по средствам COM порта передать команду или еще есть способы? Если речь про СОМ, то в Arduino IDE это уже сделано за меня, мне только нужно правильный порт выбрать и через Serial все передавать. Но я же не могу протокол "tel" ассоциировать с Arduino IDE и каким-то образом всё делать через него. Соответственно самописное приложение должно подключить какую-то библиотеку для работы с COM, и таким образом передавать сигнал. В этом и вопрос: "где про это узнать?, где копать?"
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
матричную клавиатуру можно замыкать через оптопару, соблюдая полярность.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
матричную клавиатуру можно замыкать через оптопару, соблюдая полярность.
Нельзя. Оптопара генерирует потенциал.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Нельзя. Оптопара генерирует потенциал.
а я говорю можно.
я хотел написать топикстартеру. каким образом он хочет удивить коллег, не имея знаний.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
У вас спрашивают где и какие знания нужно получить для решения задачи, а вы концерт устроили. Зачем тогда нужны форумы, если троллей больше, чем серьезных людей? Или из всего надо тик-ток сделать?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
реле решит эту проблему
Тоже вариант, хотя далеко не самый изящный (кстати, Вы в курсе, что между выходом Ардуино и обмоткой реле понадобится еще усилитель тока?)
. Это я к тому, каким образом приложение должно передать сигнал. Подключив Ардуино через USB, я через приложение должен по средствам COM порта передать команду или еще есть способы?
Есть, но этот - самый простой и доступный.
Если речь про СОМ, то в Arduino IDE это уже сделано за меня, мне только нужно правильный порт выбрать и через Serial все передавать. Но я же не могу протокол "tel" ассоциировать с Arduino IDE и каким-то образом всё делать через него. Соответственно самописное приложение должно подключить какую-то библиотеку для работы с COM, и таким образом передавать сигнал. В этом и вопрос: "где про это узнать?, где копать?"
Arduino IDE Вам понадобится только для того, чтобы написать прошивку и залить ее в Ардуино. После этого Arduino IDE вам уже не нужна.
Ваше самописное приложение для ПК должно передать в COM-порт сигнал понятный Ардуино, а Ардуино, приняв этот сигнал, должна его выполнить - проделать с телефонными кнопками некоторые манипуляции.
Никакой особой библиотеки для этого не нужно.
Я так понимаю, что компьютер (браузер, электронная таблица либо что-то другое) настраивается так, что при некотором действии пользователя (например, щелчке мышью по номеру) запускается определенное самописное приложение, которому передается (вероятно, в командной строке) номер, по которому нужно позвонить. Приложение должно иметь возможность настройки номера COM порта, причем эта настройка должна где-то храниться (например, в реестре Windows или в конфигурационном файле самописного приложения).
Приложение, будучи запущенным, получает номер телефона (например, из командной строки) и номер пота (например, из реестра) и отправляет в указанный ком-порт команду, содержащую номер телефона.
Ардуина, получив эту команду от компа, выдает на своих выводах последовательность сигналов для управления реле.
Вероятно, кроме команды набора номера целесообразно реализовать еще хотя бы команду "отбой". Ну либо другие команды, исходя из придуманной заранее стратегии работы с телефоном.
Возможности микроконтроллеров и электроники безграничные и мы хотим расширять наши возможности в том, что можно сделать своими руками. Ребята из "Seeed Studio" выиграли конкурс любителей Ардуино с этим уроком по созданию мобильного телефона на базе микроконтроллера.
Объединяя Arduino и другие модули, мы сделаем мобильный телефон под названием Arduino Phone. Корпус для нашего аппарата будет напечатан с помощью 3D-принтера. Хотя получится телефон не таким хорошим как можно подумать, даже немного неуклюжим, но все равно очень крутым.
Главный минус - мы не сможем установить на Arduino Phone кучу приложений и если вы захотите поиграть в Angry Birds вам нужно будет сделать большие доработки. Давайте перейдем к уроку в котором подробно расскажем о шагах по созданию телефона Arduino, включая аппаратное соединение и реализацию программного обеспечения.
Шаг 1: Комплектующие
В самом начале, как всегда, мы готовим комплектующие. Конечно, большинство этих модулей можно приобрести напрямую, например: Arduino Uno, TFT Touch Shield и GPRS Shield.
Также мы понимаем, что мы хотим поместить наш телефон Arduino в корпус, напечатанный на 3D-принтере. Для того, чтобы адаптировать размер этого корпуса под наше устройство мы должны сделать печатную плату зарядки и разрядки (включая обе части) и плату расширения, которая сможет подключаться к гнезду для наушников GPRS Shield модуля.
Если вы хотите сделать всё самостоятельно, вы можете сразу взять, например LiPo Rider Pro - аккумуляторный зарядник, или что-то в этом роде. Таким образом, вам не нужно будет делать печатную плату самому.
Что нам нужно в итоге:
- Arduino Uno (Ардуино Уно)
- TFT Touch Shield (TFT сенсорный экран)
- GPRS модуль
- RTC модуль (Real-Time Clock, часы реального времени)
- Зарядное устройство для ArduinoPhone (либо купить готовое, например от Lipo Rider)
- Li-po баттареи
- Корпус (можно сделать на 3D-принтере)
Шаг 2: Подключение оборудования
После подготовки деталей нам необходимо собрать вышеуказанные электронные компоненты вместе, чтобы заложить фундаментную функциональную часть Arduino Phone.
- Подключите GPRS модуль к Arduino UNO, затем подключите дисплей к GPRS.
- Подключите модуль RTC к Arduino UNO.
- Вставьте модуль питания и подключите наушник к разъему для наушников на GPRS.
Хорошо, теперь мы займемся программным обеспечением.
Шаг 3: Программирование и тестирование
Этот телефон Arduino содержит следующие основные функции:
Код для телефона Arduino и все нужные библиотеки скачайте с сайта - Github.Непосредственно код для телефона:
Чтобы сделать наше устройство похожим на телефон, мы напечатали корпус на 3D-принтере, как показано выше. Затем аккуратно всё собираем. Это сложный, но интересный процесс. На самом деле, может быть, это будет даже более интересным, чем работа с кодом.
В ближайших уроках мы планируем опубликовать продолжение - обновленную версию телефона Arduino. Если у вас есть какие-либо идеи или вы готовы помочь нам разработать более совершенный интерфейс - пишите нам.
В этом уроке мы дадим вторую жизнь телефонному аппарату с дисковым номеронабирателем, превратив его в мобильный (переносной) ретро-аппарат сотовой связи.
Есть стационарные телефонные аппараты у которых нет провода между трубкой и базой, но есть провод к розетке АТС. В нашем проекте у телефона останется провод между трубкой и базой, но пропадёт провод к розетке, так как связь будет осуществляться по сети GSM.
Описание работы ретро GSM телефона:
Нам понадобится:
-
/ Piranha UNO. . .
- Звук разговора и сигналов (можно выбрать один из вариантов):
-
+ микрофон + зуммер с генератором (в корпусе трубки телефона).
- Гарнитура с микрофоном + Trema зуммер с генератором.
- Колокольный звонок телефона + Trema силовой ключ + повышающий DC-DC преобразователь.
- Звонок из соленоида + колокол + Trema силовой ключ + повышающий DC-DC преобразователь.
- Звонок из сервопривода + колокол.
-
Для реализации проекта нам необходимо установить библиотеку:.
- Библиотеки SoftwareSerial и Servo входят в стандартный набор Arduino IDE.
О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki - Установка библиотек в Arduino IDE.
Схема сборки:
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() разделён на две основные части: совершение исходящих звонков (данная часть выполняется если телефонная трубка снята) и приём входящих вызовов (данная часть выполняется если трубка лежит на телефоне).
Совершение исходящих звонков состоит из следующих действий:
- Обнуление переменных, проверка связи с оператором, вывод сигнала в трубку телефона о готовности к работе.
- Дальнейшие действия происходят в отдельном цикле, выход из которого возможен только если положить трубку на телефон. Так же в этом цикле постоянно сбрасывается голосовое соединение, не давая другим абонентам позвонить нам при снятой трубке.
- Если начинается набор номера, то отключаем сигнал в телефонной трубке, подсчитываем количество импульсов набираемых цифр. После каждой введённой цифры из значение добавляется в строку с номером, которая проверяется на корректность (достижение 11 знаков, или совпадение с коротким номером). При желании Вы можете добавить или удалить некоторые короткие номера из скетча.
- Если номер в строке корректен, то производится его набор, с дальнейшей проверкой состояния связи. Если связь установлена, то выполняется пустой цикл ожидания её разрыва.
- При разрыве голосового соединения выполняется цикл вывода коротких звуковых сигналов в телефонную трубку. Этот цикл выполняется постоянно, пока не положить трубку на телефон.
Приём входящих вызовов состоит из следующих действий:
- Отключение тонального сигнала в телефонной трубке (на случай если он был).
- Дальнейшие действия происходят в отдельном цикле, выход из которого возможен только если снять трубку с телефона при отсутствии входящего вызова.
- Если зафиксирован входящий вызов, то выполняется цикл включающий колокольный звонок, пока входящий вызов не изменит свой статус или не будет поднята трубка.
- Если статус вызова изменился по причине поднятия трубки, то устанавливается голосовое соединение, и выполняется пустой цикл ожидания разрыва этого соединения.
- После разрыва голосового соединения выполняется цикл вывода коротких звуковых сигналов в телефонную трубку. Этот цикл выполняется постоянно, пока не положить трубку на телефон.
В конце скетча определена функция управления колокольным звонком. Данная функция принимает один параметр типа bool ( true - ударить в колокол и освободить его / false - освободить колокол). В зависимости от значения переменной modeBEEL функция работает с колокольными звонками собранными на базе соленоида, родного звонка телефона, сервопривода или электромотора.
Я хотел бы подключить свой Arduino Uno к телефонной линии, чтобы ответить на звонок, записать последовательность сигналов DTMF, сгенерировать в ответ тональный сигнал DTMF и положить трубку.
В телефонной линии используется стандартный разъем RJ11. Когда к линии подключен телефон с тональным набором, он принимает один из двух звонков:
Мы ценим любые предложения.
- Будьте осторожны при подключении напрямую к телефонной линии. На леске может быть большой шип (например, удары молнии). Если вы когда-нибудь открывали, например, модем ADSL, вы увидите, что на нем довольно много компонентов защиты (искровые разрядники, мовс, магнетизм).
- В Великобритании незаконно подключать к телефонной линии все, что не было сертифицировано. Вы также можете проверить свои местные правила.
Вы можете подключить Arduino к телефонной линии с помощью микросхемы MT8870D. Эта ИС может декодировать тоны DTMF. Ниже приведена справочная схема из таблицы данных.
Еще один популярный дизайн, распространенный в Интернете, представлен ниже:
В futurelec доступны готовые модули:
Вы можете использовать Holtek HT9200 IC для кодирования DTMF, который может взаимодействовать с Arduino. Ниже приведена справочная схема из ее таблицы данных.
Вам понадобится аппаратная помощь для обнаружения и генерации DTMF; Я сомневаюсь, что у многих Arduinos (вы не сказали, какой, но, может быть, ARM?) Есть мощность, чтобы запустить БПФ (и предоставить результаты, пока кому-то все равно . ) * tone() может быть недостаточно точным по частоте для обнаружения DTMF вызывающим устройством; вам придется это проверить. Быстрый поиск позволяет найти ряд статей о создании или покупке детекторов и генераторов тонального сигнала.
Обнаружение модели вызывного сигнала немного проще, но вы все равно, вероятно, захотите почувствовать звонок и преобразовать его на уровень аппаратно, вместо того, чтобы отслеживать мгновенное линейное напряжение и пытаться программно различать шум, звонок, шумный звонок и т. Д. степени тишины.
* Но, возможно, этот проект Hackaday может дать вам альтернативные и выполнимые с вычислительной точки зрения идеи.
Давно хотел на базе телефона с дисковым номеронабирателем сделать телефон для работы в сотовых сетях, и чтоб по максимуму сохранить аутентичность. Алгоритм работы мне видится такой:
— при поступлении вызова с лежащей трубкой телефон начинает звонить (полсекунды звенит колокольчик, 2,5 секунды молчит)
— при снятии трубки во время звонка происходит ответ
— если во время разговора положить трубку, то разговор будет закончен
— если поднять трубку без вызова, то в трубке можно будет услышать монотонный сигнал 500 Гц, который исчезнет при начале набора номера
— если в течении 5 секунд не начать набирать номер, то монотонный звук 500 Гц в трубке сменится прерывистым, набор номера в это время будет невозможным
— при наборе номера интервал между вводимыми цифрами не должен превышать более 5 секунд, если после ввода последней цифры прошло более 5 секунд, то происходит автоматический набор введённого номера
— если при снятой трубке поступает вызов, то он сбрасывается, линия занята.
В планах сделать голосовое меню, это чтобы не колхозить дисплей. Ещё желание есть внедрить записную книжку, где каждой цифре присвоить целый абонентскиц номер, а вызывать его при помощи кнопки снизу справа.
За основу взял модуль SIM800L, он хорош тем, что у него есть вывод RING, на котором появляется логический "0" при поступлении вызова. Очень удобно, нет необходимости постоянно парсить данные с порта. Далее мозгом аппарата я взял arduino pro mini, очень удобная и маленькая платка.
Колокольчики пришлось немного переделать, теперь по ним бьёт эксценрик на моторчике.
В общем, за пару вечеров была рождена эта конструкция. Не знаю имеет ли смысл рисовать схему, все было распаяно по месту, а вот скетч размещу чуть позже.
Пара коротких видео
Читайте также: