Электрификация

Справочник домашнего мастера

Вольтметр для ардуино

Содержание

Цифровой вольтметр на Arduino с подключением к ПК через последовательный порт

В этой статье показано как связать Arduino и ПК и передавать на ПК данные с АЦП. Программа для Windows написана с использованием Visual C++ 2008 Express. Программа вольтметра очень проста и имеет обширное поле для улучшений. Основной её целью было показать работу с COM-портом и обмен данными между компьютером и Arduino.

Связь между Arduino и ПК:

  • Снятие показаний с АЦП начинается, когда компьютер посылает Arduino команды 0xAC и 0x1y. у — номер канала АЦП (0-2);
  • Снятие показаний прекращается после получения Arduino команд 0xAC и 0×00;
  • Во время снятия показаний Arduino раз в 50 мс посылает компьютеру команды 0xAB 0xaa 0xbb, где aa и bb максимальные и минимальные результаты измерения.

Программа для Arduino

Подробнее о последовательной связи Вы можете прочесть на arduino.cc. Программа достаточно проста, большую её часть занимает работа с параллельным портом. После окончания снятия данных с АЦП мы получаем 10 битное значение напряжения (0×0000 — 0×0400) в виде 16-битных переменных (INT). Последовательный порт (RS-232) позволяет передавать данные в пакетах по 8 бит. Необходимо разделить 16-битные переменные на 2 части по 8 бит.
Serial.print(voltage>>8,BYTE);
Serial.print(voltage%256,BYTE);
Мы смещаем байты переменной на 8 бит вправо и потом делим на 256 и результат отправляем на компьютер.

Полный исходник ПО для Arduino вы можете скачать

Visual C++

Я предполагаю, что у Вас уже есть базовые знания в области программирования на C + + для Windows, если нет, то используйте Google. Интернет полон уроков для начинающих.

Первое, что нужно сделать, это добавить последовательный порт из панели инструментов в нижнюю форму. Это позволит изменить некоторые важные параметры последовательного порта: имя порта, скорость передачи данных, битность. Это полезно для добавления элементов управления в окно приложения, для изменения этих настроек в любое время, без перекомпиляции программы. Я использовал только возможность выбора порта.

После поиска доступных последовательных портов первый порт выбирается по умолчанию. Как это сделано:

Последовательный порт на ПК может быть использован только одним приложением одновременно, так что порт должен быть открыт перед использованием и не закрываться. Простые команды для этого:
serialPort1->Open();
serialPort1->Close();

Для правильного чтения данных из последовательного порта необходимо использовать события (в нашем случае прерывание). Выберите тип события:

Раскрывающийся список при двойном нажатии «DataReceived».

Если первый байт прибывший по последовательному порту 0xAB, если это означает, что остальные байты несут данные о напряжении.

if (serialPort1->ReadByte()==0xAB) {
data0=serialPort1->ReadByte();
data1=serialPort1->ReadByte();

voltage=Math::Round((float(data0*256+data1)/1024*5.00),2);

data_count++;
}
serialPort1->ReadByte();
}

Запись и чтение данных последовательного порта

Для меня небольшой проблемой было послать шестнадцатиричные RAW-данные через последовательный порт. Была использованна команда Write(); но с тремя аргументами: массив, номер стартового байта, кол-во байтов для записи.

private: System::Void button2_Click_1(System::Object^ sender, System::EventArgs^ e) {

Цифровой вольтметр 0-30 Вольт на базе Ардуино

Представлена полезная схема для любителей поэкспериментировать с Ардуино. Это простой цифровой вольтметр, которым надежно можно измерять постоянное напряжение в диапазоне 0 – 30В. Плату Ардуино, как обычно, можно питать от 9В батареи.

Как вам вероятно известно, аналоговые входы Ардуино можно использовать для измерения постоянного напряжения в диапазоне 0 – 5В и этот диапазон можно увеличить,
используя два резистора в качестве делителя напряжения. Делитель уменьшит измеряемое напряжение до уровня аналоговых входов Ардуино. А затем программа вычислит реальную величину напряжения.

Аналоговый датчик на плате Ардуино определяет наличие напряжения на аналоговом входе и преобразует его в цифровую форму для дальнейшей обработки микроконтроллером. На рисунке напряжение подается на аналоговый вход (А0) через простой делитель напряжения, состоящий из резисторов R1 (100кОм) и R2 (10кОм).

При этих значениях делителя на плату Ардуино можно подавать напряжение от 0 до
55В. На входе А0 имеем измеряемое напряжение деленное на 11,т.е.55В / 11=5В. Иначе говоря, при измерении 55В на входе Ардуино имеем максимально допустимое значение 5В. На практике лучше на этом вольтметре написать диапазон “0 – 30В”, чтобы оставался
Запас по безопасности!

Примечания

• Если показания дисплея не совпадают с показаниями промышленного (лабораторного) вольтметра, то необходимо точным прибором измерить величину сопротивлений R1 и R2 и вставить эти значения вместо R1=100000.0 и R2=10000.0 в коде программы. Затем следует измерить лабораторным вольтметром реальное напряжение между выводами 5В и “Земля” платы Ардуино. Получится значение меньшее, чем 5В, например, получилось 4.95В. Это реальное значение следует вставить в строке кода
vout = (value * 5.0) / 1024.0 вместо 5.0.
Кроме того, старайтесь применять прецизионные резисторы с допуском 1%.

• Резисторы R1 и R2 обеспечивают некоторую защиту от повышенных входных напряжений.Однако следует помнить, что любые напряжения выше 55В могут вывести из строя плату Ардуино. Кроме того, в этой конструкции не предусмотрены другие виды защиты(от скачков напряжения, от переполюсовки или повышенного напряжения).

Программа цифрового вольтметра

Принципиальная схема Ардуино-вольтметра

Перечень компонентов

• Плата Arduino Uno
• 100 кОм резистор
• 10 кОм резистор
• 100 Ом резистор
• 10кОм Подстроечный резистор
• LCD дисплей 16?2 ( Hitachi HD44780)

Идея

Идея устройства для измерения напряжения, тока, емкости, разряда, а может и заряда возникла давно и не только у меня. Можно найти немало игрушек под названием USB Tester (Doctor) для тестирования различных устройств с USB. Мне же интересно несколько более универсальное устройство, независимое от интерфейса, а просто рассчитанное на определенные напряжения и токи. Например, 0 — 20.00в, 0 — 5.00а, 0 — 99.99Ач. Что касается функций, то я вижу так

  • Отображение текущих напряжения и тока, то есть вольт-ампер-метр. Впринципе, можно и мощность сразу отразить.
  • Подсчет и отображение накопленной емкости. В ампер-часах и всего скорее в ватт-часах.
  • Отображение времени процесса
  • И, всего скорее, настраиваемые нижний и верхний пороги отключения по напряжению (ограничения разряда и заряда)

Разработка

Для реализации расчетов и измерений нам понадобится контроллер. Я вспомнил эту идею в рамках знакомства с Arduino, поэтому контроллером будет простая популярная Atmega328 и программироваться она будет в среде Arduino. С инженерной точки зрения выбор наверно не самый хороший — контроллер для задачи слегка жирноват, а его АЦП не назовешь измерительными, но… будем пробовать.

  • Паять в этом проекте много не будем. В качестве основы возьмем готовый модуль Arduino Pro Mini, благо китайцы готовы их поставлять по $1.5 в розницу.
  • В качестве устройства отображения будет выступать дисплей 1602 — еще $1.5. У меня вариант с интерфейсным модулем I2C, но в этом проекте он не сильно нужен ($0.7).
  • Для разработки нам понадобиться макетная плата. В моем случае это небольшая BreadBoard за $1.
  • Разумеется понадобятся провода и некоторое количество резисторов разного номинала. Для дисплея 1602 без I2C нужен также подбор контрастности — делается переменным резистором на 2 — 20 кОм.
  • Для реализации амперметра понадобится шунт. В первом приближении им может быть резистор 0.1 Ом, 5 Вт.
  • Для реализации автоматики отключения понадобится реле с контактами рассчитанными на максимальный ток устройства и напряжением равным напряжению питания. Для управления реле нужен npn транзистор и защитный диод.
  • Устройство будет питаться от внешнего источника питания, очевидно, что не менее 5 в. Если питание будет сильно варьироваться, то так же потребуется интегральный стабилизатор типа 7805 — он и определит напряжение реле.
  • В случае Arduino Pro Mini для заливки прошивки потребуется USB-TTL конвертер.
  • Для наладки понадобится мультиметр.

Вольтметр

Я реализую простой вольтметр с одним диапазоном примерно 0 — 20в. Это замечанием важно, тк АЦП нашего контроллера имеет разрядность 10 бит (1024 дискретных значения), поэтому погрешность составит не менее 0.02 в (20 / 1024). Для реализации железно нам нужен аналоговый вход контроллера, делитель из пары резисторов и какой-нибудь вывод (дисплей в законченном варианте, для отладки можно последовательный порт).

Принцип измерения АЦП состоит в сравнении напряжения на аналоговом входе с опорным VRef. Выход АЦП всегда целый — 0 соответствует 0в, 1023 соответствует напряжению VRef. Измерение реализовано путем серии последовательных чтений напряжения и усреднения по периоду между обновлениями значения на экране. Выбор опорного напряжения важен, поскольку по умолчанию оно равно напряжению питания, которое может быть не стабильно. Это нам совершенно не подходит — за основу мы будем брать стабильный внутренний опорный источник напряжением 1.1в, инициализируя его вызовом analogReference(INTERNAL). Затем мы откалибруем его значение по показаниям мультиметра.

На схеме слева — вариант с прямым управлением дисплея (он просто управляется — смотрите стандартный скетч LiquidCrystal\HelloWorld). Справа — вариант с I2C, который я и буду использовать дальше. I2C позволяет сэкономить на проводах (коих в обычном варианте — 10, не считая подсветки). Но при этом необходим дополнительный модуль и более сложная инициализация. В любом случае, отображение символов на модуле надо сначала проверить и настроить контрастность — для этого надо просто вывести после инициализации любой текст. Контрастность настраивается резистором R1, либо аналогичным резистором I2C модуля.

Вход представляет собой делитель 1:19, который позволяет при Vref = 1.1 получить максимальное напряжение около 20в (обычно параллельно входу ставят конденсатор + стабилитрон для защиты, но нам пока это не важно). Резисторы имеют разброс, да и опорное Vref контроллера тоже, поэтому после сборки надо измерить напряжение (хотя бы питания) параллельно нашим устройством и эталонным мультиметром и подобрать Vref в коде до совпадения показания. Так же стоить отметить, что любой АЦП имеет напряжение смещения нуля (которое портит показания в начале диапазона), но мы пока не будем в это углубляться.

Также важным будет разделение питающей и измерительной «земли». Наш АЦП имеет разрешение чуть хуже 1мВ, что может создавать проблемы при неправильной разводке, особенно на макете. Поскольку разводка платы модуля уже сделана и нам остается только выбор пинов. «Земляных» пинов у модуля несколько, поэтому мы должны сделать так, чтобы питание в модуль заходило по одной «земле», а измерения по другой. Фактически для изменений я всегда использую «земляной» пин ближайший к аналоговым входам.

Для управление I2C используется вариант библиотеки LiquidCrystal_I2C — в моем случае указывается специфическая распиновка модуля I2C (китайцы производят модули с отличающимся управлением). Так же отмечу, что I2C в Arduino предполагает использование именно пинов A4, A5 — на плате Pro Mini они находятся не с краю, что неудобно для макетирования на BreadBoard.

Исходный код

#include <Wire.h> #include <LiquidCrystal_I2C.h> // Простой вольтметр с i2c дисплеем 1602. V 16.11 // Настройки i2c дисплея 1602 с нестандартной распиновкой #define LCD_I2C_ADDR 0x27 #define BACKLIGHT 3 #define LCD_EN 2 #define LCD_RW 1 #define LCD_RS 0 #define LCD_D4 4 #define LCD_D5 5 #define LCD_D6 6 #define LCD_D7 7 LiquidCrystal_I2C lcd(LCD_I2C_ADDR,LCD_EN,LCD_RW,LCD_RS,LCD_D4,LCD_D5,LCD_D6,LCD_D7); // Время обновления показаний, мс (200-2000) #define REFRESH_TIME 330 // Аналоговй вход #define PIN_VOLT A0 // Внутреннее опорное напряжение (подобрать) const float VRef = 1.10; // Коэффициент входного резистивного делителя (Rh + Rl) / Rl. IN <—(analogInPin)—-|GND const float VoltMult = (180.0 + 10.0) / 10.0; float InVolt, Volt; void setup() { analogReference(INTERNAL); // Инициализация дисплея lcd.begin (16, 2); lcd.setBacklightPin(BACKLIGHT, POSITIVE); lcd.setBacklight(HIGH); // включить подсветку lcd.clear(); // очистить дисплей lcd.print(«Voltage»); } void loop() { unsigned long CalcStart = millis(); int ReadCnt = 0; InVolt = 0; // Чтение из порта с усреднением while ((millis() — CalcStart) < REFRESH_TIME) { InVolt += analogRead(PIN_VOLT); ReadCnt++; } InVolt = InVolt / ReadCnt; // Смещение 0 для конкретного ADC (подобрать или отключить) if (InVolt > 0.2) InVolt += 3; // Перевод в вольты (Value: 0..1023 -> (0..VRef) scaled by Mult) Volt = InVolt * VoltMult * VRef / 1023; // Вывод данных lcd.setCursor (0, 1); lcd.print(Volt); lcd.print(«V «); }

Ссылки

  • Библиотека LiquidCrystal_I2C, позволяющая задать распиновку
  • Часть 2. Амперметр

Железо

  • Arduino Pro Mini
  • Дисплей 1602 и Модуль I2C
  • Макетные платы
  • Комплект резисторов
  • Резисторы на 0.1 ом (в качестве шунта)
  • USB-TTL конвертер
  • Готовый многофункциональный вольт-ампер-метр
  • Отличный мультиметр UNI-T UT-61E (не дешевый)

Спутниковое телевидение

Недавно я нашел на просторах интернета краткое описание и схему о том, как самому в домашних условиях собрать тестер полупроводниковых элементов на микроконтроллере Atmega328P. ESR тестер на построен на плате Arduino Pro Mini плюс имеет дисплей TFT 1.8″ 128*60 SPI Color TFT L на базе контроллера ST7735. Эти модули можно купить AliExpress по доступной цене.

Необходима доработка платы Arduino Pro Mini:

Начал изучать схему Arduino Pro Mini и выяснил, что все вывода от микроконтроллера Atmega328P на самой плате как и полагается правильно разведены. Более того в плату запаян стабилизатор 5 вольт. Единственно необходимо выпаять на плате Arduino Pro Mini с микроконтроллером Atmega328P — несколько деталей.
— Убрать конденсатор 0,1мкФ с вывода AREF и выпаять резистор и светодиод от вывода (PB5 (SCK/PCINT5))

Что касется кварца, то в Arduino Pro Mini уже установлен кварц на 16 МГц. Его оставляем.

Схема тестера на Arduino Pro Mini с цветным дисплеем

Список электронных компонентов для сборки ESR тестера

Для прошивки arduino mini использовал следующий программатор. Как подключить программатор USBASP смотрите схему ниже. Заказывал в Китае на AliExpress.

4-канальный вольтметр с ЖК-индикатором на базе Arduino

Четырехканальный «Arduino-вольтметр» может измерять четыре независимых напряжения постоянного тока в диапазоне от 0 до 50В. Аналоговые каналы с A2 по A5 на Arduino Uno используются для измерения четырех различных напряжений. Измеренные значения напряжений отображаются на 16-символьном, двухстрочном ЖК-индикаторе.

Напряжения отображаются в виде значения с одной цифрой после запятой, напр., 5.3В, 12.8В и т.д.

На видео ниже показана работа вольтметра на базе Arduino, который измеряет напряжение четырех батарей с различным уровнем напряжения.

Принцип работы вольтметра

Каждый канал вольтметра на базе Arduino имеет пару резисторов, которые образуют делитель напряжения. Делитель напряжения уменьшает входное напряжение до уровня, который может быть измерен микроконтроллером Arduino. Запущенный код на Arduino вычисляет действительное значение напряжения и отображает результат на ЖК-дисплее.

Электрическая схема вольтметра на базе Arduino

Перед началом сборки схемы убедитесь в том, что ваш ЖК-дисплей имеет такое же количество выводов, что и дисплей, указанный на схеме. При неправильном подключении ЖК-дисплей может выйти из строя.

В данном учебном материале Arduino LCD показано, как подключить ЖК-дисплей к плате Arduino Uno.

Напряжение измеряется между точками A, B, C или D и землей или 0В. Не забудьте отрегулировать уровень контрастности с помощью потенциометра, чтобы показания на ЖК-дисплее были видимыми.

Резистор R1 обеспечивает ограничение тока для опциональной задней подсветки и позволяет ей быть постоянно включенной.

Скетч вольтметра на базе Arduino

Переменные sum и voltage объединяются в массив, что позволяет сохранять значения показаний от четырех аналоговых каналов.

Калибровка

Процесс калибровки подробно описан в статье Измерение напряжения постоянного тока с использованием Arduino, но в нашем случае нужно вычислить коэффициент деления 4 делителей напряжения.

Значения калибровки могут быть легко изменены в верхней части кода:

// voltage divider calibration values #define DIV_1 11.1346 #define DIV_2 11.1969 #define DIV_3 11.0718 #define DIV_4 11.0718 // ADC reference voltage / calibration value #define V_REF 4.991

Калибровка опорного напряжения

Измерьте напряжение 5В и измените значения константы V_REF в соответствии с измеренным значением. Измерьте напряжение в схеме с подключенным ЖК-дисплеем и при запущенном скетче, поскольку напряжение может измениться при подключении ЖК-дисплея. Например, при подключенной схеме, значение напряжения с величины 5.015В при отключенном ЖК-дисплее может упасть до 4.991В при подключенном ЖК-дисплее на том же «железе».

Калибровка делителя напряжения

Измените значения делителя напряжения для каждого делителя напряжения от DIV_1 до DIV_4 в верхней части скетча. DIV_1 — DIV_4 соответствуют аналоговым выводам A2 — A5.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Плата Arduino Arduino Uno 1 Поиск в Utsource В блокнот
R1 Резистор 47 Ом 1 Поиск в Utsource В блокнот
R2, R4, R6, R8 Резистор 1 МОм 4 Поиск в Utsource В блокнот
R3, R5, R7, R9 Резистор 100 кОм 4 Поиск в Utsource В блокнот
RV1 Подстроечный резистор 10 кОм 1 Поиск в Utsource В блокнот
LCD LCD-дисплей 16×2 HD44780 1 Поиск в Utsource В блокнот
Добавить все

Скачать список элементов (PDF)

Оригинал статьи

Прикрепленные файлы:

Вольтметр на ардуино: создание устройства своими руками по шагам

Вольтметр на Arduino | Каталог самоделок

Широкий интерес для любителей самодельных электронно-программируемых устройств представляют многофункциональные сборки Arduino, позволяющие воплощать в жизнь интересные задумки.

Основное преимущество готовых схем Arduino заключается в уникальном блочно-модульном принципе: каждая плата может быть добавлена дополнительными интерфейсами, бесконечно расширяя возможности для создания различных проектов.

Модули Arduino построены на универсальном микроконтроллере с собственным загрузчиком, что позволяет легко прошивать его необходимым программным кодом, без использования дополнительных устройств. Программирование осуществляется на стандартном языке С++.

Одним из простейших примеров использования Arduino может стать реализация на базе этой сборки вольтметра постоянного напряжения повышенной точности с диапазоном измерения от 0 до 30 В.

Аналоговые входы Arduino предназначены для постоянного напряжения не более пяти вольт, поэтому, использование их при превышающих это значение напряжениях возможно с делителем напряжения.

Схема подключения Areduino через делитель напряжения

Делитель напряжения состоит из двух последовательно соединенных сопротивлений. Расчет его производится по формуле:

Где, в данном случае, – максимальное измеряемое напряжение, – напряжение после делителя, поступающее на аналоговые вход Arduino, R1 и R2 – значения сопротивлений первого и второго элемента делителя, соответственно.

Чтобы установить определенный «запас прочности» разрабатываемого вольтметра и для простоты подсчетов можно принять величину сопротивлений R1=10кОм и R2=100кОм. В этом случае, на сборку можно подавать напряжение до 55 В.

Встроенный в схему Arduino датчик преобразует поданное на вход А0 напряжение в цифровой сигнал, который поступит на микроконтроллер и будет им обработан, с помощью заложенной в память программы будут произведены необходимые вычисления и значение реального напряжения выведутся на жидкокристаллическом индикаторе.

Наладка прибора и корректировка скретч-листинга программы должны не вызывать затруднений.

Обычные резисторы, используемые в радиолюбительской массе, имеют среднюю погрешность 10 % от номинала. Использование же прецизионных сопротивлений высокой точности не всегда может быть возможным из-за их высокой стоимости.

Поэтому, если при проверке образцовым лабораторным измерительным прибором, обнаружилась погрешность измерения, необходимо проверить реальное сопротивление каждого элемента делителя и отредактировать программу (R1, R2).

Следующим шагом наладки должен стать замер напряжения между клеммами +5 и общей («земля») Arduino. В случае, если полученное значение не будет ровно 5 В, нужно также произвести изменения в коде (заменить число 5 в строке vout=(value*5)…) на действительное напряжение.

Следует не забывать, что даже небольшое превышение напряжения (выше 55 В)приведет к выходу из строя Arduino, поэтому, рационально не применять вольтметр для высоких величин, установив верхней планкой 30 В.

Схема вольтметра на Areduino

Код программы :

Bluetooth вольтметр на базе arduino

Привет! Сегодня хочу продолжить тему «скрещивания» arduino и android. В предыдущей публикации я рассказал про bluetooth машинку, а сегодня речь пойдет про DIY bluetooth вольтметр. Еще такой девайс можно назвать смарт вольтметр, «умный» вольтметр или просто умный вольтметр, без кавычек.

Последнее название является неправильным с точки зрения грамматики русского языка, тем не менее частенько встречается СМИ. Голосование на эту тему будет в конце статьи, а начать предлагаю с демонстрации работы устройства, чтобы понять о чем же пойдет речь в статье.

Disclaimer: статья рассчитана на среднестатистического любителя arduino, который обычно не знаком с программированием под android, поэтому как и в прошлой статье, приложение для смартфона мы будем делать, используя среду визуальной разработки android-приложений App Inventor 2.

Чтобы сделать DIY bluetooth вольтметр нам нужно написать две относительно независимых друг от друга программы: скетч для ардуино и приложение для андроид.Пожалуй начнем со скетча.

Для начала следует знать, что существует три основных варианта измерения напряжения при помощи ардуино, не зависимо от того куда нужно выводить информацию: в com-порт, на подключенный к ардуино экранчик, или на смартфон. Первый случай: измерения напряжения до 5 вольт.

Здесь достаточно одной-двух строк кода, а напряжение подается напрямую на пин А0: int value = analogRead(0);// читаем показания с А0 voltage = (value / 1023.0) * 5; // верно только если Vcc = 5.0 вольт Второй случай: для измерения напряжения более 5 вольт используется делитель напряжения. Схема очень простая, код тоже.

int value = 0;

void setup() { Serial.begin(9600); pinMode(analogInput, INPUT);

}

void loop() { value = analogRead(analogInput); val = (value * 4.7) / 1024.0; voltage = val / (R2/(R1+R2)); Serial.println(voltage); delay(500);

}

Третий случай. Когда нужно получить более точные о напряжении в качестве опорного напряжения нужно использовать не напряжение питания, которое может немного меняться при питании от акб, например, а напряжение внутренного стабилизатора ардуино 1.1 вольт.Тут схема такая же, но код чуть длиннее.

Подробно этот вариант разбирать не буду, так как он и так хорошо описан в тематических статьях, а мне вполне и достаточно второго способа, поскольку питание у меня стабильное, от usb-порта ноутбука.
Итак с измерением напряжения мы разобрались, теперь перейдем ко второй половине проекта: созданию андроид-приложения.

Приложение будем делать прямо из браузера в среде визуальной разработки android-приложений App Inventor 2. Заходим на сайт appinventor.mit.

edu/explore/, авторизуемся с помощью гугл-аккаунта, нажимаем кнопку create, new project, и путем простого перетаскивания элементов создаем примерно такой дизайн:Я сделал графику очень простой, если кому-то захочется более интересной графики, напомню, что для этого нужно использовать вместо .jpeg файлов, файлы формата .png с прозрачным фоном. Теперь переходим во вкладку Blocks и создаем там логику работы приложения примерно так:

Создание зарядного устройства, управляемого Arduino

Arduino и добавленная к ней схема заряда могут быть использованы для мониторинга и управления зарядкой никель-металл-гидридных аккумуляторов, например, так:

Законченное устройство

Аккумуляторные батареи являются отличным способом для питания вашей портативной электроники. Они могут сэкономить вам много денег при правильной зарядке.

Для того, чтобы вы могли получить максимальную отдачу от ваших аккумуляторных батарей, их необходимо правильно заряжать. Это означает, что вам необходимо хорошее зарядное устройство.

Вы можете потратить кучу денег, купив готовое зарядное устройство, а можете получить удовольствие, сделав его сами. В данной статье мы рассмотрим, как можно создать зарядное устройство, управляемое Arduino.

Во-первых, важно отметить, что не существует универсального способа зарядки, который подходил бы для всех аккумуляторов. Разные типы аккумуляторов используют разные химические процессы, обеспечивающие их работу.

В результате, разные типы аккумуляторов необходимо заряжать по-разному. В этой статье мы не сможем охватить все типы аккумуляторных батарей и методы зарядки.

Поэтому для простоты мы сосредоточим внимание на наиболее распространенном типе аккумуляторных батарей размера AA, на никель-металл-гидридных аккумуляторах (NiMH).

Комплектующие

Список комплектующих слева направо:

Как заряжать NiMH AA аккумуляторы

Увеличение скорости заряда увеличивает риск повреждения аккумулятора.

Существует много способов зарядки NiMH аккумуляторов. Выбор используемого вами метода главным образом зависит от того, как быстро вы хотите зарядить аккумулятор.

Скорость заряда измеряется по отношению к емкости батареи. Если ваша батарея обладает емкостью 2500 мАч, и вы заряжаете ее током 2500 мА, то вы заряжаете ее со скоростью 1C.

Если вы заряжаете этот же аккумулятор током 250 мА, то вы заряжаете его со скоростью C/10.

Во время быстрой зарядки аккумулятора (со скоростью выше C/10), вам необходимо тщательно контролировать напряжение на батарее и ее температуру, чтобы не перезарядить ее. Это может серьезно повредить аккумулятор.

Тем не менее, когда вы заряжаете аккумулятор медленно (со скоростью ниже C/10), у вас гораздо меньше шансов повредить батарею, если случайно перезарядите ее. Поэтому медленные методы зарядки, как правило, считаются более безопасными и помогут вам увеличить срок службы батареи.

Поэтому в нашем самодельном зарядном устройстве мы будем использовать скорость заряда C/10.

Цепь заряда

Для данного зарядного устройства основой является схема для управления источником питания с помощью Arduino. Схема питается от источника напряжения 5 вольт, например, от адаптера переменного тока или компьютерного блока питания. Большинство USB портов не подходит для данного проекта из-за ограничений по току.

Источник 5В заряжает батарею через мощный резистор 10 Ом и мощный MOSFET транзистор. MOSFET транзистор устанавливает величину тока, протекающего через батарею. Резистор добавлен как простой способ контроля тока.

Контроль величины тока выполняется подключением каждого вывода резистора к аналоговым входным выводам Arduino и измерением напряжения с каждой стороны. MOSFET транзистор управляется выходным ШИМ выводом Arduino.

Импульсы сигнала широтно-импульсной модуляции сглаживаются до постоянного напряжения фильтром на резисторе 1 МОм и конденсаторе 1 мкФ. Данная схема позволяет Arduino отслеживать и управлять током, протекающим через батарею.

Датчик температуры

Датчик температуры служит для предотвращения перезаряда батареи и обеспечения безопасности.

В качестве дополнительной меры предосторожности в зарядное устройство добавлен датчик температуры TMP36 для контроля температуры батареи. Данный датчик выдает напряжение, которое линейно зависит от температуры.

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

Выводы датчика подключаются к шине 5В, к корпусу и к аналоговому входному выводу Arduino.

Держатель AA батареи перед и после установки на макетную плату

Код

Код для данного проекта довольно прост. Переменные в начале исходного кода позволяют настроить зарядное устройство путем ввода значений емкости батареи и точного сопротивления мощного резистора. Также добавлены и переменные безопасных порогов.

Максимально допустимое напряжение на батарее устанавливается в значение 1,6 вольта. Максимальная температура батареи установлена на 35 градусов по Цельсию. Максимальное время заряда установлено на 13 часов.

Если какой-либо из этих порогов безопасности будет превышен, зарядное устройство выключается.

В теле программы вы можете увидеть, что система постоянно измеряет напряжения на выводах мощного резистора. Это используется для расчета значений напряжения на батарее и протекающего через нее тока.

Ток сравнивается с целевым значением, которое составляет C/10.

Если рассчитанный ток отличается от целевого значения более, чем на 10 мА, система автоматически подстраивает выходное значение, чтобы подкорректировать его.

Arduino использует последовательный интерфейс для отображения всех текущих данных. Если вы хотите проконтролировать работу вашего зарядного устройства, то можете подключить Arduino к USB порту компьютера, но это необязательно, так как Arduino питается от источника напряжения 5В зарядного устройства.

Скачиваемую версию исходного кода вы можете найти по ссылке, приведенной ниже.

Теперь вы можете создать собственное зарядное устройство. Но обязательно контролируйте скорость заряда и соблюдайте технику безопасности, так как избыточная зарядка аккумулятора может быть опасна.

Оригинал статьи:

  • Jason Poel Smith. Create an Arduino Controlled Battery Charger

Arduino Uno

Отладочная плата Arduino Uno построена на микроконтроллере Atmega328P.

Она имеет 14 цифровых входных/выходных выводов (6 из которых могут использоваться в качестве ШИМ выходов), 6 аналоговых входов, кварцевый резонатор 16 МГц, подключение USB, разъем питания, разъем ICSP и кнопку перезагрузки. Она содержит всё необходимое для работы с микроконтроллером; для того, чтобы начать работу с ней, просто подключите…

Батарейный отсек 1xAA

Батарейный отсек на один элемент AA.

Индикатор уровня заряда батареи на ARDUINO | Мастер Винтик. Всё своими руками!

Ранее мы рассматривали различные схемы на основе набора ARDUINO. В этой статье, сегодня мы будем конструировать индикатор уровня заряда батареи.

В ней ряд из 6-ти разноцветных светодиодов показывают уровень заряда батареи. Эта схема может пригодится для контроля вашего 12 В аккумулятора.

Есть много схем на этом сайте более простых, но у нас цель собрать схему на основе ARDUINO, рассмотреть её работу.

Все аккумуляторы имеют определенный предел напряжения для разрядки, если напряжение выходит за рамки установленного, срок службы батареи резко сокращается.

Предлагаемая ниже, схема покажет Вам, сколько энергии осталось в аккумуляторе. Схема может быть подключена к батарее, когда эта схема указывает на низкий заряд батареи, Вы можете подключить батарею для зарядки. Схема имеет 6 светодиодов разных цветов, один светодиод светится, указывая уровень напряжения батареи.

Если ваш аккумулятор полный заряда — самый левый светодиод загорается, а если аккумулятор разрядился — светится правый светодиод.

Схема индикатора уровня:

Набор Arduino в схеме является «мозгом» системы, потенциальный делитель, который помогает Arduino для выборки входного напряжения. Предварительно набор резисторов используется для калибровки. Серия из 6 светодиодов покажет уровень заряда батареи.

Таблица уровня заряда батареи:

Светодиод led №1 – 100% до 80%

Светодиод №2 – 80% до 60%

Светодиод №3 – 60% до 40%

Светодиод №4 – 40% до 20%

Светодиод №5 – 20% до 5%

98) {digitalWrite(d,HIGH);} else { digitalWrite(d,LOW);} if(vin11.90){digitalWrite(e,HIGH);} else {digitalWrite(e,LOW);}

