Перейти к содержанию
Симферопольский Форум

Нужна помощь по скетчу


MedicusAmicus

Рекомендуемые сообщения

Купил ардуину и сонар. Постараюсь на днях протестить.

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Ссылка на комментарий
Поделиться на другие сайты

Еще много зависит от места установки сонара. У него диаграмма направленности довольно широкая. В моем коридоре, видимо, немало паразитного эха.

Тоже бороться буду.

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

Где слова теряют всякий смысл, потому что несут ложь.

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Ссылка на комментарий
Поделиться на другие сайты

Итак: сутки тест-драйва, ложных срабатываний не замечено.

Итоговая логика - не усреднять, а три раза отмерить и один раз - отрезать.

Конечно, больше 3 проверок задолбаешься вложенные циклы делать, но мне хватило; //надо под это дело попробовать функцию изготовить

На очереди второй датчик (в другую сторону), датчик открытия входной двери, (логика, что дверь открыли снаружи, придумать, что делать на это открытие...rolleyes.gif) температура/влажность в ванной и запуск вытяжки, + запуск при еще одном событии

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

Где слова теряют всякий смысл, потому что несут ложь.

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Ссылка на комментарий
Поделиться на другие сайты

Собрал макет. никаких ошибок не выскакивает. погрешность мизерная

 

 

11116
11094
11091
(1.8 метра)


1316
1316
1317
(22 см)

 

Усреднение чуть повышает точность.

 

 

А почему не использовать PIR сенсор?

 

http://zelectro.cc/PIR_sensor

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Ссылка на комментарий
Поделиться на другие сайты

Значит, у меня эхо нестабильное, из-за формы коридора.

Пир-сенсор не использовать потому, что 4 сонара надо трудоустроить.

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

Где слова теряют всякий смысл, потому что несут ложь.

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Ссылка на комментарий
Поделиться на другие сайты

Они не вредные?

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Ссылка на комментарий
Поделиться на другие сайты

4 сонара надо трудоустроить.

имеет смысл например подсветку ступенек ими делать

https://www.youtube.com/watch?v=I0UeYQ2CH1I

https://www.youtube.com/watch?v=oOkYGG3-zAg


Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов

Ничего не делается к лучшему © Борис Раушенбах

Люди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский

Ссылка на комментарий
Поделиться на другие сайты

Пэтро, нет, не вредные. Вредничают при измерениях, бывает.

 

Rumlin, сначала придется или 2-этажную квартиру или дом купить.

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

Где слова теряют всякий смысл, потому что несут ложь.

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Ссылка на комментарий
Поделиться на другие сайты

MedicusAmicus, рукосушитель включать.

Как замена детектору движения очень непросто это использовать.


Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов

Ничего не делается к лучшему © Борис Раушенбах

Люди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский

Ссылка на комментарий
Поделиться на другие сайты

Rumlin, скорее, детектор присутствия. Главное - правильно расположить и помехи отфильтровать.

Пироэлектрический на лестничной клетке свет включает/выключает. Так вот, если на площадке спокойно стоять, разговаривать без интенсивных движений, он гаснет. Приходится рукой ему махать.

А сонар так не обманешь. Расстояние до препятствия и точка.

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

Где слова теряют всякий смысл, потому что несут ложь.

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

https://youtu.be/mZzP0dTw8W0

 

Сделал машину с искусственным интеллектом ))))

 

Arduino relay sonar motor servo

 

На базе игрушки на р.у.

 

При приближении к препятствия ближе 20 см поворачивает колёса в сторону. Ближе 10 см мотор назад поворачивает в обратную сторону.

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Ссылка на комментарий
Поделиться на другие сайты

  • 4 месяца спустя...

Так, господа программеры и просто умные люди. Новая головоломка.

Есть такой себе массив, 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);
 }

 

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

Где слова теряют всякий смысл, потому что несут ложь.

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Ссылка на комментарий
Поделиться на другие сайты

Независимо от языка и методов можно поступить так:

 

Имеем массив ARRAY[N.M]. Для удобства объявим его как

ARRAY[N,M+1] - дополнительный столбец будет содержать

Вашу итоговую переменную для каждой строки.

Инициализируем в начале все как 0 (false).

 

Теперь независимо от методики заполнения массива, на каждом шаге

присвоения значения элементу у Вас есть его индексы I, J (r примеру).

Теперь после присвоения значения элементу, ставим такой оператор:

