Программа для "лифта". Школьный проект 3 кл

Доброго времени суток!
Помогите, пожалуйста, проверить скетч для Arduino Uno.

Задача: открывать дверь макета лифта при подходе и закрывать при нахождении человека внутри. Проект школьника 3 класс.
Есть ИК датчики движения HC-SR501 и HC-SR505, сервопривод MG90S.

Идея: при улавливании движения с датчика 1 – сервопривод поворачивается на 180 градусов, при улавливании движения с датчика 2 – сервопривод поворачивается обратно.

Вот что получилось:

#include <Servo.h> //используем библиотеку для работы с сервоприводом
Servo servo; //объявляем переменную servo типа Servo
int value_1;
int value_2;// переменная для хранения положения датчика
int pirPin_1 = 8; // назначение пина для ИК датчика 1
int pirPin_2 =9; // назначение пина для ИК датчика 2

void setup() {
servo.attach(10); //привязываем сервопривод к порту 10
}
void loop() {
servo.write(0); //ставим вал под 0
value_1 = digitalRead (pirPin_1); // чтение значения с датчика_1
value_2 = digitalRead (pirPin_2); // чтение значения с датчика_2
if (value_1 == HIGH) { // когда с датчика_1 появляется высокий уровень, сервопривод поворачивается
servo.write(180); //ставим вал под 180
}
else {
servo.write(0); //ставим вал под 0
}
if (value_2 == HIGH) { // когда с датчика_2 появляется высокий уровень, сервопривод поворачивается
servo.write(10); //ставим вал под 0
}
else {
servo.write(180); //ставим вал под 180
}
delay(2000); //ждем 2 секунды
}
 

На живых людей возлагаются обязанности компилятора? Чем он не устроил?

А, хотя, щас ua6em протрезвеет от своего дзена и проверит бесплатна, без смс и даже без регистрации.

Серва хоть слабенькая? А то пальцы жалко когда макет человека будете помещать в кабину. Даже без компиляции понятно - задержек исполнительных механизмов нет, значит предполагается телепортация человека в кабину лифта и из нее, только зачем тогда лифт?
И избегайте использовать задержки по delay() - может создаться иллюзия правильной работы.
Кто считать такты умеет, объясните человеку за сколько мс или мкс программа пробегает до задержки в 2с.

Это получается “как человеку попасть в кабину”, так?
А как его оттудава доставать? И что будет, если лифт закроется, а к нему подойдет второй пассажир? А в какой момент времени лифту можна будет ехать? А как лифт поймет на какой этаж ему нужно ехать? …

так я жеж не пью, совсем не пью, это раз, а посмотреть - это такие даччики хотя бы раз пощупать надо было, а таких у меня отродясь не было…
так что увы, ждём “компетентный сервис”

@Tata, вы не понимаете как работает ваша программа.

void loop() { } это бесконечный цикл. Т.е. то, что у вас написано в строках 12-27 будет выполняться “бесконечно” с периодом чуть более 2 сек delay(2000);
Читайте свои комментарии к вышеупомянутым строкам и после 27-й возвращайтесь к 12-й и так по кругу, а потом прикиньте, соответствует ли работа вашей программы задуманному .

Перенести бы в “Песочницу”.

Тема перемещена в песочницу.

@Tata, в принципе основной ход решения задачи у Вас правильный: сначала сформулировать, как должно быть, по-русски, а потом переводить на Си.
Но проблема в том, что сама формулировка по-русски, которую Вы приводите, никак не соответствует нормальной работе дверей лифта.
У Вас два датчика и одно исполнительное устройство (серва). И каждый датчик независимо от другого пытается напрямую управлять сервой. Т.е. каждый тянет одеяло в свою сторону. Так это работать не будет.
У одного датчика два состояния, следовательно, у двух - четыре. Вот и надо сначала определить, какое из этих четырех состояний наступило, и только потом что-то делать дальше.
Но “делать дальше” - это еще не обязательно крутить серву. Вам ведь про сути надо реагировать не на само состояние, а на его изменение. Да еще и с учетом фактора времени.
То есть у Вас есть старое состояние (с прошлого прохода цикла) и новое состояние (вычисленное только что), и Вам надо понять, какая реакция нужна в каждой из 16 возможных комбинаций старого и нового состояний.
А вот когда это будет сделано, тогда уже и можно будет переводить алгоритм на Си/Си++.

2 лайка

МНе одному кажется, что у обучителей детей совсем крыша поехала? Программирование у детей, которые еще даже алфавита латиницы не проходили, не говоря уж о понимании языка, физики, математики, и так далее.
Проект делают дяди с форума, пока училка как инвалид тычет проводки наугад, дети на это смотрят пустыми глазами, и на это всё выделяются бюджетные деньги .

2 лайка

скорее всего, это хитрый студент на жалость давит.

А ты думаешь только в этом? Сейчас практически все домашние задания делают не дети, а родители. И чем меньше класс - тем извращеннее задания.

Благодарю Всех за комментарии. Вы нас направили в нужное русло.
На жалость давит мама ребенка))) Вы, правы, та как в таком возрасте писать программу ребенок целиком сам не может, хотя многое понимает (англ. в школах с 1 класса). В элементарных азах программирования любой может разобраться. Схему и идею проекта ребенок придумал сам. Т.К. темой электричества занимается с раннего возраста, благо есть много разных наборов и мама-инженер 8) Бюджетные деньги на это не выделяются. В нашей обычной школе ему этого не объясняют, только есть куратор проектов, который дает направление, а дальше - сам. Проектная деятельность в школах по желанию. Я проходила С++ 20 лет назад, многое не помню, а времени с 4-мя детьми мало для полного погружения(((

Хотя я не права, куратор у нас замечательный! Направояет и много помогает)

Для начала, нужно попробовать написать программу для 2-3 светодиодов и датчика приближения. Когда диоды замигают в соответствии с задумкой - проект можно расширять. Не знаю есть ли диоды индикаторы у этих ПИРов, т.е. я бы такие поставил для отслеживания работы ПИР визуально.
И не понятно, что делать, когда есть сигналы с обоих датчиков

превращяца в тыкву

да не, на днях внучке (1-й класс) задали приготовить какое-нибудь национальное блюдо, 1-й класс однако…домоводство и труды у нас было по моему с 5-го…
Мне интересно что они там принимают, утверждающие такие планы?

как я рад, что дети уже взрослые, а внуков пока нет. Как минимум лет 7 у меня есть еще… спокойной жизни…

Это очень мягко сказано.
Проектирование лифта - задача для квалифицированного инженера с высшим образованием, а не для третьеклассника.
А скорее всего - даже для коллектива инженеров.

А вот это все объясняет.
У ребенка наполеоновские планы.
Ну т.е. такую задачу перед третьеклассником мог поставить только человек, вообще не обладающий никакой квалификацией. Что 9-летнему ребенку простительно (но только ему).
Я думаю, даже если упростить задачу, убрав из нее один датчик (но оставив фактор времени), задача все равно останется неподъемной для третьеклассника.
Но, возможно, она станет подъемной для мамы, которая потом сможет объяснить ребенку что, как и зачем в программе делается. И, вероятно, объяснение (так, чтобы ребенок понял) займет не один день.

Вообще же алгоритм решения любой задачи сформулировал один французский математик (увы, навскидку не вспомню фамилию):

  1. Понять задачу.
  2. Составить план решения.
  3. Выполнить этот план.
  4. Проанализировать результаты.

Как видно, алгоритм допускает итерационное применение, когда все 4 этапа текущей итерации можно рассматривать как первый этап следующей.

По поводу Вашей задачи могу сказать, что Вы еще не выполнили первый этап, а потому переходить ко второму-третьему преждевременно.

@Tata

Вот, кстати, блестящая мысль.
Но входе у нас - датчики, на выходе - серво, а между ними - набор логических состояний. Вот эти состояния неплохо бы индицировать светодиодами, чтобы понимать, что происходит, насколько верно выполняются переходы между состояниями.

И на этот вопрос тоже надо ответить прежде, чем переходить ко второму пункту алгоритма решения.