Форум самогонщиков Сайт Барахолка Магазин Помощь солдатам

Аппаратная платформа Arduino для автоматизации наших процессов

Форум самогонщиков Автоматика
1 ... 62 63 64 65 66 65
svarnoy Профессор Жуковский. 9.1K 4.6K
Отв.1280  28 Авг. 24, 16:55
Что бы начинать писать меню надо знать где оно будет отображаться это моменты принципиальные.
Само меню и схемы адресации я сначало просто рисую на бумажке, так очень удобно.
Виктрыч Профессор Екатеринбург 8.7K 2.2K
Отв.1281  28 Авг. 24, 19:12
Отображаться на телефоне по блютузу. Аналогично монитору IDE. Во многих моих поделках нет своего дисплея и кнопок. С телефона мне удобнее послать прямое указание, чем искать пункт меню. И вывести в монитор бесконечное колличество данных. Или группу избраных. Опять же на графиках удобнее видеть динамику. И что было допустим час назад. Пользуюсь готовыми приложениями с маркета.
К примеру теплица. Отчёт раз в секунду. Переставил раз в 5 минут. Переустановил термостат с 30 на 57. Сбросил датчик углерода. Вернул отчёт раз в секунду
Screenshot_2024-08-28-20-49-10-768_de.kai_morich.serial_bluetooth_terminal.jpg
Screenshot_2024-08-28-20-49-10-768_de. Аппаратная платформа Arduino для автоматизации наших процессов. Автоматика.

Из другого приложения. Сунул один из датчиков температуры подмышку(зелёное)
Screenshot_2024-08-28-20-53-17-382_com.emrctn.BluetoothGraphics.jpg
Screenshot_2024-08-28-20-53-17-382_com. Аппаратная платформа Arduino для автоматизации наших процессов. Автоматика.

То есть уже сложившийся и удобный способ общения с ардуиной. Дисплеи кое где припаиваю. Но в основном без них. Если он за стенкой или в подвале как на него смотреть?
Кроме того можно вывести напоминалку команд или вызвать инструкцию. Не всё можно удержать в голове.

Добавлено через 6мин.:

А по меню. Пока путаюсь в флагах и свойствах буфера сериала. Память уже подводит. Не моё это, да и поздно. Но интересно. Затянуло.
DIMA1965 Профессор новый иерусалим 2.7K 628
Отв.1282  28 Авг. 24, 20:32
или использовать кофемашину с вайфаемdee, 28 Авг. 24, 14:42

Хорошая идея. Не жалко ее на плитку ставить?? 🤣🤣
dee Научный сотрудник Минск 8.2K 2.2K
Отв.1283  28 Авг. 24, 21:44
DIMA1965, на мраморную можно и поставить, а так на шкафчик удобнее )))
svarnoy Профессор Жуковский. 9.1K 4.6K
Отв.1284  29 Авг. 24, 07:39
Для приготовления еды надо не плитку ардуинить, а электрокастрюльку, мультиварку.
У меня лет 10 назад была редмонд, у них на то время был самый живой форум, чего там народ не готовил, в пределах штатных программ.
И пельмени сразу с корочкой, торты, и тд.
Я делал завтраки, с вечера продуктов накидаешь, утром к будильнику все горяченькое.
Надоело правда быстро.
И вот теперь хочу заардуинить аэрогриль, чтоб приходишь в гараж, а там уже крылышки хрустящие готовы.
Пиво в холодильнике холодное и без ардуины.
Виктрыч Профессор Екатеринбург 8.7K 2.2K
Отв.1285  29 Авг. 24, 08:54
Мультиварка есть. Продуманный девайс. Но только на свою кастрюлю. На квас в ней солод осахариваю в режиме подогрева. Иван чай в режиме йогурта. И потом сразу в выпечку. Очень нравиться автоматический уход в подогрев. К ней как бы вопросов нет. Тё же каши нормально варит. Были бы ещё часы, а не таймер утро расчитывать.
А с индукцией пока пауза. В этой блин динамическая клавиатура. Релюшки или оптроны нужны. Или отлавливать эту динамику. На даче только вилы. Шлифую скетч виртуально.
DIMA1965 Профессор новый иерусалим 2.7K 628
Отв.1286  29 Авг. 24, 09:20, через 27 мин
с вечера продуктов накидаешь, утромsvarnoy, 29 Авг. 24, 07:39

И всю всю ночь они там с дикими дрожжами мокнут и киснут.

Кодите хорошо, а бизнес аналитика ( ответ на вопрос - КАК работает? И ЗАЧЕМ это нужно? ) хромает.

Добавлено через 2мин.:

а так на шкафчик удобнееdee, 28 Авг. 24, 21:44

Так скушно и уныло - куда ж ардуину то привинтить то 😜😜
svarnoy Профессор Жуковский. 9.1K 4.6K
Отв.1287  29 Авг. 24, 09:32, через 12 мин
И всю всю ночь они там с дикими дрожжами мокнут и киснут.DIMA1965, 29 Авг. 24, 09:20
Я не про теорию говорил, про практику, в мультях прекрасно делаются завтраки к утреннему будильнику.
Виктрыч Профессор Екатеринбург 8.7K 2.2K
Отв.1288  29 Авг. 24, 10:47
DIMA1965, а ты зачем здесь, если всё в магазине есть? С анализируй потраченные средства и время на выхлоп.
dee Научный сотрудник Минск 8.2K 2.2K
Отв.1289  29 Авг. 24, 13:49
Так скушно и уныло - куда ж ардуину то привинтить то 😜😜DIMA1965, 29 Авг. 24, 09:20
ардуино к шкафчику ? Мсье знает толк в автоматизации ))) вам с виктрычем по пути )))
Виктрыч Профессор Екатеринбург 8.7K 2.2K
Отв.1290  14 Окт. 24, 14:36
По ходу появился вопрос. Вот из примера

void loop()
{
uint16_t ir, red;

sensor.update();

while (sensor.getRawValues(&ir, &red)) {
Serial.print("IR=");
Serial.print(ir);
Serial.print(" RED=");
Serial.println(red);
}
}
Всё работает и льёт в сериал как ошпаренный и почти мгновенно переполняет его буфер.
& , как я понял из интернета, обращение по адресу переменной допустим ir.
Как этот абзац заставить работать без while? Что бы вставить в свой код? Вывести ir и red и поработать с ними?
dee Научный сотрудник Минск 8.2K 2.2K
Отв.1291  14 Окт. 24, 15:41
Виктрыч, просто пропиши строку
sensor.getRawValues(&ir, &red);
она тебе обновит значение переменных "ir" и "red"
а что б не переполняло добавь
delay(100);
что не очень хорошо, я делаю вызов по программному таймеру, все остальное свободное время МК занят опросом клавиатуры

void loop() {

//Serial.println(analogRead(A1));
//обрабатывать нажатие клавиши

proces_Button(kbs, kbl, kbr, kbu, kbd); //SEL LF RT UP DW

time_now_1sec = millis() / 1000; //переменная времени для текущего хранения секунд
time_now_01sec = millis() / 200; //переменная времени для текущего хранения 1/5 секунды

if (time_01s != time_now_01sec) { // срабатывание 5 раз в секунду
process_STATE(); //обработка состояния контроллера
process_RGB(); //обработка цвета с датчика
time_01s = time_now_01sec; // запомнить текущую 1/10 секунду и не обрабатывать содержимое до изменения
}

if (time_1s != time_now_1sec) { // срабатывание 1 раз в секунду
if (cooling != 3 || cooling != 4) {
process_TEMP(); // если не форcировано охлаждение пробирки то идет обработка датчика температуры, преобразование температуры занимает около 850мс
}
process_COOLING();
process_DISPLAY();
time_1s = time_now_1sec; // запомнить текущую секунду и не обрабатывать содержимое до изменения
}

}

если очень интересно то это кусок кода для определения на самодельном ФЭК пробы Ланга с охлаждением и термостабилизированием пробирки, каждое действие вынесено в отдельную функцию, типа процесс
Виктрыч Профессор Екатеринбург 8.7K 2.2K
Отв.1292  14 Окт. 24, 15:53, через 12 мин
Вроде этот вариант самый первый напрашивался. По нолям. В смысле монитор ваще ни чего не показывает. Нет обмена. Может чего и пропустил. Попробую ещё раз. Температуру из сетапа перенёс а цикл, показывает.
float temperature = sensor.retrieveTemperature();
Serial.print("temp=");
Serial.print(temperature);
Serial.println("C");
А эта фигня из while не откликается.
Буду копать дальше.
dee Научный сотрудник Минск 8.2K 2.2K
Отв.1293  14 Окт. 24, 15:54, через 1 мин
Виктрыч, пропустил

sensor.update();

что-то у тебя много начинается на sensor. моих знаний не хватает но это вроде название класса, оно должно быть уникальным а у тебя одно и для цвета и для температуры, как я понимаю по названию переменных, или у тебя и температура тоже из датчика цвета ?
Volume Доктор наук Уфа 580 310
Отв.1294  14 Окт. 24, 18:31
стандартный вариант неблокирующего периодического вызова чего-то в ардуине обычно делают так:

#define PERIOD_MS 100
unsigned long timing; // глобальная переменная для хранения последнего времени выполнения цикла

void loop(){
if (millis() - timing > PERIOD_MS){ //код выполняется с периодом PERIOD_MS
timing = millis();
....<какой-то код>
}
}

не спора ради, просто интересно - почему используешь иной вариант, через деление?
...
time_now_01sec = millis() / 200; //переменная времени для текущего хранения 1/5 секунды
...
if (time_01s != time_now_01sec) { // срабатывание 5 раз в секунду
dee, 14 Окт. 24, 15:41
Виктрыч Профессор Екатеринбург 8.7K 2.2K
Отв.1295  14 Окт. 24, 18:45, через 15 мин
много начинается на sensor.dee, 14 Окт. 24, 15:54
Это тот же сенсор. Оксиметр, про который неделю назад говорили. max30100. Так то работает в классическом режиме. Но всегда же хочется заглянуть за горизонт.
Пс. В классическом режиме с переменными пульса,кислорода и температуры проблем нет. Это всё можно кроить. А вот непосредственно с данными от цветоприемников засада. Только как показометры через монитор.
Пробовал копнуть библиотеки. Пока для меня это китайская грамота.

Добавлено через 16мин.:

Сам скетч для демонстрации работы светодиодов.
#include <Wire.h>
#include "MAX30100.h"

MAX30100 sensor;

void setup()
{
Serial.begin(115200);

Serial.print("Initializing MAX30100..");

if (!sensor.begin()) {
Serial.print("FAILED: ");

uint8_t partId = sensor.getPartId();
if (partId == 0xff) {
Serial.println("I2C error");
} else {
Serial.print("wrong part ID 0x");
Serial.print(partId, HEX);
Serial.print(" (expected: 0x");
Serial.println(EXPECTED_PART_ID, HEX);
}
// Stop here
for(;;);//ВОТ ЭТО НЕПОНЯТНО ЧТО ЗА ФИГНЯ
} else {
Serial.println("Success");
}

Serial.print("Enabling HR/SPO2 mode..");
sensor.setMode(MAX30100_MODE_SPO2_HR);
Serial.println("done.");

Serial.print("Configuring LEDs biases to 50mA..");
sensor.setLedsCurrent(MAX30100_LED_CURR_50MA, MAX30100_LED_CURR_50MA);
Serial.println("done.");

delay(1000);

Serial.print("Lowering the current to 7.6mA..");
sensor.setLedsCurrent(MAX30100_LED_CURR_7_6MA, MAX30100_LED_CURR_7_6MA);
Serial.println("done.");

delay(1000);

Serial.print("Shutting down..");
sensor.shutdown();
Serial.println("done.");

delay(1000);

Serial.print("Resuming normal operation..");
sensor.resume();
delay(500);
Serial.println("done.");

uint32_t tsTempSampStart = millis();
Serial.print("Sampling die temperature..");
sensor.startTemperatureSampling();
while(!sensor.isTemperatureReady()) {
if (millis() - tsTempSampStart > 1000) {
Serial.println("ERROR: timeout");
// Stop here
for(;;);// ОПЯТЬ ОНО
}
}

float temperature = sensor.retrieveTemperature();
Serial.print("done, temp=");
Serial.print(temperature);
Serial.println("C");

if (temperature < 5) {
Serial.println("WARNING: Temperature probe reported an odd value");
} else {
Serial.println("All test pass.");
}

Serial.println();
Serial.println("Press any key to go into sampling loop mode");
while (!Serial.available());

sensor.resetFifo();
}

void loop()
{
uint16_t ir, red;

sensor.update();

while (sensor.getRawValues(&ir, &red)) {
Serial.print("IR=");
Serial.print(ir);
Serial.print(" RED=");
Serial.println(red);
}
}

И бесконечное while внутри фигурных скобок. Не позволяющее там поковыряться. Строчит данные с фотоприемников как из пулемёта.
dee Научный сотрудник Минск 8.2K 2.2K
Отв.1296  14 Окт. 24, 19:23, через 38 мин
не спора ради, просто интересно - почему используешь иной вариант, через деление?Volume, 14 Окт. 24, 18:31
миллис() переполняется вроде через 4ро суток и в этот момент будет глюк а если поставить условие millis() > timer то выполнение вообще остановится, понятно что столько устройство работать не будет но как-то с предыдущих проектов осталось. Ну и четко видно сколько раз в секунду выполняется подпрограмма, время усреднения данных цветного сенсора как раз выставлено на 199мс.
Volume Доктор наук Уфа 580 310
Отв.1297  15 Окт. 24, 08:06
если поставить условие millis() > timer то выполнение вообще остановитсяdee, 14 Окт. 24, 19:23
да, при переполнении. Грешен, попадался. Лекарство: вычислять разность текущего времени с предыдущим, при использовании unsigned она всегда корректна. Или как у тебя, делить.
dee Научный сотрудник Минск 8.2K 2.2K
Отв.1298  15 Окт. 24, 09:34
Volume, вычитание побыстрее будет чем деление но что-то с ним тоже было не сложилось, не помню почему, проект часов и метеостанции был лет десять назад, глюков слишком долго было ждать что бы отладить )))
Volume Доктор наук Уфа 580 310
Отв.1299  15 Окт. 24, 12:08
Как этот абзац заставить работать без while? ... Строчит данные с фотоприемников как из пулемёта.Виктрыч, 14 Окт. 24, 14:36
так "сырые" данные и должны "сыпаться", в описании чипа "Sampling frequency set to 100Hz"
И без while работать корректно не будет - здесь проверка буфера, пока там данные есть они вычитываются в переменные ir, red. Как буфер опустел, sensor.getRawValues(&ir, &red) вернет false, выход из цикла и loop, потом loop опять вызовется, строка sensor.update(); заполнит буфер - и опять цикл будет его вычитывать