Как сделать вольтметр

xorkrus
Offline
Зарегистрирован: 22.09.2013
Murat
Offline
Зарегистрирован: 15.08.2014

Спасибо огромное

 

Dmitriy7000
Offline
Зарегистрирован: 19.04.2016

Подскажите схемку датчика!

Тебуется измерять mV в диапазоне от -200mV до +200mV.

Нужно для измерения PH воды и автоматического добавления ph+ или ph-, но для начала можно и диодами помигать..

Имеется: Arduino UNO, электроды для измерения PH, релейный модуль из 4х реле.

Электроды работают исправно, при погружении в щелочный или в кислотный раствор дают разную полярность.

При PH=5 +130mV, при PH=8 -140mV, при PH=7 0mV.

Заранее СПАСИБО!

 

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Dmitriy7000 пишет:

Тебуется измерять mV в диапазоне от -200mV до +200mV.

Нужно для измерения PH воды и автоматического добавления ph+ или ph-, но для начала можно и диодами помигать..

Можно купить готовый модуль.

http://ru.aliexpress.com/item/Liquid-PH-Value-Detection-detect-Sensor-Mo...

Dmitriy7000
Offline
Зарегистрирован: 19.04.2016

Nosferatu пишет:

Можно купить готовый модуль.

[/quote]

Забавный модуль. Что то не пойму, как его в ведро вделать что бы не умер от солей.

А электроды на проводке и пихай куда хочешь.

Так всё же, как на Ардуино милливольты мерять?

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Dmitriy7000 пишет:

Nosferatu пишет:

Можно купить готовый модуль.

Забавный модуль. Что то не пойму, как его в ведро вделать что бы не умер от солей.

А электроды на проводке и пихай куда хочешь.

Так всё же, как на Ардуино милливольты мерять?

[/quote]
Насколько я понимаю, в этом модуле уже есть все необходимое, а электроды подключаются через разъём и модуль бросать в солевой раствор необходимости нет. Если есть желание сделать аналогичный модуль самостоятельно, то нужно взять ОУ сделать на нем уилитель, сместить 0, чтобы сигнал на выходе был однополярным и подключить к аналоговому входу Ардуино. По комплектации это может быть дешевле покупного варианта, а головной боли будет больше, поскольку "есть ньюансы", а судя по вопросу с электроникой особой дружбы нет.

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Dmitriy7000 пишет:

Nosferatu пишет:

Можно купить готовый модуль.

Забавный модуль. Что то не пойму, как его в ведро вделать что бы не умер от солей.

А электроды на проводке и пихай куда хочешь.

Так всё же, как на Ардуино милливольты мерять?

Рассмешили. Судя по всему, вы не рыбок в аквариуме растите, а убойный гидропон))

Вот так понятней. http://www.dfrobot.com/index.php?route=product/product&product_id=1025

Dmitriy7000
Offline
Зарегистрирован: 19.04.2016

Duino A.R. пишет:
Dmitriy7000 пишет:

Nosferatu пишет:

Можно купить готовый модуль.

а судя по вопросу с электроникой особой дружбы нет.[/quote]

Закажу модуль. Морочится не буду.

Nosferatu]</p> <p>[quote=Dmitriy7000]</p> <p>[quote=Nosferatu пишет:

Рассмешили. Судя по всему, вы не рыбок в аквариуме растите, а убойный гидропон))

Вот так понятней. http://www.dfrobot.com/index.php?route=product/product&product_id=1025

Понятно. Электрод к модулю отдельно прикручивается.

​Спасибо!

А растет гидропоника еще какая, только не дурь, а помидорки. Обычные грядки уже не катят, газоном закатал. Зимой салатик с петрухой полезная штука. А себистоемость копеечная.

angersos
angersos аватар
Offline
Зарегистрирован: 09.06.2016

Разве у вас значения не прыгают на экране, как сделать стабильность?

maxvalin
Offline
Зарегистрирован: 22.02.2016

