#1 29-10-2021 11:29:09

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

BMS на Arduino Nano.

Прототип будующей BMS. На фото блок измерителя напряжений четырёх ячеек литийионных 18650.
Дисплей ST7735S.

16354816947112382745807953973954.jpg

Не в сети

#2 29-10-2021 11:31:19

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Re: BMS на Arduino Nano.

Питание 5В идёт с преобразователя Mini560.

16354818258797329534304254508124.jpg

Не в сети

#3 29-10-2021 11:43:53

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Re: BMS на Arduino Nano.

Схема измерительной части.


bms4S.gif

Не в сети

#4 30-10-2021 20:56:53

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Re: BMS на Arduino Nano.

Код.

//28.10.2021
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Fonts/FreeSans12pt7b.h>
#include <math.h>
#define SCR_WD 128
#define SCR_HT 160
#include <SPI.h>
#include <Adafruit_GFX.h>
#define TFT_CS 9
#define TFT_DC  10
#define TFT_RST 8
#include <Arduino_ST7735_Fast.h>
unsigned long last_time;
int timemin =0;
int timechas =0;
uint16_t temp;
Arduino_ST7735 tft = Arduino_ST7735(TFT_DC, TFT_RST, TFT_CS);
// Начало функции обработки кириллических символов
 String ru(String source) 
{
  int i,j,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length();  i = j = 0;
  while (i < k) {
    n = source[i]; i++;

    if (n >= 127) {
      switch (n) {
        case 208: {
          n = source[i]; i++;
          if (n == 129) { n = 192; break; } // перекодируем букву Ё
          break;
        }
        case 209: {
          n = source[i]; i++;
          if (n == 145) { n = 193; break; } // перекодируем букву ё
          break;
        }
      }
    }

    m[0] = n;target = target + String(m); 
    j++; 
  }
  return target;
}
// Конец функции обработки кириллических символов
void setup()
{
 pinMode(A0, INPUT); 
 pinMode(A1, INPUT); 
 pinMode(A2, INPUT); 
 pinMode(A3, INPUT); 
  Serial.begin(115200);
tft.init();
 tft.setRotation(1);
//tft.setFont(&FreeSans12pt7b);
 tft.setFont(0);
 tft.fillScreen(BLACK);
tft.setTextSize(1);
 //tft.setTextColor(WHITE);
 tft.setTextColor(GREEN);
}
void TIMER(){
  if (millis() - last_time>=3000){
 last_time=millis();
 tft.setTextSize(4);
 tft.fillScreen(BLACK);
 int sensorValue = analogRead(A0);
 float voltage1 = sensorValue * (5.08 / 1023.0)*1.035;
 tft.setCursor(0,100);
  tft.print(voltage1);
 tft.print(ru("В1"));
int sensorValue1 = analogRead(A1);
 float voltage2 = sensorValue1 * (5.08 / 1023.0);
 tft.setCursor(0, 70);
  tft.print(voltage2);
 tft.print(ru("В2"));
int sensorValue2 = analogRead(A2);
 float voltage3 = sensorValue2 * (5.08 / 1023.0)*0.975;
 tft.setCursor(0, 40);
  tft.print(voltage3);
 tft.print(ru("В3"));
int sensorValue3 = analogRead(A3);
 float voltage4 = sensorValue3 * (5.08 / 1023.0);
 tft.setCursor(0, 10);
  tft.print(voltage4);
 tft.print(ru("В4"));
}
}
void loop(void)/////////////////////////////////////////////////////////////////////////////////////////////////
{ 
TIMER();
  }

Не в сети

Подвал раздела

Работает на FluxBB (перевод Laravel.ru)