5

Помогите пожалуйста запустить

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

Помогите пожалуйста запустить Arduino, Скетч, Датчик, Реле, Без рейтинга

Arduino & Pi

1.5K поста20.8K подписчика

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Вы смотрите срез комментариев. Показать все
6
Автор поста оценил этот комментарий

Чегой-то я не пойму, у датчика дискретный выход, нафиг ты его в А1 воткнул?

Ну да ладно, хочется помехи по АЦП гонять, дело твоё.


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


Необходимо пояснение.

Оно должно включаться через время после срабатывания датчика

или включаться сразу, а выключаться через время после срабатывания?


Если второе, то нахер код и вообще микроконтроллер нахер, пользуйся штатными средствами. 2 крутилки, "чувствительность" и время выключения после срабатывания"

Подвесил реле через транзистор на напряжение питания, всё, прибор готов.

Иллюстрация к комментарию
раскрыть ветку (18)
1
Автор поста оценил этот комментарий
Я без понятия что такое дискретный, мне так собрали и вручили. От помех там какой-то конденсатор припаян.
Логика такая, датчик зафиксировал движение, ожидание 3 минуты, после даётся команда на срабатывание реле, которое работает 20 секунд.
Со вторым вариантом на ,,крутилках,, наверное проще, но хотелось бы допилить то что есть в наличии.
раскрыть ветку (17)
5
Автор поста оценил этот комментарий

У микропроцессора 4 типа основных портов, аналоговый вход, аналоговый выход, дискретный вход, дискретный выход. На ардуине они совмещены аналог с аналогом дискрет с дискретом.

Аналоговый порт работает с сигналом без чёткого уровня и формы.

Дискретный порт работает только с двумя уровнями сигнала "0" и "1"

С датчика поступает только 2 вида сигнала, "датчик сработал" и "датчик не сработал", при этом сигнал может быть как 0 так и 1, в зависимости от установленной перемычки.

Следовательно в коде актуально использовать не analogRead() а digitalRead(), чтоб точно знать в каком положении находится датчик.


Далее по техзаданию запускается реле времени на 3 минуты, которое по истечении 180000 миллисекунд должно включить выходное реле на 20000 миллисекунд?


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


#define PIN_RELAY 8 // Определяем пин, используемый для подключения реле

#define PIN_PIR 5 // Определяем пин, используемый для подключения PIR-датчика

// В этой функции определяем первоначальные установки

void setup()

{

Serial.begin(9600);

pinMode(PIN_RELAY, OUTPUT); // Объявляем пин реле как выход

digitalWrite(PIN_RELAY, HIGH); // Выключаем реле - посылаем высокий сигнал

}

void loop()

{

int val = digitalRead(PIN_PIR); // Считваем значение с датчика движения в отдельную переменную

if (val == HIGH) {

Serial.println("Датчик сработал");

digitalWrite(PIN_RELAY, LOW); // Включаем реле - посылаем низкий уровень сигнала

} else {

digitalWrite(PIN_RELAY, HIGH); // Отключаем реле - посылаем высокий уровень сигнала

}

delay(1000); // Проверяем значения один раз в секунду.


Осталось вставить делеи куда нужно.



https://arduinomaster.ru/program/upravlenie-rele-arduino-ske...

раскрыть ветку (16)
3
Автор поста оценил этот комментарий
Ох уж эти дилеи! Еще и на 180000 мс)
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Тут конструирование на уровне костылей :)

Своя атмосфера.

0
Автор поста оценил этот комментарий
Дискретный?? D - digital, цифровой стало быть
раскрыть ветку (4)
0
Автор поста оценил этот комментарий
i2c цифровой и rs232 тоже.
А вход у которого всего два входных уровня, он дискретный и он не передаёт данные.
раскрыть ветку (3)
0
Автор поста оценил этот комментарий
i2c и uart - это шины передачи данных. Которые передаются собственно нулями и единицами, то есть цифровым способом. Посредством той же 1wire можно передавать данные с любого цифрового выхода. Шина SPI есть аппаратная (определённые пины), а есть программная (произвольные пины, но ниже скорость передачи)
раскрыть ветку (2)
0
Автор поста оценил этот комментарий
Угу, не лучше ли во избежание путаницы взять терминологию промышленных ПЛК и разделить дискретные и цифровые именно по признаку данные не-данные? Тем более у ардуины нет по-настоящему дискретных входов? Или я не прав?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Не знаю, лучше или нет. Ардуино - исключительно любительская платформа и я вообще впервые встречаю эту терминологию в обсуждении простой схемы управления реле по одному датчику, для которой и ардуина избыточна, ведь аттини13 хватило бы за глаза. Можно было бы и вовсе без мк обойтись, но по деталям дороже, по переделке сложнее.

P.S. На всех ардуиновских ресурсах есть устоявшиеся понятия аналоговых и цифровых входов-выходов
0
Автор поста оценил этот комментарий
Интересно зачем ещё это в последовательном порте смотреть?
раскрыть ветку (8)
0
Автор поста оценил этот комментарий

Состояние. Для отладки почему бы и нет. Но по факту в этом проекте нафиг не надобно.

раскрыть ветку (7)
0
Автор поста оценил этот комментарий
Так я именно про проект)
раскрыть ветку (6)
0
Автор поста оценил этот комментарий

Проектищщее!!!

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

раскрыть ветку (5)
0
Автор поста оценил этот комментарий
Тогда serial.print надобно в код добавить)
раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Там вроде есть

if (val == HIGH) {

Serial.println("Датчик сработал");

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Это в вашем есть, а у автора нет). Если автор данного поста читает комментарии, то зарегистрируйтесь на tinkercad. Там можно многое попробовать.
0
Автор поста оценил этот комментарий
Да и функцию delay бы заменить
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Это не мой код. Пример из интернетов :)

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку