вольтметр

Ответить
Naum
Рядовой
Сообщения: 39
Зарегистрирован: 14.09.2015{, 00:05}
Репутация: 0

вольтметр

#1

Сообщение Naum » 17.09.2015{, 15:14}

хочется сделать проект для зарядки 2 аккумулятора в машине.
Как построить вольтметр с выходом информация на дисплей?
 
 

Добавлено (17.09.2015, 15:14)
---------------------------------------------
для начала построил примерно так, но хотелось бы написать это именно в этой программе
Flprog  мне пока что очень нравится
 
 
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C _lcd1(0x27, 16, 2);
int _dispTempLength1=0;
//boolean _isNeedClearDisp1;
//int _disp1oldLength = 0;
bool _D1B1 = 0;

const int battery1SensorPin = 14;
const int battery2SensorPin = 15; 
int  battery1SensorValue = 0; 
float battery1Voltage = 0;
int  battery2SensorValue = 0; 
float battery2Voltage = 0; 
// 5V/1024 значений = 0,004883 В/значение
const float voltPerUnit = 0.004883;
//"рассчёт делителя"
const float R1 = 100;
const float R2 = 10;
//коэффициент для расчёта напряжения на входе делителя
const float dividerRatio = (R1+R2)/R2;
//коэффициент перевода имерений в напряжение
const float voltRatio = voltPerUnit * dividerRatio;
void setup() {
 
  Wire.begin();
_lcd1.init();
//_lcd1.noBacklight();
}
void loop() {
  battery1SensorValue = analogRead(battery1SensorPin);
// рассчитаем в человеко-понятных вольтах 
  battery1Voltage = battery1SensorValue * voltRatio; 

  _lcd1.backlight();
  _lcd1.setCursor(int((1 - _dispTempLength1)/2), 0);
  _lcd1.print("Battery1 - ");
_lcd1.print(((String(battery1Voltage))));
battery2SensorValue = analogRead(battery2SensorPin);
// рассчитаем в человеко-понятных вольтах 
  battery2Voltage = battery2SensorValue * voltRatio;
  _lcd1.backlight();
  _lcd1.setCursor(int((1 - _dispTempLength1)/2), 1);
  _lcd1.print("Battery2 - ");
_lcd1.print(((String(battery2Voltage))));
 
  delay(5000);                    
}

krom23
Лейтенант
Сообщения: 444
Зарегистрирован: 06.09.2015{, 15:18}
Репутация: 12
Откуда: Калуга
Имя: Андрей

вольтметр

#2

Сообщение krom23 » 17.09.2015{, 19:23}

R1-100k(+)
R2-10k(общий)
Коэффициент деления-11
Uизмерения- 0...+50V, если напряжение будет выше 55V, то ардуинке придёт каюк.
volt=(опорное*полученное с A0/1023.0)*коэффициент деления
опорное напряжение измерить на плате ардуинки.
Вложения
5709942.flp
(73.84 КБ) 139 скачиваний

Naum
Рядовой
Сообщения: 39
Зарегистрирован: 14.09.2015{, 00:05}
Репутация: 0

вольтметр

#3

Сообщение Naum » 20.09.2015{, 09:04}

Большое спасибо за помощь очень понравилось решение.
 есть непонятный момент:
 
 
