Нужна помощь.

Granit22
Offline
Зарегистрирован: 18.04.2016

Всем привет.

Прикупил на днях Arduino Nano V3.0 AVR ATmega328 и  LCD 16x2. Решил я собрать себе велокомпьютер и столкнулся с следующей проблеммой. Я не умею програмировать. Кое как смог написать "скетч" который моргает диодом на плате когда замыкается гекон на вилке (колесо делает оборот). А теперь проблемма заставить его считать количество оборотов за секунду, далее уже планирую отталкиваться от этого. Так же отталкиваясь от количества оборотов колеса расчитать пройденное расстояние. Длину окружности колеса еще не считал, займусь этим вечером.

Буду очень благодарен за оказанную вами помощь!

James
Offline
Зарегистрирован: 26.02.2016

создай переменную "кол-во замыканий геркона"

например n

и после каждого щелчка, вместе с морганием диода  n++

вот тебе и кол-во, проверяй значение n каждую секунду и вычитай оттуда старое значиние n, - вот тебе значение в сек.
радиус колеса знаешь? S=n*2pi*r- расстояние

 

 

Granit22
Offline
Зарегистрирован: 18.04.2016

Дело в том что я в этом совсем деревянный. Был бы вам очень благодарен хотя-бы за примеры переменной. 

vde69
Offline
Зарегистрирован: 10.01.2016

взялся за гуж, не говрои, что не дюж....

Ардуина - это проще чем в институте лаба по программированию...

а вообще тебе геркон не поможет (на больших оборотах не будет успевать срабатывать...), смотри в сторону датчиков холла или светодиодного...

Granit22
Offline
Зарегистрирован: 18.04.2016

Так дело в том, что в своё время я крепко спал на информатике. 

Ну думаю что больших оборотов на 26 дюймовом колесе я достигнуть не смогу. максимум 50-60км\ч. И то за фурой иль автобусом в воздушном мешке. 

Logik
Offline
Зарегистрирован: 05.08.2014

vde69 пишет:

а вообще тебе геркон не поможет (на больших оборотах не будет успевать срабатывать...), смотри в сторону датчиков холла или светодиодного...

Геркон и  десяток герц успеет. А  с длинной окружности считать не морочся. Доделаеш счетчик, проедеш 1 км, посмотриш сколько импульсов на километр и из этого расчитаеш коэффициент и впишеш  в код. 

Granit22
Offline
Зарегистрирован: 18.04.2016

Ну вот в том то и проблемма, не знаю я как доделать счетчик. Даже представить себе не могу как написать этот код. Может кто привести примеры кода, вырванные из готового скетча? 

Logik
Offline
Зарегистрирован: 05.08.2014

Granit22 пишет:

Ну вот в том то и проблемма, не знаю я как доделать счетчик. Даже представить себе не могу как написать этот код. Может кто привести примеры кода, вырванные из готового скетча? 

Конечно 

с++;

;)

Granit22
Offline
Зарегистрирован: 18.04.2016

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

#define reed A0 //Номер пина к которому подключен геркон
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); 

int gek; //показания гекона
int ledPin = 13;
int tik; // непосредственно 1 или 0 с гекона
unsigned long odd; //количество оборотов колеса

void setup(){
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print("test");

}

void loop(){
gek = digitalRead(reed); // считываем знаение A0
Serial.println(gek); // выводим в Serial Monitor

if (gek > 500)
tik = 1;

if (gek < 500)
tik = 0;

delay (1);
if (gek > 0)
odd++;

if (tik > 0)
digitalWrite(ledPin, HIGH);
if (tik < 1) 
digitalWrite(ledPin, LOW);

lcd.setCursor(0, 1);
lcd.print("ODD # ");
lcd.setCursor(8, 1);
lcd.print(odd);
}

Сильно за код не пинайте. Это первенец :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ищите, как бороться с дребезгом контактов. Это - по поводу сопроводительного текста.

Теперь посмотрел код и обнаружил, что, во-первых, gek всегда либо 0, либо 1, сравнивать ее с 500 бессмысленно.

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

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

James
Offline
Зарегистрирован: 26.02.2016

andriano пишет:

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

да ладно, серьезно? кол-во оборотов никак не связано с расстоянием или скоростью?
или Вы о том, что он не связал их со временем?

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Granit22, зачем читать аналоговое состояние геркона, читай цифровое (замкнут/разомкнут) digitalRead(pin);

Granit22 пишет:
Проблемма лишь в том, что что гекон замкнут весьма не малое время, и за это время ардуина насчитывает уж очень большие цифры.
Для решения этой проблемы храни два состояния геркона - текущее и предыдущее. Если они равны, значит счетчик не надо увеличивать. Вот, примерно так:

current = digitalRead(GERKON_PIN);
if (current && !last) counter++;
last=current;

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

James пишет:

andriano пишет:

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

да ладно, серьезно? кол-во оборотов никак не связано с расстоянием или скоростью?
или Вы о том, что он не связал их со временем?

Нет, я о том, что количество циклов измерения никак не связано с количеством оборотов.

Granit22
Offline
Зарегистрирован: 18.04.2016

Огромное спасибо! Получилось считать обороты! 

Теперь вопрос, как из количества оборотов, получить обороты в минуту? 

Granit22
Offline
Зарегистрирован: 18.04.2016

Andy пишет:

Granit22, зачем читать аналоговое состояние геркона, читай цифровое (замкнут/разомкнут) digitalRead(pin);

Granit22 пишет:
Проблемма лишь в том, что что гекон замкнут весьма не малое время, и за это время ардуина насчитывает уж очень большие цифры.
Для решения этой проблемы храни два состояния геркона - текущее и предыдущее. Если они равны, значит счетчик не надо увеличивать. Вот, примерно так:

current = digitalRead(GERKON_PIN);
if (current && !last) counter++;
last=current;

 

 

Как теперь подсчитать обороты в минуту? 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

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

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

Granit22 пишет:

Огромное спасибо! Получилось считать обороты! 

Теперь вопрос, как из количества оборотов, получить обороты в минуту? 

Это шутка? Вы не знаете как из времени оборота посчитать количество оборотов в минуту? Или не знаете как определить время оброта, что простительно для начинающего. :)

Granit22
Offline
Зарегистрирован: 18.04.2016

Andy пишет:

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

 

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

Подскажите ли как это все реализовать? Какими кодами? 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Аналогично, запоминать время при изменении состояния геркона:

boolean last=false, current=false;
unsigned long time, current_time, last_time=0;

current = digitalRead(GERKON_PIN);
current_time = millis();
if (current && !last)
{
  counter++;
  time = current_time - last_time;
  last_time = current_time;
}
last = current;

 

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

Andy пишет:

Аналогично, запоминать время при изменении состояния геркона:

boolean last=false, current=false;
unsigned long time, current_time, last_time=0;

current = digitalRead(GERKON_PIN);
current_time = millis();
if (current && !last)
{
  counter++;
  time = current_time - last_time;
  last_time = current_time;
}
last = current;

Зачем измерять время и количество состояний геркона при замкнутых контактах? :) Тут сравнение с предыдущим состоянием не подходит. 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

faeton пишет:
Зачем измерять время и количество состояний геркона при замкнутых контактах? :) Тут сравнение с предыдущим состоянием не подходит.
Прочитал несколько раз, так и не понял что ты хотел сказать...

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

Andy пишет:

faeton пишет:
Зачем измерять время и количество состояний геркона при замкнутых контактах? :) Тут сравнение с предыдущим состоянием не подходит.
Прочитал несколько раз, так и не понял что ты хотел сказать...

Простите, невнимательно посмотрел строку 06. Почудилось там "==". :)