Прошивка NES GAME - ESP 32 + TFT (Денди на ESP 32) + схема!
Файлы по ссылке в описании к видео!
Правильный тренажер для котейки
Ранее под постом о кастомной клавиатуре обещал выложить свою поделку которую делал для своего котейки (Буська, мальчик, русская голубая) ибо я бываю ленив играть лазером сам. Не боярское это дело.
@Nikomi.san, как и обещал выкладываю пост)
Первый прототип бы собран из крышки банки кофе, двумя пластиковыми перегородками для инструментов из леруа, двумя сервами и ардуинкой. Лазерный модуль купил в kazanexpress.
В какой то момент времени котейка вырос и скорость была уже скучной. Решил проапгрейдить проект, в итоге получилось это:
Коту сейчас уже три года и он постеснялся показывать свои навыки просто держите фотку ленивой жопки:
AD7793 + термопара (Arduino)
AD7793 — малошумящий 24-разрядный сигма-дельта АЦП с тремя дифференциальными аналоговыми входами. АЦП AD7793 предназначен для высокоточного измерения постоянного напряжения, может применяться для измерения напряжения термопар и других датчиков с выходным напряжением в несколько единиц или десятков мВ.
Более подробно об АЦП AD7793 можно узнать из — http://rcl-radio.ru/?p=128932
На базе АЦП AD7793 можно сделать высокоточный измеритель температуры термопары. Для примера в измерителе температуры будут применены наиболее популярные характеристики термопар ТХА и ТХК.
Термопара ТХА
Тип: К
Обозначение: ТХА
Материал: хромель/алюмель
Рабочая температура: -270…+1372°С
Термопара ТХК
Тип: L
Обозначение: ТХК
Материал: хромель/копель
Рабочая температура: -200…+800°С
Для компенсации температуры холодного спая будет использован цифровой датчик температуры DS18B20. Для предотвращения саморазогрева датчика, обращение микроконтроллера к датчику будет проводится один раз в 10 секунд. В состав измерителя входит плата разработчика Arduino Nano, дисплей LCD1602 с модулем I2C, одна тактовая кнопка, датчик температуры (моуль) DS18B20, АЦП AD7793.
Для точного измерения температуры термопары подсоединение термопары к измерителю должно быть через термокомпенсационный провод с характеристикой аналогичной термопаре.
Схема измерителя термопары
Температура термопары с учетом температуры окружающей среды
ЭДС термопары (без учета температуры окружающей среды)
Тип термопары (выбор кнопкой ХА/ХК)
Температура окружающей среды
Выбранный тип термопары заносится в EEPROM. В настройке и калибровке измеритель термопары не нуждается.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Добавив в схему несколько простых компонентов можно сделать простой терморегулятор.
При помощи энкодера можно настроить температуру регулирования, а кнопкой энкодера выбрать тип термопары.
Температура термопары с учетом температуры окружающей среды
ЭДС термопары (без учета температуры окружающей среды)
Индикатор нагрева
Тип термопары (выбор кнопкой энкодера)
Температура регулирования
Выбранный тип термопары и температура регулирования заносится в EEPROM. В настройке и калибровке измеритель термопары не нуждается, единственный параметр который может нуждаться к корректировке это гистерезис: float gis=0.2; // гистерезис 0,2 гр.ЦельсияСкетчи - http://rcl-radio.ru/?p=128968
AD7793 + термопара + термометр сопротивления (Arduino)
AD7793 — малошумящий 24-разрядный сигма-дельта АЦП с тремя дифференциальными аналоговыми входами. АЦП AD7793 предназначен для высокоточного измерения постоянного напряжения, может применяться для измерения напряжения термопар и других датчиков с выходным напряжением в несколько единиц или десятков мВ.
Перед прочтением статьи рекомендую ознакомится с двумя первыми статьями про АЦП AD7793:
В статье AD7793 + термопара (Arduino) был рассмотрен пример создания простого но высокоточного измерителя-регулятора температуры с применением в качестве датчика термопару. Большая разрядность АЦП AD7793 и линейность характеристики позволяет весьма точно измерять постоянное напряжение которое не превышает единиц мВ. Ранее описанный измеритель-регулятор преобразует ЭДС термопары в температуру с погрешностью не более ±0,2…±0,3 °С на всем диапазоне, а погрешность измерения ЭДС термопары не превышает 5…10 мкВ.
В этой статье будет рассмотрен пример использования АЦП AD7793 в качестве измерителя-регулятора с использованием датчика термометра сопротивлений.
Для примера была выбрана номинальная статическая характеристика (НСХ) 100П, при желании можно добавить в измеритель-регулятор еще несколько номинальных статических характеристик (НСХ).
Измеритель-регулятор с датчиком термосопротивления не будет отдельным уст-вом, он дополнит уже ранее описанный в термометр-регулятор с использованием в качестве датчиков термопары ТХА и ТХК.
АЦП AD7793 содержит два программируемых источника тока номиналами 10 мкА, 210 мкА, 1 мА. Токовые выходы IOT1 и IOT2 могут независимо работать друг от друга, а источники тока могут быть направлены в один токовый выход.
IO REGISTER управляет работой токовых выходов и источника тока.
Биты IEXCDIR1 IEXCDIR0 позволяю выбрать режим работы токовых выходов, а биты IEXCEN1 IEXCEN0 задают номиналы тока.
В рассматриваемом примере оба источника тока в 1 мА перенаправлены на выход IOT1, что в сумме дает ток 2 мА. Ток подается на термосопротивление, на котором вход АЦП IN2 измеряет падение напряжения, исходя из полученного значения вычисляется сопротивление термометра сопротивления и программно высчитывается температура.
Для уменьшения влияния измерительных проводов используется 4-х проводная схема подключения, при этом пары измерительных проводов соединяются непосредственно на клеммах термосопротивления.
Управление измерителем-регулятором очень простое, кнопка энкодера переключает тип датчика (ХА, ХК, 100П), а поворот ручки энкодера изменяет температуру регулирования. Выбранный последним тип датчика и температура регулирования заносятся в энергонезависимую память.
Внутренние источники тока имею отличную стабильность, но не очень высокую точность выходного тока, поэтому для получения высокой точности измерения температуры при использовании термосопротивления необходимо произвести калибровку.
/// калибровка
float gis=0.2;
float i_1ma = 1.0137;
float r_0_kall = 0.29;
Гистерезис gis общий для всех датчиков, i_1ma калибровочный коэффициент источника тока, фактически это точное значение тока который выдает один источник тока, настраивать этот коэффициент необходимо при подключении ко входу сопротивления 300…400 Ом, меняя коэффициент необходимо добиться максимально точных показаний омметра измерителя-регулятора. r_0_kall — калибровка нуля, для его определения необходимо ко входу подключить сопротивление номиналом 1…5 Ом, а r_0_kall это погрешность измерения. Например, если Вы подключили ко входу сопротивление 1 Ом, а на дисплее Вы видите показание 0,71 Ом, то калибровочный коэффициент нуля будет 0,29. Для точного определения калибровочных значений необходимо повторить ранее описанную процедуру калибровки 2-3 раза.
Температура измеренная термометром сопротивления
Омметр
Индикатор нагрева
Тип датчика
Температура регулирования
Результаты измерений
На вход измерителя регулятора подключен магазин сопротивлений МСР-60М (0,02%)
300 Ом
200 Ом
100 Ом
50 Ом
Тест точности измерения сопротивления и точности преобразования сопротивления в температуру
Как видно из таблицы максимальная погрешность при измерении температуры не превышает 0,13 °С при диапазоне 1050 °С (-200…+850 °С), что дает относительную погрешность в 0,0123%. При измерении сопротивления в диапазоне от 0 до 400 Ом относительная погрешность не превысила 0,01%. Полученная погрешность будет немного выше, так как магазин сопротивлений имеет класс точности 0,02%.
Скетч - http://rcl-radio.ru/?p=128979
AD7793 миллиомметр (Arduino)
AD7793 — малошумящий 24-разрядный сигма-дельта АЦП с тремя дифференциальными аналоговыми входами. АЦП AD7793 предназначен для высокоточного измерения постоянного напряжения, может применяться для измерения напряжения термопар и других датчиков с выходным напряжением в несколько единиц или десятков мВ.
Перед прочтением статьи рекомендую ознакомится с тремя первыми статьями про АЦП AD7793:
На базе AD7793 с использованием Arduino Nano можно собрать миллиомметр с диапазоном измерения от 0,0000 до 32,000 Ом.
Схема миллиомметра
Вход АЦП сконфигурирован как несимметричный вход, предусилитель АЦП имеет коэффициент усиления равный 1, частота опроса 4,17 Гц.
Для точного измерения необходимо иметь эталонное сопротивление 100 Ом (манганин) через которое подается ток на измеряемое сопротивление, от точности эталонного сопротивления зависит точность прибора. Если нет возможности очень точно изготовить (намотать из манганиновой проволоки) эталонное сопротивление, то откалибровать прибор можно при помощи другого эталонного сопротивления 1…30 Ом с классом точности не менее 0.02 %.
Для упрощения конструкции прибора напряжение на эталонное сопротивление 100 Ом подается от источника питания +5 В Arduino, которое также является аналоговым напряжением питания АЦП AD7793, а так как в АЦП имеется возможность контроля этого напряжения, то оно становится опорным, так как перед каждым замером сопротивления производится измерения аналогового напряжения питания АЦП которое также подается на эталонное сопротивление.
Для получения большой точности при измерении сопротивлений миллиомметр нуждается в калибровке:
#define R_100 99.969
#define K_0 0.0015
#define K_AVDD 6.065
K_AVDD — калибровочный коэффициент напряжения подаваемого на эталонное сопротивление, так как оно является аналоговым напряжением питания АЦП и имеется возможность его измерять, то необходимо очень точно произвести калибровку результата его измерения. Для этого измерьте напряжение подаваемое на эталонное сопротивление, откройте монитор порта и сравните его с измеренным значением.
AVDD — напряжением аналогового питания АЦП (выделено красным)
Измените K_AVDD таким образом, чтобы напряжение подаваемое на эталонное сопротивление соответствовало напряжению AVDD в мониторе порта.
R_100 — точное значение эталонного сопротивления.
K_0 — калибровка нуля. Замкните вход омметра, если показания не равны нулю, то укажите в K_0 погрешность нуля.
Результаты измерений
Скетч - http://rcl-radio.ru/?p=128992
Дисплей 12864b v2.0 (Arduino)
Графический дисплей 12864b v2.0 (ST7920) представляет собой ЖК-матрицу с разрешением в 128 на 64 точек, предназначен для вывода графической и текстовой информации. Поддерживает 8/4-битный параллельный режим работы и поставляется вместе с микросхемой контроллера/драйвера ST7290. Также дисплей поддерживает последовательный режим работы по шине PSB (программный SPI), именно в этом режиме будет работать описанный в этой статье дисплей.
Основное напряжение питания +5 В, дополнительное 3,3 В используется для подсветки дисплея. Рассматриваемый в статье дисплей на плате имеет регулятор контрастности, но может поставляться и без него, тогда на вход Vo подается напряжение с потенциометра (см. схему).
Встроенный потенциометр
Подключение дисплея к Arduino Nano:
При работе с дисплее можно использовать библиотеку U8glib , в папке библиотеки много различных примеров скетчей. Установить библиотеку можно через менеджер библиотек Arduino IDE.
Пример 1
#include <U8glib.h>
#include "rus6x10.h" // http://forum.rcl-radio.ru/misc.php?action=pan_download&i...
U8GLIB_ST7920_128X64 u8g(10, 11, 12, U8G_PIN_NONE); // настройка пинов
void draw() {
u8g.setRot180();
u8g.setFont(u8g_font_unifont);
u8g.drawStr(15, 12, "RCL-RADIO.RU");
u8g.drawLine(0, 15, 128, 15);
u8g.setFont(u8g_font_6x12);
u8g.drawStr(45, 25, "ST7920");
u8g.setColorIndex(1);
u8g.drawBox(0, 35, 128, 20);
u8g.setFont(u8g_font_unifont);
u8g.setColorIndex(0);
u8g.drawStr(35, 50, "ARDUINO");
u8g.setColorIndex(1);
u8g.setFont(rus6x10);
u8g.drawStr(45, 64, "ПРИВЕТ");
}
void setup() { }
void loop() {
u8g.firstPage();
do { draw(); }
while( u8g.nextPage() );
}
Для поддержки русского шрифта скачайте архив шрифта и распакуйте его в папку со скетчем.
Пример 2
Ниже показан пример создания простых часов, в примере используется модуль часов реального времени DS3231. Время устанавливается по времени компиляции.
Для поддержки семисегментных цифр скачайте архив шрифта и распакуйте его в папку со скетчем.
Скетч - http://rcl-radio.ru/?p=129018