#1 Re: Програмування Arduino » Как считывать заряд акб на ESP32 » 2021-11-25 13:33:51

Решено. Нашел вариант который работает. добавил пару фильтров и готово. Значения прыгают в диапазоне 0,02В.

adc.attach(33); /// пин

 #include "Arduino.h"
 #include <ESP32AnalogRead.h>
 ESP32AnalogRead adc;
 void setup()
 {
     adc.attach(33);
     Serial.begin(115200);
 }
 
 void loop()
 {
     delay(50);
     Serial.println("Voltage = "+String(adc.readVoltage()));
 }

#4 Програмування Arduino » Как считывать заряд акб на ESP32 » 2021-11-23 15:55:04

BigBlackOwl
відповідей: 5

esp32-7.pngУ меня ESP wroom 32 dev kit1 http://developer.alexanderklimov.ru/arduino/esp32/
К пину 36 (VP) подключил 1н 18650 4,22В через делитель напряжения.
Показывает чушь: заряд 100% и заряд акб 4,2В.
Ок, поставил акб с зарядом 3,45В, все равно, показывает то же самое, как только не менял значения, ничего не помогает. Пины тоже пробовал разные 33-36.

#include <driver/adc.h>

float battery_read()
{
    //read battery voltage per %
    long sum = 0;                  // sum of samples taken
    float voltage = 0.0;           // calculated voltage
    float output = 0.0;            //output value
    const float battery_max = 4.22; //maximum voltage of battery
    const float battery_min = 3.0; //minimum voltage of battery before shutdown

    float R1 = 50190.0; // resistance of R1 (100K)
    float R2 = 16730.0;  // resistance of R2 (10K)

    for (int i = 0; i < 500; i++)
    {
        sum += adc1_get_voltage(ADC1_CHANNEL_0);
        delayMicroseconds(1000);
    }
    // calculate the voltage
    voltage = sum / (float)500;
    voltage = (voltage * 1.1) / 4096.0; //for internal 1.1v reference
    // use if added divider circuit
    voltage = voltage / (R2/(R1+R2));
    //round value by two precision
    voltage = roundf(voltage * 100) / 100;
    Serial.print("voltage: ");
    Serial.println(voltage, 2);
    output = ((voltage - battery_min) / (battery_max - battery_min)) * 100;
    if (output < 100)
        return output;
    else
        return 100.0f;
}

void setup()
{
    adc1_config_width(ADC_WIDTH_12Bit);
    adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_0db); //set reference voltage to internal
    Serial.begin(115200);
}

void loop()
{
    Serial.print("Battery Level: ");
    Serial.println(battery_read(), 2);
    delay(1000);
}

#5 Програмування Arduino » UniversalTelegramBot.h молю о помощи » 2021-11-12 11:18:56

BigBlackOwl
відповідей: 0

Уже много времени ищу пример telegram bot под ESP32 с обратным отзывом: в телеге пишем число в определенном пункте(НАСТРОЙКА МОЩНОСТИ) и возвращаем на плату, и также с кнопкой назад не разобрался. За пример буду благодарен. Понимаю функционал минимум но что-то не идет уже неделю.




void handleNewMessages(int numNewMessages) {
  for (int i = 0; i < numNewMessages; i++)
  {
    String chat_id = bot.messages[i].chat_id;
    if (chat_id != CHAT_ID) {
      bot.sendMessage(chat_id, "Неавторизованный пользователь", "");
      continue;
    }
    connection();

    String text = bot.messages[i].text;
       if (text == "/start") {
      String keyboardJson = "[["СТАТУС"],["ВЕНТИЛЯТОР ВКЛ", "ВЕНТИЛЯТОР ВЫКЛ"], ["НАСТРОЙКА МОЩНОСТИ"]]";
      bot.sendMessageWithReplyKeyboard(chat_id, "ПРИВЕТ:)", "", keyboardJson, true);
      bot.sendMessage(chat_id, "Vape Station ONLINE", "");
      connection();
    }
    if (text == "СТАТУС") {
      bot.sendMessage(chat_id, "Мощность: " + String(power), "");
      bot.sendMessage(chat_id, "Температура: + String(temp)", "");
      bot.sendMessage(chat_id, "БАТАРЕЯ: " + String(battery_read()), "");
      connection();
      if (fanStatus) {
        bot.sendMessage(chat_id, "ВЕНТИЛЯТОР ВКЛ", "");
        connection();
      } else {
        bot.sendMessage(chat_id, "ВЕНТИЛЯТОР ВЫКЛ", "");
        connection();
      }
    }
    if (text == "ВЕНТИЛЯТОР ВКЛ") {

      digitalWrite(fanPin, HIGH); // turn the LED on (HIGH is the voltage level)
      fanStatus = 1;
      bot.sendMessage(chat_id, "Вентилятор включен", "");
      connection();
    }
    if (text == "ВЕНТИЛЯТОР ВЫКЛ") {
      fanStatus = 0;
      connection();
      digitalWrite(fanPin, LOW); // turn the LED off (LOW is the voltage level)
      bot.sendMessage(chat_id, "Вентилятор выключен", "");
      connection();
    }
    if (text == "НАСТРОЙКА МОЩНОСТИ") {
      String keyboardJson = "[["НАЗАД"]]";
      bot.sendMessage(chat_id, "Введите мощность от 1 до 100:", "");
      if (text) {
        Serial.println (text.toInt());
        power = text.toInt();
      }
      else {
        bot.sendMessage(chat_id, "Введите числовое значение от 1 до 100:", "");
      }
      connection();
    }
//    if (text == "") {
//        Serial.println (text.toInt());
//        power = text.toInt();
//      }
//      else {
//        bot.sendMessage(chat_id, "Введите числовое значение от 1 до 100:", "");
//      }
  }
}

#6 Re: Програмування Arduino » Помогите новичку » 2020-03-17 17:46:12

Ардуино для вывода информации на дисплей 1602: мощность на каджый канал (2).
Ввод данных с помощью энкодера: мощность и сопротивление (последнее полагаю для расчета, хотя нафига я так и не понял)
Управление нагрузкой с помощью полевого транзистора посредством ШИМ-сигнала.

#8 Re: Програмування Arduino » Помогите новичку » 2020-03-15 21:52:14

Watchdog пише:
BigBlackOwl пише:

... За помощь в разработке подсоблю валютой, не большой)

А небольшой это какого размера? У всех представления о небольшом разные. smile

в лс можно пообщатся, пишите на почту.

#9 Re: Програмування Arduino » Помогите новичку » 2020-03-15 08:17:47

По функционалу его скетч полное гавно, в плане режимы и тд.. Я сам парю и знаю отлично что надо а что лишнее. Моя идея проста как угол дома и без негужных наворотов. Только удобство. Схема кое-какая тоже есть.

#10 Re: Програмування Arduino » Помогите новичку » 2020-03-15 08:14:20

Понимаю, я взял его как пример/образец, переделывать не охота слишком много гемора, проще новый сделать. Я взял только некоторые его библиотеки, для энкодера, как по мне хорошая.

#11 Re: Програмування Arduino » Помогите новичку » 2020-03-14 21:06:52

Всем привет. Есть задача: домашний электронный кальян. За основу взят скетч от Gyver'a, но-
хочу вместо кнопок использовать энкодер с кнопкой, сделать 2 раздельных канала, вывод на дисплей 1602 всей инфы, по i2c. Возникла проблема как назначить энкодер как кнопки. За помощь в разработке подсоблю валютой, не большой)

Підвал форуму