Измерение сопротивления с помощью 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);//ждем для стабилизации портов
}