Дисковый телефон СССР для музея, помогите новичку
- Войдите на сайт для отправки комментариев
Ср, 14/03/2018 - 11:54
Приветствую всех. На Вашем форуме впервые, как и работа с ардуино началась совсем недавно. Задача, оживить дисковый телефон 70х годов с использованием мп3 плеера (DFPlayer_Mini_Mp3). Суть обращения на форум - неадекватная работа ардуино (да, да, сейчас начнется тыканье носом в код))). Тоесть каждый раз результат ардуинка выдает разный, то не реагирует на кнопки, то считает что кнопка нажата когда ее совсем исключаешь из схемы, то слушает то не слушает сигнал BUSY с плеера. Вобщем на руках 2 ардуинки разных производителей (китай), глючат обе но по разному. Вот код:
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
void setup()
{
Serial.begin (9600);
mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module
mp3_set_volume (15); // устанавливаем громкость от 0 до 30
mp3_set_EQ (0); // устанавливаем эквалайзер от 0 до 5
pinMode (13, INPUT); //настройка 13-го пина на вход (0 - плеер занят, 1 - плеер в ожидании)
pinMode (7, OUTPUT); //настройка 7-го пина на выход (светодиод, 0 - трубка поднята, 1 - трубка лежит)
pinMode (4, INPUT); //настройка 3-го пина на вход (концевик трубки, 1 - трубка лежит, 0 - трубка поднята)
}
void loop() //циклическая функция, работает бесконечно после функции настройки
{ //открывающая скобка функции
if(digitalRead(4) == HIGH && digitalRead(13) == HIGH) //если трубка лежит, и если плеер в режиме ожидания, то...
{
digitalWrite(7, HIGH); //зажигаем диод
delay(100);
mp3_play (3); //запускаем файл 3, имитация звонка
delay(4000);
}
if(digitalRead(4) == LOW && digitalRead(13) == HIGH) //если трубка поднята, и если плеер свободен то...
{
digitalWrite(7, LOW); //гасим диод
delay(100);
mp3_play (1); //запускаем файл 1, имитация разговора
delay(1000);
}
if(digitalRead(4) == LOW && digitalRead(13) == LOW) //если трубка поднята, и если плеер занят то...
{
delay(500);
}
if(digitalRead(4) == HIGH && digitalRead(13) == LOW) //если трубка опущена, и если плеер занят то...
{
mp3_stop (); //остановка плеера
delay(2000);
}
}
Электросхема нужна
подскажите ресурс где можно быстро накидать схему
Да хоть в пейнтом нарисовать, или от руки фото картинки, а вообще говорят Гугл и Яндекс есть.
Не делали бы вы 13-й пин входом, сделайте его светодиодным - на нем и так висит СД.
Вот нарисовал как смог. Питание на плеере отдельное, плеер работает. В основном глюки происходят либо с трубкой (некоректно определяется 0,1) либо с проигрыванием при поднятой трубки (либо входит в цикл проигрывания, хотя стоит отсылка на сигнал BUSY), либо сбрасывается на первый пункт ТРУБКА ОПУЩЕНА
Кнопка неправильно включена , надо от пина к земле, и подтягивающий резистор к +5. Или включить подтяжку на дуне
Для начала: кнопку переделать на "кнопку с подтяжкой", зашунтировать ее керамикой типа 104. Функции пина 13 и 7 поменять местами.
Спасибо, с кнопкой сейчас буду работать. А вот какие предположения на счет этого места:
if(digitalRead(4) == LOW && digitalRead(12) == HIGH) //если трубка поднята, и если плеер свободен то... { digitalWrite(7, LOW); //гасим диод delay(100); mp3_play (1); //запускаем файл 1, имитация разговора delay(1000); } if(digitalRead(4) == LOW && digitalRead(12) == LOW) //если трубка поднята, и если плеер занят то... { delay(500); }В подавляющем большинстве, ардуинка проигрывает файл не до конца, а посылает команду плей_1, через разные промежутки времени (тоесть я так понимаю плохо воспринимается сигнал BUSY с 13 пина (кстати поменял уже на 12 пин результат тот же). Закономерность не прослеживается по delay, это можеит быть и 1 и 2 и 5 секунд
В боевом девайсе чистим контактную группу школьной резинкой, про внутреннюю подтяжку забываем, если получится то лучше на контакты подать 12В, там и 60 бывало не проходило (очень сильное окисление со временем). А лучше геркон + магнитик в трубку. ИМХО.
P/S это я к схемотехнике, к программе - забудьте слово делей.
Кнопка без подтяжки не имеет определенного состояния, сначала надо ей заняться
Опишите человеческими словами логику, т.е. составьте алгоритм: какое событие за чем должно следовать и при каких условиях. По коду, особенно неправильному, можно давать только неправильные рекомендации.
Описываю человеческими словами логику. Представляем телефон. Подали питание. Раздается звонок с переодичностью в 3-4 сек (мп3 звук старого телефона). Поднимаем трубку, подносим к уху, там проигрывается мп3 с фразами из фильмов. Кладем трубку, телефон опять переходит в первоначальное состояние. ВСЁ.
В идеале хотелось бы еще и дисковый механизм набора номера прикрутить к проигрыванию определенных мп3. Знаю что это реально, но пока хочу разобратся хотя бы с простой задачей.
В боевом девайсе чистим контактную группу школьной резинкой, про внутреннюю подтяжку забываем, если получится то лучше на контакты подать 12В, там и 60 бывало не проходило (очень сильное окисление со временем). А лучше геркон + магнитик в трубку. ИМХО.
P/S это я к схемотехнике, к программе - забудьте слово делей.
Про делей, много уже прочитал, что это полностью парализует контроллер, и вообще не камильфо. НО показалось что под мою задачу и делей сойдет. Буду признателен если подтолкнете на мысли, как в моем коде обойтись без делей, так как очень долго думал как же реализовать режим ожидания контроллера в момент когда трубка поднята и идет проигрывание
Не хватает описанных условий. Вот у вас в коде есть всякие проверки занятость плеера. Что должно быть, если звонок идет и сняли трубку, например - нужно ждать окончания звонка или прерывать воспроизведение или что-то еще? Ну и другие.
Как только вы себе вот эту взаимосвязь в голове или на бумажке нарисуете, поймете что должно происходить в спорных моментах - сразу будет понятно в какой последовательности писать код.
Про делей, много уже прочитал, что это полностью парализует контроллер, и вообще не камильфо. НО показалось что под мою задачу и делей сойдет. Буду признателен если подтолкнете на мысли, как в моем коде обойтись без делей, так как очень долго думал как же реализовать режим ожидания контроллера в момент когда трубка поднята и идет проигрывание
Блог одного уважаемого старожила форума. Остальные тоже почитайте.
В коде всего две переменных, концевик трубки 0,1 и занятость плеера 0,1 - следовательно всего 4 состояния системы. В коде описал все 4 состояния. Поправьте если ошибаюсь, или не понял Вас.
В код не глядел, но первое, что приходит в голову- старый телефон, контактная группа, дребезг... Не угадал?
Вы же пишете, что работает неправильно. Значит код - неправильный. Я, например, не могу из неправильного кода понять как оно должно (по вашей первоначальной задумке) работать.
Давайте вот как. Если хотите помощи - следуйте советам. Если не хотите - тыкайтесь наугад. На форум каждый день притаскивают тонны кода, который "не работает как надо", а как надо - нужно догадаться. Разгадывать такие кроссворды сутками - опухнешь.
Я прекрасно все понимаю, пошел следовать советам. Про тонны кода согласен, не первый день в интернете. Всем спасибо.
Вы правы. Для чистоты проверки, пока пробую на обыкновенной тактовой кнопке.
И еще вопрос. Если отвлечься от проблемы проекта, кода. В принципе бывают глюки по ардуино? Или это как автомат калашникова - проблема только в человеке.
В МК глюков быть не могёт, могут быть траблы по питанию, обвязке, коду
Если отвлечься от проблемы проекта, кода. В принципе бывают глюки по ардуино? Или это как автомат калашникова - проблема только в человеке.
У новичков 99.9% "глюков" - человеческий фактор
В принципе бывают глюки по ардуино? Или это как автомат калашникова - проблема только в человеке.
Сегодня только обсуждалось, см.
А почему не задействован номеронабиратель? По идее - снял трубку, там гудок, набрал номер - чего-то говорит. Или я чего-тг не понял?
А почему не задействован номеронабиратель? По идее - снял трубку, там гудок, набрал номер - чего-то говорит. Или я чего-тг не понял?
В идеале, в финальном проекте именно так и должно быть) Но я только начал, и не могу справится хотя бы с первым этапом)
Огромное спасибо! Поставил подтягивающий резистор на концевик трубки в 200кОм, работает, ложных срабатываний нет! Проблема осталась на входе который нюхает состояние плеера. Думаю туда тоже нужен резистор.
Поставил подтягивающий резистор на концевик трубки в 200кОм, работает,
МЛТ-2, хотя бы? Раз уж музей советский...
Электричества что-ли мало? На 5-10к лучше подтяжку ставить
Поставил подтягивающий резистор на концевик трубки в 200кОм, работает,
МЛТ-2, хотя бы? Раз уж музей советский...
Музей имени Эльдара Рязанова))) акцент на его творческие заслуги.
Кстати, почему бы в телефоне не задействовать штатную балаболку с молоточком? Аутентичней выйдет.
http://www.instructables.com/id/ARDUINO-AND-a-DIALER-DISK-INTERFACING/
http://arduino-tv.ru/catalog/id/diskovyiy-nomeronabiratel
Кстати, почему бы в телефоне не задействовать штатную балаболку с молоточком? Аутентичней выйдет.
Таки там переменка высовольтная нужна, я вот пока в раздумьях (несильных), как?
Ну да, вызывное 120в вроде как. Можно поставить моторчик (от мобилы может) который на низкой скорости будет колотить по колокольчикам. Или релюшку убитую дёргать... Там же контакты не нужны - главное чтобы якорь ходил.
Не, ну это не наш метод, неспортивно)))). Достаточно вольт 60-80, правда токи пока не промерял (этот девайс очереди ждет). Прикидывал - повышайку и мост на смену полярности, как то так.
Якорь на колокольчике и от 12в дергается, но нужно все время менять полярность. Я еще только вникаю в тонкости ардуино, но думаю можно сообразить схему и код для этого.
Если 12V подходит, то драйвер мотора типа L298N / L239D берите и через него дергайте в разные стороны.
Попробуйте тумблером на смену полярности подключить и пощелкать. Но что то у меня в памяти, что там типа щелканья-жжужания получается, вызова звонкого не выходит. На дембельский аккорд внутреннюю связь в части из говна и палок мастырил, воспоминания остались.
Любой драйвер DC мторора на достаточный ток, умеющий крутить мотор в разные стороны - вот и вся Ваша проблема. Перекидывайте полярность с нужной частотой и всего делов.
Ток могу померять, если нужно.
Попробуйте тумблером на смену полярности подключить и пощелкать. Но что то у меня в памяти, что там типа щелканья-жжужания получается, вызова звонкого не выходит.
Щелкать нужно с правильной частотой. Её подбирать нужно.
не нужно менять полярность: берёшь 30 вольт. запитываешь этими 30 вольтами через резистор 10кОм два параллельных проводника - это у тебя будет модель телефонной линии. подключаешь к концам этой линии свои телефоны. нет телефонов - аудиовыход/вход через конденсатор 0.1 мкф, притянутый к земле резистором 300 Ом.
ага. нужно снять набор номера дуино - подключаешь оптопару или реле оптимизированное входом на 30 вольт, а выходом - 5 вольт.
ну, или сам кури телефонные линии - там всё просто как кирпич. технологии более 100 лет.
*да. переменка - замыкаешь линию с нужной частотой. вот тебе и переменка. звонок в аппарате через конденсатор подключен и ему пофиг, выше нуля синусоида или честная переменка.
Щелкать нужно с правильной частотой. Её подбирать нужно.
Частота 50Гц, другой не было. На низком напряжении слабо тянуло, щелчок не получался, бздымнуло тихонько и все.