String  _floatToStringWitRaz(float value, int raz)
{
  float tv;
  int ti = int(value);
  String ts = String(ti);
  if (raz == 0) {
    return ts;
  }
  ts += ".";
  float tf = abs(value - ti);
  for (int i = 1; i <= raz; i++ )
  {
    tv = tf * 10;
    ti = int(tv);
    ts += String(ti);
    tf = (tv - ti);
  }
  return ts;
 
 
следующая задача сравнить измеряемое напряжение с напряжением заданным и управлять включением реле в зависимости от заряда аккумулятора
допустим заряд начнется при 13.5 Вольт и отключается при 13.0
наверное правильно будет проверять условия раз в 30 секунд, мне так кажется
заряд второго аккумулятора начнется только после первого.
Буду очень признателен за помощь Это мой первый проект.

krom23
Лейтенант
Сообщения: 444
Зарегистрирован: 06.09.2015{, 15:18}
Репутация: 12
Откуда: Калуга
Имя: Андрей

вольтметр

#4

Сообщение krom23 » 21.09.2015{, 20:53}

Э...э, прошу не выражаться, в смысле кодом, я в нём ни бум-бум, но по моему здесь речь идёт о преобразовании данных из float(величина с плавающей запятой) в строчное значение String для отображения на жк дисплее. Открываем проект, и смотрим Блоки>Конвертация типов>Преобразование строк(SConv). Это на плате 2, если вы используете другой метод индикации, то её(плату) можно удалить или переделать.
Naum писал(а):допустим заряд начнется при 13.5 Вольт и отключается при 13.0
Вы не ошиблись? Я сделал наоборот, при 13.0 включится, при 13.5 отключится. В случае если я не прав, поменяйте местами константы на компараторах в проекте. Да, и ещё момент, я даю вам, как бы лучше выразиться, не "изящное" решение, за ним к гуру сайта, а скорее "скелет", который можно использовать на прямую, а можно обрастить мяском.
Вложения
7629321.flp
(105.61 КБ) 107 скачиваний

Naum
Рядовой
Сообщения: 39
Зарегистрирован: 14.09.2015{, 00:05}
Репутация: 0

вольтметр

#5

Сообщение Naum » 15.10.2015{, 11:26}

Большое спасибо за помощь, этим проектом пока не занимался не хватает времени, но я обязательно его доведу до конца.

Добавлено (15.10.2015, 11:26)
---------------------------------------------
в продолжение проекта по измерению напряжения, столкнулся с проблемой.
задача: измерить напряжение, поместить в переменную, отобразить на экране переменную, подождать 2 секунды, опять измерить напряжение, отобразить на экране.
не могу понять какой модуль использовать для задержки изменения переменой при измерении напряжения

Airis
Сержант
Сообщения: 175
Зарегистрирован: 24.09.2015{, 07:27}
Репутация: 0

вольтметр

#6

Сообщение Airis » 16.10.2015{, 22:14}

Цитата Naum ()200?'200px':''+(this.scrollHeight+5)+'px');">измерить напряжение, поместить в переменную, отобразить на экране переменную, подождать 2 секунды, опять измерить напряжение, отобразить на экране.Примерно так:
Вложения
8316082.png
Последний раз редактировалось Airis 16.10.2015{, 22:14}, всего редактировалось 1 раз.

Naum
Рядовой
Сообщения: 39
Зарегистрирован: 14.09.2015{, 00:05}
Репутация: 0

вольтметр

#7

Сообщение Naum » 14.11.2015{, 23:21}

Вот мой первый проект перешел в стадию тестирования.
Большое спасибо всем за помощь.
если кому-то будет интересно пишите.
https://plus.google.com/u....5269473

https://goo.gl/photos/EwAFLb14fZ3TSLcx5

rf80
Рядовой
Сообщения: 76
Зарегистрирован: 26.11.2015{, 20:29}
Репутация: 0

вольтметр

#8

Сообщение rf80 » 03.01.2016{, 21:07}

Доброго всем. Подскажите а как организовать замораживание измерения с какой то дискретностью.
Чтобы цыфры не бегали

Аватара пользователя
scadapack
Рядовой
Сообщения: 83
Зарегистрирован: 07.09.2015{, 05:18}
Репутация: 5
Откуда: Степногорск
Имя: Вячеслав

вольтметр

#9

Сообщение scadapack » 04.01.2016{, 15:11}

rf80 писал(а):Чтобы цыфры не бегали
Могу посоветовать мой, ставший здесь уже популярным, сглаживающий фильтр (пользовательский блок)
Вложения
2877951.ubi
(78.2 КБ) 157 скачиваний

