Блок питание от компьютера подойдет? там выход на 5 вольт есть. Ток такого выхода 20А.
Конечно подойдет, только нахрена? По MQ, Eвгений уже сказал, 0,16А. На обычные датчики по 5-10мА на каждый добавьте, экран - даташит смотреть, что то исполнительное (типа двигателей) - тоже даташит. Все суммируете, умножаете на 1,5 и получаете минимальный ток от БП.
Спасибо за совет. Только что про нагрузку прочитал на другом форуме. типо ненужные HDD подключить пару штук. типо нежелательно использовать блок без нагрузки хотябы 10-15 гарузки от общейй. По габбаритам подойдет пока.
как раз можно реле, датчики сервоприводы питать от блока 5В. Думаю оптимальный вариант БП от ПК. А на ардуино сигнальные провода пускать на входы и выходы
Я вот тоже такое читал, но но показалось, что это неоправданно много. Тогда я взял и померял какую нагрузку даёт включенный, но не работающий CD (его то хватает железно). Так вот, там 200mА по 5-вольтовой линии (что существенно меньше 10-15%, больше похоже на 1%). Так с тех пор я так и поступаю - савлю в 5-вольтовую линию резистор 25 ом / 50 Ватт, грею им атмосферу и не парюсь. Отлично всё работает. Ну не CD же ставить, правда? :)
Вы сомневаетесь в том, что могу 2 на 5 умножить?:))))))
1Вт - это правильно, но 25 Ваттный резистор как-то неприлично грелся. Мне не понравилось, стал ставить 50 Ваттные, благо их у меня много. Так те холодные :)
Согласен что не сиди ставить. Запишука себе номинал резистора ваш. Вопрос такой. А собственно зачем блоку давать нагрузку? Что будет если ардуину одну запустить? тоесть без резисторад допустим
Знаю. зеленый провод с землей коротнуть. Я ремонтом копмьютеров занимаюсь. В основном программным ремонтов. немного техническим (перепайка конденсаторов)
Ремонт компьютеров... а закон Ома где-нибуть изучали? Может и ток в сети 220 вольт меряли?
Нет такое не делал. Виноват что мерил тот без нагрузки. В электронике не силен. ПО мнемногу начинюизучать. Единствено что я делал для себя это изменял напряжение ЗУ от телефона с 5в 12 в путе мзамены (выпаивания) стабилитрона
Но, это может и ничего, первый закон Скотта даже Клапауций не отменял, а он гласит: «Неважно, что что-то идёт неправильно. Возможно, это хорошо выглядит»
Коллеги, Ваши проверки некорректны. Вы уменьшали время и тем самым устраняли ошибку.
Программа действительно не работает ни с третьим пином, ни с десятым, ни в протеусе, ни где-либо ещё.
Хотите корректную проверку? Извольте. Оставляем условие в точности как было в исначалном посте, только вместо миллиса ставим точно такого же типа переменную и увеливаем её минут на 15 за каждый проход. Тогда час будет пробегать за 4 прохода.
Всегда завидовал людям, для которых личное мнение выше окружающий действительности. Сказал, как отрезал.
Не понял этого пассажа. Моё мнение о работоспособности данного скетча находится в полном соответсвии с действительностью. Скетч в действительности не работает, и мнение моё о нём точно такое же. Вы с этим не согласны? Или у Вас с этим какие-то проблемы? Хотите об этом поговорить?
Я прочитал последние ваши страницы с другим кодом. Как думаете этот код вполне нормальный? Если задавать часы работы реле а не секунды как на примере здесь
int rele =2;
unsigned long currentPause = millis(); //массив данных.
bool fl_pause;//массив данных.
//unsigned long time = millis();
void setup()
{
pinMode(rele, OUTPUT);
}
void loop()
{
time5_10(); //ЗАпуск функции самого таймера циклично повторяя ее
}
void time5_10() // сама функция таймера, ее тело
{
if (fl_pause == 0 && millis() - currentPause >= 5000) //В начале запуска Вытяжка не работает 5 секунд
{
digitalWrite(rele, HIGH);//по достижении 5 секунд она включается командой HIGH
currentPause = millis();
fl_pause = 1;
}
if (fl_pause == 1 && millis() - currentPause >= 10000) //Если прошло 10 секунд то
{
digitalWrite(rele, LOW);// то вытяжка отключается, т.е получается она проработает 10 секунд.
fl_pause = 0;
currentPause = millis();
}
}
А кк сделать чтобы в лупе выполнялись еще параллельные задачи (функции) одновременно. а то я делаю например две функции отдельные. заношу их в луп но пока не выполнится первая не запустится вторая. Я читал что в ардуино так аппаратно устроено изначально. Что программно надо решать проблему. Но как можно?
чтобы в лупе выполнялись еще параллельные задачи (функции) одновременно ...
Что программно надо решать проблему. Но как можно?
Можно по-всякому, но боюсь, Вам пока лучше постараться придумать такой алгоритм, который этого не требует - обойтись псевдопараллельностью. Сами Вы пока этого не сделаете, а если возьмёте готовую библиотеку (их есть у нас №1, №2, №3 и ещё стопиццот), то пока не сможете её грамотно использовать. Параллельное программирование - это высшая лига, Вам пока рано. Не обижайтесь, но это пока так.
Спасибо. НЕ обижаюсь. Потому что я несилен в ардуино программировании, но потихоньку изучаю. раньше на делфи по нужде программировал. Просто придумал такой алгоритм небольшой. НАпример вытяжка управляется по таймеру и в этот момент датчик температуры работает измеряя температуру и выводя ее на экран или лед дисплей. ПОнимаю что пока цикл с вытяжкой не пройдет датчик не начнет считывать температуру.
const int soundPin = 3; // переменная с номером пина пьезоэлемента
const int ledPin = 13; // переменная с номером пина светодиода
const long ledInterval = 200; // интервал мигания светодиодом, мсек.
int ledState = LOW; // начальное состояние светодиода
unsigned long previousMillis = 0; // храним время предыдущего срабатывания светодиода
void setup() {
pinMode(soundPin, OUTPUT); // задаём пин 3 как выход.
pinMode(ledPin, OUTPUT); // задаём пин 13 как выход.
}
Только что проверил код на ардуино. также в порядке очереди все идет. я так понял 200мс это настолько мало что происходит проверка незапущена ли ардуино с самого начала, если это премя равно или юольше то вторая операция запускается. а первая итак уже запущена.
Только что проверил код на ардуино. также в порядке очереди все идет. я так понял 200мс это настолько мало что происходит проверка незапущена ли ардуино с самого начала, если это премя равно или юольше то вторая операция запускается. а первая итак уже запущена.
Еще раз: пока не отработают строки с 03 по 10, ничего не мигнет, приведенный код исполняется последовательно и проверка интервала в 200мС бессмысленна. Измените на 5 секунд, смысл появится.
Я уже понял про это. А как можно реализовать одновременно два процесса? Не подскажите пожалуйста. Очень хочу понять как это работает и в чем смысл зкаключается. Через функцию millis() нужно выполнять или иначе?
Двух одновременных процессов здесь нет и быть не может. Самое простое, как говорил выше: Каждый блок описываете в своей функции, на входе стоит условие проверки временного интервала или флага. Из основного цикла последовательно вызываются все функции. В зависимости от выполнения заданного условия идет либо тело функции, либо возврат в основной цикл. Функции должны быть достаточно быстрыми, без делеев и бесконечных циклов. Тогда создается впечатление параллельности процессов.
В сущности можно все это прописать и в loop, но код получается громоздкий и трудно читаемый-модифицируемый.
Гуру возможно подскажут что то более оптимальное, но я делаю так.
Спасибо за информацию. Попробую изменить код как вы выше сказали с 200мс на 5 сек как я понял смысл поменяется.. можете хорошую книгу посоветовать по программированию ардуино? Мне бы начальные азы усвоить как устроено все, а не урывками браться. У меня есть книга автор Джереми Блюм. Ролики его смотрел. Незнаю хорошая на ваш взгляд или не очень для начального освоения.
Керниган с Ритчи. И начинать писать, понемногу и опыт наберется.
При написании для дома, для семьи, если программа работает как хотелось, она не может быть говонокодом. Верно и наоборот, если программа написана с соблюдением всех догм, ужасно оптимизированна, но не работает, это и есть говонокод. ИМХО.
Знаю. зеленый провод с землей коротнуть.
И нагрузку повесить - не забыть.
Блок питание от компьютера подойдет? там выход на 5 вольт есть. Ток такого выхода 20А.
Конечно подойдет, только нахрена? По MQ, Eвгений уже сказал, 0,16А. На обычные датчики по 5-10мА на каждый добавьте, экран - даташит смотреть, что то исполнительное (типа двигателей) - тоже даташит. Все суммируете, умножаете на 1,5 и получаете минимальный ток от БП.
Спасибо за совет. Только что про нагрузку прочитал на другом форуме. типо ненужные HDD подключить пару штук. типо нежелательно использовать блок без нагрузки хотябы 10-15 гарузки от общейй. По габбаритам подойдет пока.
как раз можно реле, датчики сервоприводы питать от блока 5В. Думаю оптимальный вариант БП от ПК. А на ардуино сигнальные провода пускать на входы и выходы
Так кину похожий код
/* вытяжка цикл 3 часа - 1 работает 2часа нет #1 реле -> 2 (Relay_pin) 0 вкл/ 1 откл */ //#1 const int Relay_pin = 2; bool Relay; //состояние реле 1 вкл/ 0 нет void setup() { //#1 pinMode(Relay_pin, OUTPUT); digitalWrite(Relay_pin, Relay = 1); } void loop() { //#1 3 часа вычислит. поток 1 static uint32_t past_1 = 0 ; if (Relay && millis() - past_1 >= 1 * 60 * 60 * 1000) // если прошел 1 час digitalWrite(Relay_pin, Relay = 0); // выкл вытяжку if (millis() - past_1 >= 3 * 60 * 60 * 1000) { // если прошло 3 часа past_1 = millis() ; digitalWrite(Relay_pin, Relay = 1); // вкл вытяжку } }Спасибо за Ваш код. попробую и его сейчас
хотябы 10-15 гарузки от общейй.
Я вот тоже такое читал, но но показалось, что это неоправданно много. Тогда я взял и померял какую нагрузку даёт включенный, но не работающий CD (его то хватает железно). Так вот, там 200mА по 5-вольтовой линии (что существенно меньше 10-15%, больше похоже на 1%). Так с тех пор я так и поступаю - савлю в 5-вольтовую линию резистор 25 ом / 50 Ватт, грею им атмосферу и не парюсь. Отлично всё работает. Ну не CD же ставить, правда? :)
200mА по 5-вольтовой линии это 1 вт в 25 Ом.
200mА по 5-вольтовой линии это 1 вт в 25 Ом.
Вы сомневаетесь в том, что могу 2 на 5 умножить?:))))))
1Вт - это правильно, но 25 Ваттный резистор как-то неприлично грелся. Мне не понравилось, стал ставить 50 Ваттные, благо их у меня много. Так те холодные :)
Согласен что не сиди ставить. Запишука себе номинал резистора ваш. Вопрос такой. А собственно зачем блоку давать нагрузку? Что будет если ардуину одну запустить? тоесть без резисторад допустим
Не ко мне. Я знаю, что импульсным блокам без нагрузки плохеет, но почему ... спросите у кого-нибудь другого.
Главное что он плохеет а почему пока для мне ненужно знать. Спаисбо за ответ Евгений.
А что лучше от 5В или от 12 питать ардуино БП от ПК. всетаки 12 предел. темболее мультиметр 12.03В выдает
Если имеем 5В стабильных, зачем жарить стабилизатор на Ардуино?
Знаю. зеленый провод с землей коротнуть. Я ремонтом копмьютеров занимаюсь. В основном программным ремонтов. немного техническим (перепайка конденсаторов)
Ремонт компьютеров... а закон Ома где-нибуть изучали? Может и ток в сети 220 вольт меряли?
Нет такое не делал. Виноват что мерил тот без нагрузки. В электронике не силен. ПО мнемногу начинюизучать. Единствено что я делал для себя это изменял напряжение ЗУ от телефона с 5в 12 в путе мзамены (выпаивания) стабилитрона
Вот еще проще код.
/* вытяжка цикл 3 часа - 1 работает 2часа нет #1 реле -> 2 (Relay_pin) 1 вкл/ 0 откл */ //#1 const int Relay_pin = 2; const uint32_t period = 3 * 60 * 60 * 1000; // время цикла 3 часа const uint32_t time_ON = 1 * 60 * 60 * 1000; // время когдв включено 1 час void setup() { //#1 pinMode(Relay_pin, OUTPUT);; } void loop() { //#1 digitalWrite(Relay_pin, millis()%period < time_ON); }минимализм
void setup() { pinMode(2, OUTPUT); } void loop() { digitalWrite(2, millis()%(3 * 60 * 60 * 1000)< (1 * 60 * 60 * 1000)); }минимализм
Класно!!!
минимализм
void setup() { pinMode(2, OUTPUT); } void loop() { digitalWrite(2, millis()%(3 * 60 * 60 * 1000)< (1 * 60 * 60 * 1000)); }минимализм
Класно!!!
Действительно, классно!
Жаль только, что не работает.
Но, это может и ничего, первый закон Скотта даже Клапауций не отменял, а он гласит: «Неважно, что что-то идёт неправильно. Возможно, это хорошо выглядит»
Жаль только, что не работает.
Всегда завидовал людям, для которых личное мнение выше окружающий действительности. Сказал, как отрезал.
Жаль только, что не работает.
Всегда завидовал людям, для которых личное мнение выше окружающий действительности. Сказал, как отрезал.
...тут и к бабке не ходи - по гороскопу ВЕСЫ прослеживаются (если астрология нам не врёт)
Проверил изменив на 3 и 1 секунда, действительно светодиод зажёгся и не гаснет )))
В протеусе проверил все РАБОТАЕТ, только время уменьшил
void setup() { pinMode(2, OUTPUT); } void loop() { digitalWrite(2, millis()%(5000)< (1000)); }В протеусе проверил все РАБОТАЕТ, только время уменьшил
void setup() { pinMode(2, OUTPUT); } void loop() { digitalWrite(2, millis()%(5000)< (1000)); }А я на ардуино нано - не работает
void setup() { pinMode(3, OUTPUT); } void loop() { digitalWrite(2, millis()%(3 * 1 * 1 * 1000)< (1 * 1 * 1 * 1000)); }В чём подвох?
уВИДЕЛ САМ, ПИН ВВЕРХУ СМЕНИЛ В ЛУПЕ НЕТ, ЗАМЕНИЛ НА 3-ТИЙ РАБОТАЕТ КАК ЧАСЫ
"еСЛИ БЫ Я НЕ СПЕШИЛ ОНА УСПЕЛА СНЯТЬ КОЛГОТКИ"
Так там время большое, может не дождались? Попробуйте тот где я уменьшил
ТАК Я ВРЕМЯ ПОПРАВИЛ НА 3 И 1 СЕКУНДА, ВСЁ РАБОТАЕТ!
ЕВГЕНИЙ ПЕТРОВИЧ, ОБЪЯСНИТЕСЬ )))
Ну да! А я не смотрел, думал Вы взяли готовый "qwone"
Ну да! А я не смотрел, думал Вы взяли готовый "qwone"
Нееее...медитировать я предпочитаю с приятными тактильными ощущениями )))
Ждать четыре часа это слишком )))
Коллеги, Ваши проверки некорректны. Вы уменьшали время и тем самым устраняли ошибку.
Программа действительно не работает ни с третьим пином, ни с десятым, ни в протеусе, ни где-либо ещё.
Хотите корректную проверку? Извольте. Оставляем условие в точности как было в исначалном посте, только вместо миллиса ставим точно такого же типа переменную и увеливаем её минут на 15 за каждый проход. Тогда час будет пробегать за 4 прохода.
Смотрите:
void setup() { Serial.begin(115200); } void loop() { static unsigned long _millis = 0; const static unsigned long _15_minutes = 900000ul; Serial.println(_millis%(3 * 60 * 60 * 1000)< (1 * 60 * 60 * 1000)); _millis += _15_minutes; }Все согласны, что проверка корректна?
А вот её результат:
void setup() { Serial.begin(115200); } void loop() { static unsigned long _millis = 0; const static unsigned long _15_minutes = 900000ul; Serial.println(_millis%(3ul * 60 * 60 * 1000)< (1ul * 60 * 60 * 1000)); _millis += _15_minutes; } ///// результат // 1 // 1 // 1 // 1 // 0 // 0 // 0 // 0 // 0 // 0 // 0 // 0 // 1 // 1 // 1 // 1 // 0 // 0 // 0 // 0 // 0 // 0 // 0 // 0 // 1 // 1 // 1Всегда завидовал людям, для которых личное мнение выше окружающий действительности. Сказал, как отрезал.
Не понял этого пассажа. Моё мнение о работоспособности данного скетча находится в полном соответсвии с действительностью. Скетч в действительности не работает, и мнение моё о нём точно такое же. Вы с этим не согласны? Или у Вас с этим какие-то проблемы? Хотите об этом поговорить?
Запись времени - да! Лучше использовать константу. Но само решение - интересно. Кстати с константой тоже работает
void setup() { Serial.begin(9600); } void loop() { static unsigned long _millis = 0; const static unsigned long _15_minutes = 900000; Serial.println(_millis%(10800000)< (3600000)); _millis += _15_minutes; }Запись времени - да! Лучше использовать константу.
Так, Вы разницу-то в строке условия уяснили? В чём ошибка была поняли?
Понятно, результат будет иметь тип первой цифры.
Но в таком выражении переход через ноль не учитывается.
Понятно, результат будет иметь тип первой цифры.
Не совсем, но общая идея - да, в оригинальном скетче числовые константы были не того типа.
Но в таком выражении переход через ноль не учитывается.
Да, это так. При переходе через 0, здесь возникает сбой.
Очень хорошо, что Вы это заметили. Я об этом даже не подумал.
Я прочитал последние ваши страницы с другим кодом. Как думаете этот код вполне нормальный? Если задавать часы работы реле а не секунды как на примере здесь int rele =2; unsigned long currentPause = millis(); //массив данных. bool fl_pause;//массив данных. //unsigned long time = millis(); void setup() { pinMode(rele, OUTPUT); } void loop() { time5_10(); //ЗАпуск функции самого таймера циклично повторяя ее } void time5_10() // сама функция таймера, ее тело { if (fl_pause == 0 && millis() - currentPause >= 5000) //В начале запуска Вытяжка не работает 5 секунд { digitalWrite(rele, HIGH);//по достижении 5 секунд она включается командой HIGH currentPause = millis(); fl_pause = 1; } if (fl_pause == 1 && millis() - currentPause >= 10000) //Если прошло 10 секунд то { digitalWrite(rele, LOW);// то вытяжка отключается, т.е получается она проработает 10 секунд. fl_pause = 0; currentPause = millis(); } }А кк сделать чтобы в лупе выполнялись еще параллельные задачи (функции) одновременно. а то я делаю например две функции отдельные. заношу их в луп но пока не выполнится первая не запустится вторая. Я читал что в ардуино так аппаратно устроено изначально. Что программно надо решать проблему. Но как можно?
чтобы в лупе выполнялись еще параллельные задачи (функции) одновременно ...
Что программно надо решать проблему. Но как можно?
Можно по-всякому, но боюсь, Вам пока лучше постараться придумать такой алгоритм, который этого не требует - обойтись псевдопараллельностью. Сами Вы пока этого не сделаете, а если возьмёте готовую библиотеку (их есть у нас №1, №2, №3 и ещё стопиццот), то пока не сможете её грамотно использовать. Параллельное программирование - это высшая лига, Вам пока рано. Не обижайтесь, но это пока так.
Спасибо. НЕ обижаюсь. Потому что я несилен в ардуино программировании, но потихоньку изучаю. раньше на делфи по нужде программировал. Просто придумал такой алгоритм небольшой. НАпример вытяжка управляется по таймеру и в этот момент датчик температуры работает измеряя температуру и выводя ее на экран или лед дисплей. ПОнимаю что пока цикл с вытяжкой не пройдет датчик не начнет считывать температуру.
Вроде код нашел в гугле параллельной работы тонового динамика и светодиода. Незнаю насколько он хорош буду пробовать.
void loop() { // Управление звуком: tone(soundPin, 700); delay(200); tone(soundPin, 500); delay(200); tone(soundPin, 300); delay(200); tone(soundPin, 200); delay(200); // Мигание светодиодом: // время с момента включения Arduino, мсек: unsigned long currentMillis = millis(); // Если время мигать пришло, if (currentMillis - previousMillis >= ledInterval) { previousMillis = currentMillis; // то запоминаем текущее время if (ledState == LOW) { // и инвертируем состояние светодиода ledState = HIGH; } else { ledState = LOW; } digitalWrite(ledPin, ledState); // переключаем состояние светодиода } }Забыл начало кода скинуть.
const int soundPin = 3; // переменная с номером пина пьезоэлемента const int ledPin = 13; // переменная с номером пина светодиода const long ledInterval = 200; // интервал мигания светодиодом, мсек. int ledState = LOW; // начальное состояние светодиода unsigned long previousMillis = 0; // храним время предыдущего срабатывания светодиода void setup() { pinMode(soundPin, OUTPUT); // задаём пин 3 как выход. pinMode(ledPin, OUTPUT); // задаём пин 13 как выход. }Берите датчик (почти параллельный)))))
Вроде код нашел в гугле параллельной работы тонового динамика и светодиода.
В течении куска из tone и delay ничего мигать не будет.
Кто и как собрался там мигать с интервалом в 200мС непонятно.
В сущности можете заменить весь кусок мигания одной строкой:
digitalWrite(ledPin,!digitalRead(ledPin));
Только что проверил код на ардуино. также в порядке очереди все идет. я так понял 200мс это настолько мало что происходит проверка незапущена ли ардуино с самого начала, если это премя равно или юольше то вторая операция запускается. а первая итак уже запущена.
DS18B20 такой к счастью есть у меня. в герм корпусе)))
Только что проверил код на ардуино. также в порядке очереди все идет. я так понял 200мс это настолько мало что происходит проверка незапущена ли ардуино с самого начала, если это премя равно или юольше то вторая операция запускается. а первая итак уже запущена.
Еще раз: пока не отработают строки с 03 по 10, ничего не мигнет, приведенный код исполняется последовательно и проверка интервала в 200мС бессмысленна. Измените на 5 секунд, смысл появится.
Я уже понял про это. А как можно реализовать одновременно два процесса? Не подскажите пожалуйста. Очень хочу понять как это работает и в чем смысл зкаключается. Через функцию millis() нужно выполнять или иначе?
Двух одновременных процессов здесь нет и быть не может. Самое простое, как говорил выше: Каждый блок описываете в своей функции, на входе стоит условие проверки временного интервала или флага. Из основного цикла последовательно вызываются все функции. В зависимости от выполнения заданного условия идет либо тело функции, либо возврат в основной цикл. Функции должны быть достаточно быстрыми, без делеев и бесконечных циклов. Тогда создается впечатление параллельности процессов.
В сущности можно все это прописать и в loop, но код получается громоздкий и трудно читаемый-модифицируемый.
Гуру возможно подскажут что то более оптимальное, но я делаю так.
Спасибо за информацию. Попробую изменить код как вы выше сказали с 200мс на 5 сек как я понял смысл поменяется.. можете хорошую книгу посоветовать по программированию ардуино? Мне бы начальные азы усвоить как устроено все, а не урывками браться. У меня есть книга автор Джереми Блюм. Ролики его смотрел. Незнаю хорошая на ваш взгляд или не очень для начального освоения.
Керниган с Ритчи. И начинать писать, понемногу и опыт наберется.
При написании для дома, для семьи, если программа работает как хотелось, она не может быть говонокодом. Верно и наоборот, если программа написана с соблюдением всех догм, ужасно оптимизированна, но не работает, это и есть говонокод. ИМХО.
Спасибо за книжку огромное.
Я ссылку нашел как делать псевдопараллельность через Thread . Буду пробывать. http://www.kakprosto.ru/kak-918733-kak-vypolnyat-parallelnye-zadachi-thr.... Это тот самый код который я присылал там где про 200мс))) но ниже уже описывали как через Thread реализовать задачу