Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Робототехника

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.10.2014, 22:37   #11
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Цитата:
Получил значения в МониторПорта. Больше 77 см не удалось получить, могли бы подсказать почему?
У датчика очень большой угол обзора, возможно что звук отражается от какогото предмета? У меня тоже отражаения от пола ловил, пока его вврх на 10гр. не направил
Admin вне форума   Ответить с цитированием
Старый 28.10.2014, 10:35   #12
kulverstukas
Junior Member
 
Регистрация: 27.10.2014
Сообщений: 26
Вес репутации: 0
kulverstukas is an unknown quantity at this point
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Думаю нет, угол датчика по паспорту 15гр. Направлял и в потолок и в стены и пробовал разные датчики. В целом значения "не скачут" мне понравилось очень, попробую выполнить свою задачу по построению пространства с вашей библиотекой. Значение длинны более 77 см не поднимаются, думал может в библиотеке есть какие то ограничения? или погрешность (точность совпадения) в функции симилар поставить не 0?
kulverstukas вне форума   Ответить с цитированием
Старый 28.10.2014, 10:49   #13
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ультразвуковой дальномер HC-SR04

У Вас датчик HC-SR04
Попробуйте его проверить без функции симилар
Admin вне форума   Ответить с цитированием
Старый 28.10.2014, 10:56   #14
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ультразвуковой дальномер HC-SR04

