При эксплуатации и сервиса электротехники, а мы ее производим, необходимо иметь таймер моточасов. Можно поставить штатное изделие, но тогда добавляется еще один экран на котором отображается не самая полезная информация. Мы же пойдем другим путем...
Ранее в статьях:
был рассказ о некоторых направлениях производимой нами техники и применяемой элементной базы.
Счетчики моточасов можно разделить на две большие категории:
- А)те что просто считают время работы двигателя;
- Б)те что считают количество оборотов двигателя (реальные счетчики моточасов).
Счетчики из категории Б имеют определенную логику работы. Холостой ход моточас - равен астрономическому часу, Средний газ - моточас - 40 минут от астрономического часа, Полный газ - 30 минут. Но все это относительно. Наилучшее определение "... моточас это коэффициент износа за час работы у верхней границы выдаваемой мощности, или — количество оборотов двигателя и частота вращений, чем они больше, тем скорее моточас подходит к концу".
Для нашей техники, более важным является общее время работы. Если это касается тракторов работающих на электротяге, то не о каких моточасах речи быть не может, но для лучшего понимания наших заказчиков, мы пользуемся термином "моточасы".
При реализации "моточасов" не электромеханическим и не механическим способом, необходимо сохранять прошедшее время работы даже при отключении питания.
С электромеханикой - все просто. Включил - начало считать... Шестереночки крутятся, цифры меняются...
Но нам, во первых, надо считать не работу двигателя ДВС, во вторых, нам не нужен еще один экран, и, в третьих, у нас на борту есть Arduino NANO которая имеет flash-память.
Вот на ней мы и будем реализовывать счетчик "моточасов".
С характеристиками контроллера можно ознакомиться на сайте https://www.arduino.cc/.
Нас же интересует флеш-память. Ее не много, всего 1КБ, или 1024 байт. Которые заполнены значением 255. Гарантированное количество циклов перезаписи 100 000 раз.
Задача: Организовать учет наработки с точностью в 1 минуту.
Решение: Для реализации задачи, будем каждую минуту производить запись во флеш-память.
При записи в одну и ту же ячейку, мы сможем учесть 100000 минут, а это - без малого 1667 часов, или примерно 70 дней... Сервисный период для нашей техники 1000 часов - хватает :), но ведь техника будет эксплуатироваться и далее... По этой причине будем записывать значения циклически. Начнем сначала... дойдем до конца... и опять в начало.
Предварительно необходимо очистить память от значения 255.
Очистка флеш-памяти Arduino
#include <EEPROM.h>
#include <printf.h>
int counter; // счетчик байтов
void setup() {
Serial.begin(9600);
printf_begin();
for (counter = 0; counter < 1024; counter++) {
byte data = EEPROM.read(counter);
printf("ячейка # %d равна = %d \n", counter, data);
EEPROM.update(counter, 0);
}
printf("OK \n"); // все закончили!
}
// эта часть нам не нужна - задача выполнена
void loop() {
}
... теперь можно, для успокоения совести - считать данные.
Чтение данных из флеш-памяти побайтно
#include <EEPROM.h>
#include <printf.h>
int counter=1000; // с какого байта будем читать значения, если с начала, то ставим "0"
void setup() {
Serial.begin(9600);
printf_begin();
}
// а вот теперь цикл нам понадобится
void loop() {
if (counter <= 1023) {
// читаем данные из EEPROM
byte data = EEPROM.read(counter);
printf("Ячейка № %d равна %d \n", counter, data);
counter++;
} else {
counter = 0;
}
}
Продолжение следует
Спасибо за уделенное внимание.
Заинтересовала тема - подписывайтесь, ставьте лайк.
Есть замечания и предложения - пишите комментарии...