2016-10-01 2 views
0

Я работаю над проектом, в котором мой Arduino Uno читает почвенную влагу, а затем передает эти данные в моей Raspberry Pi 3.Преобразование аналогового Reading влажности почвы в процентах

Я использую HL-69 почвы детектор влаги, который выдает аналоговый выход. У меня возникла проблема в том, что датчик дает 1023 при отсутствии контакта, 300 при погружении в воду.

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

Это код, который я использую.

int soilPin = A0; 
int tempPin = A1; 
int min = 300; //drowned in water 
int max = 1000; //dry soil 
void setup(){ 
    Serial.flush(); 
    pinMode(soilPin,INPUT); 
    pinMode(tempPin,INPUT); 
    Serial.begin(9600); 
} 
void loop(){ 
    int sensorValue = analogRead(rainPin); 
    int tempData = analogRead(tempPin); 
    float percentage = (sensorValue - max)/(min - max); 
    double temperature = (double) tempData * (5/10.24); 
    Serial.print(","); 
    Serial.print(temperature); 
    Serial.print(","); 
    Serial.println(percentage); 
    delay(1000); 
} 

Температура на выходе нормально (например 22,53), но я не могу показаться, чтобы получить право уровня воды.

E.g Уровень аналогового выхода - 300 (Почва тонет в воде); Дисплей: 100%

Я думаю, что моя процентная формула выключена, я просто основывал ее на другом потоке SO.

Заранее спасибо.

ответ

3

При предположении, ваш датчик ценности являются между 300 и 1000, то процент формула:

float percentage = (float)((sensorValue - min) * 100)/(max - min) 

Если они не затем до расчета процентного Вам необходимо map them в указанном выше диапазоне (при условии, что значения датчика считывания идут от 0 до 1023), используя код:

sensorValue = map(sensorValue, 0, 1023, min, max); 
+0

Большое вам спасибо за ваш быстрый ответ. Я пробовал первое решение, и он выводит отрицательное число. Мне удалось исправить это, используя функцию map(). 'float percent = map (sensorValue, max, min, 0, 100);' Благодарим вас за ответ, в любом случае. –

Смежные вопросы