Вопрос об измерении сопротивления с помощью arduino
Недавно я задавался вопросом о возможности измерения сопротивления потенциометра с помощью Arduino.
У меня есть вопросы:
- Это возможно?
- Если возможно, то какие ограничения есть у Arduino при измерении значения сопротивления?
@Julio Orozco, 👍6
2 ответа
Вопрос не совсем ясен, этот ответ основан на наличии одного известного значения горшка и желании узнать его сопротивление в любой точке, а не пытаться найти неизвестное сопротивление целиком
Вы не можете измерить сопротивление напрямую. Однако вы можете измерить напряжение на потенциометре.
Есть действительно хороший пример, предоставленный Arduino , который можно найти здесь.
Теперь это можно превратить в значение сопротивления, немного отредактировав код
int potPin = A0; // Выбор входного контакта для потенциометра
int potR = 1000; // Это максимальное сопротивление потенциометра в Омах
int val = 0; // Переменная для хранения значения, поступающего с датчика
float voltage; // Это напряжение с движка потенциометра
float resistance; // Это сопротивление потенциометра на движке
void setup() {
Serial.begin(9600);
}
void loop() {
val = analogRead(potPin); // Считываем значение с потенциометра
voltage = val * (5.0 / 1023.0); // Преобразуем значение в напряжение
resistance = (voltage / 5.0) * potR; // Преобразуем напряжение в сопротивление
Serial.print("Voltage = ");
Serial.print(voltage); // Распечатать напряжение
Serial.println("V");
Serial.print("Resistance = ");
Serial.print(resistance); // Распечатать сопротивление
Serial.println("R");
delay(1000); // Добавляем небольшую задержку
}
Что касается вашего второго вопроса, он может сделать сопротивление настолько высоким, насколько вы захотите. Пока вы обновляете значение potR в коде на сопротивление вашего потенциометра (например, 1000000 для потенциометра 1 МОм)
По профессии я инженер-электронщик, так что мой код, вероятно, можно было бы очистить и сделать более эффективным. Это только отправная точка
Если вы знаете закон Ома (а вам следует это сделать) и понимаете, что АЦП измеряет напряжение, вы должны быть в состоянии вычислить это на его основе. Но я вдаюсь в мельчайшие подробности, чтобы убедиться, что вы понимаете.
Закон Ома определяет связь между напряжением (V), током (I) и сопротивлением (R).
R = V/I
Чтобы найти одну неизвестную величину (в вашем случае R), вам нужно знать две другие величины. То есть ток, текущий через резистор, и падение напряжения на резисторе.
У нас нет возможности напрямую измерить ток, но мы можем измерить напряжение с помощью АЦП. Так что если мы можем каким-то образом измерить напряжение и использовать его для расчета тока, то у нас есть два из трех значений, и мы можем вычислить третье. Однако для расчета тока требуется, чтобы мы знали сопротивление — и это то, что мы хотим узнать.
Поэтому нам нужно предоставить известное сопротивление, на котором мы можем измерить напряжение, и таким образом найти ток, протекающий через него. Сначала пара напоминаний об основах:
- Ток течет одинаково через все сопротивления, соединенные последовательно
- Сумма всех напряжений, падающих на резисторах последовательно, равна общему напряжению на всех резисторах.
Так что если мы поместим два резистора последовательно и приложим к ним фиксированное напряжение (5 В в нашем случае), через них будет протекать один ток. При этом на резисторах упадут два напряжения — и эти два напряжения составят в сумме 5 В.
Если у нас есть один известный резистор и один неизвестный резистор, и мы знаем падение напряжения на обоих резисторах, то мы можем вычислить ток, который течет через известный резистор. И этот ток - тот же ток, который течет через неизвестный резистор. И поскольку мы знаем падение напряжения на этом резисторе, мы можем вычислить его сопротивление, используя это напряжение и ток, который мы только что вычислили.
Вот схема, которую я только что описал:
Vin у нас 5 В. Пусть R1, скажем, 10 кОм (достаточно распространенное значение). R2 мы не знаем.
Используя АЦП Arduino, мы измеряем значение 681. Сначала преобразуем его в напряжение:
Vout = 681 / 1024.0 * 5.0
= 3.325V
Итак, мы знаем, что на R2 падает 3,325 В, а поскольку все напряжения должны в сумме составлять 5 В, мы знаем, что на R1 падает (5 - 3,325) 1,675 В.
Таким образом, ток (I=V/R) через R1 должен быть (1,675 / 10 000) 167,5 мкА (0,0001675 А).
Теперь мы можем рассчитать сопротивление R2, поскольку R=V/I, а V равно 3,325, а I равно 0,0001675, поэтому R должно быть 19850 Ом — или почти 20 кОм.
Это длинная версия с точки зрения текущего момента. Однако есть и сокращенный вариант.
Поскольку выходное напряжение представляет собой простое отношение входного напряжения, определяемое отношением между резисторами, мы можем использовать это для создания гораздо более простой формулы.
Из примера выше выходное напряжение составляет две трети входного напряжения, а R2 составляет две трети общего сопротивления (R1+R2). Они идеально совпадают. Поэтому мы можем использовать простой расчет отношения, чтобы получить резистор.
Например, формула соотношения:
Vout = R2 / (R1 + R2) * Vin
(это R2 как доля общего сопротивления, умноженная на входное напряжение)
При перестановке для получения R2 получаем:
R2 = R1 * (1 / ((Vin / Vout) - 1))
Итак, беря напряжение, которое мы измерили выше (3,325), известный резистор (10 000 Ом) и входное напряжение (5 В) и подставляя эти значения в формулу, мы получаем:
R2 = 10,000 * (1 / ((5 / 3.325) - 1))
= 10,000 * (1 / (1.504) - 1)
= 10,000 * (1 / 0.504)
= 10,000 * 1.984
= 19840
Или около 20 кОм. (Примечание: расхождение в результатах обусловлено исключительно ошибками округления. Используйте более высокие значения точности, и вы получите лучшие результаты).
Однако вам необходимо иметь приблизительное представление о порядке величины резистора, который вы пытаетесь найти, чтобы выбрать R1 сопоставимого значения, чтобы напряжение Vout было достаточно большим для точного измерения.
Также вам нужно знать, что вход АЦП имеет довольно (относительно) низкий импеданс (его можно грубо представить как резистор между входом и землей), который измеряется в диапазоне низких мегаом. Это может повлиять на значения, которые вы считываете с АЦП, если ваши резисторы слишком высоки, так как этот импеданс будет параллелен резистору R2, так что вы фактически будете измерять сопротивление как R2, так и входа АЦП параллельно. Для измерения очень высоких сопротивлений вам следует сначала буферизировать АЦП через повторитель напряжения с очень высоким (десятки или сотни тераом) импедансом на входе.
- Отправка значения с одного Arduino на другой
- Считанное значение не меняется при вращении потенциометра в Arduino?
- игнорирование изменений значения потенциометра
- Потенциометр отображает только аналоговое значение напряжения 1023 в proteus
- Замените несколько потенциометров кнопками и одиночными потенциометрами.
- Не удается заставить Wi-Fi модуль esp8266-12 всегда точно считывать входящее напряжение analogRead
- Как масштабировать сигнал от 0 до 5 В до -5 В до +5 В?
- Как использовать SPI на Arduino?