Автостоп

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Нарисовалась задачка по восстановлению древнего магнитофона.

Есть контакты, которые замыкаются с различной частотой и периодом. И есть светодиод, который тухнет, если импульсы перестают приходить в течении 2 сек. Набросал скетч, взяв как образец рабочий вариант, но работать он отказывается.  Светодиод не тухнет.

// Автостоп для ардуино
int button = 2; // Датчик автостопа
int led = 12; //Выход на светодиод
unsigned long currentTime; // Переменная текущего времени
unsigned long autostopTime; // Переменная счетчика автостопа
void setup() {
pinMode(led, OUTPUT); //Включаем пин как цифровой выход
digitalWrite(led, HIGH); // Внутренним резистором ардуино задаем высокий уровень сигнала
autostopTime = millis(); // Програмный счетчик времени
}
void loop() {
currentTime = millis(); // Определяем текущее время в цикле
if (button!=0) { autostopTime = currentTime;} // Если номер канала не нулевой, сбрасываем счетчик автостопа
if(currentTime >= (autostopTime + 2000) ){digitalWrite(led, LOW);} // Если предыдущее условие верно, считаем 2 секунды до гащения светодиода
}

Подскажите, где я накосячил!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

if (button!=0)

дак button у тебя не 0, а 2 

и от так 

if(currentTime >= (autostopTime + 2000) 

тока Гайверу писать можно.  тебе - нельзя. 

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

Вы в курсе что loop() исполняется тысячи раз в секунду? - и столько же раз в секунду вы в строчке 12 приравниваете currentTime текущему времени.

ваш таймаут никогда не достигнет двух секунд

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

Дед Симен, точно, строчка 13 совсем бредовая, так ничего работать не будет. Не заметил

"Зона_Кемь" - прочитайте любой справочник, каким оператором читать сигнал с пина

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Спасибо, пошел штудировать первоисточники, и не сочтите за наглость, а каким оператором считать сигнал с пина )))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

пока вот это не выучишь 

http://arduino.ru/Reference

не возвращай себя. 

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

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

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

bizzon пишет:

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

Магнитофон древний (33 года). Основная плата (автостоп, счетчики, кнопки управления ЛПМ) ремонту не подлежит, вот и пытаюсь вместо нее впихнуть ардуину

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

Почему не подлежит? Коты на неё нассали, или об коленку сломали? Если не знаете как, то не значит, что это невозможно. Я за аутентичность.

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Коты нассали, об коленку сломали - какая разница!? Я обратился сюда с пустяковой проблемой, а услышал только что код ни к черту  и вообще, лучше уходи и не возвращайся! Это как если бы Вы пришли к терапевту с кашлем, а он отослал Вас заканчивать медицинский институт.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

не прокатит, контакт может быть как в замкнутом так и в разомкнутом положении, значит надо ставить RC цепь и на ней анализировать напряжение

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

ua6em пишет:

не прокатит, контакт может быть как в замкнутом так и в разомкнутом положении, значит надо ставить RC цепь и на ней анализировать напряжение

То есть ардуино в принципе не может решить эту задачу?

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

Zona_Kem пишет:

То есть ардуино в принципе не может решить эту задачу?

ты чего болтаешь попусту - как читать данные с пина прочитал? Твой код поправить пару строчек - и все заработает

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

b707 пишет:

Zona_Kem пишет:

То есть ардуино в принципе не может решить эту задачу?

ты чего болтаешь попусту - как читать данные с пина прочитал? Твой код поправить пару строчек - и все заработает

Читаю, но пока бестолку ((( Для компьютерщиков может написано понятным языком, но мне он пока не дается.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

у неё, эттаа... цветочно конфетный период.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

Zona_Kem пишет:

То есть ардуино в принципе не может решить эту задачу?

ты чего болтаешь попусту - как читать данные с пина прочитал? Твой код поправить пару строчек - и все заработает

и что? будет работать на замыкание пина с неизвестной и разной частотой?
и откуда такая уверенность что пин при остановке будет замкнут или наоборот разомкнут?
Видимо устройство этого датчика никогда не видел )))

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

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

Zona_Kem пишет:

Читаю, но пока бестолку ((( Для компьютерщиков может написано понятным языком, но мне он пока не дается.

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

Или ты этот код целиком где-то списал?

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

ua6em пишет:

и что? будет работать на замыкание пина с неизвестной и разной частотой?
и откуда такая уверенность что пин при остановке будет замкнут или наоборот разомкнут?
Видимо устройство этого датчика никогда не видел )))