Люди помогите советом, почему на аналоговых портах все относительно земли постоянно 0.9 вольта?

Сижу туплю пол дня уже.. подтягивающие резисторы... все пробовал, но у меня пи "голой " меге без шилдов постоянно 0.9 вольта и соответственно показания не с ноля.. сто пудово елементарщина какая то ((

[code]
const int voltPin = A5;  // Пин для Вольт
const int amperPin = A10;  // Пин для Вольт

float sensorvolt = 0;        // переменная для показаний вольтметра
float outputvolt = 0;        //переменая для посылки данных вольта на порт
float sensoramper = 0;        // переменная для показаний ампера
float outputamper = 0;        //переменая для посылки данных ампера на порт 
#include <SD.h>; // библиотека для карточки
File myFile;

void setup() {
  pinMode(53, OUTPUT); // для карточки иначе не работает
  Serial.begin(9600);  // сериал монитор для контроля с ПК
  while (!Serial) {
    ; //Ждём инициализации серийного порта. Нужно для Leonardo
  }

  Serial.print("Initializing SD card...");
    if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
  pinMode(5, INPUT); //пин вольтметра как вход и подтянут к минусу
  pinMode(10, INPUT);  // пин ампер
  analogReference(DEFAULT);  // DEFAULT INTERNAL использовать Vcc как AREF
}

void loop() {
  // read the analog in value:
  //sensorvolt = analogRead(voltPin);            
  outputvolt = map(voltPin, 0, 1023, 0, 110);  // разрешение имерения //outputValue = float(analogRead(analogInPin))/204,6  от куда 1023/5=204,6 измернии 5вольт если
  Serial.print("Volt = " );    // записать само название строки                  
  Serial.println(outputvolt);    // записать покаания вольта в  эту же строку
  //sensoramper = analogRead(amperPin);            
  outputamper = map(amperPin, 0, 1023, 0, 110);  // разрешение имерения 
  // print the results to the serial monitor:
  Serial.print("Amper = " );    // записать само название строки                  
  Serial.println(outputamper);    // записать покаания в  эту же строку
  myFile = SD.open("LOG.txt", FILE_WRITE); //открываем файл для записи
  if (myFile) {                             // если файл открылся записываем данные
    
    myFile.print("Volt = ");
    myFile.println("outputvolt");
    myFile.print("Amper = ");
    myFile.println("outputamper");
                           // Закрываем файл:
    myFile.close();  
    Serial.println("done.");
  } else {
    // если файл не открылся, сообщает об ошибке:
    Serial.println("error opening LOG.txt");
  }


  
  delay(5000);                    
}
[/code]

на лишее не обращайте внимание это заготовка для зарядного...

maxvalin
Offline
Зарегистрирован: 22.02.2016
[code]
int analogInput = A0;
float val = 0.0;
float voltage = 0.0;
float R1 = 100000.0; //Battery Vin-> 100K -> A0
float R2 = 10000.0; //Battery Gnd -> Arduino Gnd and Arduino Gnd -> 10K -> A0
int value = 0;

void setup() { 
Serial.begin(9600);
pinMode(analogInput, INPUT);
}

void loop() {
value = analogRead(analogInput);
val = (value * 4.7) / 1024.0;
voltage = val / (R2/(R1+R2));
Serial.println(voltage); 
delay(500);
}
[/code]

дошло... формулу не использовал для резисторов((

но вопрос остается- от куда на аналоговом выходе постоянное напряжение? он же объявлен как вход уже..

arduinec
Offline
Зарегистрирован: 01.09.2015

maxvalin пишет:

но вопрос остается- от куда на аналоговом выходе постоянное напряжение? он же объявлен как вход уже..

А если вместо int analogInput = A0; написать #define analogInput 0

maxvalin
Offline
Зарегистрирован: 22.02.2016

я в полном ступоре(( 

вот сейчас распечатал новую уно с пакета, включил в юсб на ней 0.62 вольта gnd и A0 ... Ничего не понимаю.. отупел полностью, другие вольтметры эти собирают на коленке!

 вот с последнего скетча, при таком раскладе 

[code]

#define analogInput 0
float val = 0.0;
float voltage = 0.0;
float R1 = 100000.0; //Battery Vin-> 100K -> A0
float R2 = 10000.0; //Battery Gnd -> Arduino Gnd and Arduino Gnd -> 10K -> A0
int value = 0;

void setup() { 
Serial.begin(9600);
pinMode(analogInput, INPUT);
}

void loop() {
value = analogRead(analogInput);
val = (value * 4.7) / 1024.0;
voltage = val / (R2/(R1+R2));
Serial.println(value); 
delay(500);
}

[/code]

ловит вот что

450
437
429
422
417
410
403
398
392
389
386
384
382
381
 
 
на пальцах - как собрать обычный вольтметр ?!
ладно без делителя, но чтоб мерял напряжение извне, вот чтоб я подключил батарейку и он мне собака показал что это 1.5 вольта а когда отключил то показал что это 0 !!!
maxvalin
Offline
Зарегистрирован: 22.02.2016

потихоньку картинка проясняется 

#include <LiquidCrystal.h>

LiquidCrystal lcd(16, 17, 23, 25, 27, 29);

void setup()
{ 
  lcd.begin(16, 4);
  lcd.clear();
  analogReference(INTERNAL1V1);
  
 }
 
void loop()
{ 
  float Vbat = (analogRead(A5) * 1.1) / 1023.0;
  float Vin = Vbat / (8200.0 / (168000.0 + 8200.0)); // R2/(R1+R2)
  float Ibat = (analogRead(A10)* 1.1) / 1023.0-1.1;
  lcd.setCursor(0, 1);
  lcd.print("VOLT=");  
  lcd.print(Vin, 1);
  lcd.setCursor(0, 2);
  lcd.print("AMPER=");
  lcd.print(Ibat, 1);
  
  
 delay(200); 
}

ввел данные резиторов, змеряет с ноля и до 23.6в правильно а выше зависает, тоисть показывает все что выше все равно 23.6в, например при измерении 40в, мне надо измерть и залогировать 110в DC

и тут же проблема с измерением милливольт другого канала, курю форум и гугл и чего то за измирения милливольт информации не очень много.

Замер от 0- 700 мВ. 

nik182
Offline
Зарегистрирован: 04.05.2015

Курить надо следующие вопросы:

1. Входной диапазон АЦП.

2. Входное сопротивление АЦП.

3. Преобразователь постоянного напряжения. 

4. Нарисовать схему подключения и нарисовать все емкости и резисторы - даже паразитные.

Поняв всё это можно начинать строить вольтметр. Очень рекомендую найти схему осцилографа DCO 138  и посмотреть входные цепи - там два операционника делают из любого напряжения напряжение необходимое АЦП и согласовывают входное сопротивление АЦП.

Вход АЦП не должен висеть в воздухе. Иначе на входной ёмкости будет наводиться напряжение и показания в свободном состоянии будут отличаться от нуля и будут плавать. 

При измерении напряжений больше опорного напряжения АЦП можно использовать резистивный делитель. Нижнее плечо делителя должно быть во много раз меньше входного сопротивления АЦП. Соответственно полное входное сопротивление делителя может оказаться низким. В этом случае можно измерять только источки напряжения с низким выходным сопротивлением - батарейки и прочее. В других цепях будет большая ошибка.

Нормальный вольтметр должен обладать высоким входным сопротивлением. Поэтому в нем надо использовать согласователи сопротивления- обычно на ОУ. На ОУ же делают усилители для измерения напряжений меньших опорного АЦП. В этом случае используетя весь диапазон оцифровки, а не несколько разрядов.  

 

Ислам Урус
Offline
Зарегистрирован: 08.07.2016

У меня вот такой вопрос, возможно ли объединить две программы частотомертр и вольтметр? Чтобы оба параметра показывало на LCD дисплее.

di_mot
Offline
Зарегистрирован: 12.08.2016

Ислам Урус пишет:
У меня вот такой вопрос, возможно ли объединить две программы частотомертр и вольтметр? Чтобы оба параметра показывало на LCD дисплее.

Конечно! Обыденная задачка для Бортовых Компьютеров для авто-мото.

Figner
Offline
Зарегистрирован: 05.10.2016

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

 

msng
Offline
Зарегистрирован: 07.06.2012

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

vb
Offline
Зарегистрирован: 15.09.2016

Советую тут посмотреть схему вольтметра на Arduino

Markys63
Offline
Зарегистрирован: 11.03.2016

Чтобы не полодить кучу тем спрошу тут. Для работы требуется вольтметр (как постоянно так и переменного тока, скажем до 400В) и Омметр,.
Можно взять мультиметр, но он слишком большо,(в продаже есть конечно маленькие, но их брать жаба душит). Возможно ли объединить Все это?
Дисплей хотел взять 1602, ну примерный размер девайса.
В инете пытался найти подобные проекты не нашел, может кто видел, или чем поможет?

arduino328
Offline
Зарегистрирован: 01.09.2016

Markys63 пишет:
В инете пытался найти подобные проекты не нашел

Потому что не рентабельно. По цене выйдет не на много дешевле, а возни много. И это при большом выборе в продаже готовых мультиметров.

Markys63
Offline
Зарегистрирован: 11.03.2016

Не столько дело в цене, сколь в удобстве эксплатации. нужен малый размер...

А так уже заказал прибор из китая. прийдет, буду курочить, уменьшать...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Размеры промышленных тестеров определяются именно удобством эксплуатации. Их можно сделать любого размера, но больше или меньше - уже неудобно.

Или Вы лилипут?

arduino328
Offline
Зарегистрирован: 01.09.2016
gena
Offline
Зарегистрирован: 04.11.2012

Для  Markys63.  Изучите работу классических мультиметров. Затем продумайте, чем Вы будете коммутировать прецизионные резисторы. Сразу же оцените нетривиальность задачи. Немногим позднее придёте в выводу, что городить огород едва ли стоит, разве что есть желание повозиться самостоятельно.

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

Цена конечно интересный фактор, но есть кое-что более весомое. Например даже  в самых дешёвых цифровых мультиметрах стоят АЦП двойной интеграции,  на порядок превосходящие по точности тот ацп, что встроен в мк. Помимо того прецизионные резисторы в делителях, всё уже откалибровано и настроено. Короче делать свой мультметр может только либо очень крутой специалист, либо полный чайник, который просто не понимает насколько это трудно :)

buterbrod
Offline
Зарегистрирован: 04.01.2017

Всем привет! Подскажите, пожалуйста, можно ли сделать так, чтобы значение напряжения выводилось с точностью три знака после запятой?

nik182
Offline
Зарегистрирован: 04.05.2015
BlackWizard
Offline
Зарегистрирован: 30.05.2017

Приветствую, я воспользовался кодом, предложенным medossa

medossa пишет:

так попробуйте (максимальное измеряемое напряжение 5.0 вольт)

const int analogInPin = 0;
 
float sensorValue = 0;       
float outputValue = 0;        
 
void setup() 
{
  Serial.begin(9600);
}
 
void loop() 
{
  outputValue = float(analogRead(analogInPin))/204,6
  Serial.print("Voltage = " );                      
  Serial.println(outputValue); 
  delay(500);
}

 

и попробовал немного его допилить под свои нужды. Суть в том, что мне нужно изменять напряжение на аналоговых пинах (в коде их запействовано 3, в итоге будет 12) и, если оно совпадает с необходимым (т.е. в цепь включен нужный резистор) загорается светодтод (позже сделаю отладочные светодиоды для каждого из пинов и если все совпали, будет музыка играть).

Вопрос в том, как при проверке напряжения сделать так, чтобы он сравнивал его не с конкретным числом, а с диапазоном чисел, например напряжение на А0 должно быть от 0,05 до 0,2 вольт. у меня получилось это сделать, но помоему очень криво. Можете подсказать как это сделать удобнее?

int LED = 2;
const int analogInPin1 = 0;
const int analogInPin2 = 1;  
const int analogInPin3 = 2; 

float outputValue1 = 0;        
float outputValue2 = 1;
float outputValue3 = 2; 

void setup() 
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}
 
void loop() 
{
  outputValue1 = float(analogRead(analogInPin1))/204,6;
  Serial.print("Voltage1 = " );                      
  Serial.println(outputValue1); 
  outputValue2 = float(analogRead(analogInPin2))/204,6;
  Serial.print("Voltage2 = " );                      
  Serial.println(outputValue2); 
  outputValue3 = float(analogRead(analogInPin3))/204,6;
  Serial.print("Voltage3 = " );                      
  Serial.println(outputValue3); 
  
  
  if (outputValue1<=0.20 and outputValue1>=0.05 
  and outputValue2<=0.5 and outputValue2>=0.3 
  and outputValue3<=2.60 and outputValue3>=2.40)
    {
   digitalWrite(LED, HIGH); 
    }
  else
    {
    digitalWrite(LED, LOW); 
    }
   delay(500);
  }

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013
const byte LEDpin = 2;
const byte analogInPin1 = A0;
const byte analogInPin2 = A1;
const byte analogInPin3 = A2;

void setup()
{
  Serial.begin(9600);
  pinMode(LEDpin, OUTPUT);
}

boolean rangeCompare(float value, float a, float b)
{
  if (value <= a && value >= b) return true;
  else return false;
}

void loop()
{
  float outputValue1 = analogRead(analogInPin1) / 204.6;
  float outputValue2 = analogRead(analogInPin2) / 204.6;
  float outputValue3 = analogRead(analogInPin3) / 204.6;
  Serial.print("Voltage1 = " ); Serial.println(outputValue1);
  Serial.print("Voltage2 = " ); Serial.println(outputValue2);
  Serial.print("Voltage3 = " ); Serial.println(outputValue3);

  boolean state = rangeCompare(outputValue1, 0.20, 0.05)
               && rangeCompare(outputValue2, 0.5, 0.3)
               && rangeCompare(outputValue1, 2.6, 2.4);

  digitalWrite(LEDpin, state);
  delay(500);
}

 

BlackWizard
Offline
Зарегистрирован: 30.05.2017

Благодарю, вечером попробую.

"позже вечером":

Очень долго думал почему не получается, оказывается в строчке была опечатка

boolean state = rangeCompare(outputValue1, 0.20, 0.05)
             rangeCompare(outputValue2, 0.5, 0.3)
             rangeCompare(outputValue1, 2.6, 2.4);

там дважды указывалось outputValue1, иправил на outputValue3 и всё заработало, спасибо большое за подсаказку

Gagar7836
Offline
Зарегистрирован: 10.07.2017

А можна програмирувать на таком ноутбуке https://city.com.ua/goods/notebooks_netbooks/hp-ts-15-au018wm.html ?

maxvalin
Offline
Зарегистрирован: 22.02.2016

Можно,
Но что-то подсказывает что для Вас это слишком рано.
Или вы просто прикалываетесь:)

Gagar7836
Offline
Зарегистрирован: 10.07.2017

а что надо установить что бы начать программировать?

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013
Мишка
Offline
Зарегистрирован: 09.05.2017

 Здравствуйте. Не стал заново создавать тему. Решил здесь написать.Собрал вольтмтр от 0...30 в на ардуино с LCD1602. Беда в том , что напряжение скачет от 0 до 0,25 В . Соответственно при замере напряжения то же происходят скачки примерно в этом диапазоне. Другую Ардуино подключал так я же песня. Подскажите может у кого было так и какое решение? В ардуино начинающий.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Мишка, для начала попытайтесь зашунтировать вход конденсатором.

Вообще же - вариантов масса: и чем Вы питаете свою схему, и какова длина проводов, и как измеряете, и еще много чего...

Мишка
Offline
Зарегистрирован: 09.05.2017

Andriano,Собрал на столе, питание от компа.Тестером если мерить напряжение в порядке , а если мерить с помощью ардуино скачет.Использую внутренний источник опорного напряжения1,1 В.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Конденсатор помог?

Мишка
Offline
Зарегистрирован: 09.05.2017

andriano пишет:

Конденсатор помог?

 Andriano, конденсатор еще не пробовал ставить.  Какой емкости примерно? И его между  аналоговым входом  ардуино и массой подключить?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

От 1000 пФ до 1 мкФ.

Я бы поставил 0.1. 

Но, вообще-то хотелось бы знать, как именно Вы понижаете напряжение с 30 В до приемлемого для Ардуины.

Мишка
Offline
Зарегистрирован: 09.05.2017

Andriano,спасибо.10 мкФ сработало.Перестали цифры скакать.  Еще хотел спросить: у меня значение напряжения показывает две цифры после запятой, а мне необходимо 3-и . Как этого добиться?

Мишка
Offline
Зарегистрирован: 09.05.2017

Вообще изначально планировал от 0 до 30 в,но собрав эту схему увидел, что с увеличением напряжения погрешность растет.Пересчитал для вольтметра от 0 до5 в. Мне хватит для проверки датчиков.

vk007
Offline
Зарегистрирован: 16.06.2015

Мишка пишет:

у меня значение напряжения показывает две цифры после запятой, а мне необходимо 3-и . Как этого добиться?

Уверены, что этот ваш вольтметр способен обеспечить хотя бы ту точность, что он показывает сейчас, т.е. 2 цифры после запятой, а вы еще стремитесь и тысячные отслеживать?

Мишка
Offline
Зарегистрирован: 09.05.2017

 На выводе REF сейчас показывает 1,04 В ,тестер так же показывает.  Подскажите как  3-и цифры сделать после запятой.

 

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Мишка пишет:

Подскажите как  3-и цифры сделать после запятой.

 

Вроде так можно.

lcd.print(float, 3);

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

Мишка, какой смысл в третьей цифре, если разрешение вашего вольтметра в лучшем случае около 20mV ? :)

Мишка
Offline
Зарегистрирован: 09.05.2017

 dimax, мне для эксперимента)

maxvalin
Offline
Зарегистрирован: 22.02.2016

Мишка пишет:

 На выводе REF сейчас показывает 1,04 В ,тестер так же показывает.  Подскажите как  3-и цифры сделать после запятой.

 

Вам такая точность нужна а вы хотите на делителе из неточных резисторов + 8-битным АЦП добиться? Я бы сам задал подобный вопрос несколько месяцев назад)))

Забейте))  Если и в правду хотите такой точности тогда купите соответствующие "модули" тоисть хороший источник опорного напряжения (я например начинал с малого  и купил для начала LM4040, инфа по подключению и по опорникам вот: https://acdc.foxylab.com/node/49) Учтите что номинал у них разный и не берите 5-ти вольтовые а например LM4040-N-3.0 - 3,0 В; и делить проще и разброс меньше будет к 30 вольтам.

но по требованию к схеме не пошло, хотя и замеры стали ровными с использованием советских, точных резисторов(точность замеров до 2 десятых вольт, соврал )) - 4 десятых возле 70-90 вольтах) при 80-90 VDC. Сейчас взял INA226 (по совету dimax о чем сильно не жалею) вот на нем уже что-то и можно добиться болие точного.

а вообще-  СРОЧНО прочитать https://www.dropbox.com/s/7df0u6r7pihlrfo/Boll-Analogovie-interfeisy-MK.djvu?dl=0

хотя бы саму главу о АЦП (она не большая)