rf80
Рядовой
Сообщения: 76
Зарегистрирован: 26.11.2015{, 20:29}
Репутация: 0

вольтметр

#10

Сообщение rf80 » 04.01.2016{, 23:52}

да спосибо написал а потом и сам вспомнил про Ваш блок. Правда цифры медленно набираются(чтобы цифры не скакали но тут большую роль играет наводка через сопли монтажки) но в моем случае инертность допустима. Столкнулся с другой проблеммой с точностью измерений. как привязаться к опорному напряжению в флпрог. Я пару дней как получил свою ардину и только ковыряю шилды. Зналбы конечно о флпрог взял бы раньше. раньше писал проект на шнайдеровском. но дорог он за раза для хобби раз да и устройства на его базе не продашь. проблемма с точностью актуальное так как и при аналоговым датчикам таже беда выплывать будет

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

вольтметр

#11

Сообщение Олег » 04.01.2016{, 23:58}

Настройки - Настройки проекта - поставить чекбокс на Использовать внешнее опорное напряжение A ref.

Аватара пользователя
scadapack
Рядовой
Сообщения: 83
Зарегистрирован: 07.09.2015{, 05:18}
Репутация: 5
Откуда: Степногорск
Имя: Вячеслав

вольтметр

#12

Сообщение scadapack » 05.01.2016{, 06:03}

rf80 писал(а):цифры медленно набираются
Настройки блока сглаживающего фильтра можно менять, если щёлкнуть на значке фильтра в проекте. По умолчанию константа сглаживания k = 0,01. От неё и зависит сглаживание.

rf80
Рядовой
Сообщения: 76
Зарегистрирован: 26.11.2015{, 20:29}
Репутация: 0

вольтметр

#13

Сообщение rf80 » 05.01.2016{, 08:38}

Спасибо. Буду пробовать. По фильтру по настройкам я разобрался сразу. вот только значения перестают скакать при почти максимальном сглаживании. Для организации индикации может лучше пользоваться массивом наверное как я понимаю. Но я сними не дружу пока. Нужно организовать опрос входа с определенным интервалом скажем 0.3 сек что уже может увидеть человеческий глаз. Это позволит выводить на экран самые одекватные данные. Хотя я могу и ошибаться. 
Мне больше приходилось заниматься аналогом но это уже давно не объективно по ряду причин. Хотя обвязка с внешним миром контроллера опять аналог.
Еще инересно кто как развязывает сигналы от сети. Понятно что опто. Но к примеру задача может быть просто получить единичку если сеть есть это просто. А как если нужно получить значение. Гальвонически тоже понятно. Но питание все чаще импульсное и после ШИМ фокус неудасться. Делитель можно посчитать на любое значение напряжения но импульсная помеха может наделать не обратимых дел. Наверное можно сделать его и ступенчатым скажем в первой ступеньке поставить варистор во второй стабилитрон. Хотя опять же по стабилитрону есть нюансы он работает нормально при протекании довально таки большом токе для измерительной цепи. Хотя в прочем на ток меньше пары милиампер опускаться и не стоит иначе будем ловить наводки.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2284
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

вольтметр

#14

Сообщение rw6cm » 13.01.2016{, 12:19}

rf80 писал(а):Еще инересно кто как развязывает сигналы от сети. Понятно что опто. Но к примеру задача может быть просто получить единичку если сеть есть это просто. А как если нужно получить значение.
Интересный подход к измерению опубликован здесь.
Win10-64, FLProg (portable)

krom23
Лейтенант
Сообщения: 444
Зарегистрирован: 06.09.2015{, 15:18}
Репутация: 12
Откуда: Калуга
Имя: Андрей

вольтметр

#15

Сообщение krom23 » 23.01.2016{, 00:07}

rw6cm писал(а):Интересный подход к измерению опубликован здесь.
Лучше фоторезистор и лампочку через токоограничивающий резистор без диодов.

Ответить

Вернуться в «Проекты различных устройств на Arduino»