Добрый день, надумал собрать тестер для ЭРЭ, на подобии китай-кит наборов, коих до кучи. Но столкнулся с досадной незадачей, никак не могу понять, как найти исследуемое сопротивление. Схема подключения взята от сюда, конечно за исключением схемы питания и кнопки включения, это будет своё. Итого 3 аналоговых порта + 6 цифровых. Подобные проекты на чисто - Arduino коде найти не смог, поэтому решил писать с нуля, плюс под свои нужды, т.к. проект совмещенный ещё с одним. В данном коде используется только два аналоговых порта и цифровых, пытаюсь научится мерить сопротивления, а уже потом все остальное. Спойлер: код измерения сопротивления Код (C++): float Voltag1; // напряжение на А0 float Voltag2; // напряжение на А1 //float Resistvalue; void setup() { Serial.begin(9600); pinMode(A0, INPUT); // вход pinMode(A1, INPUT); // вход pinMode(8, OUTPUT); pinMode(10, OUTPUT); digitalWrite(8, HIGH); //"+5В"; 680 Ом digitalWrite(10, LOW); //"gnd"; 680 Ом } void loop() { Voltag1 = ((float)analogRead(A0) / 1024) * 5; // находим напряжение на первом аналговом порте, без коррекции ±10% Voltag2 = ((float)analogRead(A1) / 1024) * 5; // находим напряжение на первом аналговом порте, без коррекции ±10% Serial.print("A0: "); Serial.print(analogRead(A0)); Serial.print(" = "); Serial.print(Voltag1); // примерное напряжение Serial.print("V"); Serial.print(" -- "); Serial.print("A1: "); Serial.print(analogRead(A1)); Serial.print(" = "); Serial.print(Voltag2); // примерное напряжение Serial.println("V"); delay(500); } Резистор 500 Ом : В итоге я знаю напряжения на обоих аналоговых портах, соответственно знаю падение напряжения на "тестовом" резисторе, но не зная ток, как мне его найти? Можно конечно поставить токовый шунт на <0.1 Ом, усилить падение напряжение на нем и измерить ток всей схемы, потом вычесть примерный ток потребления самого МК, но ведь как то в схеме, которую я привел, реализовано по другому? Что я не учел? Пытался вычислить ток на резисторе 680 Ом, который стоит в цепи A2 на схеме, тем самым как бы узнав ток в цепи, но погрешность дикая... Ещё пытался мапировать (map) значения, т.е. если 0 Ом (тестовый резистор), то напряжение половина питания (2.5 В), а если максимум сопротивления (его ещё не вычислил), то на одном аналоговом порте 5V, а на другом соответственно 0V, и тем самым вычислять промежуточные значения и мапировать (map) их в сопротивление... тоже не помогло. Код (C++): Resistvalue = map(analogRead(A0), 461, 1023, 0, 1000000); Идеи пока закончились, подтолкните пожалуйста, понять сам принцип измерения. Спасибо!
Дошло... Код (C++): Voltag1 = ((float)analogRead(A0) / 1024) * 5.08; // находим напряжение на первом аналоговом порте, без коррекции напряжения питания; ±20% Voltag2 = ((float)analogRead(A1) / 1024) * 5.08; // находим напряжение на первом аналоговом порте, без коррекции напряжения питания; ±20% Resistvalue = (Voltag1 - Voltag2) / (Voltag2 / 507); // 507 - нижний резистор, тем самым находим ток, протекающий через всю цепочку резисторов Осталось только повысить точность. Резистор на 3.3 Ом