помогите новичку

monomah86
Offline
Зарегистрирован: 06.01.2018

В инете нашел зарядное устройство для АКБ на ардуино вот решил собрать такой а с програмированием пока ООчень туго  скетч собран для платы Ардуино УНО совместимая плата Wemos D1, у меня есть плата ардуино УНО и мега 2560 с встроенным вай фай

monomah86
Offline
Зарегистрирован: 06.01.2018

В инете нашел зарядное устройство для АКБ на ардуино вот решил собрать такой а с програмированием пока ООчень туго  скетч собран для платы Ардуино УНО совместимая плата Wemos D1, у меня есть плата ардуино УНО и мега 2560 с встроенным вай фай.

#include <ESP8266WiFi.h>
#include <SSD1306.h>
#include "font.h"

SSD1306  display(0x3c, D2, D1);

const char* ssid     = "";
const char* password = "";
const char* host     = "192.168.1.22";

const long intervalCharge    = 3000;  // Время заряда
const long intervalDischarge = 3000;  // Время разряда
const long intervalWait      = 500;   // Время ожидания
const long intervalSendInfo  = 60000; // Время отправки

const float voltageMin       = 12.0; // Минимально допустимое напряжение
const float vMaxFirstCycle   = 14.4; // Максимальное напряжение первого цикла заряда
const float vMaxSecondCycle  = 15.9; // Максимальное напряжение второго цикла заряда

unsigned long previousMillis        = 0; // Время
unsigned long previousMillisControl = 0; // Время
unsigned long previousMillisSend    = 0; // Время

int vEndCount    = 0;     // Счётчик и выхода напряжения за пределы нормы дабы исключить ложные срабатывания

bool charge      = false; // Идёт заряд
bool firstCycle  = false; // Указывает идёт ли сейчас зарядка первым циклом
bool secondCycle = false; // Указывает идёт ли сейчас зарядка первым циклом

const int analogInput = 0;  // Аналоговый вход
const int relayCharge = D3; // Пин на реле зарадки
const int relayLamp   = D4; // Пин на реле лампы
const int buttonPin   = D5; // Пин кнопки

float vout = 0.0;
float vin  = 0.0;

float voltage = 0.0;

//float R1 = 100000.0; // resistance of R1 (100K)
//float R2 = 10000.0;  // resistance of R2 (10K)
float R1 = 99500.0; // resistance of R1 (100K)
float R2 = 9900.0;  // resistance of R2 (10K)

int value = 0;

void wifiInit() {
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

float getVoltage() {
  value = analogRead(analogInput);  // read the value at analog input
  vout = (value * 3.3) / 1023.0;
  vin = vout / (R2 / (R1 + R2));
  if (vin < 0.15) {
    vin = 0.0; //statement to quash undesired reading !
  }

  return vin;
}

void displayVoltage() {
  display.clear();
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.setFont(Orbitron_Light_26);
  if (!firstCycle && !secondCycle) {
    display.drawString(5, 28, "v" + (String)voltage);
  } else {
    display.drawString(5, 28, (String)(charge ? "Z" : "R") + (String)voltage);
  }
  display.setTextAlignment(TEXT_ALIGN_RIGHT);
  if (!firstCycle && !secondCycle) {
    display.drawString(120, 0, "0");
  }
  else if (firstCycle && !secondCycle) {
    display.drawString(120, 0, "1");
  }
  else if (!firstCycle && secondCycle) {
    display.drawString(120, 0, "2");
  }
  display.display();
}

void controlVoltage() {
  unsigned long currentMillis = millis(); // текущее время в миллисекундах
  if (currentMillis - previousMillisControl >= intervalWait) {
    previousMillisControl = millis();
    voltage = getVoltage();
    displayVoltage();

    //Serial.println("Напряжение батареи: " + (String)voltage); // TODO

    if (voltage <= voltageMin) {
      vEndCount++;
      if (vEndCount >= 3) {
        Serial.println("Напряжение ниже нормы. Отключаю заряд. v" + (String)voltage);
        // Если напряжение за пределами нормы больше трёх измерений подряд останавливаем всё
        firstCycle = false;
        secondCycle = false;
      }
    } else if (firstCycle && voltage >= vMaxFirstCycle) {
      vEndCount++;
      if (vEndCount >= 3) {
        Serial.println("Перехожу на второй цикл заряда. v" + (String)voltage);
        firstCycle = false;
        secondCycle = true;
      }
    } else {
      vEndCount = 0;
    }
  }
}

void batteryCharge() {
  charge = true;
  previousMillis = millis();
  digitalWrite(relayLamp, HIGH);
  delay(10);
  digitalWrite(relayCharge, LOW);
  //Serial.println("Заряд батареи");  // TODO
}

void batteryPause() {
  charge = false;
  previousMillis = millis();
  digitalWrite(relayCharge, HIGH);
  //Serial.println("Пауза батареи");  // TODO
}

void batteryDischarge() {
  charge = false;
  previousMillis = millis();
  digitalWrite(relayCharge, HIGH);
  delay(10);
  digitalWrite(relayLamp, LOW);
  //Serial.println("Разряд батареи");  // TODO
}

void start() {
  if (!firstCycle) {
    Serial.println("START");
    Serial.println("Первый цикл заряда. v" + (String)voltage);
    firstCycle = true;
    previousMillis = millis();
  }
}

void sendInfo() {
  unsigned long currentMillis = millis(); // текущее время в миллисекундах

  if (currentMillis - previousMillisSend >= intervalSendInfo) {
    Serial.print("connecting to ");
    Serial.println(host);

    WiFiClient client;
    if (!client.connect(host, 80)) {
      Serial.println("connection failed");
      return;
    }

    voltage = getVoltage();
    String url = "/index.php?v=/";
    url += voltage;

    if (WiFi.status() == WL_CONNECTED) {

      // This will send the request to the server
      client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                   "Host: " + host + "\r\n" +
                   "Connection: close\r\n\r\n");

      unsigned long timeout = millis();
      while (client.available() == 0) {
        if (millis() - timeout > 500) {
          Serial.println(">>> Client Timeout !");
          client.stop();
          return;
        }
      }
      Serial.println("SendInfo OK");
    } else {
      Serial.println("SendInfo ERROR");
    }
    previousMillisSend = millis();
  }
}

void setup() {
  Serial.begin(9600);
  pinMode(analogInput, INPUT);
  pinMode(buttonPin, INPUT);

  pinMode(relayCharge, OUTPUT);
  digitalWrite(relayCharge, HIGH);

  pinMode(relayLamp, OUTPUT);
  digitalWrite(relayLamp, HIGH);

  delay(500);
  display.init();
  display.flipScreenVertically();

  //wifiInit();
}

void loop() {
  unsigned long currentMillis = millis(); // текущее время в миллисекундах

  // Первый цикл зарядки
  if (firstCycle && !secondCycle) {
    // Заряд
    if (charge) {
      if (currentMillis - previousMillis >= intervalCharge) {
        //sendInfo(); // Отправляем напряжение в конце цикла заряда
        batteryDischarge();
      }
    }
    // Разряд
    else {
      if (currentMillis - previousMillis >= intervalDischarge) {
        batteryCharge();
      }
    }
    controlVoltage();
  }
  // Второй цикл зарядки
  else if (secondCycle && !firstCycle) {
    // Заряд
    if (charge) {
      if (currentMillis - previousMillis >= intervalCharge) {
        //sendInfo(); // Отправляем напряжение в конце цикла заряда
        batteryPause();
      }
    }
    // Разряд
    else {
      if (currentMillis - previousMillis >= intervalDischarge) {
        batteryCharge();
      }
    }
    controlVoltage();
  }
  // Режим ожидания
  else {
    int buttonState = digitalRead(buttonPin);
    if (buttonState == HIGH) {
      start();
    }
    // Режим ожидания, выводим только текущее напряжение батареи
    if (currentMillis - previousMillis >= intervalWait) {
      previousMillis = millis();
      voltage = getVoltage();
      displayVoltage();
      digitalWrite(relayLamp, HIGH);
      digitalWrite(relayCharge, HIGH);
      Serial.println("Ожидание. Напряжение батареи: " + (String)voltage);
    }
  }
}

 

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

monomah86 пишет:

помогите новичку

Наша любимая тема! Иногда они возвращаются.

monomah86 пишет:

В инете нашел зарядное устройство для АКБ на ардуино вот решил собрать такой а с програмированием пока ООчень туго  скетч собран для платы Ардуино УНО совместимая плата Wemos D1, у меня есть плата ардуино УНО и мега 2560 с встроенным вай фай

И что?

Перечитайте сами. Вы видите здесь вопрос или просьбу к сообществу? Я не вижу. Или Вы решили просто нас проинформировать? Спасибо. Принято к сведению.

monomah86
Offline
Зарегистрирован: 06.01.2018

 да ты показал что ты умный,  мне уже помогли так что в твоих умных ответах типа, "Наша любимая тема! Иногда они возвращаются."  мне на... не нужна иди лесом.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

monomah86. Пока вы не усвоите минимальный базовых знаний лечить ,учить, поправлять Bас бесмысленно.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Они на свет лезут, что ли?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Новый год на них действует... За темы "помогите новичку" нужно банить пожизненно. И это - гуманизм, ИМХО.

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

monomah86 пишет:

мне уже помогли

Рад за Вас!

sera.brat
Offline
Зарегистрирован: 31.01.2018

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

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

Если можно, не могли бы скинуть готовый пример, заранее благодарю))

 

 

Алексей Н
Offline
Зарегистрирован: 02.01.2016

sera.brat, ну вообще-то именно с помощью pulseIn() это и можно сделать. Вот ссылка: http://arduino.ru/Reference/PulseIn Там же и пример. А что не получается?

З.Ы. Вы бы лучше новую тему создали. А то это началась со стеба, и боюсь им же и продолжится :).

 

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

sera.brat пишет:

пробовал pulsein()

Как пробовал? Где код? В студию!

sera.brat пишет:

ничего толкового не получается

Сч его сделат такой вывод? Что бестолкового получается? В общем, к коду из моего предыдущего ответа, требуется ещё и внятный комментярий. В студию.

sera.brat пишет:

Если можно, не могли бы скинуть готовый пример, заранее благодарю))

Вот здесь как раз есть готовый пример (ближе к концу).

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

Алексей Н пишет:

боюсь им же и продолжится :).

Если всё будет как в первом посте автора ("попробовал, чёт не то, давайте мне код"), то именно им и продолжится. А если автор начнёт работать, то, глядишь, и рассеются тучи.

neznaikatut
Offline
Зарегистрирован: 31.01.2018

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

У меня есть такая штука L298N , но ни скетча ни как подключать не знаю, также есть arduino nano. Помогите мне, очень прошу!

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

neznaikatut пишет:

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

У меня есть такая штука L298N , но ни скетча ни как подключать не знаю, также есть arduino nano. Помогите мне, очень прошу!

Незнайка, читай: https://habrahabr.ru/sandbox/59285/

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

neznaikatut пишет:

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

Ваша проблема не в этом, а в том, не знаете для чего нужно окно поиска. Смотрите, подключайте, движок там такой же - http://arduino.ru/forum/apparatnye-voprosy/raspinovka-bipolyarnogo-shd-ot-cd-rom-sled-motor

telephat
Offline
Зарегистрирован: 01.02.2018

Здравствуйте. 

Собрал термостат на базе Ардуино Уно Р3 и на финально стадии столкнулся с проблемой - реле коммутации при включении сильно просаживают питание. 

Плата реле с 4 пинами - два питания, два управления. 

Внимание, вопрос: если запитать и реле и контроллер от внешнего источника на 600mA (преобразователь 220v AC - 5v DC), связав их по земле, то будет ли просадка по питанию контроллера при включении обмотки реле? 

sera.brat
Offline
Зарегистрирован: 31.01.2018

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

 

 

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

telephat пишет:

Внимание, вопрос: если запитать и реле и контроллер от внешнего источника на 600mA (преобразователь 220v AC - 5v DC), 

А сейчас Вы его от чего питаете? От ардуиновского преобразователя? Это для него много (близко к его пределу). Вернее, я не знаю, что у Вас за реле, но если обычные рабочекрестьянские srd-05vdc-sl-c или аналоги, то таки да - много. так что питайте от отдельного источника. И ещё, не знаю, что у Вас за модуль, но если там нет конденсатора параллельно обмотке поставьте, или в любом случае поставьте - хуже не будет.