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

dima987656
Offline
Зарегистрирован: 13.06.2012

Как сделать вольтметр 0....20V.

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

maksim
Offline
Зарегистрирован: 12.02.2012

Постоянное или переменное?

Mastino
Offline
Зарегистрирован: 03.12.2011

если не ошибаюсь то как то так

const int analogInPin = A0;  // Analog input pin 

float sensorValue = 0;        // value read from the pot
float outputValue = 0;        

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}

void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);            
  outputValue = map(sensorValue, 0, 1023, 0, 20);  
  // print the results to the serial monitor:
  Serial.print("Voltage = " );                      
  Serial.println(outputValue);  
  delay(500);                    
}

 

dima987656
Offline
Зарегистрирован: 13.06.2012

всмысле, исмерять надо DC

maksim
Offline
Зарегистрирован: 12.02.2012

Всмысле - напряжение бывает постоянное и переменное, соответственно и вольтметры бывают разные, DC - это постояное, Mastino выше вам показал как сделать вольтметр измеряющий постоянное напряжение.

dima987656
Offline
Зарегистрирован: 13.06.2012

А - батареи на землю на arduino???

Mastino
Offline
Зарегистрирован: 03.12.2011

dima987656 пишет:

А - батареи на землю на arduino???

да, конечно

dima987656
Offline
Зарегистрирован: 13.06.2012

спасибо вам большое

Alex722
Offline
Зарегистрирован: 06.12.2012

Функция map() оперирует целыми числами. При пропорциональном переносе дробная часть не округляется по правилами, а просто отбрасывается. Иными словами на выходе программы будет 4.00 Вольт, 5.00 Вольт и т.д.

ynikolenko
Offline
Зарегистрирован: 24.02.2013

А можно схемку, хотел получить из Ардуинки вольтметр (проверку автомобильного аккумулятора)....

Есть плата ардуино, экран 16*2. Хотелось бы сделать эдакое, чтобы измерительное число выводилось на экран...

Помогите пожалуйста...

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Выше приведена схема и программа. Хотя я бы увеличил номиналы резисторов раз в 100.

Ну а дальше выводите все это на дисплей. 

Какой дисплей собираетесь использовать ?

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Резисторы делителя должны быть высокоточными (с минимальной допустимой погрешностью) и желательно изолировать их от влияний окружающей среды (тепло/холод, влажность и т.д.) .

Можно залить их термоклеем.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Сначала нужно привести диапазон входящих напряжений к диапазону 0-5в. Это делает делитель.

Потом программно производим вот такое преобразование 5/1024*значение АЦП*коэффициент деления (отношение входного напряжения делителя к выходному)

ourlive
Offline
Зарегистрирован: 26.05.2012

nestandart пишет:

Резисторы делителя должны быть высокоточными

Зачем? Берётся что под рукой есть, программно калибруется, и гарантированно мерит 12В с точностью до миллиВольта. Причём делитель нужно ориентировать не на 12В, а на 15-16В, потому как теория свинцовых аккумуляторов и теория КИПиА так говорит.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>Зачем? Берётся что под рукой есть, программно калибруется, и гарантированно мерит 12В с точностью до миллиВольта.<<

Это в идеальных условиях. Как вы будете калибровать обычный резистор , у которого номинал плавает +/- 5% ?

Если погрешность заранее известна , то вопросов нет.

Плюс к тому температурные колебания. Попробуйте подключить резистор к Омметру и нагреть его , например паяльником. 

Увидите как сильно изменится его сопротивление.

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

Буквально на этой неделе я сдал заказ, в котором одним из пунктов было измерение постоянного напряжения 0-100в.

Делитель собрал номиналами 100К  и 5К.

Так вот сопротивление одного резистора (5К) было  4.93К а сопротивление другого 5.05К. Это при том что резистора на 5К в природе не существует. Есть 4.7К.

А вы говорите погрешность значения не имеет.

ourlive
Offline
Зарегистрирован: 26.05.2012

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

Первый мой эксперимент на дуине был как раз контроллер заряда свинцового аккума. Делитель был из хлама. Кстати для сведения, на моём АЦП при калибровке была выявлена нелинейность. В диаппазоне 0-5В АЦП отклонения доходили до 0,2В (что довольно много если оно мерит через делитель), потому о прецизионных резюках говорить не стоит.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>и даже если у вас погрешность жутко нелинейная (что совсем не про активные элементы), то она корректируется в одну формульную строку<<

Ага. Усреднение нелинейной погрешности лишь несколько сгладит ее , но не уберет.

ourlive
Offline
Зарегистрирован: 26.05.2012

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

