Омметр с автоматическим выбором диапазона
Примечание. Прежде чем объяснить свою проблему, я хотел бы отметить, что я новичок в электронике. Пожалуйста, обратите на это внимание при предоставлении решений и объяснений. Спасибо.
Мне удалось создать омметр с автоматическим определением диапазона, он, конечно, все еще находится в стадии эксперимента, поскольку я хотел бы узнать некоторые мнения и, возможно, решения некоторых проблем, с которыми я столкнулся. Как это работает:
Он основан на простом делителе напряжения. После экспериментов выяснилось, что падение напряжения на неизвестном резисторе в определенном диапазоне (в данном случае [3,135 В, 0,99 В] с источником напряжения, равным 3,3 В) дает наиболее точные результаты по сравнению с другими значениями.
Этот омметр имеет очень полезную функцию — автоматический диапазон: он автоматически меняет диапазон, когда значения падения напряжения выходят за пределы ранее упомянутого интервала ([3,135 В, 0,99 В]). На сопроводительном изображении показано, как работает устройство.
Если значение Rx слишком мало по сравнению с (R1+R2+R3), Arduino переключает аналоговое показание с A0 на A1, если проблема все еще остается, Arduino снова изменится на A2, что означает, что теперь он измеряет, а не значение. Rx, но (Rx+R1+R2) последовательно, после этого Arduino запрограммирован на соответствующее вычитание.
Это устройство имеет некоторые заметные неудобства, которые необходимо устранить:
Это зависит от экспериментальных значений, поэтому неясно, будет ли это правильно функционировать в различных условиях.
Для точных (пока не точных) измерений значение Rx должно быть больше R1
- Он обеспечивает приемлемые измерения по сравнению с фактическим значением с не слишком большой погрешностью (относительная погрешность менее 1%), точность была получена за счет использования некоторых функций Arduino (таких как опорное напряжение), также у меня есть выбрал источник напряжения 3,3 В вместо 5 В, чтобы уменьшить шум, теперь, если кто-то захочет использовать другой микроконтроллер, отличный от Arduino, можно ли будет получить ту же точность.
Я хотел бы узнать ваше профессиональное мнение об этих неудобствах, и если вы можете найти решения для них, я приложил код для лучшего понимания.
Спасибо
#include <ResponsiveAnalogRead.h>
ResponsiveAnalogRead analogPin0(A0, true);
ResponsiveAnalogRead analogPin1(A1, true);
ResponsiveAnalogRead analogPin2(A2, true);
int raw1= 0,raw2=0,raw3=0;
int Vin= 3.3;
float Vout1= 0,Vout2=0,Vout3=0;
float R1= 10000,R2=100000,R3=1000000;
float Rx= 0;
float buffer= 0;
void setup()
{
analogReference(EXTERNAL);
Serial.begin(9600);
}
void loop()
{
analogPin0.update();
analogPin1.update();
analogPin2.update();
raw1=analogPin0.getValue();
buffer= raw1 * Vin;
Vout1= (buffer)/1024.0;
if(Vout1<=3.135&&Vout1>=0.99) //первыйесли
{
buffer= (Vin/Vout1) -1;
Rx= (R1+R2+R3) * buffer;
Serial.print("Vout1: ");
Serial.println(Vout1);
Serial.print("Rx: ");
Serial.println(Rx);
delay(1000);
}
else //else1 первого if
{
raw2=analogPin1.getValue();
buffer= raw2 * Vin;
Vout2= (buffer)/1024.0;
if(Vout2<=3.135&&Vout2>=0.99) //второй if из первого else
{
buffer= (Vin/Vout2) -1;
Rx= (R2+R3) * buffer;
Rx=Rx-R1;
Serial.print("Vout2: ");
Serial.println(Vout2);
Serial.print("Rx: ");
Serial.println(Rx);
delay(1000);
}
else
{
raw3=analogPin2.getValue();
buffer= raw3 * Vin;
Vout3= (buffer)/1024.0;
if(Vout3<=3.135&&Vout3>=0.99)
{
buffer= (Vin/Vout3) -1;
Rx= R3 * buffer;
Rx=Rx-(R1+R2);
Serial.print("Vout3: ");
Serial.println(Vout3);
Serial.print("Rx: ");
Serial.println(Rx);
delay(1000);
}
}
}
}
============================================ =======
вот результаты, как я уже объяснял ранее, омметр вначале работал довольно хорошо, но когда я его выключил, затем снова измеренное значение изменилось, ошибка стала намного больше, я попробовал изменить калибр, также известный как R1, с 220. до 100, но результаты были те же, ошибка все еще была большой спасибо
@Rekaia Draoui, 👍5
Обсуждение2 ответа
Лучший ответ:
Ответ @EdgarBonet кажется очень хорошим решением для пониженного выходного напряжения вывода при использовании резистора низкого номинала.
Вывод Arduino Uno может без проблем выдавать ток 20 мА, а при необходимости даже до 40 мА. Таким образом, безопасным значением для измерения низких значений резистора является 220 Ом, что может привести к максимальному значению 23 мА.
Аналоговый вход A1 используется как цифровой выход для питания схемы, а также как аналоговый вход для измерения падения напряжения.
Это быстрый тест:
// Используем идею из ответа Эдгара Боне
//
// Допустим, что напряжение цифрового выхода
// понижено на минимальное значение резистора,
// для расчета неизвестного резистора.
//
// С двумя резисторами последовательно.
// A1 – 220 Ом – A0 – 10 Ом – GND
//
// Схема представляет собой делитель напряжения.
// A1 питает делитель напряжения.
// A0 измеряет выход.
#define R1 220
#define N_SAMPLES 10
void setup() {
Serial.begin(9600);
pinMode(A1,OUTPUT);
digitalWrite(A1, HIGH);
}
void loop() {
// Контакт A1 уже настроен как цифровой выход и установлен на ВЫСОКИЙ уровень.
// Использование AnalogRead(A1) предназначено для измерения реального результата
// Напряжение. Из-за тока происходит падение напряжения.
float Vin = averageRead(A1);
Serial.print("Vin=");
Serial.print(Vin);
float Vout = averageRead(A0);
Serial.print(" Vout=");
Serial.print(Vout);
if(Vin > 0.0 && Vout < Vin) {
float Vt = Vout / Vin;
float Rx = (Vt * R1) / (1 - Vt);
Serial.print(" Rx=");
Serial.println(Rx);
}
delay(500);
}
float averageRead(int analogPin) {
int total = 0;
for(int i=0; i<N_SAMPLES; i++) {
total += analogRead(analogPin);
}
return float(total) / N_SAMPLES;
}
Это очень приятно. Это не проблема, если неизвестное сопротивление составляет 10 Ом.
Из-за малых номиналов резисторов я не стал добавлять задержки. При высоких значениях резисторов перед измерением аналоговых значений необходима некоторая задержка.
Следующий шаг — найти лучшее значение, найдя значение, которое находится больше всего в середине, как объяснил Эдгар Боне в своем ответе.
// Автоматический выбор диапазона путем нахождения значения, находящегося ближе всего к середине.
// Использование ответа Эдгара Боне
#define N_SAMPLES 10 // количество образцов для усреднения, максимум 30
// Четыре резистора для питания схемы (по одному).
// A1 имеет резистор сопротивлением 220 Ом, A2 — 3 кОм, A3 — 47 кОм и A4 — 750 кОм
// Другая нога резисторов подключена к A0.
// Неизвестный резистор Rx находится на выводе A0 и GND.
const float R[4] = {220.0, 3300.0, 47000.0, 750000.0};
const int pinR[4] = {A1, A2, A3, A4};
const unsigned long wait[4] = {1, 2, 4, 10}; // задержка, значения угаданы.
const int pinMeasure = A0;
void setup() {
Serial.begin(9600);
Serial.println("Autoranging");
}
void loop() {
float Vin[4]; // Vin — это контакт, который питает схему
float Vout[4]; // Vout — напряжение на неизвестном резисторе
for(int i=0; i<4; i++) {
// Питание схемы с помощью этого резистора
pinMode(pinR[i], OUTPUT);
digitalWrite(pinR[i], HIGH);
// Vin — это контакт, который питает схему.
// Это всегда низкий импеданс, ждать не нужно.
Vin[i] = averageRead(pinR[i]);
// Дополнительная задержка для ожидания стабилизации напряжения,
// перед чтением аналоговых данных.
// Может потребоваться для резисторов с наибольшими значениями
// Возможно, есть кабель к неизвестному резистору
// у которого есть емкость.
delay(wait[i]);
// Первый «analogread()» устанавливает мультиплексор.
// Для цепи с высоким импедансом первый
// Analogread() может быть менее точным.
// Прочитайте его несколько раз и выбросьте.
averageRead(pinMeasure);
// К настоящему моменту все решено.
// Чтение аналогового ввода по-настоящему.
Vout[i] = averageRead(pinMeasure);
pinMode(pinR[i], INPUT); // Делаем этот вывод высоким импедансом
}
// Найдите значение Vout, которое находится больше всего в середине.
// Для Arduino Uno среднее значение АЦП равно 512.
float diff = 2000.0; // устанавливаем значение выше возможного по умолчанию
int best = 0; // индекс лучшего резистора
for(int i=0; i<4; i++) {
float d = fabs(512.0 - Vout[i]); // разница для этого резистора
if(d < diff) { // ближе к середине?
diff = d; // запоминаем новую разницу
best = i; // запоминаем индекс лучшего резистора
}
}
if(Vin[best] <= 0.0) {
Serial.println("Something wrong with the circuit");
}
else if(Vout[best] >= Vin[best]) {
Serial.println("Rx not connected");
}
else {
float Vt = Vout[best] / Vin[best]; // временный предварительный расчет
float Rx = (Vt * R[best]) / (1 - Vt); // вычисляем неизвестный резистор
Serial.print(" Rx=");
Serial.print(Rx);
Serial.print(" ohm (with resistor ");
Serial.print(R[best]);
Serial.print(")");
Serial.println();
}
delay(250);
}
float averageRead(int analogPin) {
int total = 0;
for(int i=0; i<N_SAMPLES; i++) {
total += analogRead(analogPin);
}
total += N_SAMPLES / 2; // см. www.gammon.com.au/adc
return(float(total) / float(N_SAMPLES));
}
Я хотел бы добавить конденсатор от A0 к GND (параллельно неизвестному резистору), чтобы уменьшить шум. Этот конденсатор должен быть 1 нФ или меньше. Задержка в коде достаточно велика, чтобы дождаться стабилизации напряжения до 1 нФ.
Увеличение резисторов в 15 раз — большой шаг. Это делает его менее точным, но у Arduino Uno всего 6 аналоговых входов. Лучше использовать 5 резисторов с увеличением в 6 раз.
4 резистора 15х: 220, 3к3, 47к, 750к
5 резисторов 6х: 220, 1к2, 8к2, 47к, 270к
Есть несколько способов добиться большего:
- Когда два резистора дают выходной сигнал, близкий к среднему, можно усреднить результаты.
- При использовании 5 резисторов можно, например, уменьшить номинал резистора 8 к2. Когда включены все более высокие значения, результирующее значение резистора становится 6к8 вместо 8к2.
- При высоких значениях резисторов выходное напряжение контакта не снижается, и также можно использовать цифровые выходы.
Может потребоваться защитный резистор для A0. Я думаю, что значение 470 Ом или 1 кОм должно подойти.
Большое спасибо @EdgarBonet, я использовал его ответ и добавил среднее значение и задержку.
Обновление, ноябрь 2018 г.
@RekaiaDraoui
При использовании макетной платы могут быть не идеальные контакты. Это может вызвать массу неприятностей.
Используете ли вы такую схему:
Ух ты, это довольно впечатляюще, я вижу, что вы тут же сделали. Одна небольшая проблема, которая меня до сих пор беспокоит, ЭдгарБонет ранее упоминал: «Выводы имеют выходное сопротивление около 25 Ом, которое в конечном итоге включается последовательно с соответствующими опорными резисторами. Вы можете учтите это, корректируя в своем коде значения этих ссылок». Интересно, почему вы не учли эту деталь при написании этого кода? Спасибо., @Rekaia Draoui
Я сделал! Не 25 Ом, но я измеряю фактическое падение напряжения. Эдгар Боне написал: «Вот почему я предлагаю использовать аналоговые контакты вместо цифровых» (чтобы иметь возможность измерить падение напряжения на выводе). Я измеряю напряжение на выводе, питающем цепь, и напряжение на неизвестном резисторе. «Аналоговое чтение» контакта a1 может быть 840 (вместо 1023), а a0 может быть 37. Фактическое напряжение не имеет значения. С двумя резисторами все относительно. Поскольку это делитель напряжения, неизвестный резистор измеряется относительно резистора сопротивлением 220 Ом. Расчет состоит всего из двух строк., @Jot
ОЙ! правда, я пропустил оба ваших ответа, спасибо большое! я улучшу его и опубликую здесь в качестве ответа, как только закончу, если кому-то интересно, еще раз спасибо, @Rekaia Draoui
У меня есть еще один вопрос, я попробовал вашу схему в симуляторе, потому что мой компьютер внезапно решил остановиться, в любом случае, когда я выбрал эталонный резистор высокого значения (скажем, 100 кОм), Vin был равен 1024, поэтому 5 В в отличие от эталонного резистора с низким значением резистор (скажем, 220), где Vin был около 824, не могли бы вы объяснить мне, почему это так?, @Rekaia Draoui
Из-за выходного сопротивления 25 Ом, о котором говорил Эдгар Боне. Atmega328 может выдавать 20мА (даже до 40мА), но при таких больших токах вывод уже не Vcc (5,0в), а ниже. При очень малом токе без проблем можно установить вывод на Vcc (5,0 В). Именно для этого мой эскиз. Чтобы проверить точность, измерьте выходной контакт аналоговым контактом. Поскольку Arduino Uno имеет цифровой и аналоговый контакты, объединенные для всех аналоговых входов, можно использовать этот единственный контакт. Вы выбрали эталонные резисторы? Разложить их можно в 15 раз: 220, 3к3, 47к, 750к., @Jot
у меня есть, это то, что я говорил, и когда я использовал высокие значения, такие как 100k или 1M, вин был очень высоким (1024). Вы говорите, что это так, ток очень низкий?, @Rekaia Draoui
Да. В таблице данных (http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf) на странице 391, рисунок 33-24, вы можете видеть, что выход падает, когда он должен подавать ток. Например, оно падает до 4,5 В при токе 20 мА., @Jot
Добро пожаловать, и приятной работы! Для резисторов с высокими значениями я предлагаю вместо задержки прочитать Vin, затем снять множество показаний Vout, которые вы выбрасываете, а затем показания Vout, которые вы хотите сохранить. Причина в том, что вы хотите, чтобы входной конденсатор АЦП в схеме выборки и хранения заряжался до соответствующего напряжения Vout. AFAIK, этот конденсатор имеет возможность заряжаться только в течение короткого времени в начале каждого преобразования АЦП, а это означает, что первые показания, которые вы снимаете после переключения мультиплексора с Vin, могут быть искажены из-за того, что крышка не полностью установилась., @Edgar Bonet
@EdgarBonet Спасибо. Я хочу сохранить возможность добавить небольшой конденсатор (1 нФ или меньше) к A0 параллельно неизвестному резистору, чтобы уменьшить шум. Я изменил задержку и сделал фиктивное чтение, прежде чем окончательно прочитать аналоговый вход. Я также добавил 0,5 бита к средней функции. 10 образцов для среднего значения — это небольшое количество, возможно, 50 могут сделать его немного лучше, но тогда «общее количество» должно быть большим., @Jot
@Jot надеялся, что вы сможете мне помочь больше, я протестировал вашу программу и схему, вначале она работала очень хорошо, но через некоторое время значения полностью изменились, и ошибка стала намного больше, я надеялся, что вы объясните мне, почему и если это возможно. расскажи мне, как исправить. Я опубликовал 2 изображения, показывающие различные измеренные значения. Я отредактировал эту информацию в своем вопросе, пожалуйста, проверьте ее, спасибо., @Rekaia Draoui
@RekaiaDraoui, я добавил обновление к своему ответу., @Jot
@Jot, я удалил макет, теперь он измеряет 12 Ом вместо 14 Ом, но ошибка все еще большая (ps: Rx = 10 Ом), @Rekaia Draoui
@RekaiaDraoui, Arduino Uno может подавать ток 20 мА (ток короткого замыкания 40 мА), что ограничивает максимальный ток, и поэтому наименьшее сопротивление А1 составляет 220 Ом. С помощью этой схемы невозможно точно измерить сопротивление 10 Ом. Чтобы измерить сопротивление 10 Ом с точностью, возможно, придется добавить операционный усилитель. EdgarBonet написал об ограничениях, но я подумал, что это не обязательно должно быть очень точно для низких или высоких значений резисторов., @Jot
@Jot, я поменял макет, теперь получаю приемлемые показания (10,66/10,75....Ом), но я все еще обеспокоен, потому что сначала я получил хорошие результаты, используя первый макет, а потом вы знаете, что произошло, в любом случае большое спасибо за вашу помощь , мне было интересно, есть ли у вас блог или учетная запись Quora, если вы будете рады вопросам, еще раз спасибо, @Rekaia Draoui
@RekaiaDraoui нет, никакого блога или кворы. Для 10 Ом возможно понадобятся паяные соединения, но это предел, это будет не точно., @Jot
Как вы, наверное, уже знаете, стандартная установка для измерения Сопротивление с помощью Arduino заключается в включении неизвестного резистора последовательно с известный между 5В и GND и измерьте напряжение в точке между ними:
5V
│
R₁
A0 ─┤
R
│
GND
где R — неизвестный резистор, а R1 — известный ссылка. Затем сопротивление рассчитывается как:
const float R1 = ...; // эталонное сопротивление
int reading = analogRead(A0);
float R = (float) reading / (1024 - reading) * R1;
Во-первых, стоит отметить, что опорное напряжение не фигурирует в этот расчет. Можно, конечно, произвести расчет в терминах напряжение, но при этом вы должны заметить, что опорное напряжение может быть упрощенно. Это неудивительно, если вы понимаете, что АЦП Arduino на самом деле не измеряет напряжение: он скорее измеряет напряжение коэффициент: отношение входного напряжения к опорному Напряжение. Это соотношение затем можно легко связать с коэффициентом сопротивления Р/Р1. Все это означает, что вам не следует ожидать, что получить более высокую точность, используя опорное напряжение 3,3 В, а не 5 В. Любая неточность опорного напряжения не имеет значения для измерение сопротивления.
Далее, при измерении физической величины вы почти всегда заинтересована в относительной, а не в абсолютной точности. От приведенное выше уравнение, можно легко показать, что вы получаете лучшее относительное разрешение, когда показания близки к середине АЦП диапазон:
raw reading │ 64 │ 128 │ 256 │ 512 │ 768 │ 896 │ 960
───────────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────
resolution (%) │ 1.67 │ 0.89 │ 0.52 │ 0.39 │ 0.52 │ 0.89 │ 1.67
Это согласуется с вашими наблюдениями и означает, что эталонный резистор в идеале должен иметь номинал одного и того же порядка. как неизвестный резистор.
Что касается автоматического выбора диапазона, я бы посоветовал вам не ставить все свои эталонные резисторы последовательно. С такой настройкой у вас всегда будет одно и то же напряжение на неизвестном резисторе, независимо от того, в каком диапазоне вы выбирать. Чтение другого ввода не помогает. Вы можете узнать, что напряжение между R1 и R2 дает лучшее чтения (ближе к среднему диапазону), и вы получите лучшую точность измерение R+R1. Однако, когда вы вычитаете R1 вы немедленно ухудшите относительную точность результата. В в конце концов, таким образом вы не сможете реально повысить точность.
Я предлагаю соединить эталонные резисторы параллельно вместо последовательно и запитать каждый от аналогового контакта:
A1 A2 A3
│ │ │
R₁ R₂ R₃
A0 ─┼───┴───┴── ...
R
│
GND
Затем вы используете эти аналоговые контакты в цифровом режиме: все они затем в INPUT
режим, за исключением одного, для которого установлено значение OUTPUT
HIGH
. Вы можете попробовать все
их по очереди и выберите тот, который дает результат ближе к среднему диапазону. Или
вы можете реализовать более умный алгоритм, который находит оптимальный без
пробую все.
При этой настройке следует учитывать следующее: контакты имеют
выходное сопротивление около 25 Ом, которое в конечном итоге включается последовательно.
с соответствующими опорными резисторами. Вы можете объяснить это с помощью
корректировка в вашем коде значений этих ссылок. Но тогда это
Выходное сопротивление не очень хорошо известно и может меняться в зависимости от температуры.
Однако это должно быть проблемой только тогда, когда вы находитесь в низких диапазонах. Ты
можно смягчить эту проблему, измерив напряжение на выводе, который
в настоящее время подтягивается и заменяет 1024
в уравнении для R на это
чтение. Вот почему я предлагаю использовать аналоговые контакты вместо цифровых.
Наконец, есть несколько ограничений, о которых вам следует знать. при измерении сопротивлений с помощью АЦП Arduino. В нижнем конце диапазон сопротивления, вы не можете использовать эталонный резистор с очень низким сопротивлением. значение, потому что вы должны быть уверены, что не потянете больше, чем примерно 20 мА от контакта, который поднимается вверх. Тогда ваша самая маленькая ссылка может в конечном итоге сопротивление составит около 220 Ом, и вы потеряете значительную точность при попытке измерить сопротивление ниже 50 Ом. В верхней конце диапазона, вы должны знать, что АЦП предназначен для измерения источники напряжения с выходным сопротивлением не более 10 кОм, в противном случае вы рискуете столкнуться с перекрестными помехами между каналами АЦП. Тогда твой высший эталонное сопротивление, вероятно, должно составлять 10 кОм, и любое измерение выше 50 кОм даст плохую точность. Преодоление этих ограничений позволит требуют дополнительной электроники, например, качественного операционного усилителя для «подготовки» сигнал во что-то, что АЦП может надежно измерить.
Верхний предел в 50 кОм — это безопасно. У меня нет проблем с 1 М. Это требует усреднения нескольких выборок и иногда дополнительной задержки или конденсатора на землю (чтобы напряжение оставалось неизменным, когда АЦП потребляет заряд). Когда, например, требуется только 5% точности для очень низких и очень высоких значений резистора, тогда возможно многое., @Jot
спасибо за ваш ответ, он мне очень помог, и последний вопрос: после прочтения вашего ответа я почувствовал, что мой проект, похоже, сделан не очень хорошо, и это, конечно, из-за отсутствия у меня знаний в этой области на данный момент. Как вы думаете, стоит ли его исправлять или мне следует перейти на другой путь? Неважно, как он работает, главное, чтобы это был омметр с автоматическим выбором диапазона, спасибо @EdgarBonet, @Rekaia Draoui
@RekaiaDraoui У вашей схемы слишком много ограничений. Используйте эту схему с включением резистора по одному. Найдите в схеме, какое значение больше всего в середине, и используйте его для расчета неизвестного резистора., @Jot
Я не совсем понял ваш последний вопрос. Вы можете легко изменить схему или это что-то, что вы паяли?, @Edgar Bonet
@EdgarBonet да, я могу легко изменить схему, @Rekaia Draoui
@Jot, спасибо, что сориентировали меня, именно это я и планирую сделать., @Rekaia Draoui
@EdgarBonet, не могли бы вы рассказать, откуда вы взяли значения для таблицы?, @Rekaia Draoui
@RekaiaDraoui: Я их вычислил. Например, для показания 256, R/R₁ = 256/(1024-256) = 0,33333. На одну ступень АЦП выше, на 257, это R/R₁ = 257/(1024-257) = 0,33507. Разница между этими двумя числами составляет 0,52%., @Edgar Bonet
@EdgarBonet на самом деле это 0,174%, если под разницей вы подразумеваете (0,33507-0,33333)*100, @Rekaia Draoui
@RekaiaDraoui: Нет. Когда разница указывается в процентах, всегда подразумевается, что это _относительная_ разница., @Edgar Bonet
@EdgarBonet теперь ваши результаты имеют гораздо больше смысла. Большое спасибо за вашу помощь., @Rekaia Draoui
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Сделайте переменную
Vin
плавающей. Диапазон ограничен количеством аналоговых входов и резисторами, включенными последовательно. Будет сложно адаптировать схему для измерения резистора сопротивлением 10 Ом. Можно использовать цифровые контакты для питания резисторов или нет и использовать один аналоговый вход., @Jot