помогите новичку
- Войдите на сайт для отправки комментариев
Сб, 06/01/2018 - 10:22
В инете нашел зарядное устройство для АКБ на ардуино вот решил собрать такой а с програмированием пока ООчень туго скетч собран для платы Ардуино УНО совместимая плата Wemos D1, у меня есть плата ардуино УНО и мега 2560 с встроенным вай фай
В инете нашел зарядное устройство для АКБ на ардуино вот решил собрать такой а с програмированием пока ООчень туго скетч собран для платы Ардуино УНО совместимая плата 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); } } }помогите новичку
Наша любимая тема! Иногда они возвращаются.
В инете нашел зарядное устройство для АКБ на ардуино вот решил собрать такой а с програмированием пока ООчень туго скетч собран для платы Ардуино УНО совместимая плата Wemos D1, у меня есть плата ардуино УНО и мега 2560 с встроенным вай фай
И что?
Перечитайте сами. Вы видите здесь вопрос или просьбу к сообществу? Я не вижу. Или Вы решили просто нас проинформировать? Спасибо. Принято к сведению.
да ты показал что ты умный, мне уже помогли так что в твоих умных ответах типа, "Наша любимая тема! Иногда они возвращаются." мне на... не нужна иди лесом.
monomah86. Пока вы не усвоите минимальный базовых знаний
лечить,учить, поправлять Bас бесмысленно.Они на свет лезут, что ли?
Новый год на них действует... За темы "помогите новичку" нужно банить пожизненно. И это - гуманизм, ИМХО.
мне уже помогли
Рад за Вас!
Здравствуйте, хочу поинтересоваться, как можно измерить длительность положительного импульса (секунды, или милисекунды). который подается на микроконтроллер (программирую в ардуино).
пробовал pulsein(), но увы, ничего толкового не получается (в источниках говорится что с помошью данной функции возможно измерение импульса)
Если можно, не могли бы скинуть готовый пример, заранее благодарю))
sera.brat, ну вообще-то именно с помощью pulseIn() это и можно сделать. Вот ссылка: http://arduino.ru/Reference/PulseIn Там же и пример. А что не получается?
З.Ы. Вы бы лучше новую тему создали. А то это началась со стеба, и боюсь им же и продолжится :).
пробовал pulsein()
Как пробовал? Где код? В студию!
ничего толкового не получается
Сч его сделат такой вывод? Что бестолкового получается? В общем, к коду из моего предыдущего ответа, требуется ещё и внятный комментярий. В студию.
Если можно, не могли бы скинуть готовый пример, заранее благодарю))
Вот здесь как раз есть готовый пример (ближе к концу).
боюсь им же и продолжится :).
Если всё будет как в первом посте автора ("попробовал, чёт не то, давайте мне код"), то именно им и продолжится. А если автор начнёт работать, то, глядишь, и рассеются тучи.
Здравствуйте, у меня такая проблема, хочу управлять шаговым двигателем флоппи дисковода, но не знаю как его подключить.
У меня есть такая штука L298N , но ни скетча ни как подключать не знаю, также есть arduino nano. Помогите мне, очень прошу!
Здравствуйте, у меня такая проблема, хочу управлять шаговым двигателем флоппи дисковода, но не знаю как его подключить.
У меня есть такая штука L298N , но ни скетча ни как подключать не знаю, также есть arduino nano. Помогите мне, очень прошу!
Незнайка, читай: https://habrahabr.ru/sandbox/59285/
Здравствуйте, у меня такая проблема, хочу управлять шаговым двигателем флоппи дисковода, но не знаю как его подключить.
Ваша проблема не в этом, а в том, не знаете для чего нужно окно поиска. Смотрите, подключайте, движок там такой же - http://arduino.ru/forum/apparatnye-voprosy/raspinovka-bipolyarnogo-shd-ot-cd-rom-sled-motor
Здравствуйте.
Собрал термостат на базе Ардуино Уно Р3 и на финально стадии столкнулся с проблемой - реле коммутации при включении сильно просаживают питание.
Плата реле с 4 пинами - два питания, два управления.
Внимание, вопрос: если запитать и реле и контроллер от внешнего источника на 600mA (преобразователь 220v AC - 5v DC), связав их по земле, то будет ли просадка по питанию контроллера при включении обмотки реле?
Спасибо, вечером сброшу код и модель в proteus-е (если не трудно не могли бы взглянуть)
Внимание, вопрос: если запитать и реле и контроллер от внешнего источника на 600mA (преобразователь 220v AC - 5v DC),
А сейчас Вы его от чего питаете? От ардуиновского преобразователя? Это для него много (близко к его пределу). Вернее, я не знаю, что у Вас за реле, но если обычные рабочекрестьянские srd-05vdc-sl-c или аналоги, то таки да - много. так что питайте от отдельного источника. И ещё, не знаю, что у Вас за модуль, но если там нет конденсатора параллельно обмотке поставьте, или в любом случае поставьте - хуже не будет.