kollfer
Offline
Зарегистрирован: 21.03.2013
const int analogInPin = A0;
 
float sensorValue = 0;       
float outputValue = 0;        
 
void setup() 
{
  Serial.begin(9600);
}
 
void loop() 
{
  sensorValue = analogRead(analogInPin); 
  outputValue = map(sensorValue, 0, 1023, 0, 5);  
  Serial.print("Voltage = " );                      
  Serial.println(outputValue); 
  delay(500);
}

 

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

функция map() позволяет узнать целое число, но как сделать чтоб вольтметр показывал сотые вольта?

medossa
Offline
Зарегистрирован: 10.07.2012

так попробуйте (максимальное измеряемое напряжение 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);
}

 

kollfer
Offline
Зарегистрирован: 21.03.2013

Большое спасибо, вроде все работает привильно. Единственный вопрос, откуду взято число 204,6 ? 

medossa
Offline
Зарегистрирован: 10.07.2012

1023/5=204,6

Axell
Offline
Зарегистрирован: 23.03.2013

Здравствуйте..Поскажите, плизз, можно ли измерить отрицательное напряжение..??

Если да, то как..

Спасибо..

Snubist
Offline
Зарегистрирован: 18.02.2013

вообщето есть отрицательноя полярность, уточните что вы имеете ввиду. Лучше со схемой.

Axell
Offline
Зарегистрирован: 23.03.2013

Напряжение отрицательной полярности..

maksim
Offline
Зарегистрирован: 12.02.2012

Отрицательное напряжение это понятие относительное. Где конкретно вы хотите померить напряжение?

Tortik22
Offline
Зарегистрирован: 08.04.2013

доброго времени суток всем. 

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

Как ПО использовал LabView и по статье милого человека:

http://easyelectronics.ru/znakomimsya-s-labview.html

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

 

/*
  ReadAnalogVoltage
  Reads an analog input on pin 0, converts it to voltage, and prints the result to the serial monitor.
  Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.
 
 This example code is in the public domain.
 */

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0);
  // print out the value you read:
  Serial.println(voltage);
}

ну в общем, все понятно.

Нужно зделать аналогичное для входа А1. Чтобы данные шли и обрабатывались из двух ножек А0 и А1 одновременно. Возможно ли такое? Я сам пофантазировал, Ctr+C и Ctr+V, пару циферок поменял и получилось такое(в моем примере нет "* (5.0 / 1023.0)", эту поправку я в Лаб Вью  ввел):

void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue;
  // print out the value you read:
  Serial.println(voltage);
  // read the input on analog pin 0:
  int sensorValue1 = analogRead(A1);
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage1 = sensorValue1;
  // print out the value you read:
  Serial.println(voltage1);
}

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

ourlive
Offline
Зарегистрирован: 26.05.2012

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

int sensorValue = analogRead(A0);

  float voltage = sensorValue;
  Serial.print("U1= ");
  Serial.println(voltage);
  int sensorValue1 = analogRead(A1);
  float voltage1 = sensorValue1;
  Serial.print("U2= ");
  Serial.println(voltage1);

типа того

Tortik22
Offline
Зарегистрирован: 08.04.2013

ок, спс. перназву. ну а так, данный скеч подойдет. да?

olegab
Offline
Зарегистрирован: 09.04.2013

можно через такой делитель контролировать напряжение в цепи питания светодиодной ленты (12V, 6A)?

на какую  мощность должны быть резисторы?

olegab
Offline
Зарегистрирован: 09.04.2013

Если я правильно понимаю, то если ток на 1 пине 40мА (но можно меньший ток пустить?), то:

12/0,04=300 Ом

делитель должен быть 100 Ом + 200 Ом (диапазон до 15 В.) по 0,5 Вт

 

ourlive
Offline
Зарегистрирован: 26.05.2012

изучите теорию вопроса "измерение напряжения", оттуда будет известно, что ток портедляемый цепями измерения напряжения должен быть минимальным. Для начала вас устроит делитель с суммарным сопротивлением в пару десятков килоОм.

diksen
Offline
Зарегистрирован: 11.10.2013

Люди помогите кто чем может :)

Можно ли на ардуинке замутить вольтметр на большие панруги (до 500В)

ток постоянной полярности

точность маленькая ( до 1 вольта)

если можно то  - схемку делителя и номиналы резисторов тоже укажите, ПОЖАЛУЙСТА!

 

MaksMS
Offline
Зарегистрирован: 11.03.2013
diksen
Offline
Зарегистрирован: 11.10.2013

здорово! спасибо!

