Необходимо тело программы для вольтметра от -5 вольт до + 5 вольт

bboykazbek
Offline
Зарегистрирован: 22.07.2015
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
const float R1 = 1000;
const float R2 = 1000;
const float Uref = 5;
int sensorPin = 0;
float sensorValue = 0;
float outputValue = 0;
int valueMAX=5;
int valueMIN=-5;
float Uin=Uref*((R1+R2)/R2);
void setup(){
   pinMode(sensorPin, INPUT);
   lcd.begin(16, 2);
   lcd.print("DC VOLTMETER");
}
void loop(){
   sensorValue = analogRead(sensorPin);
   outputValue = (sensorValue*Uin)/1024.00;
   lcd.setCursor(0, 1);
lcd.print("INPUT V= ");
lcd.print(outputValue,4);
delay(500);
}

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

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

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

А причем тут вообще программа?

Расскажите, как Вы собираетесь мерять - просто по-русски.

bboykazbek
Offline
Зарегистрирован: 22.07.2015

На вход А0 подаю напряжение от батарейки 1,5 Вольта - все нормельно - на дисплее отображается правильное знаяение. Когда меняю полярность - ничего не происходит, а надо чтобы показало отрицательное значение того же номинала.

DIVGENY
Offline
Зарегистрирован: 23.08.2016

1 -511  // "1" самое большее отрицательное число

512 является "0"

513 -1023  //  "1023" большее положительное число

bboykazbek
Offline
Зарегистрирован: 22.07.2015

как в теле программы-то прописать?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Никак. Ардуина меряет правильное напряжение. А неправильное - надо сдвигать аппаратными срецтвами.

DIVGENY
Offline
Зарегистрирован: 23.08.2016

не только в программе. нужно сделать среднюю опорную точку номиналом 2.5 вольта и относительно ее подавать напряжение на вход А0.

DIVGENY
Offline
Зарегистрирован: 23.08.2016
bboykazbek
Offline
Зарегистрирован: 22.07.2015

как это сделать?

DIVGENY
Offline
Зарегистрирован: 23.08.2016

из двух прецезионных резисторов по 1к собрать делитель напряжения.

bboykazbek
Offline
Зарегистрирован: 22.07.2015

У меня так и собран.

bboykazbek
Offline
Зарегистрирован: 22.07.2015

Как на лисплей отрицательное значение вытащить не знаю(((

DIVGENY
Offline
Зарегистрирован: 23.08.2016

 нарисуй и покажи свою схему с дуиной для начала


#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

int sensorPin = 0;
float outputValue ;
int value ;
void setup(){
   pinMode(sensorPin, INPUT);
   lcd.begin(16, 2);
   lcd.print("DC VOLTMETER");
}
void loop(){

if ( analogRead(sensorPin)  == 512 ) int value = 0;
else if ( analogRead(sensorPin) < 512) 
   { 
    int value = map(analogRead(sensorPin), 1, 511, 500, 1);
   }
else if ( analogRead(sensorPin) > 512)
    { 
      int value = map(analogRead(sensorPin), 513, 1023, 1, 500);
    }
float outputValue = value/100;
   lcd.setCursor(0, 1);
lcd.print("INPUT V= ");
lcd.print(outputValue,4);   // а можно было просто вычесть необходимое значение ;)
delay(500);
}

 ВНИМАНИЕ.! Не вздумайте подать на вход контроллера больше 5в. позаботьтесь об этом, предварительно подключив резисторные делители от источника вашего напряжения.!!!

вот почему я прошу от вас сначала схему.

как сделать минус для отрицательных показаний подумай сам....

asam
Offline
Зарегистрирован: 12.12.2018

DIVGENY пишет:

 ВНИМАНИЕ.! Не вздумайте подать на вход контроллера больше 5в. позаботьтесь об этом, предварительно подключив резисторные делители от источника вашего напряжения.!!!

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

svm
Offline
Зарегистрирован: 06.11.2016

Вырежи все лишнее из этого http://arduino.ru/forum/proekty/universalnyi-arduino-probnik?page=2#comment-352526 , оставь только вольтметр (строки 29-58). Ограничеие - автономное питание т.к. пробник для измерения отрицательного напряжения перекидывает щупы.

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

bboykazbek пишет:

На вход А0 подаю напряжение от батарейки 1,5 Вольта - все нормельно - на дисплее отображается правильное знаяение. Когда меняю полярность - ничего не происходит, а надо чтобы показало отрицательное значение того же номинала.

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

Ардуино принципиально не может измерять отрицательные напряжения.

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

Тут уже предлагали делитель. Мне кажется, не лучший вариант: снижение точности измеренгий, борьба с погрешностями из-за конечного сопротивления, "плавающий" ноль и т.п.

Если бы такая задача стояла передо мной, я бы, пожалуй, сделал линейный выпрямитель на ОУ и компаратор с логическим выходом. Таким образом Ардуина будет читать информацию через два пина: аналоговый - для определения абсолютной величины напряжения, и цифровой - чтобы узнать знак напряжения.

svm
Offline
Зарегистрирован: 06.11.2016

andriano пишет:

Тут уже предлагали делитель. Мне кажется, не лучший вариант: снижение точности измеренгий, борьба с погрешностями из-за конечного сопротивления, "плавающий" ноль и т.п.

Неизвестно, какие у ТС требования к точности. В принципе вариант с делителем тоже имеет право на жизнь. Положительные напряжения - измерять традиционным методом, а отрицательные с помощью подключаемого делителя, на который подается положительное напряжение, для компенации отрицательного. В этом случае хотя-бы "0" плавать не будет. Но точность при измерении отрицательного напряжения скорее всего будет ниже.

bboykazbek
Offline
Зарегистрирован: 22.07.2015

DIVGENY, если бы я смог написать и подумать сам как это сделать  - неужели бы я здесь что-то писал?))

bboykazbek
Offline
Зарегистрирован: 22.07.2015

Вот такое подключение - делитель напряжения с сопротивлениями по 1 кОм.

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

одного делителя видимо будет недостаточно, измерять надо по данным ТС от -5 до +5

bboykazbek
Offline
Зарегистрирован: 22.07.2015

ua6em пишет:

одного делителя видимо будет недостаточно, измерять надо по данным ТС от -5 до +5

Что делать-то не знаю я уже...((((

А что такое ТС, стесняюсь спросить?

asam
Offline
Зарегистрирован: 12.12.2018

bboykazbek пишет:

А что такое ТС, стесняюсь спросить?

 

Топик стартер, то есть вы

asam
Offline
Зарегистрирован: 12.12.2018

Так с какой точностью надо измерять-то?

bboykazbek
Offline
Зарегистрирован: 22.07.2015

Что делать - это извечный вопрос, сдвигать его аппратно я не знаю как, делитель менять - он только мерит всё-равно в одну сторону...

asam
Offline
Зарегистрирован: 12.12.2018

Тут же уже предлагали сделать линейный выпрямитель на ОУ. 

 

bboykazbek
Offline
Зарегистрирован: 22.07.2015

Схему дайте пожалуйста. А как его [отрицательное напряжение] на дисплее отобразить?

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

svm пишет:

Неизвестно, какие у ТС требования к точности. В принципе вариант с делителем тоже имеет право на жизнь. Положительные напряжения - измерять традиционным методом, а отрицательные с помощью подключаемого делителя, на который подается положительное напряжение, для компенации отрицательного. В этом случае хотя-бы "0" плавать не будет. Но точность при измерении отрицательного напряжения скорее всего будет ниже.

"Несимметричный" режим измерения - само по себе зло.

Далее: кто именно будет принимать решение на переключение схемы, пользователь или сам прибор?

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

bboykazbek
Offline
Зарегистрирован: 22.07.2015

Прибор сам будет переключать. Идея какая - с блока генератора подается регулируемое напряжение от -5 вольт до +5 вольт и необходимо чтобы вольтметр это замерял. Когда пользователь будет крутить напряжение не генераторе вольтметр должен видеть значение и сам менять знак.

svm
Offline
Зарегистрирован: 06.11.2016

andriano пишет:

 

"Несимметричный" режим измерения - само по себе зло.

Далее: кто именно будет принимать решение на переключение схемы, пользователь или сам прибор?

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

По первому пункту, согласен, но все зависит от требований к прибору.

По второму - естественно прибор. Достаточно в схеме ТС добавить один резистор, подключенный к А0 и к любому цифровому пину и одному из аналоговых. Измерения проходят в два этапа. Сначала цифровой пин в высокоимпедансном состоянии и никакого влияния не оказывает. Делается попытка измерить напряжение. Если есть, то оно положительное и идет на индикатор .

Если измеренное значение=0, то на  цифровой пин выдается "1" (примерно 5В) и снова производится измерение. Со входа А0 и одного из дополнительных, который соединен с цифровым. В результате узнаем падение напряжения на дополнительном резисторею Результат получаем используя основные законы электротехники. 

bboykazbek
Offline
Зарегистрирован: 22.07.2015

svm пишет:

andriano пишет:

 

"Несимметричный" режим измерения - само по себе зло.

Далее: кто именно будет принимать решение на переключение схемы, пользователь или сам прибор?

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

По первому пункту, согласен, но все зависит от требований к прибору.

По второму - естественно прибор. Достаточно в схеме ТС добавить один резистор, подключенный к А0 и к любому цифровому пину и одному из аналоговых. Измерения проходят в два этапа. Сначала цифровой пин в высокоимпедансном состоянии и никакого влияния не оказывает. Делается попытка измерить напряжение. Если есть, то оно положительное и идет на индикатор .

Если измеренное значение=0, то на  цифровой пин выдается "1" (примерно 5В) и снова производится измерение. Со входа А0 и одного из дополнительных, который соединен с цифровым. В результате узнаем падение напряжения на дополнительном резисторею Результат получаем используя основные законы электротехники. 

svm, наверное всё правильно говоришь, а как программно и аппратно это сделать, схему приложи пожалуйста.

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

bboykazbek пишет:

Схему дайте пожалуйста. А как его [отрицательное напряжение] на дисплее отобразить?

да точно так же как и положительное, но выводить по условию, если отрицательное выводим так:

lcd.print("INPUT V= -");
lcd.print(outputValue,4);

 

svm
Offline
Зарегистрирован: 06.11.2016

bboykazbek пишет:

svm, наверное всё правильно говоришь, а как программно и аппратно это сделать, схему приложи пожалуйста.

Сейчас еще раз посмотрел и понял, что все еще проще. Схема остается Ваша, но нижний резистор делителя подключается не на землю, а к любому цифровому пину. Если измеряете положительное напряжение - выдаете нанего "0". Если отрицательное - "1".  Для повышения точности желательно измерять напряжение на этом пине т.к сопротивление открытых ключей около 20 Ом, и несколько отличаются. Лучше задействовать еще один аналоговый пин и измерять напряжение на этом пине. Ну и в качестве опорного лучше взять внутренний источник 1,1 В. Не будет зависимости от источника питания ардуины. Я выше приводил ссылку на свой пробник. Посмотрите там вольтметр примерно так работает.

bboykazbek
Offline
Зарегистрирован: 22.07.2015

svm пишет:

bboykazbek пишет:

svm, наверное всё правильно говоришь, а как программно и аппратно это сделать, схему приложи пожалуйста.

Сейчас еще раз посмотрел и понял, что все еще проще. Схема остается Ваша, но нижний резистор делителя подключается не на землю, а к любому цифровому пину. Если измеряете положительное напряжение - выдаете нанего "0". Если отрицательное - "1".  Для повышения точности желательно измерять напряжение на этом пине т.к сопротивление открытых ключей около 20 Ом, и несколько отличаются. Лучше задействовать еще один аналоговый пин и измерять напряжение на этом пине. Ну и в качестве опорного лучше взять внутренний источник 1,1 В. Не будет зависимости от источника питания ардуины. Я выше приводил ссылку на свой пробник. Посмотрите там вольтметр примерно так работает.

Как мне мою программу изменить не напишешь, пожалуйста)))

bboykazbek
Offline
Зарегистрирован: 22.07.2015

ua6em пишет:

bboykazbek пишет:

Схему дайте пожалуйста. А как его [отрицательное напряжение] на дисплее отобразить?

да точно так же как и положительное, но выводить по условию, если отрицательное выводим так:

lcd.print("INPUT V= -");
lcd.print(outputValue,4);

 

Пробовал так сделать - шиш да и только...

asam
Offline
Зарегистрирован: 12.12.2018

bboykazbek пишет:

Схему дайте пожалуйста. А как его [отрицательное напряжение] на дисплее отобразить?

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

bboykazbek
Offline
Зарегистрирован: 22.07.2015

asam пишет:

bboykazbek пишет:

Схему дайте пожалуйста. А как его [отрицательное напряжение] на дисплее отобразить?

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

3 знака после запятой.

svm
Offline
Зарегистрирован: 06.11.2016

bboykazbek пишет:

Как мне мою программу изменить не напишешь, пожалуйста)))

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

bboykazbek
Offline
Зарегистрирован: 22.07.2015

svm пишет:

bboykazbek пишет:

Как мне мою программу изменить не напишешь, пожалуйста)))

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

Кстати говоря я тоже энергетик))) Правда трезвенник, патологически не пью!!! 

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Эта тема и в тот же день вот эта. Вам что в школе это задали?

svm
Offline
Зарегистрирован: 06.11.2016

bboykazbek пишет:

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

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

bboykazbek
Offline
Зарегистрирован: 22.07.2015

svm пишет:

bboykazbek пишет:

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

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

А если 2 знака?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Опять рацуха на копеечной комплектухе и с вымаливанием схемы/кода... Каков вклад топикстартера-то - соединить готовые модули и нажать "Upload"?

bboykazbek
Offline
Зарегистрирован: 22.07.2015

Уважаемый sadman41, если бы знал как отрицательный значения делать - сюда бы к вам и не обращался бы...

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

Зачем его делать? Попробуйте отрицательное число вывести на дисплей - оно само нарисуется отрицательным. Если измерять относительно точки 2.5 вольта, то напряжение будет измеряться от - 2.5 до +2.5 вольта. Результат получится u=2.5*(Uadc-512)/512. Точность будет зависить от напряжения на Uref. Для измерения больших напряжений потребуется входной делитель и его нужно учесть в формуле.

svm
Offline
Зарегистрирован: 06.11.2016

bboykazbek пишет:

А если 2 знака?

Два знака здесь вроде стабильно показывает. http://arduino.ru/forum/proekty/universalnyi-arduino-probnik?page=2#comment-352905  Максимальное напряжение 20В. Если изменить сопротивления делителей, чтобы максимальное напряжение было 5В, то тчность увеличится.

bboykazbek
Offline
Зарегистрирован: 22.07.2015

svm пишет:

bboykazbek пишет:

А если 2 знака?

Два знака здесь вроде стабильно показывает. http://arduino.ru/forum/proekty/universalnyi-arduino-probnik?page=2#comment-352905  Максимальное напряжение 20В. Если изменить сопротивления делителей, чтобы максимальное напряжение было 5В, то тчность увеличится.

А с отрицательным напряжением как быть?

bboykazbek
Offline
Зарегистрирован: 22.07.2015

nik182 пишет:
Зачем его делать? Попробуйте отрицательное число вывести на дисплей - оно само нарисуется отрицательным. Если измерять относительно точки 2.5 вольта, то напряжение будет измеряться от - 2.5 до +2.5 вольта. Результат получится u=2.5*(Uadc-512)/512. Точность будет зависить от напряжения на Uref. Для измерения больших напряжений потребуется входной делитель и его нужно учесть в формуле.

Попробовал и так - ноль эмоций, фунт призренья...

svm
Offline
Зарегистрирован: 06.11.2016

bboykazbek пишет:

 

А с отрицательным напряжением как быть?

При выводе на дисплей смотрите режим. Если ri=1, пишете "положительное или +" если   ri=2 то "отрицательное".

Резисторы в 33 кОм не нужны, да и скетч нужно заметно урезать.

 

bboykazbek
Offline
Зарегистрирован: 22.07.2015

svm пишет:

bboykazbek пишет:

 

А с отрицательным напряжением как быть?

При выводе на дисплей смотрите режим. Если ri=1, пишете "положительное или +" если   ri=2 то "отрицательное".

Резисторы в 33 кОм не нужны, да и скетч нужно заметно урезать.

 

Если честно, ничего не понял, простите пожалуйста...

bboykazbek
Offline
Зарегистрирован: 22.07.2015
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
const float R1 = 1000;
const float R2 = 1000;
const float Uref = 5;
int sensorPin = 0;
float sensorValue = 0;
float outputValue = 0;
float Uin=Uref*((R1+R2)/R2);
void setup(){
   pinMode(sensorPin, INPUT);
   lcd.begin(16, 2);
   lcd.print("DC VOLTMETER");
}
void loop(){
   sensorValue = analogRead(sensorPin);
   outputValue = (sensorValue*Uin)/1024.00;
   lcd.setCursor(0, 1);
  lcd.print("INPUT V= ");
lcd.print(outputValue,3);
delay(500);
   }
   

Убрал две ненужные строки.

 

svm
Offline
Зарегистрирован: 06.11.2016

У пробника несколько режимов. При измерении положительных напряжений режим ri=1, если положительное напряжение не обнаружено, он переворачивает щупы - режим ri=2, если нет и отрицательного, включается режим измерения сопртивления ri=3. В зависимости от режима на индикатор выводится соответствующая дополнительная информация (+ - или R)