Миллиомметр 0 — 20 Ом (Arduino)

Миллиомметр собран на Arduino Nano (Uno), для более точного измерения сопротивления используется АЦП-модуль ADS1115 16 bit. Миллиомметр может достаточно точно измерять сопротивление от 0.1 мОм до 20 Ом. При измерении сопротивления до 1 Ом разрешение миллиометра 0.1 мОм, после 1 Ом разрешение 1мОм.

Для точного измерения необходимо иметь эталонное сопротивление 100 Ом (манганин) через которое подается ток на измеряемое сопротивление, от точности эталонного сопротивления зависит точность прибора. Если нет возможности очень точно изготовить (намотать из манганиновой проволоки) эталонное сопротивление, то откалибровать прибор можно при помощи другого эталонного сопротивления 1…10 Ом с классом точности не менее 0.02 %. Для упрощения конструкции прибора напряжение на эталонное сопротивление 100 Ом подается от источника питания +5В Arduino, которое периодически измеряется (1 раз в минуту и при включении), но все же желательно иметь внешний ИОН с напряжением не превышающим напряжения питания ADS1115.

Соединительные провода I0 U0 I1 U1 должны иметь одну длину и соединяться должны непосредственно на измеряемом сопротивлении.

Настройка:

  • необходимо изменить частоту дискретизации ADS1115, для этого откройте для редактирования файл библиотеки Adafruit_ADS1015.cpp найти все строчки ADS1015_REG_CONFIG_DR_1600SPS и замените их на ADS1015_REG_CONFIG_DR_128SPS , после чего загрузите библиотеку в Arduino IDE.
  • переменная u_pogr содержит корректировку АЦП ADS1115 в мВ при измерении напряжения +5 В, при необходимости измените значение или установите 0
  •  переменная r_ogr содержит значение эталонного сопротивления 100.00 Ом (значение может немного отличаться при условии, что эталонное сопротивление измерено достаточно точно)
#include <Wire.h>
#include <Adafruit_ADS1015.h>//https://github.com/adafruit/Adafruit_ADS1X15/archive/master.zip
#include <LiquidCrystal.h>
Adafruit_ADS1115 ads;//(0x48);
/* в файле библиотеки Adafruit_ADS1015.cpp найти все строчки: ADS1015_REG_CONFIG_DR_1600SPS и заменить на: ADS1015_REG_CONFIG_DR_128SPS */
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7
 
float multiplier = 0.0078125;
const int u_pogr=10;       // 10 мВ - погрешность ADS1115 при измерении 5 В
const float r_ogr=100.00;  // эталонное сопротивление 100 Ом
float u3300;
int  u_digital;
byte n,k;
long u_sum,u_an,x;
float u_iz,rx,rx_m;
 
void setup(void){Serial.begin(9600);lcd.begin(16, 2);ads.begin();delay(1000);}
 
void loop(){
  while(x<50){
x++;ads.setGain(GAIN_TWOTHIRDS);u3300=ads.readADC_SingleEnded(2)*0.1875-u_pogr;}
k++;if(k==60){x=0;k=0;}  // измерение напряжения 5В каждую минуту
 
if(n==0){ads.setGain(GAIN_SIXTEEN);multiplier = 0.0078125;}
if(u_iz>250&&n==0){n=1;}
if(n==1){ads.setGain(GAIN_EIGHT);multiplier = 0.015625;}
if(u_iz>500&&n==1){n=2;}
if(n==2){ads.setGain(GAIN_FOUR);multiplier = 0.03125;}
 
if(u_iz<500&&n==2){n=1;}
if(u_iz<250&&n==1){n=0;}
 
lcd.setCursor(1,0);
if(rx<1){rx_m=rx*1000;lcd.print("R = ");lcd.print(rx_m,1);lcd.print(" mOm");}
if(rx>=1&&rx<20){lcd.print("R = ");lcd.print(rx,3);lcd.print(" Om");}
if(rx>=20){lcd.print("  Rx > 20 Om    ");}
lcd.setCursor(1,1);lcd.print("U = ");lcd.print(u3300,1);lcd.print(" mV");
u_sum=0;
for(int i=0;i<100;i++){  // измерение
u_digital = ads.readADC_Differential_0_1();
u_sum = u_sum + u_digital;
delay(1);
}
u_an=u_sum/100;
u_iz=u_an * multiplier;
rx=(u3300/((u3300-u_iz)/r_ogr))-r_ogr;
 
lcd.clear();
}

Результаты измерений

   класс 0.02
 класс 0.01
  класс 0.01
 класс 0.01
 класс 0.01
15.1 мОм Измерение R0 магазина сопротивления, это значение необходимо отнимать от следующих полученных значений сопроотивления
9.9 мОм
50.2 мОм
99.6 мОм
499.7 мОм
799.2 мОм
1.000 Ом
5.003 Ом
9.998 Ом

Тестирование:

Новый скетч позволяет расширить верхний предел измерения сопротивления до 1000 Ом

Требуется тестирование!!!

http://forum.rcl-radio.ru/viewtopic.php?pid=44#p44

Comments

  1. Здравствуйте, данный миллиомметр сможет померить силовой трансформатор? Если нет может подскажите как его можно доработать, заранее благодарен.

  2. Приветствую, не сталкивались что модуль ADS сгорает?(микросхема начинает жутко греться, как и стабилизатор ардуинки) голову уже сломал что и куда такого на ADS прилетает что выходит из строя.

Добавить комментарий

Войти с помощью: