Измерение уровня

delta_canon
Offline
Зарегистрирован: 12.02.2015

Друзья, прошу Вашей помощи! Есть схема, на выходе нужно с помощью ардуино измерять уровень, и на заданном уровне ардуино должна исполнить команду для замыкания реле, коммутирующего этот же выход на регистратор переговоров. Есть макет и написан скетч, но есть проблема в погрешности измерений уровня (частые ложные срабатывания или наоборот отсутствие срабатывания).

https://cloud.mail.ru/public/CaZY/5h2dEDko1

https://cloud.mail.ru/public/K5cu/5dj2GTV1n

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

Со сторонних ресурсов лень смотреть. Прочитайте правила форума в разделе песочница. 

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

А где схема и скетч? Почему сюда не выложены?

delta_canon
Offline
Зарегистрирован: 12.02.2015

по прикрепленным ссылкам

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

Это диагноз.

delta_canon
Offline
Зарегистрирован: 12.02.2015
static const uint8_t PIN_LED = A0;		// Вх измерения U
static const uint8_t PIN_RELAY = 5;		// Реле
float Step = 5.0F / 1024;				// Вычисляем шаг Uопорн / на градацию
uint32_t disableTime = 0;				// Время выключения реле.

void setup()
{
	Serial.begin(9600); // Задаем скорость работы монитор порта
	
	pinMode(PIN_LED, INPUT);
	pinMode(PIN_RELAY, OUTPUT);
	digitalWrite(PIN_RELAY, HIGH); // для безопасности
	
	return;
}

void loop()
{
	uint32_t time = millis();
	
	uint8_t analogValue = analogRead(PIN_LED);	// Задаем переменную analogValue для считывания показаний
	float voltageValue = analogValue * Step;	// Переводим в вольты (показание * шаг)
	Serial.println(voltageValue);				// Выводим значение в вольтах в порт
	
if(voltageValue > 0.9)
{
digitalWrite(PIN_RELAY, LOW);
disableTime = time + 10000;
}
if(disableTime > time && voltageValue > 0.4)
{
disableTime = time + 10000;
}
if(disableTime < time)
{
digitalWrite(PIN_RELAY, HIGH);
}

return;
}

 

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

объясните зачем во флоатах делаете? для начала привести всё в uint16_t и смотреть насколько моросит, может и проблема уйдёт

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

delta_canon пишет:

по прикрепленным ссылкам

Сюда давайте и схему и скетч

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

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

delta_canon пишет:

по прикрепленным ссылкам

Сюда давайте и схему и скетч

может не надо? смотрите, я предупреждал, на всякий случай обезболивающего коньячку примите )))

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

строчка 21 - ошибка в размерности переменной.

Ответьте-ка какой диапазон выходных данных analogRead()?

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

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

delta_canon
Offline
Зарегистрирован: 12.02.2015

диапазон от 0,5 В до 2 В 

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

delta_canon пишет:

диапазон от 0,5 В до 2 В 

я не про это.

Вы в курсе, какой ЧИСЛОВОЙ диапазон выдает функция analogRead() ?

Ну там - от нуля до 100, от нуля до тыщи.. ? Документацию читали?