среда, 13 декабря 2017 г.

Измерение сопротивления с помощью Arduino используя 1 аналоговый вход

Измерение сопротивления с помощью Arduino используя 1 аналоговый вход и несколько цифровых выходов

void setup(){
    Serial.begin(9600);
}

void loop(){
    sens(97.7, 1);//Значение сопротивление резистора (R1) в омах(тут резистор 97,7 Ом) и цифровой порт(D1) к которому он подключен

    sens(974, 2);//Значение сопротивление резистора (R2) в омах(тут резистор 974 Ом) и цифровой порт(D2) к которому он подключен
    sens(9860, 3);//Значение сопротивление резистора (R3) в омах и цифровой порт(D3) к которому он подключен
    sens(97800, 4);
//Значение сопротивление резистора (R4) в омах и цифровой порт(D4) к которому он подключен
}

void sens(float resist, int port){
    pinMode(port, OUTPUT);//Устанавливаем порт выходным
    digitalWrite(port, HIGH);//Устанавливаем на этот порт высокое значение(будем предполагать что у нас на выходе 5 вольт)


    delay(1);//ждем немного чтобы в контроллере все стабилизировалось
    

    float sum = 0;//начинаем определять среднее арифметическое пяти(tim) измерений аналогового сигнала на порту A1
    int tim = 5;//число измерений для среднего арифметического
    for (byte i = 0; i < tim; i++){
        delay(1);
        sum += analogRead(A1);
    }

    float sensorValue = sum / float(tim);//вычисляем  среднее арифметическое

    float R = resist / ((5.0 / ((5.0 / 1023.0) * sensorValue)) - 1);//вычисляем по формуле делителя напряжения сопротивление образца
    Serial.print(R);//выводим значение сопротивления в порт

    if (sensorValue>512){        sensorValue = sensorValue -(2*(sensorValue-512));
    }// определение точности измерения, т.к. делитель напряжения имеет бОльшую точность в середине интервала это когда сопротивление образца очень близко к сопротивлению резистора

    Serial.print(";");//разделитель    Serial.println(sensorValue);//выводим точность    digitalWrite(port, LOW);//гасим порт на ноль(на всякий случай)    pinMode(port, INPUT);//отключаем этот порт чтобы не мешал следующим измерениям    delay(1);//ждем для стабилизации портов
}