Для ознайомлення з такою периферією мікроконтролера як АЦП (ADC) зробімо простенький прилад "Тестер батарейок 1.5 В і акумуляторів 1.2 В". Який буде вимірювати напругу на батарейці чи акумуляторі і виводити на екран інформацію про напругу в вольтах чи мілівольтах. А також приблизну інформацію про стан батарейки чи акумулятора: чудовий, середній, поганенький, розряджена.
Між землею і виводом А1 поставити резистор на 1.8 - 2 кОм. І вивести дроти на батарейку, або на тримач батарейок, якщо є в наявності, як показано на малюнку.
Схема підключення
Програма
Програма трішки нагадує програму з попередньої статті "Підключення 1602 LCD Keypad Shield до STM32F103 Nucleo в засобі розробки mbed". В текст програми додано детальні коментарі. Додаткових пояснень не потребує. Константу "const int Vref" треба підібрати відповідно до опорної напруги. Якщо є можливість заміряти напругу 3.3 В на платі розробника точним приладом у мілівольтах - це і буде константа. Як ні, то достатньо приблизно вказати "3330". Все одно це більш іграшка для ознайомлення, чим серйозний прилад.
#include "mbed.h"
#include "freetronicsLCDShield.h"
// Оголошуємо клас freetronicsLCDShield з назвою lcdKeypad,
// та вказуємо всі потрібні піни для роботи
freetronicsLCDShield lcdKeypad(D8, D9, D4, D5, D6, D7, D3, A0);
//Оголошуємо аналоговий вхід для тестування батарейок
AnalogIn analog_value(A1);
int main()
{
/* оголошуємо змінну типу float для значень з аналогового
входу A0, куди підключений keypad */
float val_button;
/* оголошуємо змінну типу float для значень з аналогового
входу A1, на якому будемо тестувати батарейки */
float meas;
/* Так як значення зчитуємо з АЦП в межах від 0 до 1, то напруга яку можна
поміряти 3.3 Вольта це без дільника напруги */
const int Vref = 3393; // опорна напруга в мілівольтах (для точності підбирається)
// прапорець - виводити на екран виміряну напругу у вольтах чи мілівольтах
bool flag_voltage = false;
// прапорець - міряємо батарейку 1.5В або акумулятор 1.2В
bool flag_battery = true;
lcdKeypad.cls(); // Очищаємо дисплей
while(1)
{
/*Зчитуємо значення на аналоговому вході A0.
Так як значення в межах від 0 до 1, то множимо на 1000*/
val_button = lcdKeypad.readButton()*1000;
// Зчитуємо значення на аналоговому вході A1.
meas = analog_value.read();
if (flag_battery)
{
// Встановлюємо курсор в позицію 0,0
lcdKeypad.setCursorPosition(0, 0);
lcdKeypad.printf("Battery: ");
if (meas == 0)
{
// Якщо значення 0 то нічого не під'єднано
lcdKeypad.printf("No Batt");
}
if (meas * Vref > 1400)
{
// Якщо значення більше 1.4В то батарейка в доброму стані
lcdKeypad.printf("Perfect");
}
else if (meas * Vref < 1400 && meas * Vref > 1100)
{
// Якщо значення між 1.1В і 1.4В то батарейка середньо розряджена
lcdKeypad.printf("Middle ");
}
else if (meas * Vref < 1100 && meas * Vref > 950)
{
// Якщо значення між 0.95В і 1.1В то батарейка майже розряджена
lcdKeypad.printf("Badly ");
}
else if (meas * Vref < 950)
{
// Якщо значення менше 0.95В то батарейка розряджена
lcdKeypad.printf("Died ");
}
// Встановлюємо курсор в позицію 1,0
lcdKeypad.setCursorPosition(1, 0);
lcdKeypad.printf("Vbat = ");
}
else
{
// Встановлюємо курсор в позицію 0,0
lcdKeypad.setCursorPosition(0, 0);
lcdKeypad.printf("Accum : ");
if (meas == 0)
{
// Якщо значення 0 то нічого не під'єднано
lcdKeypad.printf("No Acc ");
}
if (meas * Vref > 1150)
{
// Якщо значення більше 1.15В то акумулятор в доброму стані
lcdKeypad.printf("Perfect");
}
else if (meas * Vref < 1150 && meas * Vref > 1100)
{
// Якщо значення між 1.1В і 1.15В то акумулятор середньо розряджений
lcdKeypad.printf("Middle ");
}
else if (meas * Vref < 1100 && meas * Vref > 1000)
{
// Якщо значення між 1В і 1.1В то акумулятор майже розряджений
lcdKeypad.printf("Badly ");
}
else if (meas * Vref < 1000)
{
// Якщо значення менше 1В то акумулятор розряджений
lcdKeypad.printf("Died ");
}
// Встановлюємо курсор в позицію 1,0
lcdKeypad.setCursorPosition(1, 0);
lcdKeypad.printf("Vacc = ");
}
if (flag_voltage)
{
/*Так як значення meas в межах від 0 до 1, а опорна напруга має 3300 mV
то множимо на 3300 mV (для точності треба заміряти точним приладом)*/
meas = meas * Vref;
// Друкуємо результат вимірювань
lcdKeypad.setCursorPosition(1, 7);
lcdKeypad.printf("%.0f mV ", meas);
}
else
{
/*Так як значення meas в межах від 0 до 1, а опорна напруга має 3.3 V
то множимо на 3.3 V (для точності треба заміряти точним приладом)*/
meas = meas * Vref / 1000;
// Друкуємо результат вимірювань
lcdKeypad.setCursorPosition(1, 7);
lcdKeypad.printf("%.2f V ", meas);
}
// Перевіряємо яку кнопку натиснуто
if (val_button < 50)
{
// встановлюємо прапорець для тестування батарейок
flag_battery = true;
}
else if (val_button < 250)
{
// встановлюємо прапорець щоб показувати напругу в мілівольтах
flag_voltage = true;
}
else if (val_button < 500)
{
// встановлюємо прапорець щоб показувати напругу в вольтах
flag_voltage = false;
}
else if (val_button < 800)
{
// встановлюємо прапорець для тестування акумуляторів
flag_battery = false;
}
}
}
Створіть нову пусту програму в mbed, додайте до проекту бібліотеки "mbed.h" і "freetronicsLCDShield.h". Як це зробити в статті "Підключення 1602 LCD Keypad Shield до STM32F103 Nucleo в засобі розробки mbed". Скопіюйте цю програму до редактора. Компілюєте, завантажений файл копіюєте чи переносите до диску "Nucleo". Все! Тестер батарейок готовий.
Тестер батарейок
Як користуватись
При увімкнені, за замовчуванням, тестуємо батарейки у Вольтах. Кнопка догори "UP" - міряємо у мілівольтах, кнопка вниз "DOWN" - міряємо у Вольтах. Кнопка ліворуч "LEFT" - міряємо акумулятор 1.2В, кнопка праворуч "RIGTH" - батарейку 1.5В. Міряти можна виключно елементи живлення до 3.3 Вольта. Висока напруга може вивести мікроконтролер з ладу.
Наші інтереси:
Навчання в будь чиїх інтересах
Якщо ви помітили помилку, то виділіть фрагмент тексту не більше 20 символів і натисніть Ctrl+Enter
«Життя у вулику передбачає не регламентовану монотонність, а МЕТАМОРФОЗУ. Коли комаха досягає межі своїх можливостей, вона чудесним чином перетворюється на абсолютно нову істоту. У цій метаморфозі я...
STM32: Тестер батарейок з STM32F103 Nucleo та 1602 LCD Keypad Shield
Для ознайомлення з такою периферією мікроконтролера як АЦП (ADC) зробімо простенький прилад "Тестер батарейок 1.5 В і акумуляторів 1.2 В". Який буде вимірювати напругу на батарейці чи акумуляторі і виводити на екран інформацію про напругу в вольтах чи мілівольтах. А також приблизну інформацію про стан батарейки чи акумулятора: чудовий, середній, поганенький, розряджена.
Зміст
Матеріали і засоби
Схема
Схема дуже проста. Плату розширення LCD Keypad Shield з'єднуєте "бутербродом" з платою розробникаSTM32F103 Nucleo відповідними роз'ємами Arduino connector. Як вже робили в попередній статті "Підключення 1602 LCD Keypad Shield до STM32F103 Nucleo в засобі розробки mbed".
Між землею і виводом А1 поставити резистор на 1.8 - 2 кОм. І вивести дроти на батарейку, або на тримач батарейок, якщо є в наявності, як показано на малюнку.
Програма
Програма трішки нагадує програму з попередньої статті "Підключення 1602 LCD Keypad Shield до STM32F103 Nucleo в засобі розробки mbed". В текст програми додано детальні коментарі. Додаткових пояснень не потребує. Константу "const int Vref" треба підібрати відповідно до опорної напруги. Якщо є можливість заміряти напругу 3.3 В на платі розробника точним приладом у мілівольтах - це і буде константа. Як ні, то достатньо приблизно вказати "3330". Все одно це більш іграшка для ознайомлення, чим серйозний прилад.
Створіть нову пусту програму в mbed, додайте до проекту бібліотеки "mbed.h" і "freetronicsLCDShield.h". Як це зробити в статті "Підключення 1602 LCD Keypad Shield до STM32F103 Nucleo в засобі розробки mbed". Скопіюйте цю програму до редактора. Компілюєте, завантажений файл копіюєте чи переносите до диску "Nucleo". Все! Тестер батарейок готовий.
Як користуватись
При увімкнені, за замовчуванням, тестуємо батарейки у Вольтах. Кнопка догори "UP" - міряємо у мілівольтах, кнопка вниз "DOWN" - міряємо у Вольтах. Кнопка ліворуч "LEFT" - міряємо акумулятор 1.2В, кнопка праворуч "RIGTH" - батарейку 1.5В. Міряти можна виключно елементи живлення до 3.3 Вольта. Висока напруга може вивести мікроконтролер з ладу.
Навчання в будь чиїх інтересах
Зверніть увагу
«Вулик Геллстрома», «Дюна» і 10 принципів Джигаду – політичний проект Френка Герберта