Подключение резервуара воды к линии водоснабжения холодильника
Для чего все это?
ЛЕНЬ!
Каждый раз выдвигать эту бандуру чтобы заполнить резервуар водой.
Существующая логика работы кофемашины не совсем устраивает. Встроенный LED начинает мигать когда резервуар УЖЕ пустой и процесс приготовления кофе прерывается.
Задача:
Подключить кофе машину к линии водоснабжения холодильника с использованием ультразвукового датчика уровня.
За основу взят уже готовый вариант ультразвукового датчика уровня воды. Для конкретной задачи нужно будет поменять код, чтобы контроллер понимал, что от него хотят, измененить логику работы датчика и световой индикации
Принцип работы
Ультразвуковой датчик измеряет расстояние до поверхности воды, посылая звуковые импульсы и фиксируя время их отражения. На основе этих данных микроконтроллер (ESP32) определяет уровень жидкости в резервуаре кофемашины.
Если уровень опускается ниже заданного порога- LED начинает мигать трижды. Когда емкость наполняется до верхнего уровня — LED горит постоянно.
Железки:
1. Ультразвуковой датчик — HC-SR04
2.Микроконтроллер — ESP324. питание через USB.
3.Линия подключения после фильтра холодильника чтобы вода в кофемашину подавалась уже фильтрованная.
4.Соединительная арматура — тройник и трубка 1/4” (6 мм)
После сборки железок надо перепрограммировать контроллер.
Для этого устанавливаем Arduino IDE. Подключаем контроллер и перезаливаем код.
После сохранения подключаем контроллер к кофе машине и калибруем через веб морду:
Принцип работы.
Верхний LED индикатор:
Тройное мигание- Воды осталось на приготовление 1 экспрессо и 1 порции взбитого молока.
Для заполнения резервуара открываем механический кран до тех пор пока индикатор загорится зеленым. Закрываем кран.
6. Безопасность и защита
За холодильником в районе тройника с отводом линии к кофе машине установлен датчик протечки воды.
И спасибо, что дочитали:) Возможно, кто-нибудь найдет ЭТО полезным. Можно было бы пойти дальше, с установкой электро магнитного клапана для полной автоматизации. Но для данных условий я посчитал что механический кран подходит лучше.
Нужна помощь или направление
Здравствуйте великие умы и повелители Ардуино.
у меня к Вам вопрос, у меня есть наборчик на Ардуино ,шаговый мотор и гироскоп акселерометр, как мне сделать инверсию гироскопа? Т.е. нужно чтоб он давал сигнал мотору поворачивать вал в противоположную сторону относительно показаний.
в программирование нихера не понимаю, скетч или как правильно ... брал готовый
Экран ST7735S TZT 1.77" на ESP32-C3
Господа, помогите пожалуйста настроить экран. Я купил st7735s tzt 1.77" и для подключения использую ACELEX supermini ESP32-с3. Что не делаю экран остаётся белым и ничего не показывает. Подключил по следующей схеме:
VCC → 3.3V
GND→ GND
SCLK→ GPIO4
MOSI→ GPIO6
CS → GPIO7
DC→ GPIO2
RST→ GPIO3
BLK→ GPIO8
Пробовал через библиотеку TFT_eSPI и менял User_Setup.h до следующей конфигурации:
#define TFT_MISO -1
#define TFT_MOSI 6
#define TFT_SCLK 4
#define TFT_CS 7
#define TFT_DC 2
#define TFT_RST 3
#define TFT_BL 8
#define TFT_BACKLIGHT_ON HIGH
#define TFT_WIDTH 128
#define TFT_HEIGHT 160
#define ST7735_DRIVER
#define TFT_RGB_ORDER TFT_RGB
#define INIT_SEQUENCE_3
#define SPI_FREQUENCY 40000000
#define SPI_READ_FREQUENCY 20000000
#define SPI_TOUCH_FREQUENCY 2500000
с следующим кодом:
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
void setup() {
Serial.begin(115200);
Serial.println("TZT 1.77\" + ESP32-C3 + TFT_eSPI");
tft.init();
tft.setRotation(1);
pinMode(8, OUTPUT);
digitalWrite(8, HIGH);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setTextSize(2);
tft.drawString("TZT 1.77\"", 10, 20);
tft.drawString("WORKING!", 10, 50);
tft.fillCircle(120, 80, 30, TFT_RED);
tft.fillRect(10, 90, 60, 40, TFT_GREEN);
tft.drawLine(0, 0, 160, 128, TFT_BLUE);
}
void loop() {
tft.fillScreen(TFT_RED); delay(500);
tft.fillScreen(TFT_GREEN); delay(500);
tft.fillScreen(TFT_BLUE); delay(500);
}
не вышло, пробовал и через библиотеку ESP32 core со следующим кодом:
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define TFT_CS 7
#define TFT_RST 3
#define TFT_DC 2
#define TFT_BL 8
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
void setup() {
Serial.begin(115200);
Serial.println("ST7735S TZT 1.77\" + ESP32-C3");
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, HIGH);
tft.initR(INITR_144GREENTAB);
tft.setRotation(1);
tft.fillScreen(ST7735_BLACK);
tft.setTextColor(ST7735_WHITE);
tft.setTextSize(2);
tft.setCursor(10, 20);
tft.println("TZT OK!");
tft.setCursor(10, 50);
tft.println("ESP32-C3");
tft.fillCircle(100, 80, 25, ST7735_RED);
tft.drawRect(10, 70, 60, 40, ST7735_YELLOW);
tft.drawLine(0, 0, 160, 128, ST7735_BLUE);
Serial.println("ЭКРАН ДОЛЖЕН ПОКАЗАТЬ ЦВЕТА!");
}
void loop() {
tft.fillScreen(ST7735_RED); delay(500);
tft.fillScreen(ST7735_GREEN); delay(500);
tft.fillScreen(ST7735_BLUE); delay(500);
}
Из совета в прошлом посте изменил MOSI с 6 на 5. Bk с 8 на 3.3 V. В соответствии изменил код но ничего не помогло, экран как был белым так и остался. Репост делаю пушто ещё надеюсь что-то кто-то заметит
Детектор утечки газа
Прикольный самодельный датчик обнаружения газа. Кому интересно, стоит такой около 100 руб. на Алике, ссылка на него
Ещё более давняя хотелка из 2004 (3)
Здрасьте.
Сегодня закончим с Гравипушкой из HALF-LIFE 2
Наверное, это была самая долгая и сложная для меня часть. Во-первых, я вообще не соображаю в электронике. Во-вторых, в программировании Ардуино. В-третьих, я всё же купил другой припой, перед этим изуродовав одну плату.
Но, имея небольшой опыт с Портальной пушкой, всё же по образу и подобию собрал схему и попросил DeepSeek, Qwen и даже Алису помочь мне со скетчем и правильностью подключения. Потому что, они без конца друг за другом исправляли скетчи, подвисали и каждый косячил по-своему: один лучше подсказывал, какие кондёры и резисторы сунуть, второй подправил анимации, ибо лучше понимал суть вопроса, а третья обижалась, когда я назвал её тупой овцой, которая, починив одно, сломала другое.
Спустя пару дней и один паяльник (с ошибкой OP, как я понял, он сгорел) вот так выглядела куча проводов и всего остального.
Далее надо пробовать добавлять анимации и звуки. С анимациями всё так же — к нейросетям, а вот со звуками пришлось лезть в саму игру. Благо, со времен модов помню о программе GCFScape.
Есть ещё один момент: плеер, который подключается к Ардуино, может воспринимать только формат MP3. Благо, есть онлайн-конвертеры, но звуки лучше использовать с битрейтом до 128 кбит/с.
Ну и не большой тест запуска.
Теперь о проблемах, с которыми я столкнулся из-за непонимания и незнания.
1.Белый цвет, оказывается, в пике потребляет очень много питания.
2.Если выставить всю яркость на максимум, система из-за преобразователя питания уходит в бесконечный перезапуск, так как он всего на 2 ампера.
3. Если поставить более мощный преобразователь, то батареи на 3000 мА·ч хватает на 10 минут, и ты даже не успеваешь ничего протестировать.
4. Более мощный преобразователь сам по себе больше по размерам и не влезает в сборку.
5. Из-за неправильного распределения питания одна из лент стала тусклее и «не переваривала» белый цвет, потому что была большая просадка.
Пришлось пойти на пару компромиссов. И после всех этих небольших затыков пожалуй, надо собирать.
Сначала я пролил все контакты термоклеем («соплями»), чтобы ничего не отвалилось при засовывании. Потом всё запихал в корпус, а некоторые модульные части у меня были на коннекторах.
Далее накрутил защиту на предварительно покрашенные в чёрный болты, заранее зная, что краска облезет.
Ну и ещё один небольшой компромисс — держалки для лапок в виде резиновых трубок, в которые я их вставил, потому что просто так они не держались.
И собственно:
Зелёная лампочка — это индикация заряда. И если она станет красной, раздастся сопровождающий звук, сигнализирующий о разряде аккумулятора который я дёрнул с костюма Фримена.
Три поста равны двум месяцам работы без особого фанатизма. Но результат определённо мне нравится.
Работа с электроникой для меня была самой геморройной. Если бы не нейросети, я бы, наверное, ещё полгода или больше собирал электронику или просто собрал бы всё без неё.
До скорого.
Новогодняя гирлянда на Ардуино Нано и ws2812b
Ищу интересные проекты для самостоятельной сборки.
Хочу поделиться этим проектом с вами. Возможно он будет вам так же интересен.
Новогодняя гирлянда на адресных светодиодах ws2812b Arduino своими руками — интересный проект, который способен порадовать и удивить ваших гостей. Мы разместили на этой странице подробную схему сборки устройства и программу для микроконтроллера Ардуино Нано с возможностью управления яркостью и переключением эффектов елочной гирлянды на адресной светодиодной ленте ws2812b с помощью нескольких кнопок.
Необходимые компоненты:
Для переключения эффектов на елочной гирлянде из светодиодов WS2812B используется кнопка, подключенная к 4 пину Ардуино Нано. Кнопка на 8 пине замедляет или ускоряет скорость эффектов, а кнопка на 12 пине изменяет яркость гирлянды на адресной ленте. Всего в программе используется пять эффектов, также есть возможность полностью выключить гирлянду или включить все светодиоды белым светом без эффектов.
Схема сборки гирлянды на Arduino Nano и WS2812B
На картинке выше показана сборка схемы новогодней гирлянды на ws2812b с платой Arduino Nano (можно использовать любую другую плату). Для настройки световых эффектов используются тактовые кнопки. После сборки схемы необходимо будет установить библиотеку FastLED.h для управления адресной лентой от Ардуино. Библиотеку можно скачать с сайта GitHub.com (ссылка для скачивания архива дана выше).
Скетч для новогодней елочной гирлянды WS2812B
#include "FastLED.h"
#define NUM_LEDS 150 // количество светодиодов в ленте
#define PIN 2 // пин подключения ленты
#define B1 12 // кнопка для настройки яркости
#define B2 8 // кнопка для настройки скорости
#define B3 4 // кнопка для переключения режимов
byte bright = 50; // яркость по умолчанию
byte rate = 50; // скорость по умолчанию
byte w, baza;
boolean button1WasUp = true;
boolean button2WasUp = true;
boolean button3WasUp = true;
boolean button1IsUp;
boolean button2IsUp;
boolean button3IsUp;
CRGB leds[NUM_LEDS];
void setup() {
pinMode(B1, INPUT_PULLUP);
pinMode(B2, INPUT_PULLUP);
pinMode(B3, INPUT_PULLUP);
FastLED.addLeds <WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
FastLED.setBrightness(bright);
}
// функция настройки режимов работы
void setting() {
button1IsUp = digitalRead(B1);
button2IsUp = digitalRead(B2);
button3IsUp = digitalRead(B3);
if (button1WasUp && !button1IsUp) {
delay(10);
button1IsUp = digitalRead(B1);
if (!button1IsUp) {
bright = bright + 50; if (bright > 250) {
bright = 50;
}
}
}
button1WasUp = button1IsUp;
if (button2WasUp && !button2IsUp) {
delay(10);
button2IsUp = digitalRead(B2);
if (!button2IsUp) {
rate = rate + 10; if (rate > 50) {
rate = 10;
}
}
}
button2WasUp = button2IsUp;
if (button3WasUp && !button3IsUp) {
delay(10);
button3IsUp = digitalRead(B3);
if (!button3IsUp) {
w++; if (w > 6) {
w = 0;
}
}
}
button3WasUp = button3IsUp;
}
void loop() {
// гирлянда полностью выключена
while (w == 0) {
for (int i = 0; i < NUM_LEDS; i++) {
setting();
leds[i] = CRGB::Black;
FastLED.show();
}
}
// гирлянда светит белым цветом
while (w == 1) {
for (int i = 0; i < NUM_LEDS; i++) {
setting();
leds[i] = CRGB::White;
FastLED.setBrightness(bright);
FastLED.show();
}
}
// эффект переливания
while (w == 2) {
for (int i = 0; i < NUM_LEDS; i++) {
setting();
leds[i] = CHSV(baza + i * 5, 255, 255);
}
baza++;
FastLED.setBrightness(bright);
FastLED.show();
delay(50 - rate);
}
// эффект радуги
while (w == 3) {
setting();
static uint8_t starthue = 0;
fill_rainbow( leds + 5, NUM_LEDS - 5, --starthue, rate);
uint8_t secs = (millis() / 1000) % (rate * 2);
if (secs < rate) {
FastLED.setTemperature( Tungsten100W );
leds[0] = Tungsten100W;
}
else {
FastLED.setTemperature( OvercastSky );
leds[0] = OvercastSky;
}
FastLED.setBrightness(bright);
FastLED.show();
}
// эффект мерцания
while (w == 4) {
setting();
fadeToBlackBy(leds, NUM_LEDS, (rate + 1) * 2);
int pos = random16(NUM_LEDS);
leds[pos] += CHSV(baza++ + random8(64), 200, 255);
FastLED.setBrightness(bright);
FastLED.show();
}
// эффект палитра
while (w == 5) {
for (int i = 0; i < NUM_LEDS; i++) {
leds[i].nscale8(250);
}
for (int i = 0; i < NUM_LEDS; i++) {
setting();
leds[i] = CHSV(baza++, 255, 255);
FastLED.setBrightness(bright);
FastLED.show();
delay(rate);
}
}
// эффект конфетти
while (w == 6) {
setting();
fill_rainbow( leds, NUM_LEDS, baza++, 7);
if (random8() < 80) {
leds[ random16(NUM_LEDS) ] += CRGB::White;
}
FastLED.setBrightness(bright);
FastLED.show();
delay(50 - rate);
}
}
Заключение. Тактовые кнопки позволяют получить желаемый эффект на елочной гирлянде. Светодиодная гирлянда на ленте ws2812b может иметь больше световых эффектов — вы можете самостоятельно добавить их в скетч или изменить существующие эффекты. Дополнительно к скетчу можно подключить библиотеку Adafruit_NeoPixel.h, чтобы увеличить количество режимов со световыми эффектами на новогодней гирлянде.

























