Миллиамперметр на Ардуино.

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

действительно, подключение поменял и все стало на свои места. 

forfrends
Offline
Зарегистрирован: 24.02.2015

Друзья, что-то не могу найти программу Calc_Arduino. В указанной папке что-то я ее не нашел: http://yadi.sk/d/CXjuENmaEEwun

Я ее пропустил или ее там нет? Дайте ссылку.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

forfrends
Offline
Зарегистрирован: 24.02.2015

По описанию полезная вещь. Бы ло бы не плохо ее иметь. Может на Гугл диск ее?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

может у меня антивирус ее удалил

forfrends
Offline
Зарегистрирован: 24.02.2015

:(

В сети не смог ее найти.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

http://arduino.ru/forum/obshchii/adc-calc

вот тема. может у автора она осталась

alvor
Offline
Зарегистрирован: 16.10.2014

У меня эта прога осталась. Держите кому надо. Если автор не против ))

https://drive.google.com/open?id=0B4K2v83npT_DdFBEZWJzTkdUclk

forfrends
Offline
Зарегистрирован: 24.02.2015

Присибо! Програмка пригодилась. Вот что у меня получилось: https://youtu.be/lgoz3rpJOXE

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

Заказал с Али LM4040CIZ. Попробую через него организовать замер для вольтей. Ну а для милливольт придется подыскать другое.

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

Добрый вечер народ!

подскажите пожалуйста опять таки по миллиампреметру. 

на порту A4 на данный момент 45mV (с шунта)

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

За меня считать конечно не нужно если нет желания но хотя бы подскажите - с внешним опорником на 5 вольт мне не видать данных с этого порта при таком раскладе?

#include <LiquidCrystal.h>
#include <LcdBarGraph.h>
#include <Wire.h>
#include "Sodaq_DS3231.h"



LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // для экрана  RS, E, DB4, DB5, DB6, DB7
unsigned long zamerV = 900;  // интервал для змеров показаний
unsigned long startlog = 5000; // интервал для логирования показний
unsigned long pauseOff = 60000; // интервал для паузы перед выключением заряда
unsigned long previousMillis = 0; // время последнего задействования замеров
unsigned long previousMillis2 = 0; // время последнего задействования логирования
unsigned long previousMillis3 = 0; //время последнего задействования паузы перед отключением зарядки
float Vin = 0; // переменная для напряжения(для замера) 
float Uin = 0; // переменная для тока(для замера)


   // для карты памяти SD
#include <SPI.h> 
#include <SD.h>
const int chipSelect = 22; // выход для CS 2 
File myFile; // создаю мой файл для карты памяти



///// ПЕРЕМЕННЫЕ ДЛЯ ИЗМЕРЕНИЯ
float VinOld;  // переменные для усреднения напряжения
float VinSmooth;
float UinOld;  // переменные для усреднения тока
float UinSmooth;
float UinShkal; // переменная для шкалы
float Uinzaryad = 40;    // переменная для контроля зарядки, отключение пускателя
byte nomerP = 0; //флаг , определяет номер програмы, какой аккумулятор нужно заряжать.
boolean vse = false; //флаг , определяет заряжен ли аккум до своего максимума

/////ДЛЯ ЧАСОВ SDA= A4 SCL= A5 +5мсс   gnd


//////////КНОПКИ
#define Akkum1 24     // ВХОД кнопка запуска заряда акумулятора 1 (10 пин пробит именно на шилде)
#define Akkum2 25     // ВХОД кнопка запуска заряда акумулятора 2
#define Akkum3 26     // ВХОД кнопка запуска заряда акумулятора 3 
boolean BTNFlag1 = false;// флаг кнопки запуска аккумулятора 1
boolean BTNFlag2 = false;// флаг кнопки запуска аккумулятора 2
boolean BTNFlag3 = false;// флаг кнопки запуска аккумулятора 3
///////////ВЫХОДА
#define relay1  27   //реле на 27 пине 



LcdBarGraph lbg(&lcd, 16, 0, 1);  // -- создаю графбар: перая цифра-количество полных кубиков в шкале, вторая:от куда начинается, третья: по высоте номер строки  (column 1)




void setup()
{ 
  pinMode (Akkum1, INPUT); //кнопка запуска 1 аккумулятора
  pinMode (Akkum2, INPUT); //кнопка запуска 2 аккумулятора
  pinMode (Akkum3, INPUT); //кнопка запуска 3 аккумулятора
  pinMode (27, OUTPUT); //выход на реле№1 основное включает зарядку
  digitalWrite(relay1, HIGH);
  rtc.begin(); //иници часов
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(" PROVER UROVEN ");
  lcd.setCursor(1, 1);
  lcd.print("  DISTILATA! ");
  lcd.clear();
  analogReference(EXTERNAL); // переключаю на внешнее AREF
  pinMode(2, OUTPUT); // специально иначе логировать не будет
  Serial.begin(9600); 
  while (!Serial) // если открывается порт на пк
  {
    ; //Ждём инициализации серийного порта. Нужно для Leonardo
  }

  Serial.print("Initializing SD card...");

  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");
  
}

