• Мой кабинет
В магазине
В Категориях
В Блоге
0

  • Блог
    • Публикации
    • Новичку
    • Инструкции к аппаратуре
    • Книги по авиамоделированию
    • Двигатели
    • Программы для моделиста
    • Авиамодельные технологии
    • Чертежи авиамоделей
    • Бумажные модели
    • Постройка авиамоделей
    • Радиолюбителю
  • Архив
  • Форум
  • Контакты
  • Вопросы и ответы
Тел: 8-953-605-79-92
  • Главная|
  • Блог|
  • Радиолюбителю

Разделы блога

  • Блог
    • Публикации
    • Новичку
    • Инструкции к аппаратуре
    • Книги по авиамоделированию
    • Двигатели
    • Программы для моделиста
    • Авиамодельные технологии
    • Чертежи авиамоделей
    • Бумажные модели
    • Постройка авиамоделей
    • Радиолюбителю
  • Архив
  • Форум
  • Контакты
  • Вопросы и ответы

Справочники

  • Mosfet транзисторы

IMAX B6 MINI

SkyRC IMAX B6 MINI

 IMAX B6 MINI доставка из России.

5 - 15 дней.

Индикатор внешней температуры и состояния аккумулятора автомобиля на Ардуино и OLED дисплее.

 

Попросил приятель сделать ему в Nissan Serena показометр температуры за бортом и состояния заряда аккумулятора, всё это дело желательно запилить в приборную панель. Запиливать я не стал, пусть сам с эстетикой разбирается, но само устройство ему спаял.

Arduino Pro Mini у меня закончились, по этому взял микроконтроллер ATmega168PA, которые я заказываю на Али по очень вкусной цене, как их прошивать через Arduino IDE . 

Схема термометра -- вольтметра.

Схема

 

Компоненты и печатная плата.

  • ATmega168PA в корпусе TQFP.
  • I2C Дисплей 128x64 с чипом SSD1306.
  • Датчик температуры 18b20.
  • Стабилизатор на 5v 78L05.
  • Резисторы 1206, резистор RES 0805.
  • Конденсаторы 0805 и тантал 1210.

 

 Я собирал из того что было, заработало всё сразу, потребовалось только подобрать сопротивление резисторов в коде, для точного отображения напряжения. Стабилизатор немного греется, налил припоя в качестве радиатора. На плате есть восьмиугольные пятачки, для возможности в дальнейшем добавить какие нибудь датчики.

Battery plata

Battery ISP

 

Логика работы.

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

Принцип контроля состояния акб (3 строка дисплея) состоит в измерении напряжения НРЦ (напряжение разомкнутой цепи), а далее по таблице зависимости заряженности от напряжения выводим в процентах на дисплей. Данный метод усреднённый и работает только тогда, когда в аккумуляторе практически останавливается химическая реакция, например если авто простояло ночь. Надеюсь правильно выразился.

Таблица с сайта Varta.

Testing pb bat

 

В третей строке отображается состояние:

  • Аккумулятор мёртв
  • 50%
  • 60%
  • 70%
  • 80%
  • ОК

 

При зарядке когда напряжение больше 13v, в строке отображается просто марка автомобиля.

Нужно понимать, что заряженность и ёмкость - разные вещи. В 60А/ч батарее из-за деградации и разрушения пластин может оставаться всего 20А при полной зарядке, но показатель заряженности покажет на сколько батарея заряжена, а не какова её ёмкость. Измерить ёмкость можно только разрядом до 12v, по времени. 

Плата сделана так, что измеряемое напряжение берётся непосредственно от питания всего устройства подключённого к замку зажигания в положении 1, при такой конфигурации требуется только 2 провода для подключения к автомобилю.

Если в первом положении замка имеется нагрузка, то показания состояния аккумулятора будут не точными, для компенсации потребуется отсоединить дорожку на плате от резистора 100к  и подсоединить этот резистор дополнительным проводом непосредственно к аккумулятору.

 Первая строка дисплея - термометр. Он не использует специальную библиотеку, код я взял у Гайвера.

 Battery DEAD

Battery50

Battery80

BatteryNS

 

 

Заказываю компоненты у проверенных продавцов.

ATmega168PA

100 руб

OLED дисплей 128x64

125 руб

 

 

 

Код Ардуино.

 

#include <Wire.h>
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
float input_volt = 0.0;
float temp=0.0;
float r1=100000.0; //сопротивление резистора r1
float r2=10090.0; // сопротивление резистора r2
#define DS_PIN 5 // пин 18b20

void setup(){
dallas_requestTemp(DS_PIN); // запрос // delay (2000);

} void loop(){
dallas_requestTemp(DS_PIN); // запрос
delay(1000);
//int value = dallas_getTemp(DS_PIN);

int analogvalue = analogRead(A1);
temp = (analogvalue * 5.0) / 1024.0;
input_volt = temp / (r2/(r1+r2));
if (input_volt < 0.1)
{
input_volt=0.0;
}

u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );

}

void draw(void) {
int t=dallas_getTemp(DS_PIN); if (t<-9){
u8g.setFont(u8g_font_fur14r);
//gdr14
u8g.setPrintPos(0, 15);
u8g.print("OUT");
u8g.setPrintPos(75, 15);
u8g.print(t);
u8g.setPrintPos(115, 15);
u8g.drawCircle(115, 3, 3); }
else
{
u8g.setFont(u8g_font_fur14r);
u8g.setPrintPos(0, 15);
u8g.print("OUT");
u8g.setPrintPos(85, 15);
u8g.print(t);
u8g.setPrintPos(115, 15);
u8g.drawCircle(115, 3, 3);
} u8g.setPrintPos(0, 39);
u8g.print("BAT"); u8g.setPrintPos(65, 39);
u8g.print(input_volt, 1); u8g.setPrintPos(115, 39);
u8g.print("v"); if(input_volt<=12.00){
u8g.setPrintPos(0, 63);
u8g.print("Battery dead!!");
}
if(input_volt>12.00 && input_volt<12.20 ){
u8g.setPrintPos(0, 63);
u8g.print("Battery 50%");
}
if(input_volt>12.20 && input_volt<12.30 ){
u8g.setPrintPos(0, 63);
u8g.print("Battery 60%");
}
if(input_volt>12.30 && input_volt<12.40 ){
u8g.setPrintPos(0, 63);
u8g.print("Battery 70%");
}
if(input_volt>12.40 && input_volt<12.50 ){
u8g.setPrintPos(0, 63);
u8g.print("Battery 80%");
}
if(input_volt>12.50 && input_volt<13.00 ){
u8g.setPrintPos(0, 63);
u8g.print("Battery OK");
}
if(input_volt>=13.00){
u8g.setPrintPos(0, 63);
u8g.print("Nissan Serena");
}
}

// ======= dallas =======
void dallas_begin(uint8_t pin) {
pinMode(pin, INPUT);
digitalWrite(pin, LOW);
}
void dallas_requestTemp(uint8_t pin) {
if (oneWire_reset(pin)) return;
oneWire_write(0xCC, pin);
oneWire_write(0x44, pin);
}
int dallas_getTemp(uint8_t pin) {
uint8_t data[2];
if (oneWire_reset(pin)) return;
oneWire_write(0xCC, pin);
oneWire_write(0xBE, pin);
data[0] = oneWire_read(pin);
data[1] = oneWire_read(pin);
int result = (int)((data[1] << 8) | data[0]) * 0.0625; //>
return result;
}
// ======= 1wire =======
boolean oneWire_reset(byte pin) {
pinMode(pin, 1);
delayMicroseconds(640);
pinMode(pin, 0);
delayMicroseconds(2);
for (uint8_t c = 80; c; c--) {
if (!digitalRead(pin)) {
uint32_t tmr = micros();
while (!digitalRead(pin)) {
if (micros() - tmr > 200) return false;
}
return false;
}
delayMicroseconds(1);
}
return true;
}
void oneWire_write(uint8_t data, byte pin) {
for (uint8_t p = 8; p; p--) {
pinMode(pin, 1);
if (data & 1) {
delayMicroseconds(5);
pinMode(pin, 0);
delayMicroseconds(90);
} else {
delayMicroseconds(90);
pinMode(pin, 0);
delayMicroseconds(5);
}
data >>= 1;
}
}
uint8_t oneWire_read(byte pin) {
uint8_t data = 0;
for (uint8_t p = 8; p; p--) {
data >>= 1;
pinMode(pin, 1);
delayMicroseconds(2);
pinMode(pin, 0);
delayMicroseconds(8);
bool dataBit = digitalRead(pin);
delayMicroseconds(80);
if (dataBit) data |= 0x80;
}
return data;
}

 

Исходники и файлы печатки  СКАЧАТЬ

 

 

 

Добавить комментарий

Защитный код
Обновить

Ali Info

Tech DS0150 15001 DIY

SHAREFUNBAY Дрон 4k HD

2600 руб


ali р

Стартовый комплект Arduino

1600 руб


 

FlySky FS-i6 2,4G 6CH

3500 руб

 

Набор резисторов

Набор резисторов 600шт

140руб

Пропеллеры деревянные

450 - 1400руб

Аккумуляторы Li-Po

980 - 3250руб

Display-16x2-HD44780-w-IIC-I2C

ЖК-дисплей 16x2-HD44780 IIC-I2C

130руб

 

 

Адрес:

Моделка
a  620076 Россия, Екатеринбург, Гаршина, 1
c  8-953-605-79-92. Время работы (10:00 - 18:00)
b  Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Информация о товаре, размещённая на сайте Моделка.рф, носит ознакомительный характер и не является публичной офертой. Технические характеристики, комплектность и цвет могут быть изменены производителем без уведомления.

Поделиться

 

 

 

Схема проезда

Контакты

  • Контакты
  • Пункты выдачи.

Помощь

  • Карта сайта
  • Способы оплаты

Кабинет

  • Кабинет
  • Мои закладки
  • Корзина

Информация

  • Конфиденциальность
  • Правила магазина
  • Способы доставки
Copyright © 2010 - 2025 Моделка.рф.Радиоуправляемые модели.
Payment
Goto Top

Закрыть меню

  • Блог
    • Публикации
    • Новичку
    • Инструкции к аппаратуре
    • Книги по авиамоделированию
    • Двигатели
    • Программы для моделиста
    • Авиамодельные технологии
    • Чертежи авиамоделей
    • Бумажные модели
    • Постройка авиамоделей
    • Радиолюбителю
  • Архив
  • Форум
  • Контакты
  • Вопросы и ответы