Необходимо тело программы для вольтметра от -5 вольт до + 5 вольт
- Войдите на сайт для отправки комментариев
Вс, 23/12/2018 - 00:34
#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);
}
Здравствуйте, уважаемые форумчане и знактоки программирования. Пытался сделать вольтметр и у меня кризис.
Дальше не знаю, что делать(((( Я уже отчаялся. Когда необходимо измерить положительное напряжение - всё просто и гениально, а вот с отрицательным - вообще проблема мирового масштаба -ни черта не получается. Уважаемые знатоки данного магического дела, помогите пожалуйста.
А причем тут вообще программа?
Расскажите, как Вы собираетесь мерять - просто по-русски.
На вход А0 подаю напряжение от батарейки 1,5 Вольта - все нормельно - на дисплее отображается правильное знаяение. Когда меняю полярность - ничего не происходит, а надо чтобы показало отрицательное значение того же номинала.
1 -511 // "1" самое большее отрицательное число
512 является "0"
513 -1023 // "1023" большее положительное число
как в теле программы-то прописать?
Никак. Ардуина меряет правильное напряжение. А неправильное - надо сдвигать аппаратными срецтвами.
не только в программе. нужно сделать среднюю опорную точку номиналом 2.5 вольта и относительно ее подавать напряжение на вход А0.
http://arduino.ru/forum/programmirovanie/mgnovennoe-znachenie-napryazheniya
как это сделать?
из двух прецезионных резисторов по 1к собрать делитель напряжения.
У меня так и собран.
Как на лисплей отрицательное значение вытащить не знаю(((
нарисуй и покажи свою схему с дуиной для начала
#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в. позаботьтесь об этом, предварительно подключив резисторные делители от источника вашего напряжения.!!!
вот почему я прошу от вас сначала схему.
как сделать минус для отрицательных показаний подумай сам....
ВНИМАНИЕ.! Не вздумайте подать на вход контроллера больше 5в. позаботьтесь об этом, предварительно подключив резисторные делители от источника вашего напряжения.!!!
Подавать на входы напряжение меньше 0 тоже иожет быть очень не полезно для здоровья контроллера даже если не больше 5В по амплитуде.
Вырежи все лишнее из этого http://arduino.ru/forum/proekty/universalnyi-arduino-probnik?page=2#comment-352526 , оставь только вольтметр (строки 29-58). Ограничеие - автономное питание т.к. пробник для измерения отрицательного напряжения перекидывает щупы.
На вход А0 подаю напряжение от батарейки 1,5 Вольта - все нормельно - на дисплее отображается правильное знаяение. Когда меняю полярность - ничего не происходит, а надо чтобы показало отрицательное значение того же номинала.
Ардуино принципиально не может измерять отрицательные напряжения.
Так что, если Вам нужен прибор, который смог бы измерять отрицательные напряжения, Вам следует придумать, как это сделать, располагая лишь датчиком (т.е. Ардуиной), который может измерять только положительные напряжения, не превосходящие 5 В.
Тут уже предлагали делитель. Мне кажется, не лучший вариант: снижение точности измеренгий, борьба с погрешностями из-за конечного сопротивления, "плавающий" ноль и т.п.
Если бы такая задача стояла передо мной, я бы, пожалуй, сделал линейный выпрямитель на ОУ и компаратор с логическим выходом. Таким образом Ардуина будет читать информацию через два пина: аналоговый - для определения абсолютной величины напряжения, и цифровой - чтобы узнать знак напряжения.
Тут уже предлагали делитель. Мне кажется, не лучший вариант: снижение точности измеренгий, борьба с погрешностями из-за конечного сопротивления, "плавающий" ноль и т.п.
Неизвестно, какие у ТС требования к точности. В принципе вариант с делителем тоже имеет право на жизнь. Положительные напряжения - измерять традиционным методом, а отрицательные с помощью подключаемого делителя, на который подается положительное напряжение, для компенации отрицательного. В этом случае хотя-бы "0" плавать не будет. Но точность при измерении отрицательного напряжения скорее всего будет ниже.
DIVGENY, если бы я смог написать и подумать сам как это сделать - неужели бы я здесь что-то писал?))
Вот такое подключение - делитель напряжения с сопротивлениями по 1 кОм.
одного делителя видимо будет недостаточно, измерять надо по данным ТС от -5 до +5
одного делителя видимо будет недостаточно, измерять надо по данным ТС от -5 до +5
Что делать-то не знаю я уже...((((
А что такое ТС, стесняюсь спросить?
А что такое ТС, стесняюсь спросить?
Топик стартер, то есть вы
Так с какой точностью надо измерять-то?
Что делать - это извечный вопрос, сдвигать его аппратно я не знаю как, делитель менять - он только мерит всё-равно в одну сторону...
Тут же уже предлагали сделать линейный выпрямитель на ОУ.
Схему дайте пожалуйста. А как его [отрицательное напряжение] на дисплее отобразить?
Неизвестно, какие у ТС требования к точности. В принципе вариант с делителем тоже имеет право на жизнь. Положительные напряжения - измерять традиционным методом, а отрицательные с помощью подключаемого делителя, на который подается положительное напряжение, для компенации отрицательного. В этом случае хотя-бы "0" плавать не будет. Но точность при измерении отрицательного напряжения скорее всего будет ниже.
Далее: кто именно будет принимать решение на переключение схемы, пользователь или сам прибор?
Если пользователь, то ему проще поменять местами щупы. Если прибор - схема будет выглядеть ничуть не проще той, что предложил я, но обладать при этом серьезными недостатками, в первую очередь - асимметрией.
Прибор сам будет переключать. Идея какая - с блока генератора подается регулируемое напряжение от -5 вольт до +5 вольт и необходимо чтобы вольтметр это замерял. Когда пользователь будет крутить напряжение не генераторе вольтметр должен видеть значение и сам менять знак.
"Несимметричный" режим измерения - само по себе зло.
Далее: кто именно будет принимать решение на переключение схемы, пользователь или сам прибор?
Если пользователь, то ему проще поменять местами щупы. Если прибор - схема будет выглядеть ничуть не проще той, что предложил я, но обладать при этом серьезными недостатками, в первую очередь - асимметрией.
По первому пункту, согласен, но все зависит от требований к прибору.
По второму - естественно прибор. Достаточно в схеме ТС добавить один резистор, подключенный к А0 и к любому цифровому пину и одному из аналоговых. Измерения проходят в два этапа. Сначала цифровой пин в высокоимпедансном состоянии и никакого влияния не оказывает. Делается попытка измерить напряжение. Если есть, то оно положительное и идет на индикатор .
Если измеренное значение=0, то на цифровой пин выдается "1" (примерно 5В) и снова производится измерение. Со входа А0 и одного из дополнительных, который соединен с цифровым. В результате узнаем падение напряжения на дополнительном резисторею Результат получаем используя основные законы электротехники.
"Несимметричный" режим измерения - само по себе зло.
Далее: кто именно будет принимать решение на переключение схемы, пользователь или сам прибор?
Если пользователь, то ему проще поменять местами щупы. Если прибор - схема будет выглядеть ничуть не проще той, что предложил я, но обладать при этом серьезными недостатками, в первую очередь - асимметрией.
По первому пункту, согласен, но все зависит от требований к прибору.
По второму - естественно прибор. Достаточно в схеме ТС добавить один резистор, подключенный к А0 и к любому цифровому пину и одному из аналоговых. Измерения проходят в два этапа. Сначала цифровой пин в высокоимпедансном состоянии и никакого влияния не оказывает. Делается попытка измерить напряжение. Если есть, то оно положительное и идет на индикатор .
Если измеренное значение=0, то на цифровой пин выдается "1" (примерно 5В) и снова производится измерение. Со входа А0 и одного из дополнительных, который соединен с цифровым. В результате узнаем падение напряжения на дополнительном резисторею Результат получаем используя основные законы электротехники.
svm, наверное всё правильно говоришь, а как программно и аппратно это сделать, схему приложи пожалуйста.
Схему дайте пожалуйста. А как его [отрицательное напряжение] на дисплее отобразить?
да точно так же как и положительное, но выводить по условию, если отрицательное выводим так:
lcd.print("INPUT V= -"); lcd.print(outputValue,4);svm, наверное всё правильно говоришь, а как программно и аппратно это сделать, схему приложи пожалуйста.
Сейчас еще раз посмотрел и понял, что все еще проще. Схема остается Ваша, но нижний резистор делителя подключается не на землю, а к любому цифровому пину. Если измеряете положительное напряжение - выдаете нанего "0". Если отрицательное - "1". Для повышения точности желательно измерять напряжение на этом пине т.к сопротивление открытых ключей около 20 Ом, и несколько отличаются. Лучше задействовать еще один аналоговый пин и измерять напряжение на этом пине. Ну и в качестве опорного лучше взять внутренний источник 1,1 В. Не будет зависимости от источника питания ардуины. Я выше приводил ссылку на свой пробник. Посмотрите там вольтметр примерно так работает.
svm, наверное всё правильно говоришь, а как программно и аппратно это сделать, схему приложи пожалуйста.
Сейчас еще раз посмотрел и понял, что все еще проще. Схема остается Ваша, но нижний резистор делителя подключается не на землю, а к любому цифровому пину. Если измеряете положительное напряжение - выдаете нанего "0". Если отрицательное - "1". Для повышения точности желательно измерять напряжение на этом пине т.к сопротивление открытых ключей около 20 Ом, и несколько отличаются. Лучше задействовать еще один аналоговый пин и измерять напряжение на этом пине. Ну и в качестве опорного лучше взять внутренний источник 1,1 В. Не будет зависимости от источника питания ардуины. Я выше приводил ссылку на свой пробник. Посмотрите там вольтметр примерно так работает.
Как мне мою программу изменить не напишешь, пожалуйста)))
Схему дайте пожалуйста. А как его [отрицательное напряжение] на дисплее отобразить?
да точно так же как и положительное, но выводить по условию, если отрицательное выводим так:
lcd.print("INPUT V= -"); lcd.print(outputValue,4);Пробовал так сделать - шиш да и только...
Схему дайте пожалуйста. А как его [отрицательное напряжение] на дисплее отобразить?
Определитесь с какой точностью надо измерять. И тогда можно будет про схему разговаривать.
Схему дайте пожалуйста. А как его [отрицательное напряжение] на дисплее отобразить?
Определитесь с какой точностью надо измерять. И тогда можно будет про схему разговаривать.
3 знака после запятой.
Как мне мою программу изменить не напишешь, пожалуйста)))
Сегодня вряд-ли. Вчера был день энергетика, хотя энергетик - жена, голова у меня болит. Посмотри на ссылку, которуя я давал. Правда в комментариях там небольшой бардак и верить им не стоит. Ну а насчет трех знаков после запятой - это перебор.
Как мне мою программу изменить не напишешь, пожалуйста)))
Сегодня вряд-ли. Вчера был день энергетика, хотя энергетик - жена, голова у меня болит. Посмотри на ссылку, которуя я давал. Правда в комментариях там небольшой бардак и верить им не стоит. Ну а насчет трех знаков после запятой - это перебор.
Кстати говоря я тоже энергетик))) Правда трезвенник, патологически не пью!!!
Насчет 3 знаков - это не перебор, нужен он для измерения выхода с калибратора тока и напряжения и он должен быть особо точным, так же необхидим для рационализаторского предложения.
Эта тема и в тот же день вот эта. Вам что в школе это задали?
Насчет 3 знаков - это не перебор, нужен он для измерения выхода с калибратора тока и напряжения и он должен быть особо точным.
В таком случае, ардуинка Вам вряд-ли поможет. Только для вывода на дисплей. Здесь уже нужен хороший АЦП и более серьезный подход к входным цепям.
Насчет 3 знаков - это не перебор, нужен он для измерения выхода с калибратора тока и напряжения и он должен быть особо точным.
В таком случае, ардуинка Вам вряд-ли поможет. Только для вывода на дисплей. Здесь уже нужен хороший АЦП и более серьезный подход к входным цепям.
А если 2 знака?
Опять рацуха на копеечной комплектухе и с вымаливанием схемы/кода... Каков вклад топикстартера-то - соединить готовые модули и нажать "Upload"?
Уважаемый sadman41, если бы знал как отрицательный значения делать - сюда бы к вам и не обращался бы...
Зачем его делать? Попробуйте отрицательное число вывести на дисплей - оно само нарисуется отрицательным. Если измерять относительно точки 2.5 вольта, то напряжение будет измеряться от - 2.5 до +2.5 вольта. Результат получится u=2.5*(Uadc-512)/512. Точность будет зависить от напряжения на Uref. Для измерения больших напряжений потребуется входной делитель и его нужно учесть в формуле.
А если 2 знака?
Два знака здесь вроде стабильно показывает. http://arduino.ru/forum/proekty/universalnyi-arduino-probnik?page=2#comment-352905 Максимальное напряжение 20В. Если изменить сопротивления делителей, чтобы максимальное напряжение было 5В, то тчность увеличится.
А если 2 знака?
Два знака здесь вроде стабильно показывает. http://arduino.ru/forum/proekty/universalnyi-arduino-probnik?page=2#comment-352905 Максимальное напряжение 20В. Если изменить сопротивления делителей, чтобы максимальное напряжение было 5В, то тчность увеличится.
А с отрицательным напряжением как быть?
Попробовал и так - ноль эмоций, фунт призренья...
А с отрицательным напряжением как быть?
При выводе на дисплей смотрите режим. Если ri=1, пишете "положительное или +" если ri=2 то "отрицательное".
Резисторы в 33 кОм не нужны, да и скетч нужно заметно урезать.
А с отрицательным напряжением как быть?
При выводе на дисплей смотрите режим. Если ri=1, пишете "положительное или +" если ri=2 то "отрицательное".
Резисторы в 33 кОм не нужны, да и скетч нужно заметно урезать.
Если честно, ничего не понял, простите пожалуйста...
#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); }Убрал две ненужные строки.
У пробника несколько режимов. При измерении положительных напряжений режим ri=1, если положительное напряжение не обнаружено, он переворачивает щупы - режим ri=2, если нет и отрицательного, включается режим измерения сопртивления ri=3. В зависимости от режима на индикатор выводится соответствующая дополнительная информация (+ - или R)