void loop()
{ 
   // состояние КНОПОК ЗАПУСКА заряда аккумуляторов 
   
if (digitalRead(Akkum1) == HIGH)
   BTNFlag1 = true; //если КНОПКА ЗАПУСКА аккумулятора 1 нажата - флаг верно  
  else
   BTNFlag1 = false;// иначе - неверно.
   // состояние КНОПОК ЗАПУСКА заряда аккумуляторов
  
if (digitalRead(Akkum2) == HIGH)
   BTNFlag2 = true; //если КНОПКА ЗАПУСКА аккумулятора 1 нажата - флаг верно  
  else
   BTNFlag2 = false;// иначе - неверно.
   // состояние КНОПОК ЗАПУСКА заряда аккумуляторов
if (digitalRead(Akkum3) == HIGH)
   BTNFlag3 = true; //если КНОПКА ЗАПУСКА аккумулятора 1 нажата - флаг верно  
  else
   BTNFlag3 = false;// иначе - неверно.  





   
    
        //////ПРИМЕР формулы АЦП
    /*(analogRead(A5) * 1.1) / 10.23;
     float переменная = (читаем нужный аналоговый вход, умножаем на опорное напряжение)
     делим на коефициент делителя
     
     С усреднением совсем просто. Вводим две переменных для усреднённого значения
     и по простой формуле усредняем. 15 и 16 это глубина усреднения (N и N-1).
     Чем больше N тем лучше усредняется,но тем медленнее реакция. Начать эксперементы
     с усреднением можно с 4 (3 и 4 вместо 15 и 16)
     Vin = (analogRead(A5) * 1.1) / 10.23;
    VinOld=VinSmooth;
    VinSmooth=(15.0*VinOld+Vin)/16.0; 

    */

/////////////////////вытаскиваю данные с часов:
    DateTime now = rtc.now(); //Получить текущую дату-время
    
    
    if(millis() - previousMillis > zamerV)
    {
    previousMillis = millis();      
    float Vin = ((float)analogRead(A3)) * 0.12009495880;   //5./1023./ 4.2 * (99.6 + 4.2); // вычисление ацп напряжение на А5
    VinOld=VinSmooth;   // приравнивание переменных друг другу
    VinSmooth=(2.0*VinOld+Vin)/3.0; // формула для усреднения показания 
    float Uin = (analogRead(A4)*5/1023)/0.00075;  //// вычисление тока на А10
    Serial.println(UinSmooth);
    UinOld=UinSmooth;
    UinSmooth=(2.0*UinOld+Uin)/3.0; // формула для усреднения показания 
    }
    lcd.setCursor(0, 0);
    lcd.print("V=");  
    lcd.print(VinSmooth,1); // вывожу усредненные показания для напряжения.
    lcd.print(" ");
    lcd.setCursor(7, 0);
    lcd.print("A=");
    lcd.print(UinSmooth,1); // вывожу усредненные показания для тока
    lcd.print("  ");
    lcd.setCursor(14, 0);
    lcd.print("N");
    lcd.print(nomerP);
    UinShkal = 100 - UinSmooth;
    lbg.drawValue( UinShkal, 100); // -- рисую график из данных по току, после формул усреднения от 


     
                  
}


 

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

maxvalin пишет:

на порту A4 на данный момент 45mV (с шунта)

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

За меня считать конечно не нужно если нет желания но хотя бы подскажите - с внешним опорником на 5 вольт мне не видать данных с этого порта при таком раскладе?

Ну ладно, раз хотите, считайте сами: 45мВ/5000мВ*1023=? единиц АЦП.

Только вот я не понимаю, зачем вместо 

BTNFlag1 = digitalRead(Akkum1);

писать

if (digitalRead(Akkum1) == HIGH)

   BTNFlag1 = true; //если КНОПКА ЗАПУСКА аккумулятора 1 нажата - флаг верно  
  else
   BTNFlag1 = false;// иначе - неверно.

и так 3 раза?

 

 

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

Все элементарно посто:)

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

Теперь буду использовать вашу комбинацию! 

Синтаксиз вещь не сложная,  но еще не встретил литературы типа: вместо этого - используйте вот так. 

Вот и выдергиваешь информацию вот так! 

А по поводу АЦП- должен ловить 9207?

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

maxvalin пишет:

Синтаксиз вещь не сложная,  но еще не встретил литературы типа: вместо этого - используйте вот так. 

Алгоритм простой: не пишите лишнего.

Ну а для конкретики, думаю, можно будет издать трехтомник с советами типа:

вместо

a = (((b == true) == true) == true) == true;

пишите

a = b;

и вместо 

if (b == true)
  a = true;
else
  a = false;

тоже пишите

a = b;

и еще 3 тома комбинаций, вместо каждой из которых следует писать

a = b;

Цитата:

Вот и выдергиваешь информацию вот так! 

А по поводу АЦП- должен ловить 9207?

Не понял, что это значит.

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

maxvalin пишет:

Добрый вечер народ!

подскажите пожалуйста опять таки по миллиампреметру. 

на порту A4 на данный момент 45mV (с шунта)

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

это исходный вопрос на пару постов выше.

но зная себя (как я неправильно ставлю вопросы)

Спрашиваю подробней:

-загнав A4 в сериал монитор что я должен увидеть в нем?, при том что на данный момент на данный сериал идет 45mV и  опорное напряжение установленно от внешнего LM4040 на 5 вольт. Спросил потому что думаю что при таком сравнении (45mV ,  5V)  возможно там ничего и не увижу. От этого делаю вывод что сделал большой промах когда ушел от внутреннего 1.1 вольта. а ушел из-за того что на втором порту меряю напряжение DC 100 вольт и при опорном внутреннем на 1.1 вольта большая погрешность и нелинейность, да и питание естественно портит всю картину. сейчас с LM4040 показания вольт стабильные, но на амперметре обломался...  в общим вот так.

А по поводу 9-ти томов, я понял. При чем еще по первой строчке, дальше можно было не утруждаться, так как вы спротиворечили сами себе: "Алгоритм простой: не пишите лишнего." )))

 

 

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

art100 пишет:

dimax пишет:
.. INA195...шунт...

хм

автомобильная тематика

спасибо

 

можно подробней?

есть примеры?

вернулся к проблеме, не нашел инфы чето((