И ограничение лучше убрать
PHP код:
uint16_t GetDistance() 
{
 
uint16_t dist;
 for (
uint8_t i 0size_buff; ++i//производим несколько замеров
  

    
D2_Highdelay_us(10);  D2_Low;  //запустить измерение
   
dist pulseIn(3HIGH2400); //считываем длительность времени прохождения эха
  
}
  
dist=(find_similar(sensorsize_buff58))/58// //фильтруем показания датчика и переводим в см
  
return dist;

Admin вне форума   Ответить с цитированием
Старый 31.10.2014, 21:09   #15
kulverstukas
Junior Member
 
Регистрация: 27.10.2014
Сообщений: 26
Вес репутации: 0
kulverstukas is an unknown quantity at this point
По умолчанию Re: Ультразвуковой дальномер HC-SR04

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

Построение графика сделал в Excel, петли на графике давно замечены, почему то эти неточности возникают при движении в одну из сторон, а в обратную не возникает, не знаю пока что в чем фишка. Задержки немного уменьшают это, но толку особого нет. (еще поиграюсь) Главное что в целом есть на графике картинка похожая на измеряемое пространство! Спасибо за библиотеку (CyberLib) создателю.
Миниатюры
Нажмите на изображение для увеличения
Название: Пространство+симиляр.gif
Просмотров: 1588
Размер:	82.7 Кб
ID:	1976  
Изображения
 

Последний раз редактировалось kulverstukas; 07.04.2015 в 14:48.
kulverstukas вне форума   Ответить с цитированием
Старый 31.10.2014, 21:29   #16
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Какой алгоритм построения маршрута планируете?

Я тоже давно вынашиваю идею построения маршрута.
Пришел к выводу что для этого мне понадобится
1-Гироскоп MPU-6050 + акселерометр
2-два далномера sharp
4-сервомотор
Admin вне форума   Ответить с цитированием
Старый 01.11.2014, 18:04   #17
kulverstukas
Junior Member
 
Регистрация: 27.10.2014
Сообщений: 26
Вес репутации: 0
kulverstukas is an unknown quantity at this point
По умолчанию Re: Ультразвуковой дальномер HC-SR04

О гироскопах еще не думал, идею пока вынашиваю в математике. Для счета пройденного расстояния использую шаговые моторы изначально 28BYJ-48 очень хорошие, редукторные но медленные (для начинающих идеально) сейчас заказал 24BYJ-48 у них редукция в 2 раза меньше (30 вместо 65). Быстро все равно не будет. эти давали 8 мм/сек но зато можно посчитать насколько сдвинулся робот. Палтформу на обычных моторах (для изучения) начал строить, пока не доделал.
Само построение пространства таково 1. поворачиваем серво на нужный угол 2 замеряем дистанцию 3. заходим в функцию пересчета дистанции в координаты. функции синуса и косинуса не использовал, задал таблицу значений в массив, причем умножил значения на 128 1-е чтобы не возиться с запятыми 2-е чтобы потом готовое значение Х,У сместить на несколько бит (7). При измерении до 200 см хватает int-2 бита для вычисления Х и У.
Так выглядел график до фильтрации, провел более 2-х десятков измерений (это одно из худших, но и остальные не намного лучше).

Привожу текст программы испытательной программы. она без описания, если кому понадобится, могу расписать всё.
PHP код:
#include <CyberLib.h>
#include <SoftwareSerial.h>
#include <Servo.h>


#define size_buff 5 //размер массива sensor
uint16_t sensor[size_buff]; //массив для хранения замеров дальномера


//**********Переменные*****************************
byte  ugol=15;
byte  ugol_servo=90count_range=1ugol_count=5but1/* кнопка запуска измерений but1 1 bit new state 2-bit old stste*/
int   shag1=1shag2=1range[11], xyschet1=1;
    
//    градусы  165  150  135 120 105 90 75  60   45   30   15     //Для расчета координат по Х
  
int sinus[11]={-124,-111,-91,-64,-33336491111124}; //Значения синуса и косинуса умноженные на 128 чтобы без запятых и можно потом Х и У 
       //    градусы  165  150  135 120 105  90  75   60   45   30   15
  
byte cosinus[11]={3364,  91,  111,124,128,124,11191,  64,  33}; //для расчета координат по У

//****Функция рачета расстояния с сортировкой неверных значений из CyberLib********** 
uint16_t GetDistance() 
{
 
uint16_t dist;
 for (
uint8_t i 0size_buff; ++i//производим несколько замеров
  

    
D2_Highdelay_us(10);  D2_Low;  //запустить измерение
   
dist pulseIn(3HIGH12000); //считываем длительность времени прохождения эха, ограничить время ожидания
   
if(dist==0dist=12000;  // 12000 микросекунд = 206 сантиметрам
   
sensor[i]=dist;  //сохранить в массиве
   
delay_ms(40); //задержка между посылками

  
}
  
dist=(find_similar(sensorsize_buff58))/58//фильтруем показания датчика и переводим в см
  
return dist;


Servo motor// инициализируем серво мотор (добавляем его в программу)

void setup() {
  
Serial.begin(9600);  //скорость серийного порта, для сброса значений на экран компьютера
  
motor.attach(12);   //серво вешаем на 12 ногу
  
delay(200);
   
motor.write(ugol_servo); //задано в переменных изначальный угол = 90 градусов
  
delay (200);
    
D2_OutD2_Low//пин trig ультразвукового сонара
   
D3_In//пин echo  ультразвукового сонара
  
pinMode(8,INPUT);  // прикрепляем кнопку запуска измерений
  
delay (2000);
}

void XY_range () {
  
x=10000+range[ugol_count]*sinus[ugol_count]; // здесь координата хранится в раз 128 больше
// 10000 добавил чтоб координата была положительной... можно не ставить..... эта задача только в зародыше
  
Serial.print(x);
  
Serial.print(" ");
  
y=range[ugol_count]*cosinus[ugol_count];  // здесь координата хранится в раз 128 больше
  
Serial.print(y);
  
Serial.print(" ");
  
Serial.println();
  
delay (1);
}

void servo_scan_all () {
  for (
int i=0i<20i++) servo_scan(); 
// запускаем серву на измерение 90 105 120 и так до 165 потом назад до 15 градусов и снова до 90

void servo_scan () {
  if (
ugol_servo==165) {ugol=-15; } // если серво дошла до конца то разворачиваем назад 
  
if (ugol_servo==15) {ugol=+15; }  // если серво дошла до 15 то разворачиваем назад
  
if (ugol_count==10count_range=-1;   //здесь храним порядковый номер угла 0-15 1-30 2-45......10-165
  
if (ugol_count==0count_range=+1;
  
/******************проводим 5 измерений подряд чтобы увидеть погрешности измерений***********/
  
uint16_t dist=GetDistance(); //производим замер дистанции
 
range[ugol_count]=dist;
delay (3);
Serial.print(ugol_servo);
Serial.print(" ");
Serial.print(dist);
Serial.print(" ");
XY_range();

 
motor.write(ugol_servo);
 
delay (50);
 
ugol_servo+=ugol
 
ugol_count+=count_range;
}

void loop() {

  
but1=bitWrite(but11digitalRead(8));  //записвываем в первый бит состояние кнопки
    
if (bitRead(but1,1) && bitRead(but12)) {  servo_scan_all();}   //проверяем второй бит и сравниваем его с первым
  
but1=bitWrite(but12bitRead(but11));   //записываем во второй бит состояние первого, таким образом если кнопка уже нажата, то второй раз измерение не запустится. (хотя читал это здесь и анализировал, где то есть косяк.. но работает!
 

чуток накоментировал в коде.

Последний раз редактировалось kulverstukas; 01.11.2014 в 23:30.
kulverstukas вне форума   Ответить с цитированием
Старый 16.06.2015, 12:31   #18
Arhat109
Senior Member
 
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0
Arhat109 is an unknown quantity at this point
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Подниму тему, ибо тоже интересно.

Вопрос по этому датчику и Ардуино Мега: на меге есть входы от 4 и 5 таймеров ICP - сигнал захвата таймера. Можно ли (стоит ли) ставить ногу echo от датчика на этот сигнал и измерять время отклика с помощью прерывания по ICP?

Алгоритм вижу примерно следующий:
1. В программе вызываем функцию "замерить", она подает сигнал на датчик, ставит признак "пошел замер, данные недействительны" и разрешает прерывание по ICP по фронту сигнала.
2. Прерывание по фронту фиксирует начало замера и изменяет режим на прерывание по спаду.
3. По спаду читаем новое значение ICPR и вычисляем дальность. Снимаем признак "данные недействительны", запрещаем прерывание.
4. В проге тупо ждем результата замера, можно макросом типа everyMillis() ... не занимая время процессора.

Насколько такое решение будет "полезно"?
Arhat109 вне форума   Ответить с цитированием
Старый 16.06.2015, 12:50   #19
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Предложенный Вами вариант можно будет использовать только на определенных пинах с поддержкой прериваний
Admin вне форума   Ответить с цитированием
Старый 16.06.2015, 13:24   #20
Arhat109
Senior Member
 
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0
Arhat109 is an unknown quantity at this point
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Ну да. Зато это не будет "жрать" процессорное время и можно будет решать попутно и иные задачи, кроме "замеров". К сожалению, на плате Мег разведены только 2 сигнала захвата 4 и 5 таймеров.
Arhat109 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 12 (пользователей: 0 , гостей: 12)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:12. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика