Измерение сопротивлений от 10 до 30 Ом

slon0177
Offline
Зарегистрирован: 16.04.2015

Здравствуйте. Я новичок, прошу сильно не ругать :). Требуется измерять сопротивление изделий в диапазоне от 10 до 30 Ом.Обычный делитель тут не подойдёт, так как два полуплеча по 30 Ом дадут практически КЗ. Помогите пожалуйста с аппаратной частью. Программная трудностей не вызывает. Спасибо всем откликнувшимся!)

Datak
Offline
Зарегистрирован: 09.10.2014

Тестером можно. Не подойдёт? :)

slon0177
Offline
Зарегистрирован: 16.04.2015

Тут весь вопрос в том, чтобы уйти от тестера. Набросал небольшой скетч с записью на SD card в формате excel. Хочу исключить человеческий фактор.

slon0177
Offline
Зарегистрирован: 16.04.2015

Уважаемые форумчане! Гуру, прошу Вас, выручайте! Реально ли ардуиной измерять диапазон сопротивлений от 10 до 30 Ом?
Спасибо

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

slon0177, конечно реально. Вот пример http://habrahabr.ru/post/252321/.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

http://arduino.ru/forum/proekty/tester-radiodetalei-na-arduino

Низкие Омы можно конечно и так измерять. Сделав делитель напряжения.
490 Ом / 10 Ом= 100 милливольт на вход АЦП
Но погрешность измерения будет просто ужасной.
Вот если сделать источник тока допустим на 100-300 миллиамперов, падение будет 1-3 Вольтa на 10-ти Омах,
что вполне реально из свободно продающихся  у моих друзей из поднебесной StepDown с регулировкой тока ограничения,
то можно и доли Омов мерять.

 

slon0177
Offline
Зарегистрирован: 16.04.2015

Dimax, Trembo, Datak...спасибо. Сегодня снова ломал голову... Кроме делителя ничего в голову не приходит... Собрал, два резюка по 50 Ом. Вместо одного розетка для измерений. Тестером откалибровал пределы... Управляется сигналами с цифровых пинов.... Индикация на светодиодах для наглядности... Как соберу все цивильно, постараюсь выложить... Ещё раз спасибо, уважаемые!

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Я не зря вам про источник тока рассказывал.
http://www.ebay.com/itm/New-LM2596-LED-Driver-DC-DC-Step-down-Adjustable...
Выставьте на выходе Вольт этак 5.....  Подав на вход что попалось под руку.
Замкните выход - выставьте ток какой надо- чтобы падение напряжения на резисторе привести к удобному виду.
Можете ещё порог светодиода настроить.

 

Datak
Offline
Зарегистрирован: 09.10.2014

В целом, как ни крути, сопротивление определяют одним и тем же способом: пропускают через резистор какой-то ток, и измеряют напряжение на нём.

Для нормальной точности, измеряемое напряжение должно быть не слишком маленьким - значительно больше разрешающей способности АЦП.

При низких сопротивлениях придётся или значительно увеличить ток, или просто дополнительно усилить напряжение с резистора.

Увеличение тока, кстати, не так уж безобидно. Не забывайте хотя бы примерно прикинуть значение мощности, рассеиваемой резистором.

Я бы, конечно, лучше слепил какой-нибудь усилитель на ОУ. Но готовой схемы у меня нет, а придумать - мозгов не хватит. :) Так что - гугл в помощь. Ищите что-нибудь вроде "преобразователь сопротивления в напряжение на ОУ" или "ПСН на ОУ".

Удачи!

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Datak, однако же немецкие разработчики транзистортестера добились очень высоких показателей измерений чисто программным путём, без ОУ и прецизионных источников тока. Сам года 2 назад собирал этот транзистортестер, у него действительно разрешение 0,01 ома. И реально может измерить сопротивление  от 0,01 ома. Измеряет очень точно. "Но как, Холмс?"  :)

Datak
Offline
Зарегистрирован: 09.10.2014

Да, вот именно, как? :)

dimax, даже не спорю. Я же вопрос детально не изучал - просто написал, что думал.

-----

Не, а на самом деле, что там измеряется-то? Схему посмотрел, ничего не понял. Описание по-немецки не осилю, чем там прошивка занимается - могу только догадываться. Просто статистическое усреднение нескольких измерений, что ли?

fagot
Offline
Зарегистрирован: 28.04.2015

Datak пишет:

В целом, как ни крути, сопротивление определяют одним и тем же способом: пропускают через резистор какой-то ток, и измеряют напряжение на нём.

При низких сопротивлениях придётся или значительно увеличить ток, или просто дополнительно усилить напряжение с резистора.

 

Совершенно верно. Другого не придумаеш. Это физика , математикЭ-кибернЭтикЭ. 

Вот быстренько накидал.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Присутствует один маленький нюанс - вместе с входным сигналом усиливается напряжение смещения нуля да ещё и  с его температурным дрейфом. ОУ надо получше выбирать.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Datak, я тоже не большой специалист в этом вопросе. Полное описание там есть на русском, только там не описан принцип измерения. В крутых приборах всё измеряется на переменном токе. Но судя по отсутствию в схеме ёмкостей и индуктивностей этот способ не используется. Стало быть всё ж таки остаются традиционные и импульсные методики.  Видимо эти резисторы на входе подкоммутируются, создают образцовый ток.  Поскольку резисторы точные, то при калибровке вычисляется точный ток  при КЗ на входе.  Потом подставляя измеряемый резистор сравнивается ток с образцовым и из разницы вычисляется сопртивление. И АЦП наверняка не без помощи хорошего оверсэмплинга всё измеряет. Конечно всё равно берёт сомнение как весь этот относительный примитивизм может вытянуть разрешение 0,01 ома.. )

fagot
Offline
Зарегистрирован: 28.04.2015

trembo пишет:

Присутствует один маленький нюанс - вместе с входным сигналом усиливается напряжение смещения нуля да ещё и  с его температурным дрейфом. ОУ надо получше выбирать.

я писал: Вот быстренько накидал.

ОУ вообще не предложен никакой, даже выводов нет.

std
Offline
Зарегистрирован: 05.01.2012

fagot пишет:
ОУ вообще не предложен никакой, даже выводов нет.

Q: Подскажите транзистор?

A: КТ315

Q: Подскажите ОУ?

A: LM358

slon0177
Offline
Зарегистрирован: 16.04.2015

Всем Доброго Здоровья!)

Как обещал - выкладываю что сотворил... Заранее прошу прощения у многоуважаемых ГУРУ за примитивностькода.

принцип работы устройства: требуется измерять электропроводимость перчаток.

Существует стенд, на который одевается пара перчаток. далее пара перчаток продвигается на карусели под измерительный модуль, опускается верхняя пластина с контактами на пальцы перчаток и ладонь, и происходит измерение посредством делителя напряжения калиброванного на 27 Ом. В цепи измерений предусмотрены два образцовых сопротивления на 27 и 33 Ом, которые тестируют систему при каждом измерении. Индикация - на светодиодах. если обе перчатки в норме - горит зеленый.  Кроме того, через ком порт можно наблюдать в реальном времени какая из точек измерений проблемная...

И еще. Есть фото испытаний, данные в порту и самой платы... НО НЕ МОГУ ЗАГРУЗИТЬ...ТУПЛЮ! ПОМОГИТЕ))

#define FIRST_PIN 9 //первый палец

#define SECOND_PIN 10//второй палец

#define THIRD_PIN 11//третий палец

#define FOURTH_PIN 12//четвертый палец

#define LAST_PIN 13//пятый палец

#define TEST_27 7//тестовый резистор номиналом менее 30 Ом

#define TEST_33 5 // тестовый резистор номиналом более 30 Ом 

#define BUTTON_PIN 3// кнопка включения устройства

#define RED_PIN  2   // красный светодиод подключается к пину 8

#define GREEN_PIN  4 // зеленый светодиод подключается к пину 7
#define KEY_R 6// для правой перчатки 
#define KEY_L 8//для левой перчатки

float  v; //для измерений 

int s = 1;// счетчик прошедших испытание

int t = 1;//счетчик бракованных

boolean buttonWasUp = true; // была ли кнопка нажата?

 

void setup()

{

  //digitalWrite(GREEN_PIN, HIGH);

  Serial.begin(57600);

  pinMode(RED_PIN, OUTPUT);  // настраиваем RED_PIN как выход

  pinMode(GREEN_PIN, OUTPUT);  // настраиваем GREEN_PIN как выход

  pinMode(BUTTON_PIN, INPUT_PULLUP);

  for(int pin= FIRST_PIN; pin<= LAST_PIN; pin++ )

  pinMode(pin, OUTPUT);

  pinMode(TEST_27, OUTPUT);

  pinMode(TEST_33, OUTPUT);
  
  pinMode(KEY_R, OUTPUT);
  
  pinMode(KEY_L, OUTPUT);

  Serial.print("GLOVE:\tTEST33\tTEST27\tFIRST\tSECOND\tTHIRD\tFOURTH\tLAST\tTEST RESULTS");

}

void loop()
{ 

 boolean buttonIsUp = digitalRead(BUTTON_PIN);

 if(buttonWasUp && !buttonIsUp)

   {
     delay(10);
     buttonIsUp = digitalRead(BUTTON_PIN);

     if(!buttonIsUp)
       {
        
        digitalWrite(TEST_27, HIGH);// контрольное измерение переменного калиброванного сопротивления ДОПУСТИМОГО значения
        delay(500); // пауза для стабилизации показаний
        float v27 = analogRead(A0)*5.05/1024.0;//измеряем напряжение на тестовом резисторе 27 Ом
        Serial.println("\x20");//  печатаем пробел
        Serial.print("RIGHT");
        Serial.print("\t");    
        Serial.print(v27, 2);// печатаем напряжение ТЕСТ 27
        digitalWrite(TEST_27, LOW);// отключаем контрольное сопротивление 27 Ом
        digitalWrite(TEST_33, HIGH);// контрольное измерение переменного калиброванного сопротивления ЗАПРЕДЕЛЬНОГО значения
        delay(500); // пауза для стабилизации показаний
        float v33 = analogRead(A0)*5.05/1024.0;
        Serial.print("\t");
        Serial.print(v33, 2);// печатаем напряжение ТЕСТ 33     
        digitalWrite(TEST_33, LOW);// отключаем контрольное сопротивление 33 Ом         
          
           // начинаем измерительный цикл. Для каждого из ключей           
              digitalWrite(KEY_R, HIGH); //начинаем измерения на правой перчатке
              delay(50);
              digitalWrite(FIRST_PIN, HIGH);// первый палец             
              float v1 = analogRead(A0)*5.05/1024.0;// измеряем напряжение для первого пальца
              delay(100);
              Serial.print("\t");
              Serial.print(v1, 2);// печатаем измеренное напряжение на первом пальце
              digitalWrite(FIRST_PIN, LOW);// отключаем ключ            
              delay(100);
              digitalWrite(SECOND_PIN, HIGH);// второй палец
              float v2 = analogRead(A0)*5.05/1024.0;// измеряем напряжение для второго пальца             
              delay(100);// 0,5 сек
              Serial.print("\t");
              Serial.print(v2, 2);// печатаем измеренное напряжение на втором пальце
              digitalWrite(SECOND_PIN, LOW);// отключаем ключ            
              delay(100);
              digitalWrite(THIRD_PIN, HIGH);// третий палец
              float v3 = analogRead(A0)*5.05/1024.0;// измеряем напряжение для третьего пальца              
              delay(100);// 0,5 сек
              Serial.print("\t");
              Serial.print(v3, 2);// печатаем измеренное напряжение на третьем пальце
              digitalWrite(THIRD_PIN, LOW);// отключаем ключ              
              delay(100);
              digitalWrite(FOURTH_PIN, HIGH);// четвертый палец
              float v4 = analogRead(A0)*5.05/1024.0;// измеряем напряжение для четвертого пальца            
              delay(100);// 0,5 сек
              Serial.print("\t");
              Serial.print(v4, 2);// печатаем измеренное напряжение на четвертом пальце
              digitalWrite(FOURTH_PIN, LOW);// отключаем ключ              
              delay(100);
              digitalWrite(LAST_PIN, HIGH);// пятый палец
              float v5 = analogRead(A0)*5.05/1024.0;// измеряем напряжение для пятого пальца       
              delay(100);// 0,5 сек
              Serial.print("\t");
              Serial.print(v5, 2);// печатаем измеренное напряжение на пятом пальце
              digitalWrite(LAST_PIN, LOW);// отключаем ключ
              digitalWrite(KEY_R, LOW); // измерения на правой перчатке окончены
              delay(50);
              
              if((v1 < 5.0 && v1 > 2.0)||(v2 < 5.0 && v2 > 2.0)||(v3 < 5.0 && v3 > 2.0)||(v4 < 5.0 && v4 > 2.0)||(v5 < 5.0 && v5 > 2.0) )
                                                   
                   {                // если  одно из измерений больше 30  Ом и все выводы подключены....

                     Serial.print("\t");
                     Serial.println (" TROUBLE RIGHT! "); // перчатка не прошла испытания!
                     Serial.print("\t\t\t\t\t");
                     Serial.print(t);
                     t++;                    
                   }
                  
                  if(v1 < 1.9 && v2 < 1.9 && v3 < 1.9 && v4 < 1.9 && v5 < 1.9 ) 
                                            //если сопротивление по всем выводам ниже 30 Ом...
                   {
                    Serial.print("\t");
                    Serial.println("SUCCESSFULLY RIGHT"); // тест пройден
                  
                   /* Serial.print("\t\t");
                    Serial.print(s);
                    s++; 
                    digitalWrite(GREEN_PIN, HIGH); // мигаем зеленым светом с частотой 0,1 сек.
                    delay(3500);// 0,5 сек
                    digitalWrite(GREEN_PIN, LOW);*/             
                   }   
                 
              if(v1 >= 5.04  && v2 >= 5.04 && v3 >= 5.04 && v4 >= 5.04 && v5 >= 5.04 )// если все выводы отключены ...            

                    {
                      Serial.print("\t");
                      Serial.println (" NO CONNECTED RIGHT ");  // ничего не подключено
                      digitalWrite(RED_PIN, HIGH);
                      delay(5000); 
                      digitalWrite(RED_PIN, LOW);
                    }
              
               if(v1 >= 5.04 && v2 < 1.9 && v3 < 1.9 && v4 < 1.9 && v5 < 1.9)//если первый палец не подключен, а остальные прошли испытание...
                    {
                      Serial.print("\t");
                      Serial.println("BAD CONNECT AT RIGHT FIRST!");//на первом пальце нет контакта
                    } 
                  if(v1 < 1.9 && v2 >= 5.04 && v3 < 1.9 && v4 < 1.9 && v5 < 1.9)//второй палец не подключен...
                     {
                       Serial.print("\t");
                       Serial.println("BAD CONNECT AT RIGHT SECOND!");//на втором пальце нет контакта
                     }
                  if(v1 < 1.9 && v2 < 1.9 && v3 >= 5.04 && v4 < 1.9 && v5 < 1.9) // третий палец не подключен...  
                    {
                      Serial.print("\t");
                      Serial.println("BAD CONNECT AT RIGHT THIRD!");// на третьем пальце нет контакта
                    } 
                  if(v1 < 1.9 && v2 < 1.9 && v3 < 1.9 && v4 >=5.04 && v5 < 1.9) // четвертый палец не подключен...
                    {
                      Serial.print("\t");
                      Serial.println("BAD CONNECT AT RIGHT FOURTH!"); // на четвертом пальце нет контакта
                    }
                    if(v1 < 1.9 && v2 < 1.9 && v3 < 1.9 && v4 < 1.9 && v5 >= 5.04) // пятый палец не подключен...
                      {
                       Serial.print("\t");
                       Serial.println("BAD CONNECT AT RIGHT FIFTH!"); // на четвертом пальце нет контакта
                      }
                Serial.print("LEFT");  
                Serial.print("\t");
                Serial.print(v27, 2);// печатаем напряжение ТЕСТ 27
                Serial.print("\t");
                Serial.print(v33, 2);// печатаем напряжение ТЕСТ 33
              digitalWrite(KEY_L, HIGH); //начинаем измерения на левой перчатке 
              digitalWrite(FIRST_PIN, HIGH);// первый палец             
              float v6 = analogRead(A0)*5.05/1024.0;// измеряем напряжение для первого пальца
              delay(100);
              Serial.print("\t");
              Serial.print(v6, 2);// печатаем измеренное напряжение на первом пальце
              digitalWrite(FIRST_PIN, LOW);// отключаем ключ            
              delay(100);
              digitalWrite(SECOND_PIN, HIGH);// второй палец
              float v7 = analogRead(A0)*5.05/1024.0;// измеряем напряжение для второго пальца             
              delay(100);// 0,5 сек
              Serial.print("\t");
              Serial.print(v7, 2);// печатаем измеренное напряжение на втором пальце
              digitalWrite(SECOND_PIN, LOW);// отключаем ключ            
              delay(100);
              digitalWrite(THIRD_PIN, HIGH);// третий палец
              float v8 = analogRead(A0)*5.05/1024.0;// измеряем напряжение для третьего пальца              
              delay(100);// 0,5 сек
              Serial.print("\t");
              Serial.print(v8, 2);// печатаем измеренное напряжение на третьем пальце
              digitalWrite(THIRD_PIN, LOW);// отключаем ключ              
              delay(100);
              digitalWrite(FOURTH_PIN, HIGH);// четвертый палец
              float v9 = analogRead(A0)*5.05/1024.0;// измеряем напряжение для четвертого пальца            
              delay(100);// 0,5 сек
              Serial.print("\t");
              Serial.print(v9, 2);// печатаем измеренное напряжение на четвертом пальце
              digitalWrite(FOURTH_PIN, LOW);// отключаем ключ              
              delay(100);
              digitalWrite(LAST_PIN, HIGH);// пятый палец
              float v10 = analogRead(A0)*5.05/1024.0;// измеряем напряжение для пятого пальца       
              delay(100);// 0,5 сек
              Serial.print("\t");
              Serial.print(v10, 2);// печатаем измеренное напряжение на пятом пальце
              digitalWrite(LAST_PIN, LOW);// отключаем ключ
              digitalWrite(KEY_L, LOW); // измерения на левой перчатке окончены             

             
                if((v6 < 5.0 && v6 > 2.0)||(v7 < 5.0 && v7 > 2.0)||(v8 < 5.0 && v8 > 2.0)||(v9 < 5.0 && v9 > 2.0)||(v10 < 5.0 && v10 > 2.0) )
                                                   
                   {                // если  одно из измерений больше 30  Ом и все выводы подключены....

                     Serial.print("\t");
                     Serial.print (" TROUBLE LEFT! "); // перчатка не прошла испытания!
                     Serial.print("\t\t\t\t\t");
                     Serial.print(t);
                     t++;
                     digitalWrite(RED_PIN, HIGH);
                     delay(500);
                     digitalWrite(RED_PIN, LOW);
                     delay(500);
                     digitalWrite(RED_PIN, HIGH);
                     delay(500);
                     digitalWrite(RED_PIN, LOW);
                     delay(500);
                     digitalWrite(RED_PIN, HIGH);
                     delay(500);
                     digitalWrite(RED_PIN, LOW);
                     delay(500);
                   }                                                  
              
               if(v6 >= 5.04  && v7 >= 5.04 && v8 >= 5.04 && v9 >= 5.04 && v10 >= 5.04 )// если все выводы отключены ...            

                    {
                      Serial.print("\t");
                      Serial.print (" NO CONNECTED LEFT! ");  // ничего не подключено
                      digitalWrite(RED_PIN, HIGH);
                      delay(5000); 
                      digitalWrite(RED_PIN, LOW);
                    }    
                     
             if( v6 < 1.9 && v7 < 1.9 && v8 < 1.9 && v9 < 1.9 && v10 < 1.9) 
                                            //если сопротивление по всем выводам ниже 30 Ом...
                 {
                  Serial.print("\t");
                  Serial.print("SUCCESSFULLY LEFT"); // тест пройден
                  
                  Serial.print("\t\t");
                  Serial.print(s);
                 /* s++; 
                  digitalWrite(GREEN_PIN, HIGH); // мигаем зеленым светом с частотой 0,1 сек.
                  delay(3500);// 0,5 сек
                  digitalWrite(GREEN_PIN, LOW);*/             
                 }
              if(v1 < 1.9 && v2 < 1.9 && v3 < 1.9 && v4 < 1.9 && v5 < 1.9 && v6 < 1.9 && v7 < 1.9 && v8 < 1.9 && v9 < 1.9 && v10 < 1.9) 
                {
                  digitalWrite(GREEN_PIN, HIGH); // мигаем зеленым светом с частотой 0,1 сек.
                  delay(3500);// 0,5 сек
                  digitalWrite(GREEN_PIN, LOW);
                }  
                   if(v6 >= 5.04 && v7 < 1.9 && v8 < 1.9 && v9 < 1.9 && v10 < 1.9)//если первый палец не подключен, а остальные прошли испытание...
                    {
                      Serial.print("\t");
                      Serial.print("BAD CONNECT AT LEFT FIRST!");//на первом пальце нет контакта
                    } 
                  if(v1 < 1.9 && v2 >= 5.04 && v3 < 1.9 && v4 < 1.9 && v5 < 1.9)//второй палец не подключен...
                     {
                       Serial.print("\t");
                       Serial.print("BAD CONNECT AT LEFT SECOND!");//на втором пальце нет контакта
                     }
                  if(v1 < 1.9 && v2 < 1.9 && v3 >= 5.04 && v4 < 1.9 && v5 < 1.9) // третий палец не подключен...  
                    {
                      Serial.print("\t");
                      Serial.print("BAD CONNECT AT LEFT THIRD!");// на третьем пальце нет контакта
                    } 
                  if(v1 < 1.9 && v2 < 1.9 && v3 < 1.9 && v4 >=5.04 && v5 < 1.9) // четвертый палец не подключен...
                    {
                      Serial.print("\t");
                      Serial.print("BAD CONNECT AT LEFT FOURTH!"); // на четвертом пальце нет контакта
                    }
                    if(v1 < 1.9 && v2 < 1.9 && v3 < 1.9 && v4 < 1.9 && v5 >= 5.04) // пятый палец не подключен...
                      {
                       Serial.print("\t");
                       Serial.print("BAD CONNECT AT LEFT FIFTH!"); // на четвертом пальце нет контакта
                      }   
       }
   }

   buttonWasUp = buttonIsUp;

}