IF (ARRAY[i,J] = true) then ARRAY[i,M+1]= true

 

Вот и всё.

upd Не знаю синтаксиса Вашего языка, поэтому просто показал

на псевдоязыке для понимания идеи.

Изменено пользователем CIBAS
Ссылка на комментарий
Поделиться на другие сайты

CIBAS,

IF (ARRAY[i,J] == true) then ARRAY[i,M]= true

установит итоговую переменную в true при наличии в строке всего одной "ARRAY[i,J] = true"

А мне надо, чтобы все значения строки были == true.

Как вариант: как в С++(ардуинском) подсчитать количество заданных элементов в массиве?

Если массив содержит М+1 элементов true, то все ок.

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

Где слова теряют всякий смысл, потому что несут ложь.

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Ссылка на комментарий
Поделиться на другие сайты

Да, ла, невнимателен....

А у Вас весь массив гарантированно заполняется ?

 

Если да, то тот же метод, но инициализируем 1 (true),

а присваиваем false, если текущий элемент = false.

Ссылка на комментарий
Поделиться на другие сайты

Массив заполнится, чай не бассейн с трубами :)

Т.е. изначально устанавливаем итог в true, и если вдруг в массиве находится значение "0" - итог=0.

Попробую, спасибо.

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

Где слова теряют всякий смысл, потому что несут ложь.

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Ссылка на комментарий
Поделиться на другие сайты

Универсальный вариант - это в любом случае

анализ всех элементов текущей строки.

Тогда такой вариант в терминах C

для строки i массива array[N][M]

 

result=1;

for j=0;j<M;j++)

{

if(array[j] == 0) {result=0; break;}

}

 

Т.е цикл просмотра строки прекращается при появлении

первого же элемента false, в противном случае цикл проходит

всю строку и результат остаётся true.

 

Вариант, предлагаемый ранее, работать будет только если гарантированно

заполняется весь массив и его анализ производится только после заполнения.

Зато не нужно дополнительных проходов по строкам.

Изменено пользователем CIBAS
Ссылка на комментарий
Поделиться на другие сайты

Спасибо. Настрою аппаратную часть и вывод в 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;                                                           //и прекращаем измерения до следующего цикла 
           }
         }          
       }

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

Где слова теряют всякий смысл, потому что несут ложь.

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Ссылка на комментарий
Поделиться на другие сайты

А зачем вообще двумерный массив ? Сделать его одномерным и упростить код.

 

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;
           }
        }
}

Ссылка на комментарий
Поделиться на другие сайты

Короче, многоканальный измеритель не хочет работать.

Хз, в чем загвоздка, при наличии рабочего варианта с ручным перечислением ковыряться дальше пока лень.

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

Где слова теряют всякий смысл, потому что несут ложь.

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Ссылка на комментарий
Поделиться на другие сайты

Ну тут на живую проще, если нужна помощь, можете закинуть изделие, попробую скетч сделать под задачу.
Ссылка на комментарий
Поделиться на другие сайты

Спасибо, предыдущий вариант вполне удовлетворяет.

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

Залил "боевой" скетч, собрал коробку уже не на макетке, все работает.

Через время добавлю еще пару функций.

Жаль, толковых дальномеров с ценой не 100$ на 6 метров не добыть. Сонар в коридоре с мебелью косячит сильно.

Мы живём в мире, где улыбка уже не значит хорошее отношение к тебе.

Где поцелуи совсем не значат чувства.

Где признания не значат любовь.

Где каждый одинок и никто не старается это изменить.

Где слова теряют всякий смысл, потому что несут ложь.

 

Нравственность придумали сытые, могущественные и очень неглупые люди, чтобы все остальные посвящали свой досуг поискам правых и виноватых…

и не мешали им спокойно кушать! (магистр Нуффлин Мони Мах)

Ссылка на комментарий
Поделиться на другие сайты

Лазерные дальномеры (в виде готового изделия) на 20-60 м с точностью 2 мм - 20 - 40 $
Ссылка на комментарий
Поделиться на другие сайты

Ссылка на комментарий
Поделиться на другие сайты

Допплеровский сенсор на таких расстояниях вполне прилично работает (есть на 2.7 ГГц и на 5.8 ГГц).

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

и калибровку (достаточно простейшей по 2 точкам).

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

Чат

Чат

Please enter your display name

×
×
  • Создать...