Ви не увійшли.
Приветствую, Господа. Мои безмятежные представления об осовоении Ардуины впервые наткнулись на камень.
Ближе к сути — Делаю элементарный тахометр. Классическая схема "Магнит—Датчик Холла".
Использую простейшее прерывание от того-же AlexGyver (а сложных и не бывает):
unsigned long lastflash;
int RPM;
void setup() {
Serial.begin(9600); //открыть порт
attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
}
void sens() {
RPM=60/((float)(micros()-lastflash)/1000000); //расчет
lastflash=micros(); //запомнить время последнего оборота
}
void loop() {
if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды
RPM=0; //считаем что RPM 0
}
//вывод в порт
Serial.println(RPM);
delay(50); //задержка для стабильности
}
И всё бы хорошо, но у него всё работает и очень красиво и точно показывает RPM, а у меня и еще нескольких комментаторов на Ютубе — заоблачные значения, среди которых преобладают 28896 и 19264.
Мое подключение:
Господа, одна надежда на Вас. Пните меня в нужную сторону, ибо у меня уже психоз. Гугл уже содрогается от моих запросов по "ардуино", "прерываниям" и "датчикам холла". И ведь даже у буржуев такой проблемы я не замечал.
Большое спасибо за уделенное время.
Неактивний
Именно. Если в функцию прерывания запихнуть счетчик, то он будет увеличиваться на 5-15 и больше за одну протяжку магнита. С виду — именно дребезг. Но как у готового цифрового модуля может быть дребезг? (Чувствительность настраивал по многу раз, да и у других-то всё работает именно в таком простом варианте) Ладно, когда я подключаю геркон со стягивающим резистором (тут мех контакт, и логично делать задержку на устаканивание), но и с модулем ДХ и с Герконом — значения одни и те-же 28896 и 19264 . Бывают и отрицательные иногда.
Причем не зависимо от того, проношу ли я магнит единожды, или он на быстро вращающемся маховике.
Остання редакція ENiAC90 (2017-06-16 18:27:18)
Неактивний
Датчик использую вот такой https://arduino-kit.ru/catalog/id/modul … lineynyiy_
В видео у Алекса https://www.youtube.com/watch?v=x2fLvS8Ms9w (ну красиво-жи!) используется такой
Оба имеют цифровые выходы. Оба подключаются к NANO. Причем я пробовал на двух МК, приобретенных в разных магазинах.
Я сразу подумал, что датчик шалит, но при подключении геркона (обычного, велосипедного) по этой схеме:
происходит то-же самое. Нереальное количество прерываний за один проход.
Я пробовал фильтровать так:
void sens() {
RPM = round(60/((float)(millis()-lastflash)/1000)); //Сразу считаю RPM
if (RPM != 0) { //Если RPM текущее не равно нулю (при неправильных срабатываниях)
if ((RPM - RPM_0) > 1000) //Если нет "космической" разницы с предыдущим значением
{
RPM = RPM_1; //Уравниваем
}
tm1637.display(((RPM+RPM_0+RPM_1)/3)); //Вывожу среднее из трех последних
if (switch1 == 1) {
RPM_1 = RPM; switch1 = 0;
} else {
RPM_0 = RPM; switch1 = 1;
}
}
lastflash = millis();
}
Кое как сие решение работает, но даже не смотря на этот кривой костыль, всё равно проскакивали залётные значения.
Как понять, что датчик глючный? И в нём ли дело, если с герконом работает так-же?... (сейчас попробую pinMode(2, INPUT_PULLUP);)
А что если ардуинки гумн.... да не, не может быть!
Неактивний
https://geektimes.ru/post/286410/
https://drive.google.com/file/d/0B8MrxcpVmXk7c3h5NjRtdVc0c00/view?usp=sharing
https://drive.google.com/file/d/0B8MrxcpVmXk7dG51WUN6cGRTcVU/view?usp=sharing
Остання редакція renoshnik (2017-06-17 20:27:25)
Неактивний
unsigned long lastflash;
int RPM;
void setup() {
Serial.begin(9600); //открыть порт
attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
}
void sens() {
RPM=(1000000.0/(float)(micros()-lastflash))*60; //расчет
lastflash=micros(); //запомнить время последнего оборота
}
void loop() {
if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды
RPM=0; //считаем что RPM 0
}
//вывод в порт
Serial.println(RPM);
delay(50); //задержка для стабильности
}
Остання редакція renoshnik (2017-06-17 20:43:37)
Неактивний
Господа! Огромнейшее спасибо всем, кто откликнулся! Вячеслав Азаров оказался прав. Датчик — отвратительнейшего качества! Я не мог в это поверить, ведь они же продаются сотнями на Алиэкспресс и в наших магазинах (кстати его я купил в этом магазине http://arduino-ua.com/prod1203-modyl-da … olla-a3144). И в интернете нет АБСОЛЮТНО никаких негативных отзывов о их работе, посему я думал, что сам дурак! Сегодня абсолютно случайнейшим образом наткнулся на это видео:
Я подофигел (хотя бывалых, уверен, таким не испугаешь). Осциллограф сорвал покровы и обнажил качество работы сего модуля. Теперь отчетливо понятно, почему у меня заоблачные значения получались в прерываниях. Но зачем здесь компаратор и подстроечный резистор?.. Как говорится, с этим вопросом я жил ровно 2 минуты.
Очень надесюсь, что эта тема поможет новичкам не биться лбом о стену, и быть готовым к таким некачественным датчикам.
Единственное, чем я могу объяснить сходство нереального количества срабатываний геркона и сего ДХ в промежуточном положении магнита — геркон имеет дребезг, и я попробую его завязать через RC цепь с триггером Шмитта (который при подключении питания от ардуины на 14-ю и 7-ю ногу почему-то даёт космический шум в мои колонки).
Следующим видео у автора было:
Если бы я купил сразу такой датчик, я бы не получил такой печальный, но нужный опыт.
(Можно-ли попросить модератора изменить название темы на "Остерегайтесь бракованных китайских датчиков. Сумасшедший Датчик Холла." Чтобы не вводить людей в заблуждения, в которое попал я)?
Еще раз огромное спасибо вам!
Неактивний
Почти согласен. Но другие модули, тоже имея компаратор и похожую развязку, подключаются "одним проводом" без бубна и шаманств, и выдают стабильный цифровой сигнал, с которым может работать даже ребёнок. Да и зачем делать такую "сложную схему" и продавать ее за 2 бакса, если нуждно еще что-то аппаратно мудрить?))
А если человек захочет аналоговый сигнал — то он возьмет сам ДХ без обвязки на плате, и наваяет необходимые ему фильтры (хотя с аналоговым сигналом у этого датчика проблем не заметил, значения меняются от 515 до 200, стабильно и без скачков/дребезга, и этого достаточно для определения магнитного поля, но не для прерываний).
Неактивний
Неактивний