вот кстати на закачку линк

http://bsvi.ru/uploads/b6d43e56f427_D843/divider.swf

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

Господа, а как устранить нелинейность измерения? У меня на 50В всё точно, а на 4.98В (по мультиметру) ардуина показывает 6.48В (ну и при 11.98В - 17.36В).

Тут выше сказано было, что нелинейность устраняется одной формулой... но гугл молчит на эту тему.

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

xorkrusт, такие вопросы нужно сопровождать полной выкладкой собранной в дополнении к ардуино схемы , с описанием применённых деталей и номиналов.  Описание какое напряжение измеряете, откуда его берёте. Лучше ещё и фото собранного. Тогда можно будет что-то смотреть и думать.

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

Так тут вопрос программный. На A0 висят два резистора (делитель), на вход которого подается от 0 до 50В постоянного.

Измеряем как было

  var0 = analogRead(0); 
  volt =(5*var0/1023.0)*10;

где volt=(опорное*полученное с A0/1023.0)*коэфициент резисторного делителя

Констрцкция

(var0*(5.0/1023.0))*10;

не меняет погрешностей

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

xorkrus, это не программный вопрос. Вы не спроста не нашли ничего в гугле, т.к. такой проблемы у обычного делителя нет и быть не может. Либо у вас поджаренный порт АЦП, либо где-то стоит нелинейный элемент.

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

Два резистора - 4.6К и 43.2К

В гугле я нашел, что имеется некоторый перекос при измерении, но как его исправлять - не нашел.

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

xorkrus, не всё то правда, что гуглится. А всё то правда, что проверяется лично :)

На входе дуины кроме двух резисторов ничего? Стабилитрона нет? Нужно проверить без делителя, подавая регулируемое напряжение от 0 до 5 вольт на открытый вход ацп, контролируя вольтметром. Если такой-же рассинхрон, то скорее всего ацп подпалёный.

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

Кроме резисторов - ничего. Проверить напряжением от 0 до 5, смогу в понедельник, но что-то я сомневаюсь в одинаковой подпаленности 4х портов (задумка на 4 канала будет).

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

xorkrus, ну каналы то там -это скорее понятие виртуальное, нежели физическое. Ацп в меге один, а мультиплексором подключаются входы, которые вы запросили в скетче.  Лучше всего конечно сразу вставить другой микроконтролллер,  да проверить.

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

Прям засада - на тестовой атмега8 залочил RST %)

Взял арудино про мини, а там... а там вообще всегда 1023.0 на ацп. Толи совсем пален, толи я чего-то непонимаю. Сейчас другую мегу поищу...

galaktika
Offline
Зарегистрирован: 20.04.2014

Всем привет )

Есть "ардуино демиланова", хочу при помощи нее установить в машину индикатор оборотов двигателя, если обороты до 3000тыс. горит зеленый диод, если поднимаются выше, загорается красный. Машина инжекторная и принцип работы тахометра в ней схож с вольтметром, бортовой комп считывает импульсы преобразует их в напряжение, больше импульсов выше напряжение. Думаю подсоеденится к проводу тахометра на котором постоянный ток то увеличивается то уменьшается.

Схемка подключения такая :

Подойдет?

Проблема в написании кода, как считать напряжение вроде понятно (код выше), а как вывести на диоды нет. Может кто подскажет? Заранее спасибо!

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

galaktika, приведённая вами схема делителя измеряет не ток, а напряжение. Если вам нужно что-бы до определённого напряжения горел зелёный светодиод, а свыше него красный -то такую схему можно собрать на tl431, двухцветном светодиоде и нескольких резисторах. Использовать ардуину для такой элементарной задачи слишком жирно )

galaktika
Offline
Зарегистрирован: 20.04.2014

Да мне нужно именно напряжение ошибся, ардуино покупал давно лазерами на диодах заморачивался,сейчас лежит без дела вот и хочу ее использовать. К тому же в дальнейшем думаю усовершенствовать механизм до плавного загорания и смене цвета  нескольких светодиодов по мере повышения оборотов, вплоть до отображения на мониторе. Мне бы для начала понять простейший принцип. 

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

То есть, как я понял можно использовать несколько входов на плате и каждому присвоить свой выход с диодом. Код будет простым, типа: если вход1-хай, то выход1-хай.? А есть такие штуки которые не пропускают ток ниже определенного порога?

 

 

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

Пожалуйста подскажите делитель на борту 24 Вольта и как его высчитать правильно я понял (sensorValue, 0, 1023, 0, 5); 

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

там наверное нужно вольт на 30 машина все таки