Дисковый телефон СССР для музея, помогите новичку

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

Приветствую всех. На Вашем форуме впервые, как и работа с ардуино началась совсем недавно. Задача, оживить дисковый телефон 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);
}
}

 

evgta
Offline
Зарегистрирован: 02.09.2016

Электросхема нужна

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

подскажите ресурс где можно быстро накидать схему

evgta
Offline
Зарегистрирован: 02.09.2016

Да хоть в пейнтом нарисовать, или от руки фото картинки, а вообще говорят Гугл и Яндекс есть.

sadman41
Offline
Зарегистрирован: 19.10.2016

Не делали бы вы 13-й пин входом, сделайте его светодиодным - на нем и так висит СД.

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

Вот нарисовал как смог. Питание на плеере отдельное, плеер работает. В основном глюки происходят либо с трубкой (некоректно определяется 0,1) либо с проигрыванием при поднятой трубки (либо входит в цикл проигрывания, хотя стоит отсылка на сигнал BUSY), либо сбрасывается на первый пункт ТРУБКА ОПУЩЕНА

 

 

 

 

evgta
Offline
Зарегистрирован: 02.09.2016

Кнопка неправильно включена , надо от пина к земле, и подтягивающий резистор к +5. Или включить подтяжку на дуне

sadman41
Offline
Зарегистрирован: 19.10.2016

Для начала: кнопку переделать на "кнопку с подтяжкой", зашунтировать ее керамикой типа 104. Функции пина 13 и 7 поменять местами.

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

Спасибо, с кнопкой сейчас буду работать. А вот какие предположения на счет этого места:

  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 секунд

bwn
Offline
Зарегистрирован: 25.08.2014

В боевом девайсе чистим контактную группу школьной резинкой, про внутреннюю подтяжку забываем, если получится то лучше на контакты подать 12В, там и 60 бывало не проходило (очень сильное окисление со временем). А лучше геркон + магнитик в трубку. ИМХО.

P/S это я к схемотехнике,  к программе - забудьте слово делей.

evgta
Offline
Зарегистрирован: 02.09.2016

Кнопка без подтяжки не имеет определенного состояния, сначала надо ей заняться

sadman41
Offline
Зарегистрирован: 19.10.2016

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

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

 

Описываю человеческими словами логику. Представляем телефон. Подали питание. Раздается звонок с переодичностью в 3-4 сек (мп3 звук старого телефона). Поднимаем трубку, подносим к уху, там проигрывается мп3 с фразами из фильмов. Кладем трубку, телефон опять переходит в первоначальное состояние. ВСЁ. 

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

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

bwn пишет:

В боевом девайсе чистим контактную группу школьной резинкой, про внутреннюю подтяжку забываем, если получится то лучше на контакты подать 12В, там и 60 бывало не проходило (очень сильное окисление со временем). А лучше геркон + магнитик в трубку. ИМХО.

P/S это я к схемотехнике,  к программе - забудьте слово делей.

 

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

sadman41
Offline
Зарегистрирован: 19.10.2016

Не хватает описанных условий. Вот у вас в коде есть всякие проверки занятость плеера. Что должно быть, если звонок идет и сняли трубку, например - нужно ждать окончания звонка или прерывать воспроизведение или что-то еще? Ну и другие.

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

bwn
Offline
Зарегистрирован: 25.08.2014

sharapovdmig пишет:

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

Блог одного уважаемого старожила форума. Остальные тоже почитайте.

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

В коде всего две переменных, концевик трубки 0,1 и занятость плеера 0,1 - следовательно всего 4 состояния системы. В коде описал все 4 состояния. Поправьте если ошибаюсь, или не понял Вас.

bizzon
Offline
Зарегистрирован: 29.03.2016

В код не глядел, но первое, что приходит в голову- старый телефон, контактная группа, дребезг... Не угадал?

sadman41
Offline
Зарегистрирован: 19.10.2016

Вы же пишете, что работает неправильно. Значит код - неправильный. Я, например, не могу из неправильного кода понять как оно должно (по вашей первоначальной задумке) работать.

Давайте вот как. Если хотите помощи - следуйте советам. Если не хотите - тыкайтесь наугад. На форум каждый день притаскивают тонны кода, который "не работает как надо", а как надо - нужно догадаться. Разгадывать такие кроссворды сутками - опухнешь. 

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

Я прекрасно все понимаю, пошел следовать советам. Про тонны кода согласен, не первый день в интернете. Всем спасибо.

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

Вы правы. Для чистоты проверки, пока пробую на обыкновенной тактовой кнопке.

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

И еще вопрос. Если отвлечься от проблемы проекта, кода. В принципе бывают глюки по ардуино? Или это как автомат калашникова - проблема только в человеке.

evgta
Offline
Зарегистрирован: 02.09.2016

В МК глюков быть не могёт, могут быть траблы по питанию, обвязке, коду

b707
Offline
Зарегистрирован: 26.05.2017

sharapovdmig пишет:

Если отвлечься от проблемы проекта, кода. В принципе бывают глюки по ардуино? Или это как автомат калашникова - проблема только в человеке.

У новичков 99.9% "глюков" - человеческий фактор

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sharapovdmig пишет:

В принципе бывают глюки по ардуино? Или это как автомат калашникова - проблема только в человеке.

Сегодня только обсуждалось, см.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А почему не задействован номеронабиратель? По идее - снял трубку, там гудок, набрал номер - чего-то говорит. Или я чего-тг не понял?

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

ЕвгенийП пишет:

А почему не задействован номеронабиратель? По идее - снял трубку, там гудок, набрал номер - чего-то говорит. Или я чего-тг не понял?

 

В идеале, в финальном проекте именно так и должно быть) Но я только начал, и не могу справится хотя бы с первым этапом)

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

Огромное спасибо! Поставил подтягивающий резистор на концевик трубки в 200кОм, работает, ложных срабатываний нет! Проблема осталась на входе который нюхает состояние плеера. Думаю туда тоже нужен резистор.

sadman41
Offline
Зарегистрирован: 19.10.2016

sharapovdmig пишет:

Поставил подтягивающий резистор на концевик трубки в 200кОм, работает, 

МЛТ-2, хотя бы? Раз уж музей советский...

 

evgta
Offline
Зарегистрирован: 02.09.2016

Электричества что-ли мало? На 5-10к лучше подтяжку ставить

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

sadman41 пишет:

sharapovdmig пишет:

Поставил подтягивающий резистор на концевик трубки в 200кОм, работает, 

МЛТ-2, хотя бы? Раз уж музей советский...

 

Музей имени Эльдара Рязанова))) акцент на его творческие заслуги.

sadman41
Offline
Зарегистрирован: 19.10.2016

Кстати, почему бы в телефоне не задействовать штатную балаболку с молоточком? Аутентичней выйдет.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
bwn
Offline
Зарегистрирован: 25.08.2014

sadman41 пишет:

Кстати, почему бы в телефоне не задействовать штатную балаболку с молоточком? Аутентичней выйдет.

Таки там переменка высовольтная нужна, я вот пока в раздумьях (несильных), как?

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну да, вызывное 120в вроде как. Можно поставить моторчик (от мобилы может) который на низкой скорости будет колотить по колокольчикам. Или релюшку убитую дёргать... Там же контакты не нужны - главное чтобы якорь ходил.

bwn
Offline
Зарегистрирован: 25.08.2014

Не, ну это не наш метод, неспортивно)))). Достаточно вольт 60-80, правда токи пока не промерял (этот девайс очереди ждет). Прикидывал - повышайку и мост на смену полярности, как то так.

sharapovdmig
Offline
Зарегистрирован: 14.03.2018

Якорь на колокольчике и от 12в дергается, но нужно все время менять полярность. Я еще только вникаю в тонкости ардуино, но думаю можно сообразить схему и код для этого.

sadman41
Offline
Зарегистрирован: 19.10.2016

Если 12V подходит, то драйвер мотора типа L298N / L239D берите и через него дергайте в разные стороны.

bwn
Offline
Зарегистрирован: 25.08.2014

sharapovdmig пишет:
Якорь на колокольчике и от 12в дергается, но нужно все время менять полярность. Я еще только вникаю в тонкости ардуино, но думаю можно сообразить схему и код для этого.

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sharapovdmig пишет:
Якорь на колокольчике и от 12в дергается, но нужно все время менять полярность. Я еще только вникаю в тонкости ардуино, но думаю можно сообразить схему и код для этого.

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

Ток могу померять, если нужно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bwn пишет:

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

Щелкать нужно с правильной частотой. Её подбирать нужно.

Клапауций 555
Offline
Зарегистрирован: 10.03.2018

sharapovdmig пишет:
Якорь на колокольчике и от 12в дергается, но нужно все время менять полярность. Я еще только вникаю в тонкости ардуино, но думаю можно сообразить схему и код для этого.

не нужно менять полярность: берёшь 30 вольт. запитываешь этими 30 вольтами через резистор 10кОм два параллельных проводника - это у тебя будет модель телефонной линии. подключаешь к концам этой линии свои телефоны. нет телефонов - аудиовыход/вход через конденсатор 0.1 мкф, притянутый к земле резистором 300 Ом.

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

ну, или сам кури телефонные линии - там всё просто как кирпич. технологии более 100 лет.

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

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

Щелкать нужно с правильной частотой. Её подбирать нужно.

Частота 50Гц, другой не было. На низком напряжении слабо тянуло, щелчок не получался, бздымнуло тихонько и все.