Пэтро Опубликовано 17 августа, 2016 Жалоба Поделиться Опубликовано 17 августа, 2016 Купил ардуину и сонар. Постараюсь на днях протестить. Цитата Подключаем Оптический гигабитный интернет в Симферополе и районе.+79787647406http://lugovoe.su Ссылка на комментарий Поделиться на другие сайты Поделиться
MedicusAmicus Опубликовано 17 августа, 2016 Автор Жалоба Поделиться Опубликовано 17 августа, 2016 Еще много зависит от места установки сонара. У него диаграмма направленности довольно широкая. В моем коридоре, видимо, немало паразитного эха.Тоже бороться буду. Цитата Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.Где поцелуи совсем не значат чувства. Где признания не значат любовь. Где каждый одинок и никто не старается это изменить. Где слова теряют всякий смысл, потому что несут ложь. Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых… и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах) Ссылка на комментарий Поделиться на другие сайты Поделиться
MedicusAmicus Опубликовано 18 августа, 2016 Автор Жалоба Поделиться Опубликовано 18 августа, 2016 Итак: сутки тест-драйва, ложных срабатываний не замечено.Итоговая логика - не усреднять, а три раза отмерить и один раз - отрезать.Конечно, больше 3 проверок задолбаешься вложенные циклы делать, но мне хватило; //надо под это дело попробовать функцию изготовитьНа очереди второй датчик (в другую сторону), датчик открытия входной двери, (логика, что дверь открыли снаружи, придумать, что делать на это открытие...) температура/влажность в ванной и запуск вытяжки, + запуск при еще одном событии Цитата Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.Где поцелуи совсем не значат чувства. Где признания не значат любовь. Где каждый одинок и никто не старается это изменить. Где слова теряют всякий смысл, потому что несут ложь. Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых… и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах) Ссылка на комментарий Поделиться на другие сайты Поделиться
Пэтро Опубликовано 21 августа, 2016 Жалоба Поделиться Опубликовано 21 августа, 2016 Собрал макет. никаких ошибок не выскакивает. погрешность мизерная 11116 11094 11091 (1.8 метра) 1316 1316 1317 (22 см) Усреднение чуть повышает точность. А почему не использовать PIR сенсор? http://zelectro.cc/PIR_sensor Цитата Подключаем Оптический гигабитный интернет в Симферополе и районе.+79787647406http://lugovoe.su Ссылка на комментарий Поделиться на другие сайты Поделиться
MedicusAmicus Опубликовано 21 августа, 2016 Автор Жалоба Поделиться Опубликовано 21 августа, 2016 Значит, у меня эхо нестабильное, из-за формы коридора.Пир-сенсор не использовать потому, что 4 сонара надо трудоустроить. Цитата Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.Где поцелуи совсем не значат чувства. Где признания не значат любовь. Где каждый одинок и никто не старается это изменить. Где слова теряют всякий смысл, потому что несут ложь. Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых… и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах) Ссылка на комментарий Поделиться на другие сайты Поделиться
Пэтро Опубликовано 21 августа, 2016 Жалоба Поделиться Опубликовано 21 августа, 2016 Они не вредные? Цитата Подключаем Оптический гигабитный интернет в Симферополе и районе.+79787647406http://lugovoe.su Ссылка на комментарий Поделиться на другие сайты Поделиться
Rumlin Опубликовано 21 августа, 2016 Жалоба Поделиться Опубликовано 21 августа, 2016 4 сонара надо трудоустроить.имеет смысл например подсветку ступенек ими делатьhttps://www.youtube.com/watch?v=I0UeYQ2CH1Ihttps://www.youtube.com/watch?v=oOkYGG3-zAg Цитата Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов Ничего не делается к лучшему © Борис РаушенбахЛюди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский Ссылка на комментарий Поделиться на другие сайты Поделиться
MedicusAmicus Опубликовано 21 августа, 2016 Автор Жалоба Поделиться Опубликовано 21 августа, 2016 Пэтро, нет, не вредные. Вредничают при измерениях, бывает. Rumlin, сначала придется или 2-этажную квартиру или дом купить. Цитата Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.Где поцелуи совсем не значат чувства. Где признания не значат любовь. Где каждый одинок и никто не старается это изменить. Где слова теряют всякий смысл, потому что несут ложь. Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых… и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах) Ссылка на комментарий Поделиться на другие сайты Поделиться
Rumlin Опубликовано 21 августа, 2016 Жалоба Поделиться Опубликовано 21 августа, 2016 MedicusAmicus, рукосушитель включать. Как замена детектору движения очень непросто это использовать. Цитата Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов Ничего не делается к лучшему © Борис РаушенбахЛюди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский Ссылка на комментарий Поделиться на другие сайты Поделиться
MedicusAmicus Опубликовано 21 августа, 2016 Автор Жалоба Поделиться Опубликовано 21 августа, 2016 Rumlin, скорее, детектор присутствия. Главное - правильно расположить и помехи отфильтровать. Пироэлектрический на лестничной клетке свет включает/выключает. Так вот, если на площадке спокойно стоять, разговаривать без интенсивных движений, он гаснет. Приходится рукой ему махать.А сонар так не обманешь. Расстояние до препятствия и точка. Цитата Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.Где поцелуи совсем не значат чувства. Где признания не значат любовь. Где каждый одинок и никто не старается это изменить. Где слова теряют всякий смысл, потому что несут ложь. Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых… и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах) Ссылка на комментарий Поделиться на другие сайты Поделиться
Пэтро Опубликовано 5 ноября, 2016 Жалоба Поделиться Опубликовано 5 ноября, 2016 https://youtu.be/mZzP0dTw8W0 Сделал машину с искусственным интеллектом )))) Arduino relay sonar motor servo На базе игрушки на р.у. При приближении к препятствия ближе 20 см поворачивает колёса в сторону. Ближе 10 см мотор назад поворачивает в обратную сторону. Цитата Подключаем Оптический гигабитный интернет в Симферополе и районе.+79787647406http://lugovoe.su Ссылка на комментарий Поделиться на другие сайты Поделиться
MedicusAmicus Опубликовано 25 марта, 2017 Автор Жалоба Поделиться Опубликовано 25 марта, 2017 Так, господа программеры и просто умные люди. Новая головоломка.Есть такой себе массив, 2-мерный, куда потихоньку складываются данные N-х измерений(check) на M каналов(activeChannel). Значения булевы.Надобно мне выводить итоговую булеву переменную по каждой строке (каналу) TRUE только в случае, если вся строка TRUE, иначе FALSEВот измерил, занес данные, а вот проверку соответствия всей строки критерию никак не нагуглю. for (activeChannel = 1; activeChannel <= channels; activeChannel ++) { for (int check = 1; check <= checks; check++) { { Measure(activeChannel); CLOSE[activeChannel][check] = distance[activeChannel]<RANGE1 && distance[activeChannel]>1; } //Вот тут по идее должен быть код соответствия элементов строки activeChannel критерию } } Тут весь код, если надо. #define LDR_PIN A0 //пин фоторезистора int tres = 400; //порог освещенности int interval = 10000; //интервал работы (10 секунд) int RANGE1=100; //предел дистанции обнаружения коридор int RANGE2=175; //предел дистанции обнаружения вход const int checks=3; //количество проверок const int channels=2; //количество каналов char RELAY_PIN[channels]={15,16}; //пины реле char S_TRIG[channels]={2,4}; //пины триггеров сонаров char S_ECHO[channels]={3,5}; //пины данных эхо сонаров int distance[channels]; //массив дистанций unsigned long previousMillis[channels]; //массив потоков времени int activeChannel; boolean CLOSE[channels][checks+1]; void setup() { for (activeChannel = 1; activeChannel <= channels; activeChannel ++) { pinMode (RELAY_PIN[activeChannel], OUTPUT); pinMode (S_TRIG[activeChannel], OUTPUT); pinMode (S_TRIG[activeChannel], OUTPUT); } } void Timer (int activeChannel, int interval) { analogWrite (RELAY_PIN[activeChannel], 255); // горит previousMillis[activeChannel] = millis(); // отсчёт отсрочки начинается сначала... // Прошло время выключаем свет if (previousMillis[activeChannel] && (millis()-previousMillis[activeChannel] >= interval)) { analogWrite (RELAY_PIN[activeChannel], 0); // не горит previousMillis[activeChannel] = 0; } } void Measure (int activeChannel) { digitalWrite(S_TRIG[activeChannel], HIGH); /* Подаем импульс на вход trig дальномера */ delayMicroseconds(10); // равный 10 микросекундам digitalWrite(S_TRIG[activeChannel], LOW); // Отключаем distance[activeChannel]=(pulseIn(S_ECHO[activeChannel],HIGH))/58; // Пересчитываем в сантиметры } void loop() { Serial.begin(9600); int light = analogRead(LDR_PIN); //читаем освещенность boolean dark = (light < tres); //сравниваем освещенность с порогом for (activeChannel = 1; activeChannel <= channels; activeChannel ++) { for (int check = 1; check <= checks; check++) { Measure(activeChannel); CLOSE[activeChannel][check] = distance[activeChannel]<RANGE1 && distance[activeChannel]>1; } } if (CLOSE[activeChannel][checks] && dark == 1) { Timer (activeChannel, interval); } delay (500); } Цитата Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.Где поцелуи совсем не значат чувства. Где признания не значат любовь. Где каждый одинок и никто не старается это изменить. Где слова теряют всякий смысл, потому что несут ложь. Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых… и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах) Ссылка на комментарий Поделиться на другие сайты Поделиться
CIBAS Опубликовано 25 марта, 2017 Жалоба Поделиться Опубликовано 25 марта, 2017 (изменено) Независимо от языка и методов можно поступить так: Имеем массив ARRAY[N.M]. Для удобства объявим его какARRAY[N,M+1] - дополнительный столбец будет содержатьВашу итоговую переменную для каждой строки.Инициализируем в начале все как 0 (false). Теперь независимо от методики заполнения массива, на каждом шагеприсвоения значения элементу у Вас есть его индексы I, J (r примеру).Теперь после присвоения значения элементу, ставим такой оператор: IF (ARRAY[i,J] = true) then ARRAY[i,M+1]= true Вот и всё.upd Не знаю синтаксиса Вашего языка, поэтому просто показална псевдоязыке для понимания идеи. Изменено 25 марта, 2017 пользователем CIBAS Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
MedicusAmicus Опубликовано 25 марта, 2017 Автор Жалоба Поделиться Опубликовано 25 марта, 2017 CIBAS, IF (ARRAY[i,J] == true) then ARRAY[i,M]= trueустановит итоговую переменную в true при наличии в строке всего одной "ARRAY[i,J] = true"А мне надо, чтобы все значения строки были == true.Как вариант: как в С++(ардуинском) подсчитать количество заданных элементов в массиве?Если массив содержит М+1 элементов true, то все ок. Цитата Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.Где поцелуи совсем не значат чувства. Где признания не значат любовь. Где каждый одинок и никто не старается это изменить. Где слова теряют всякий смысл, потому что несут ложь. Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых… и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах) Ссылка на комментарий Поделиться на другие сайты Поделиться
CIBAS Опубликовано 25 марта, 2017 Жалоба Поделиться Опубликовано 25 марта, 2017 Да, ла, невнимателен....А у Вас весь массив гарантированно заполняется ? Если да, то тот же метод, но инициализируем 1 (true),а присваиваем false, если текущий элемент = false. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
MedicusAmicus Опубликовано 25 марта, 2017 Автор Жалоба Поделиться Опубликовано 25 марта, 2017 Массив заполнится, чай не бассейн с трубами :)Т.е. изначально устанавливаем итог в true, и если вдруг в массиве находится значение "0" - итог=0.Попробую, спасибо. Цитата Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.Где поцелуи совсем не значат чувства. Где признания не значат любовь. Где каждый одинок и никто не старается это изменить. Где слова теряют всякий смысл, потому что несут ложь. Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых… и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах) Ссылка на комментарий Поделиться на другие сайты Поделиться
CIBAS Опубликовано 25 марта, 2017 Жалоба Поделиться Опубликовано 25 марта, 2017 (изменено) Универсальный вариант - это в любом случаеанализ всех элементов текущей строки.Тогда такой вариант в терминах Cдля строки i массива array[N][M] result=1; for j=0;j<M;j++) { if(array[j] == 0) {result=0; break;} } Т.е цикл просмотра строки прекращается при появлениипервого же элемента false, в противном случае цикл проходитвсю строку и результат остаётся true. Вариант, предлагаемый ранее, работать будет только если гарантированно заполняется весь массив и его анализ производится только после заполнения.Зато не нужно дополнительных проходов по строкам. Изменено 25 марта, 2017 пользователем CIBAS Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
MedicusAmicus Опубликовано 25 марта, 2017 Автор Жалоба Поделиться Опубликовано 25 марта, 2017 Спасибо. Настрою аппаратную часть и вывод в serial, посмотрю, как работать будет.for (activeChannel = 0; activeChannel < channels; activeChannel ++) //выбираем канал { CLOSE[activeChannel][checks] = 1; //предварительно устанавливаем итог в TRUE for (int check = 0; check <= (checks-1); check++) //начинаем измерять { Measure(activeChannel); CLOSE[activeChannel][check] = distance[activeChannel]<RANGE1 && distance[activeChannel]>1; if (CLOSE[activeChannel][check] == 0) //при получении первого значения FALSE { CLOSE[activeChannel][checks] = 0; //устанавливаем итог в FALSE break; //и прекращаем измерения до следующего цикла } } } Цитата Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.Где поцелуи совсем не значат чувства. Где признания не значат любовь. Где каждый одинок и никто не старается это изменить. Где слова теряют всякий смысл, потому что несут ложь. Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых… и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах) Ссылка на комментарий Поделиться на другие сайты Поделиться
SlavaD Опубликовано 30 марта, 2017 Жалоба Поделиться Опубликовано 30 марта, 2017 А зачем вообще двумерный массив ? Сделать его одномерным и упростить код. for (activeChannel = 1; activeChannel <= channels; activeChannel ++) { CLOSE[activeChannel] = 1; for (int check = 1; check <= checks; check++) { Measure(activeChannel); if (distance[activeChannel]<RANGE1 && distance[activeChannel]<=1) { CLOSE[activeChannel] = 0; break; } } } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
MedicusAmicus Опубликовано 2 апреля, 2017 Автор Жалоба Поделиться Опубликовано 2 апреля, 2017 Короче, многоканальный измеритель не хочет работать.Хз, в чем загвоздка, при наличии рабочего варианта с ручным перечислением ковыряться дальше пока лень. Цитата Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.Где поцелуи совсем не значат чувства. Где признания не значат любовь. Где каждый одинок и никто не старается это изменить. Где слова теряют всякий смысл, потому что несут ложь. Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых… и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах) Ссылка на комментарий Поделиться на другие сайты Поделиться
SlavaD Опубликовано 3 апреля, 2017 Жалоба Поделиться Опубликовано 3 апреля, 2017 Ну тут на живую проще, если нужна помощь, можете закинуть изделие, попробую скетч сделать под задачу. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
MedicusAmicus Опубликовано 3 апреля, 2017 Автор Жалоба Поделиться Опубликовано 3 апреля, 2017 Спасибо, предыдущий вариант вполне удовлетворяет.Хотел попробовать новым путем, да с возможностью легкого масштабирования.Залил "боевой" скетч, собрал коробку уже не на макетке, все работает.Через время добавлю еще пару функций.Жаль, толковых дальномеров с ценой не 100$ на 6 метров не добыть. Сонар в коридоре с мебелью косячит сильно. Цитата Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.Где поцелуи совсем не значат чувства. Где признания не значат любовь. Где каждый одинок и никто не старается это изменить. Где слова теряют всякий смысл, потому что несут ложь. Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых… и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах) Ссылка на комментарий Поделиться на другие сайты Поделиться
CIBAS Опубликовано 3 апреля, 2017 Жалоба Поделиться Опубликовано 3 апреля, 2017 Лазерные дальномеры (в виде готового изделия) на 20-60 м с точностью 2 мм - 20 - 40 $ Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
SlavaD Опубликовано 3 апреля, 2017 Жалоба Поделиться Опубликовано 3 апреля, 2017 Ну или всетаки допиливать скетч, для фильтрации или пробовать другие датчики, например взять за основу ИК. https://hz.ru.aliexpress.com/item/IR-Infrared-Reflectance-Sensor-for-Arduino-Sensor-Shield/32664284854.html?spm=2114.03010208.8.29.SkWxt0 Или такой:https://hz.ru.aliexpress.com/item/Free-Shipping-2PCS-SR501-HC-SR501-Adjust-IR-Pyroelectric-Infrared-PIR-module-Motion-Sensor-Detector-Module/2035773471.html?spm=2114.03010208.8.59.SkWxt0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
CIBAS Опубликовано 3 апреля, 2017 Жалоба Поделиться Опубликовано 3 апреля, 2017 Допплеровский сенсор на таких расстояниях вполне прилично работает (есть на 2.7 ГГц и на 5.8 ГГц).Что касается простейшего ультразвукового - просто нужно применять самописный алгоритм обработки и калибровку (достаточно простейшей по 2 точкам). Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.