не, не видел - я читаю только то, что пишет ТС. Он написал. что у него код не работает - про его код и отвечаю. А в магнитофонах (как в прочей бытовой технике) я ни черта не понимаю

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Я на Союзе 110 автостоп делал, там под подкассетником инфракрасные даччики, а на усах натяжения - обычные микрики стоят, с них автостоп и берется, при перемотке влево - с правого, при рабочем ходе и перемотке вперед - с левого

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Код нашел на просторах интернета, но чуточку переработал под себя (управляющие операторы не менял). И как правильно ua6em пишет, неизвестно, будет ли он разомкнут или замкнут при остановке приемного узла

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Магнитофон какой?

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Ода 303

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Нет, не довелось такой пащюпать

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Редкий! Второй такой на запчасти не могу найти, вот и приходится изгаляться

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Zona_Kem пишет:

Редкий! Второй такой на запчасти не могу найти, вот и приходится изгаляться

автостоп там на светодиод-фотодиод вроде как, точно не помню, сфотографируй подмотку, может вспомню

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Вот такой. Да, в датчике там (сверху-справа) свето-фотодиод. Планирую их использовать, или вставить ИК датчик готовый.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Щас Дед может что подскажет (точнее завтра)...

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

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

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Zona_Kem пишет:

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

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

А теперь давай абстрагируемся от ардуины и попробуем описать как именно все должно работать.

Вот есть некоторый модуль на вход которого поступают ипульсы с частотой?? Несколько герц? Если импульсов нет в течении 2х секунд на входе должен появится сигнал (+5В). Это понятно. Ну а дальше? Так и должен быть +5 пока опять импульсы не появятся. Я не знаю логику работы лентоп, но сдается мне запустить его снова пока автостоп выдает сигнал может и не получиться.  Значит сигнал должен сняться после какого-то периода? 

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

asam,  Вы все правильно описали

Частота импульсов до сотен герц, при перемотке больше, при воспроизведении меньше, но они различны и частота меняется. Если импульсов нет, по истечении 2-х секунд должен появится импульс СТОП, который выключает лентопротяжный механизм. Далее при нажатии кнопок Воспр, Перемотка автостоп опять начинает отслеживать импульсы.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Zona_Kem пишет:

asam,  Вы все правильно описали

Частота импульсов до сотен герц, при перемотке больше, при воспроизведении меньше, но они различны и частота меняется. Если импульсов нет, по истечении 2-х секунд должен появится импульс СТОП, который выключает лентопротяжный механизм. Далее при нажатии кнопок Воспр, Перемотка автостоп опять начинает отслеживать импульсы.

А как модуль "узнает", что нажата "Воспр, Перемотка" ?

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Как вариант, думаю подойти к этой проблеме с другой стороны: счетчик в ардуино считает импульсы с частотой скажем 10 мс, а сигнал с датчика постоянно их обнуляет. Когда датчик перестает обнулять импульсы, при достижении двухсот импульсов так же поступает сигнал СТОП на ЛПМ. Как считаете, эту задачу так решить не проще?

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

asam пишет:

Zona_Kem пишет:

asam,  Вы все правильно описали

Частота импульсов до сотен герц, при перемотке больше, при воспроизведении меньше, но они различны и частота меняется. Если импульсов нет, по истечении 2-х секунд должен появится импульс СТОП, который выключает лентопротяжный механизм. Далее при нажатии кнопок Воспр, Перемотка автостоп опять начинает отслеживать импульсы.

А как модуль "узнает", что нажата "Воспр, Перемотка" ?

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

Что то все сложнее и сложнее....

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Zona_Kem пишет:
Как считаете, эту задачу так решить не проще?

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

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Вот так я планировал сделать, для кнопок скетч накидал а теперь бьюсь над автостопом...

1 ардуино Нано, 5 кнопок, 4 реле, один ИК датчик.

1-я кнопка включает 1-е реле (Воспроизведение)

2-я кнопка включает 2-е реле (Перемотка вперед)

3-я кнопка включает 3-е реле (Перемотка назад)

4-я кнопка включает 4-е реле (Запись

5-я кнопка отключает любое включенное реле (кнопка СТОП)

При срабатывании любого реле С ИК датчика поступают импульсы переменной длительности. При отсутствии импульсов более 2 – 5 сек. - Любое включенное реле отключается

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Кнопки, как я понял, без фиксации? Тогда желательно иметь светодиоды для индикации, что кнопка "нажата"

И еще не совсем понятно как реле будут управлять лентопротяжкой. С ее точки зрения Воспроизведение и Запись это одно и тоже.

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

Zona_Kem пишет:

Вот так я планировал сделать, для кнопок скетч накидал а теперь бьюсь над автостопом...

1 ардуино Нано, 5 кнопок, 4 реле, один ИК датчик.

1-я кнопка включает 1-е реле (Воспроизведение)

2-я кнопка включает 2-е реле (Перемотка вперед)

3-я кнопка включает 3-е реле (Перемотка назад)

4-я кнопка включает 4-е реле (Запись

5-я кнопка отключает любое включенное реле (кнопка СТОП)

При срабатывании любого реле С ИК датчика поступают импульсы переменной длительности. При отсутствии импульсов более 2 – 5 сек. - Любое включенное реле отключается

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

ИМХО, на Ардуине это все собрать в разы проще, чем на дискретной логике... по крайней мере для такого как я , который только программировать умеет и никакого железа в руказ никогда не держал... :)

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

asam пишет:

Кнопки, как я понял, без фиксации? Тогда желательно иметь светодиоды для индикации, что кнопка "нажата"

И еще не совсем понятно как реле будут управлять лентопротяжкой. С ее точки зрения Воспроизведение и Запись это одно и тоже.

Кнопки тактовые. Реле управляет электромагнитами, там на каждый режим свой электромагнит (очень удобно). Светодиоды индикации уже поставил

nik182
Offline
Зарегистрирован: 04.05.2015

C таким датчиком, да наной... сам бог велел счетчик ленты делать. Да и все режимы на оледе отображать.

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

b707 пишет:

Zona_Kem пишет:

Вот так я планировал сделать, для кнопок скетч накидал а теперь бьюсь над автостопом...

При срабатывании любого реле С ИК датчика поступают импульсы переменной длительности. При отсутствии импульсов более 2 – 5 сек. - Любое включенное реле отключается

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

ИМХО, на Ардуине это все собрать в разы проще, чем на дискретной логике... по крайней мере для такого как я , который только программировать умеет и никакого железа в руказ никогда не держал... :)

Да, с ардуиной проще, именно поэтому я и планировал ее использовать, но знаний в програмировании явно нехватает, именно поэтому и обратился на этот форум!

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

nik182 пишет:

C таким датчиком, да наной... сам бог велел счетчик ленты делать. Да и все режимы на оледе отображать.

Это в будущих планах :-)), если дойду...

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

Zona_Kem пишет:

Да, с ардуиной проще, именно поэтому я и планировал ее использовать, но знаний в програмировании явно нехватает, именно поэтому и обратился на этот форум!

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

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Автостоп можно через Ватчдог сделать. Тогда программировать почти не придется (но придется повозиться с WD):

После нажатия Перемотка, Воспроизведение или Запись разрешаем WD, а по сигналу от датчика сбрасываем его счетчик. Тогда если крутиться перестанет, ардуино просто ресетится.  И все реле отключаются. Ну это надо, естественно в setup прописать.

При нажатии на Стоп WD запрещается

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

asam пишет:

Автостоп можно через Ватчдог сделать. ....

неплохая идейка, но явно не для ТС...

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

С кодом пытаюсь разобраться, пока безуспешно. Ватчдог не вариант, тут с ардуино разобраться не могу!

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

Zona_Kem пишет:

С кодом пытаюсь разобраться, пока безуспешно. Ватчдог не вариант, тут с ардуино разобраться не могу!

блин, ну что там разбираться то? Английский знаешь? Процедура записи логического уровня на пин называется как? - digitalWrite()

А как тогда называется функция чтения пина, догадайся с трех раз...

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Zona_Kem пишет:

С кодом пытаюсь разобраться, пока безуспешно. Ватчдог не вариант, тут с ардуино разобраться не могу!

Ватчдог стоит внутре ардуины. Можно почитать, например, здесь - https://habr.com/ru/post/189744/

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

DigitalRead?

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

Zona_Kem пишет:

DigitalRead?

а теперь поищи в том описании, ссылку на которе тебе дал Дед.

И вообще, там надо прочесть все - там всего-то чуть-чуть

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

Zona_Kem пишет:

Ода 303

Вот здесь есть схема Ода 102 - может поможет

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

Zona_Kem пишет:

услышал только что код ни к черту

Ну, а что Вы ожидали услышать, если он действительно ни к чёрту?

Zona_Kem пишет:

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

Не путайте, Вы пришли не как больной, а как другой терапевт к своему коллеге. Если бы Вы как больной пришли, разговор был бы другим. А так - нормальная реакция.