if(vin

Girish———//

Калибровка:

Калибровка для этого Ардуино “6 светодиодный индикатор уровня заряда батареи” должна быть выполнена тщательно. Если Вы не правильно откалибруете, схема будет показывать неверный уровень напряжения батареи.

При включении, схема начинает со светодиодного тест. Здесь светодиоды горят последовательно с некоторой задержкой. Это может помочь при отладке ошибок. Далее:

1) Установить напряжение регулируемого источника питания точно 12,50 в.

2) Откройте монитор.

3) Поверните подстроечным резистором по часовой стрелке или против часовой стрелки и выведите показание до 12,50 в.

4) Теперь уменьшите регулируемым источником питания до 12,00 в, показания на серийном мониторе должны показать тоже 12,00 В.

5) Теперь увеличим напряжение до 13,00 В – показания на мониторе должны показать то же самое или очень близко к 13В.

6) При увеличении или уменьшении напряжения, каждый светодиод включается/выключается с разными уровнями напряжения.

Если указанные выше шаги выполнены успешно, Ваш Индикатор уровня заряда батареи настроена!

  • Простой светодиодный тахометр для автомобиля
  • С использованием недорогих и доступных микросхем NE555, LM3915 и 7805 можно сделать простой тахометр оборотов двигателя для автомобиля на 10 светодиодах.LED тахометр можно использовать для автомобиля с напряжением бортовой сети 12В или 24В питанием.Подробнее…

  • Простое цифровое управление синтезатором радиостанций
  • Модернизация радиостанций «Маяк», «Эстакада» и им подобных…

    Во многих радиостанциях (Маяк, Эстакада и тп.) синтезаторы управляются двоичным кодом. Для управления такими синтезаторами предлагаю собрать не сложную схему на «простой» логике. Переключаются каналы вверх / вниз двумя кнопками. Имеется возможность включить «автоматическое сканирование частот»,Подробнее…

  • ESR-tester своими руками
  • Прибор для проверки эквивалентного последовательного сопротивления (ЭПС) электролитических конденсаторов

    При ремонте аппаратуры часто появляется необходимость в проверке электролитических конденсаторов. Они наиболее частые виновники поломок.Состояние конденсаторов часто видно визуально: они вздутые, подтёкшие. Но иногда казалось бы на вид хороший конденсатор при проверке оказывается неисправным.Эту задачу поможет решить прибор для проверки ESR или эквивалентного последовательного сопротивления (ЭПС) .Подробнее…

Цифровой вольтметр на ПК и arduino

ПодробностиКатегория: ArduinoОпубликовано 11.09.2015 17:30 AdminПросмотров: 8140

В этом проекте мы будем передавать данный через сериал соединение на компьютер. Данные,в нашем случае это измеренное напряжение,при помощи arduino передаются в компьютер через последовательное serial соединение.

Вывод данных осуществляется в программу написанную для компьютера под Windows. При этом компьютер может быть абсолютно любым,будь это моноблок,стационарный компьютер или ноутбук,к примеру можно купить моноблок dell. В этом примере программа вольтметра была написана в среде разработке Visual C++. Статья ориентированна на тех кто уже имел дело с языком программирования C++

Измерение напряжения начинается только после того как со стороны компьютера поступят команды 0xAC и 0x1y. Где y представляет собой номер канала аналого цифрового преобразователя Arduino, и может принемать значение от 0 до 2.

После того как arduino получила команды старта измерения, начинается процесс измерения напряжения, измеренное напряжение отсылается обратно в компьютер с интервалом в 50 миллисекунд. Имеют следующий формат: 0xAB, 0xaa, 0xbb, где aa и bb максимальное и минимальное значение.

Прекращение измерения напряжения начинается после того как с компьютера поступят команды 0xAC и 0x00.

Программа написанная под Arduino (скетч) довольно проста – здесь нет ничего сложного,измеренное значение в последовательный порт. Измеренное значение напряжения умещается в 10 бит от 0x000 до 0x0400 хранится в переменной типа integer.

Последовательный порт имеет возможность передавать данные в пакете по 8 бит. Поэтому наше измеренное напряжение можно поделить на 2 пакета, каждый по 8 бит.Сначала осуществляется сдвиг на 8 бит, а затем делится на 256.

Программа вольтметра под компьютер

После того как интерфейс программы создан необходимо добавить объект последовательного порта. Этот объект позволяет изменять и задавать такие параметры как название порта, кол-во бит, скорость передачи. Добавляя поля контролирующие переменные объекта можно динамически (в процессе работы программы) изменять эти значения. В этом примере использована возможность только выбора порта.

По умолчанию программа выбирает первый порт. Важно помнить что порт ПК может быть использован только одним приложением, использование одного порта в двух приложения приведет к ошибке.
Считывание данных осуществляется при помощи события или прерывания. Выбор осуществляется во вкладке свойства.

Кнопка создания метода обработки полученных данных.

Код программы под windows можете скачать тут

Вольтметр автомобильный – каким он бывает и для чего нужен?

Большинство машин, выпущенных в 50–80 годах XX века были оснащены вольтметрами, которые располагались на панели приборов, неподалеку от датчика топлива, спидометра и других индикаторов. Вольтметр показывал водителю состояние электрической системы автомобиля, а также работу генератора и аккумулятора. Именно благодаря вольтметру водитель авто узнавал о «севшем» аккумуляторе еще до того, когда разряд опускался до опасных значений.

Именно вольтметр сообщал водителю о неисправности регулятора напряжения, приводящей к перезаряду и резкому снижению ресурса аккумулятора. С развитием электроники начали появляться системы, проверяющие работу генератора и состояние аккумулятора, а также оповещающие водителя о проблемах. В большинстве случаев, эти системы работают хорошо, но всегда существует вероятность ошибки, поэтому опытные водители всегда возят с собой вольтметр, который, в случае возникновения проблем, поможет быстро определить состояние электрической части машины.

Виды вольтметров

Существуют следующие виды вольтметров:

  • встроенный;
  • работающий от прикуривателя;
  • тестер;
  • цифровой;
  • аналоговый;
  • со звуковой индикацией.
  1. Встроенный вольтметр – это устройство, которое постоянно подключено к электропроводке автомобиля. Иногда такие вольтметры выполняют функцию тахометра, а переключение между режимами происходит после нажатия на соответствующую кнопку. Этот тип вольтметра активируется одновременно с включением зажигания, поэтому и не потребляет электроэнергию, когда мотор машины заглушен. Обычно вольтметр этого типа подключают к замку зажигания, присоединяя его к плюсовому проводу и земле. Поэтому не все водители используют встроенный вольтметр, ведь одни не умеют его подключать, а другим, по условиям гарантии, запрещено вмешательство в любые системы автомобиля.
  2. Вольтметр от прикуривателя подходит для установки на любой автомобиль. Ведь прикуриватель через реле и предохранитель подключен напрямую к аккумулятору. Никаких дополнительных функций такой вольтметр не выполняет и показывает напряжение в бортовой сети даже при выключенном зажигании.

Наиболее популярный вид автомобильного вольтметра – это тестер (мультиметр). Это устройство объединяет в себе как минимум три прибора:

  • вольтметр;
  • амперметр;
  • омметр.

Благодаря такой комбинации, тестер подходит для серьезной проверки электрических систем автомобиля. Некоторые тестеры оснащены режимом частотомера, поэтому их можно использовать в качестве выносного тахометра.

Цифровыми называют огромное количество вольтметров, которые сначала преобразуют измеряемое напряжение в цифровой (двоичный) код, а затем обрабатывают его с помощью контроллера. Кроме того, к цифровым вольтметрам можно отнести и те устройства, которые отображают напряжение или любые другие данные с помощью цифрового индикатора. Поэтому все мультиметры относят именно к цифровым устройствам, хотя все операции с напряжением они выполняют в аналоговом режиме, преобразуя в двоичный код лишь результат измерения. В какой-то мере к цифровым вольтметрам можно отнести и различные сканеры, ведь они тоже работают по принципу измерения напряжения в различных цепях и режимах.

Большинство водителей под аналоговыми вольтметрами подразумевает устройство со шкалой и стрелкой, однако отличие гораздо серьезней. Ведь в электронном вольтметре напряжение определяет аналогово-цифровой преобразователь (АЦП), а в аналоговом вольтметре показания зависят от жесткости пружины индикатора. Когда напряжение поступает на катушку индуктивности (соленоид) аналогового индикатора, оно производит магнитное поле, которое, в свою очередь, двигает стрелку и борется с сопротивлением пружины. В большинстве случаев, точность дешевых цифровых и аналоговых вольтметров составляет 3–5%, что вполне достаточно для приблизительной оценки состояния электрической сети автомобиля. В более точных, а значит и более дорогих устройствах точность находится в пределах 1–2%, поэтому их применение позволяет определить неисправность регулятора напряжения на раннем этапе, задолго до того, как он начнет разрушать аккумулятор.

Существует также разновидность цифровых вольтметров, причем как встроенных, так и вставляемых в гнездо прикуривателя, которые при достижении предельных безопасных значений, составляющих:

  • 12,5 вольт при выключенном зажигании;
  • 10–11 вольт во время работы стартера;
  • 14 вольт во время работы двигателя подают звуковой сигнал, информирующий водителя о неисправностях в системе электропитания автомобиля.

Сколько стоит автомобильный вольтметр

Стоимость вольтметра зависит от места покупки, марки и точности. Наиболее дешевые и при этом обладающие достаточной для обычного водителя точностью устройства можно купить на еБей. Алибаба и АлиЭкспресс. Там стоимость различных автомобильных вольтметров начинается от 150 рублей при бесплатной доставке. В российских интернет-магазинах, в том числе Яндекс Маркет, стоимость автомобильных вольтметров начинается от 400 рублей не считая платы за доставку. В обычных магазинах цены еще больше и начинаются с 500–700 рублей. Мультиметры с режимом частотомера стоят от 2 тысяч рублей.

Как выбирать вольтметр

В первую очередь вам необходимо определить, для чего именно вам нужен вольтметр. Если он нужен для постоянного контроля над бортовой электрической сетью, то лучший выбор – встроенное устройство с режимом тахометра. Чтобы периодически проверять исправность аккумулятора и генератора, не выходя из салона, лучше всего подходит вольтметр, вставляемый в гнездо прикуривателя. Если же вольтметр нужен для серьезной диагностики и ремонта бортовой сети, то выбирайте мультиметр, выполняющий большое количество разных операций.

Также заранее подумайте, какой внешний вид вам больше нравится – прямоугольный с цифровым индикатором, или круглый со стрелкой? Прямоугольный занимает меньше места, но информация с него сложней воспринимается, особенно в яркий солнечный день. Для круглого стрелочного прибора сложно найти место на передней панели, зато информация с него воспринимается гораздо легче и это не мешает даже яркий свет. Подумайте, сможете ли вы сами подключить встроенный прибор, или есть ли у вас знакомые, которые не только подключат его, но и не испортят ничего в машине? Если сомневаетесь в своих силах или нет такого знакомого, то покупайте вольтметр для прикуривателя.

Если вы покупаете не профессиональный измеритель, а обычный вольтметр или тестер, то никакой ощутимой разницы между российскими, китайскими или еще какими-то приборами нет. Поэтому выбирайте либо тот, который приглянулся внешне, либо устраивающий по количеству функций или цене.

OLED часы на arduino

На днях я решил создать часы на arduino с отображением времени, текущей даты, дня недели и температуры воздуха на OLED дисплее. Что из этого получилось смотрите на видео.

Список необходимых компонентов:

  • Часовой модуль DS1307 – 1 шт.
  • Датчик температуры DS18B20 – 1 шт.
  • OLED I2C дисплей 0.96″ – 1 шт.
  • Плата Arduino nano V 3.0 – 1 шт.

Для начала нам потребуется скачать и установить необходимые библиотеки:

  • DS1307
  • OneWire
  • OLED I2C RUS

Далее подключаем все по схеме
и загружаем первый пробный скетч для проверки работоспособности дисплея и часового модуля
Скетч #include <OLED_I2C.h> // Подключение библиотеки для дисплея OLED myOLED(SDA, SCL, 8); extern uint8_t MegaNumbers; // Подключение больших шрифтов extern uint8_t SmallFont; // Подключение маленьких шрифтов #include <DS1307.h> // Подключение библиотеки для часового модуля DS1307 rtc(A0, A1); void setup() { myOLED.begin(); rtc.halt(false); rtc.setDOW(SUNDAY); // Настройка дня недели rtc.setTime(12, 0, 0); // Настройка времени rtc.setDate(10, 05, 2015); // Настройка даты } void loop(){ myOLED.setFont(SmallFont); myOLED.print(rtc.getDOWStr(), CENTER, 0); // Отображение дня недели String stringOne = rtc.getTimeStr(); myOLED.setFont(MegaNumbers); myOLED.print(stringOne.substring(0,2), 4, 12); // Отображение часов myOLED.print(«/», 51, 12); // Отображение двоеточия myOLED.print(stringOne.substring(3,5), 75, 12); // Отображение минут myOLED.setFont(SmallFont); myOLED.print(rtc.getDateStr(), CENTER, 57); // Отображение даты myOLED.update(); delay(500); myOLED.setFont(MegaNumbers); // Скрытие двоеточия myOLED.print(«-«, 51, 12); myOLED.update(); delay(500); }

после загрузки скетча у нас на дисплее отобразятся часы как на фото
Как видим все отображается нормально, но что бы добавить русские названия дней недели нам потребуется инициализировать русские шрифты добавив строку в скетч
extern uint8_t RusFont;
и еще добавить строки которые помогут нам определить порядковый номер дня недели и отобразить название дня на русском языке.
switch (t.dow) { case 1: myOLED.print(«GJYTLTKMYBR», CENTER, 0); break; case 2: myOLED.print(«DNJHYBR», CENTER, 0); break; case 3: myOLED.print(«CHTLF», CENTER, 0); break; case 4: myOLED.print(«XTNDTHU», CENTER, 0); break; case 5: myOLED.print(«GZNYBWF», CENTER, 0); break; case 6: myOLED.print(«CE<<JNF», CENTER, 0); break; case 7: myOLED.print(«DJCRHTCTYMT», CENTER, 0); break; }
и еще закомментируем строки
// rtc.setDOW(MONDAY); // rtc.setTime(13, 25, 0); // rtc.setDate(27, 04, 2015);
что бы при повторной загрузке скетча не устанавливать заново время. После этого день недели на нашем дисплее отобразится на русском языке.
теперь изменим отображения месяца, добавив в скетч строки
switch (t.mon) { case 1: myOLED.print(String(t.date), 30, 57); myOLED.print(«ZYDFHZ», CENTER, 57); myOLED.print(String(t.year), 88, 57); break; case 2: myOLED.print(String(t.date), 26, 57); myOLED.print(«ATDHFKZ», CENTER, 57); myOLED.print(String(t.year), 92, 57); break; case 3: myOLED.print(String(t.date), 30, 57); myOLED.print(«VFHNF», CENTER, 57); myOLED.print(String(t.year), 88, 57); break; case 4: myOLED.print(String(t.date), 30, 57); myOLED.print(«FGHTKZ», CENTER, 57); myOLED.print(String(t.year), 88, 57); break; case 5: myOLED.print(String(t.date), 36, 57); myOLED.print(«VFZ», CENTER, 57); myOLED.print(String(t.year), 82, 57); break; case 6: myOLED.print(String(t.date), 35, 57); myOLED.print(«B>YZ», CENTER, 57); myOLED.print(String(t.year), 81, 57); break; case 7: myOLED.print(String(t.date), 35, 57); myOLED.print(«B>KZ», CENTER, 57); myOLED.print(String(t.year), 81, 57); break; case 8: myOLED.print(String(t.date), 28, 57); myOLED.print(«FDUECNF», CENTER, 57); myOLED.print(String(t.year), 90, 57); break; case 9: myOLED.print(String(t.date), 24, 57); myOLED.print(«CTYNZ<HZ», CENTER, 57); myOLED.print(String(t.year), 94, 57); break; case 10: myOLED.print(String(t.date), 26, 57); myOLED.print(«JRNZ<HZ», CENTER, 57); myOLED.print(String(t.year), 92, 57); break; case 11: myOLED.print(String(t.date), 28, 57); myOLED.print(«YJZ<HZ», CENTER, 57); myOLED.print(String(t.year), 90, 57); break; case 12: myOLED.print(String(t.date), 26, 57); myOLED.print(«LTRF<HZ», CENTER, 57); myOLED.print(String(t.year), 92, 57); break; }
Почему надписи в скетче отображаются непонятным набором символов читайте в этой статье Русские и украинские шрифты для OLED I2C дисплея
Теперь наши часики будут выглядеть как на фото.
Для тех, кому было лень править скетч, ниже есть готовый скетч.
Скетч #include <OLED_I2C.h> OLED myOLED(SDA, SCL, 8); extern uint8_t MegaNumbers; extern uint8_t RusFont; extern uint8_t SmallFont; #include <DS1307.h> DS1307 rtc(A0, A1); Time t; void setup() { myOLED.begin(); rtc.halt(false); // rtc.setDOW(WEDNESDAY); // rtc.setTime(10, 02, 0); // rtc.setDate(29, 4, 2015); } void loop() { myOLED.setFont(RusFont); t = rtc.getTime(); switch (t.dow) { case 1: myOLED.print(«GJYTLTKMYBR», CENTER, 0); break; case 2: myOLED.print(«DNJHYBR», CENTER, 0); break; case 3: myOLED.print(«CHTLF», CENTER, 0); break; case 4: myOLED.print(«XTNDTHU», CENTER, 0); break; case 5: myOLED.print(«GZNYBWF», CENTER, 0); break; case 6: myOLED.print(«CE<<JNF», CENTER, 0); break; case 7: myOLED.print(«DJCRHTCTYMT», CENTER, 0); break; } String stringOne = rtc.getTimeStr(); myOLED.setFont(MegaNumbers); myOLED.print(stringOne.substring(0, 2), 4, 12); myOLED.print(«/», 51, 12); myOLED.print(stringOne.substring(3, 5), 75, 12); myOLED.setFont(RusFont); switch (t.mon) { case 1: myOLED.print(String(t.date), 30, 57); myOLED.print(«ZYDFHZ», CENTER, 57); myOLED.print(String(t.year), 88, 57); break; case 2: myOLED.print(String(t.date), 26, 57); myOLED.print(«ATDHFKZ», CENTER, 57); myOLED.print(String(t.year), 92, 57); break; case 3: myOLED.print(String(t.date), 30, 57); myOLED.print(«VFHNF», CENTER, 57); myOLED.print(String(t.year), 88, 57); break; case 4: myOLED.print(String(t.date), 30, 57); myOLED.print(«FGHTKZ», CENTER, 57); myOLED.print(String(t.year), 88, 57); break; case 5: myOLED.print(String(t.date), 36, 57); myOLED.print(«VFZ», CENTER, 57); myOLED.print(String(t.year), 82, 57); break; case 6: myOLED.print(String(t.date), 35, 57); myOLED.print(«B>YZ», CENTER, 57); myOLED.print(String(t.year), 81, 57); break; case 7: myOLED.print(String(t.date), 35, 57); myOLED.print(«B>KZ», CENTER, 57); myOLED.print(String(t.year), 81, 57); break; case 8: myOLED.print(String(t.date), 28, 57); myOLED.print(«FDUECNF», CENTER, 57); myOLED.print(String(t.year), 90, 57); break; case 9: myOLED.print(String(t.date), 24, 57); myOLED.print(«CTYNZ<HZ», CENTER, 57); myOLED.print(String(t.year), 94, 57); break; case 10: myOLED.print(String(t.date), 26, 57); myOLED.print(«JRNZ<HZ», CENTER, 57); myOLED.print(String(t.year), 92, 57); break; case 11: myOLED.print(String(t.date), 28, 57); myOLED.print(«YJZ<HZ», CENTER, 57); myOLED.print(String(t.year), 90, 57); break; case 12: myOLED.print(String(t.date), 26, 57); myOLED.print(«LTRF<HZ», CENTER, 57); myOLED.print(String(t.year), 92, 57); break; } myOLED.update(); delay(500); myOLED.setFont(MegaNumbers); myOLED.print(«-«, 51, 12); myOLED.update(); delay(500); }
Ну а теперь, еще более усовершенствуем наши OLED часы и добавим к ним отображение температуры, которую мы будем считывать с датчика температуры DS18B20.
Для отображения рисунка с градусником на OLED дисплее и значка градуса выберем картинку с рисунком градусника и с помощью графического редактора сохраним ее в формате GIF с именем term.gif, и тоже самое проделаем с картинкой с значком градуса — сохраним ее как grad.gif.
картинки должны быть двухцветными (белый и черный), доступные форматы картинок png, jpg, gif
У меня картинка term.bmp имеет размеры 19×40 пикселей, а картинка grad.bmp 13×12 пикселей. Потом нам потребуется конвертировать две картинки с помощью онлайн-сервиса www.rinkydinkelectronics.com
выбираем наш файл изображения и жмем Make File
Жмем на Click here to download your file и сохраняем файл grad.c в папку с нашим скетчем, тоже самое проделываем с другим изображением. Сохраняем и закрываем скетч. При повторном открытии он будет иметь еще две вкладки с файлами изображений.
После этого добавим две строки в скетч, которые инициализируют наши файлы изображений
extern uint8_t term; extern uint8_t grad;
а потом отобразим наши изображения на экране OLED дисплея, добавив строки
myOLED.drawBitmap(4, 12, term, 19, 40); myOLED.drawBitmap(92, 12, grad, 13, 12);
Добавим в наш скетч на два цикла. В первом цикле у нас будет отображаться время – назовем его void watch(); Второй цикл будет считывать и отображать температуру void temp();
А в основном цикле void loop(); пропишем для ротации циклов несколько строчек кода
if (x >= 10) { temp(); x=0; } else { watch(); } x++;
В цикле void temp(); пропишем кусочек кода для считывания и отображения температуры
for(int x = 0; x < 10; x++){ byte data; ds.reset(); ds.write(0xCC); ds.write(0x44); delay(150); ds.reset(); ds.write(0xCC); ds.write(0xBE); data = ds.read(); data = ds.read(); int Temp = (data << 8) + data; Temp = Temp >> 4; String stringOne = rtc.getTimeStr(); myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print(stringOne.substring(0, 5), 98, 0); myOLED.print(rtc.getDateStr(), 0, 0); myOLED.setFont(RusFont); myOLED.print(«NTVGTHFNEHF», CENTER, 57); myOLED.drawBitmap(4, 12, term, 19, 40); myOLED.setFont(MegaNumbers); myOLED.print(String(Temp), CENTER, 12); myOLED.drawBitmap(92, 12, grad, 13, 12); myOLED.update(); myOLED.clrScr(); }
В цикле void watch(); пропишем наш код, который отвечает за отображение времени
После заливки скетча, наши OLED часы сначала должны отображать время, а потом температуру как на видео в начале статьи.
Полный скетч можно загрузить по ссылке OLED_watch_temp.rar
Обсуждение статьи доступно в нашей группе vk.com

admin

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Наверх