Миллиомметр 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. Arduino: 1.8.5 (Windows 7), Плата:»Arduino/Genuino Uno»

    D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\arduino-builder -dump-prefs -logger=machine -hardware D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware -hardware C:\Users\COM-PC\AppData\Local\Arduino15\packages -tools D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\tools-builder -tools D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\tools\avr -tools C:\Users\COM-PC\AppData\Local\Arduino15\packages -built-in-libraries D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\libraries -libraries C:\Users\COM-PC\Documents\Arduino\libraries -fqbn=arduino:avr:uno -ide-version=10805 -build-path C:\Users\COM-PC\AppData\Local\Temp\arduino_build_764145 -warnings=none -build-cache C:\Users\COM-PC\AppData\Local\Temp\arduino_cache_994778 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\tools\avr -prefs=runtime.tools.avrdude.path=D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\tools\avr -verbose C:\Users\COM-PC\Desktop\millio\millio.ino
    D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\arduino-builder -compile -logger=machine -hardware D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware -hardware C:\Users\COM-PC\AppData\Local\Arduino15\packages -tools D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\tools-builder -tools D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\tools\avr -tools C:\Users\COM-PC\AppData\Local\Arduino15\packages -built-in-libraries D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\libraries -libraries C:\Users\COM-PC\Documents\Arduino\libraries -fqbn=arduino:avr:uno -ide-version=10805 -build-path C:\Users\COM-PC\AppData\Local\Temp\arduino_build_764145 -warnings=none -build-cache C:\Users\COM-PC\AppData\Local\Temp\arduino_cache_994778 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\tools\avr -prefs=runtime.tools.avrdude.path=D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\tools\avr -verbose C:\Users\COM-PC\Desktop\millio\millio.ino
    Using board ‘uno’ from platform in folder: D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\arduino\avr
    Using core ‘arduino’ from platform in folder: D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\arduino\avr
    Detecting libraries used…
    «D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\tools\avr/bin/avr-g++» -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR «-ID:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\arduino\avr\cores\arduino» «-ID:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\arduino\avr\variants\standard» «C:\Users\COM-PC\AppData\Local\Temp\arduino_build_764145\sketch\millio.ino.cpp» -o «nul»
    «D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\tools\avr/bin/avr-g++» -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR «-ID:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\arduino\avr\cores\arduino» «-ID:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\arduino\avr\variants\standard» «-ID:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\arduino\avr\libraries\Wire\src» «C:\Users\COM-PC\AppData\Local\Temp\arduino_build_764145\sketch\millio.ino.cpp» -o «nul»
    «D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\tools\avr/bin/avr-g++» -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR «-ID:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\arduino\avr\cores\arduino» «-ID:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\arduino\avr\variants\standard» «-ID:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\arduino\avr\libraries\Wire\src» «C:\Users\COM-PC\AppData\Local\Temp\arduino_build_764145\sketch\millio.ino.cpp» -o «C:\Users\COM-PC\AppData\Local\Temp\arduino_build_764145\preproc\ctags_target_for_gcc_minus_e.cpp»
    C:\Users\COM-PC\Desktop\millio\millio.ino:3:30: fatal error: Adafruit_ADS1015.h: No such file or directory

    #include

    ^

    compilation terminated.

    Используем библиотеку Wire версии 1.0 из папки: D:\схемы\ардуино\arduino\Arduino-1.8.5-IDE-Windows-master\hardware\arduino\avr\libraries\Wire
    exit status 1
    Ошибка компиляции для платы Arduino/Genuino Uno.

  2. благодарю за ответ. великолепный прибор. я за маленьким ликбезом: в описании указано от 0.1миллиом (100мком) до 20 ом при 5 вольтах и 100 омах ,при 0.1 миллиоме на выходе делителя будет 5мк вольт. но разрядность 16 бит ацп-76.2микровольт.?

    1. +/-0,256В предел — 0,256/32768 = 0,000007812 В это дифференциальный вход с разрешением 15 бит + 1 бит на полярность

      В 16 битном режиме дискретность в два раза выше (3,4 мкВ)

      7,8 мкВ, можно примерно увидеть 0,1 мОм

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

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