roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 13:19

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 216 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8 ... 15  След.
Автор Сообщение
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 05 ноя 2014, 17:20 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
вместо линейной кривописи в подобных задачах/условиях есть смысл использовать, как вариант, машину состояний.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 05 ноя 2014, 17:39 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
slom писал(а):
сейчас ребенок спит, не могу жужжать, а то 6 моторов не хуже дрели работают :)
но постараюсь сегодня сделать.

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

Программно задействовать. С перегревом мотора лучше бороться через энкодеры, а акселерометром лучше защищаться от переворотов. Гуглить i2c arduino и смотреть родную прошивку тирекса.
А с энкодерами я чот не понял, они должны быть на мотороах, а не на плате


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 05 ноя 2014, 17:43 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
elmot писал(а):
А с энкодерами я чот не понял, они должны быть на мотороах, а не на плате


они там и есть, это просто запятую не поставил, на 2х средних моторах энкодеры а аксель на плате... :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 05 ноя 2014, 17:46 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
и что там за энкодеры?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 06 ноя 2014, 00:36 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
elmot писал(а):
и что там за энкодеры?


по идее вот такие:

http://www.dagurobot.com/goods.php?id=87

http://robosavvy.com/forum/viewtopic.php?t=8329

вот кто то самодельный сделал :)
http://robosavvy.com/forum/viewtopic.php?p=34717#34717


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

Добавлено спустя 47 минут 16 секунд:
что за фигня может быть?
при добавлении библиотеки IRremote
компилятор выдает ошибку
C:\Users\SLOM\Desktop\arduino-1.0.6\libraries\RobotIRremote\IRremoteTools.cpp:5: error: 'TKD2' was not declared in this scope

Добавлено спустя 2 часа 12 минут 17 секунд:
вспомнил что у меня есть еще и ик пульт с приемником

нашел вот такой урок

http://cxem.net/arduino/arduino127.php

по нему все сделал, в мониторе выходят данные с нажатия кнопок, далее сделал управление сервой, после загрузки скетча серва принимает положение 90 град а при нажатии кнопок ничего не происходит :(

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


Код:
#include "Servo.h"
#include "IRremote.h"

IRrecv irrecv(7);
decode_results results;
Servo servoMain;

int servPoz = 90; //Начальное положение сервы
int lastPoz = 0;

void setup()
{
  Serial.begin(9600); // Выставляем скорость COM порта
  irrecv.enableIRIn(); // Запускаем прием
 
  irrecv.enableIRIn();
  servoMain.attach(8); // Servo присоединен к 10 выводу
  servoMain.write(servPoz);
}

void loop() {
  if (irrecv.decode(&results))
  {
    Serial.println(results.value, HEX); // Отправляем полученную данную в консоль
    int res = results.value;
    Serial.println(res, HEX);
    if(res==0xFFA857)// Если нажата кнопка "+"
    {
      lastPoz=res;
      servPoz++; 
      servoMain.write(servPoz);
    }
    else if(res==0xFFE01F)// Если нажата кнопка "-"
    {
      servPoz--;
      lastPoz=res;
      servoMain.write(servPoz);
    }
    else if(res==0xFFFFFFFF)// Если кнопку удерживают
    {
      if(lastPoz==0xFFA857) servPoz++;// Удерживают "+"
      if(lastPoz==0xFFE01F) servPoz--;// Удерживают "-"   
      servoMain.write(servPoz);
    }

    irrecv.resume();
    delay(100);
  }
}



позднее попробую переделать этот код на управление двигателями... :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 06 ноя 2014, 12:03 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
это правильно?
servoMain.attach(8); // Servo присоединен к 10 выводу

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 06 ноя 2014, 14:32 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
да правильно, я брал за основу чужой код из урока, там был 10 пин в моем случае пин 8, но переписывать сноску я не стал :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 06 ноя 2014, 14:37 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
а зря. Коментарии важны, особенно верный. или удалите или исправьте.

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 06 ноя 2014, 14:47 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
в чем может быть прикол?

Код:
#include<Ultrasonic.h>  /*включить установленную пользователем библиотеку*/
Ultrasonic ultrasonic(12,13);  /*создать экземпляр УЗ датчика и определить выводы*/
void setup() {
Serial.begin(9600);  /*начать передачу данных на скорости 9600 bps */
}
void loop()
{
  Serial.print(ultrasonic.Ranging(INC));  /* INC для дюймов, CM для сантиметров */
  Serial.println("in");   
  delay(100);
}


монитор выдает

Код:
0in
0in
0in
0in
4in
4in
4in
4in
4in
4in
4in
4in
4in
и тд...


вчера при тестах эхолот показывал большие велечины, чтото вроде 2х метров и тд... сейчас он сходу показывает 0
а если поднести предмет то начинает измерение.

вопрос почему при отсутствии в поле зрения препятствия стал 0 ?

пару раз были небольшие столкновения, но видимых повреждений уз датчика нет, да и в принцыпе он работает, расстояние меряет, только откуда со старта 0?

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

код:

Код:
#include<Ultrasonic.h>  /*включить установленную пользователем библиотеку*/
Ultrasonic ultrasonic(12,13);  /*создать экземпляр УЗ датчика и определить выводы*/

#define DirM1 2
#define PwmM1 3
#define DirM2 10
#define PwmM2 11
#define BrakeM1 4
#define BrakeM2 9



void setup()
{
pinMode (PwmM1, OUTPUT);
pinMode (DirM1, OUTPUT);
pinMode (BrakeM1, OUTPUT);
pinMode (PwmM2, OUTPUT);
pinMode (DirM2, OUTPUT);
pinMode (BrakeM2, OUTPUT);
digitalWrite (BrakeM1, LOW);
digitalWrite (BrakeM2, LOW);

Serial.begin(9600);  /*начать передачу данных на скорости 9600 bps */

}


void loop() {
 
  Serial.print(ultrasonic.Ranging(INC));  /* INC для дюймов, CM для сантиметров */
  Serial.println(" inc ");   
 

  if(ultrasonic.Ranging(INC) < 30) {
    rotateLeft();
                                   }
  else {
  goForward();
       }

  delay(0);
 
}

void goForward ()
{
digitalWrite (DirM1, HIGH);
analogWrite (PwmM1, 100);
digitalWrite (DirM2, HIGH);
analogWrite (PwmM2, 100);
  Serial.println("GO ");
}

void rotateLeft ()
{
digitalWrite (DirM1, HIGH);
analogWrite (PwmM1, 130);
digitalWrite (DirM2, LOW);
analogWrite (PwmM2, 130);

  Serial.println("to left");

}


void startUp ()
{

}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 06 ноя 2014, 17:12 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
Код:
#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED

int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance

void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)
}

void loop() {
/* The following trigPin/echoPin cycle is used to determine the
distance of the nearest object by bouncing soundwaves off of it. */
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);

digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);

//Calculate the distance (in cm) based on the speed of sound.
distance = duration/58.2;

if (distance >= maximumRange || distance <= minimumRange){
/* Send a negative number to computer and Turn LED ON
to indicate "out of range" */
// Serial.println("-1");
digitalWrite(LEDPin, HIGH);
}
else {
/* Send the distance to the computer using Serial protocol, and
turn LED OFF to indicate successful reading. */
Serial.println(distance);
digitalWrite(LEDPin, LOW);
}

//Delay 50ms before next reading.
//delay(50);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 06 ноя 2014, 22:57 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
переделал код, вроде бы почти тоже самое у других людей работает у меня не работает (

Код:
#include <IRremote.h>

int RECV_PIN = 7;
#define DirM1 2
#define PwmM1 3
#define DirM2 10
#define PwmM2 11
#define BrakeM1 4
#define BrakeM2 9


IRrecv irrecv(RECV_PIN);
IRsend irsend;

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Запуск приемника

pinMode (PwmM1, OUTPUT);
pinMode (DirM1, OUTPUT);
pinMode (BrakeM1, OUTPUT);
pinMode (PwmM2, OUTPUT);
pinMode (DirM2, OUTPUT);
pinMode (BrakeM2, OUTPUT);
digitalWrite (BrakeM1, LOW);
digitalWrite (BrakeM2, LOW);
}

void loop() {
if (irrecv.decode(&results)) {
   
if (results.value == 16736925){  //вперед
Serial.println("/|");
     
digitalWrite (DirM1, HIGH);
analogWrite (PwmM1, 120);
digitalWrite (DirM2, HIGH);
analogWrite (PwmM2, 120);
delay(500);
digitalWrite (DirM1, HIGH);
analogWrite (PwmM1, 0);
digitalWrite (DirM2, HIGH);
analogWrite (PwmM2, 0);
    }

if (results.value == 16712445){ //назад
  Serial.println("|/");

digitalWrite (DirM1, LOW);
analogWrite (PwmM1, 120);
digitalWrite (DirM2, LOW);
analogWrite (PwmM2, 120);
delay(500);
digitalWrite (DirM1, LOW);
analogWrite (PwmM1, 0);
digitalWrite (DirM2, LOW);
analogWrite (PwmM2, 0);

    }
if (results.value == 16754775){ //Стоп
  Serial.println("STOP");
     
digitalWrite (DirM1, LOW);
analogWrite (PwmM1, 0);
digitalWrite (DirM2, LOW);
analogWrite (PwmM2, 0);
    }
    irrecv.resume(); // Получаем следующее значение
  }
}


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

результаты в мониоре
Код:
/|
/|
/|
/|
|/
|/
|/
STOP
STOP
STOP
STOP


ик пульт работает, плата работает, программа работает, почему колеса не крутят? :crazy:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 06 ноя 2014, 23:10 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
как переделали? что значит почти также? что значит не работает? с чего вы взяли, что не работает? и т.д. :good:
потому, что этот код пишите вы. и пока вы не измените своё отношение, не начнёте прислушивать, эта фигня с кодом или задумкой в общем будет продолжаться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 06 ноя 2014, 23:37 
Не в сети
Аватара пользователя

Зарегистрирован: 07 сен 2014, 19:29
Сообщения: 645
Откуда: Севастополь
Skype: slom_3d
прог. языки: 3d max :)
Angel71 писал(а):
как переделали? что значит почти также? что значит не работает? с чего вы взяли, что не работает? и т.д. :good:
потому, что этот код пишите вы. и пока вы не измените своё отношение, не начнёте прислушивать, эта фигня с кодом будет продолжаться.


1. переделал совместив 2 различных кода, один вот этот:

Код:
#include <AFMotor.h>
#include <IRremote.h>

int RECV_PIN = 9;

AF_DCMotor motor_a(1, MOTOR12_64KHZ);
AF_DCMotor motor_b(2, MOTOR12_64KHZ);

IRrecv irrecv(RECV_PIN);
IRsend irsend;

decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  motor_a.setSpeed(255);
  motor_b.setSpeed(255);
}

void loop() {
  if (irrecv.decode(&results)){

    /*
    Serial.println(results.value);
    Serial.println(results.value, HEX);
    Serial.println("====");
    */

   if (results.value == 0xFF18E7) { //вперед
      Serial.println("/|");
      motor_a.run(FORWARD);
      motor_b.run(FORWARD);
      delay(100);
      motor_a.run(RELEASE);
      motor_b.run(RELEASE);
    }

    if (results.value == 0xFF4AB5) { //назад
      Serial.println("|/");
      motor_a.run(BACKWARD);
      motor_b.run(BACKWARD);
      delay(100);
      motor_a.run(RELEASE);
      motor_b.run(RELEASE);
    }

    if (results.value == 0xFF10EF) { //налево
      Serial.println("<--");
      motor_b.run(BACKWARD);
      motor_a.run(FORWARD);
      delay(100);
      motor_a.run(RELEASE);
      motor_b.run(RELEASE);
    }

    if (results.value == 0xFF5AA5) { //направо
      Serial.println("-->");
      motor_b.run(FORWARD);
      motor_a.run(BACKWARD);
      delay(100);
      motor_a.run(RELEASE);
      motor_b.run(RELEASE);
    }
    irrecv.resume(); // Receive the next value
  }
}


из темы:
http://arduino.ru/forum/programmirovanie/upravlenie-ik-pdu#comment-87026

у людей работает, но у них там другой мотор шилд, по дего как я понял спец библиотека, мне походу это не надо, у меня движки крутят при вот таком коде:

Код:
#define DirM1 2
#define PwmM1 3
#define DirM2 10
#define PwmM2 11
#define BrakeM1 4
#define BrakeM2 9

void setup()
{
pinMode (PwmM1, OUTPUT);
pinMode (DirM1, OUTPUT);
pinMode (BrakeM1, OUTPUT);
pinMode (PwmM2, OUTPUT);
pinMode (DirM2, OUTPUT);
pinMode (BrakeM2, OUTPUT);
digitalWrite (BrakeM1, LOW);
digitalWrite (BrakeM2, LOW);
}
//


void loop()
  {
   
// вперед


   digitalWrite (DirM1, HIGH);
analogWrite (PwmM1, 200);
digitalWrite (DirM2, HIGH);
analogWrite (PwmM2, 200);
delay (500); // задержка в течении которой крутит

// стоп
analogWrite (PwmM1, 0);
analogWrite (PwmM2, 0);
delay (2000); // вперед время в течении которого не крутит



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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 07 ноя 2014, 00:25 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
что бы код был понятен, нужно для начала язык подучить. в том числе и на это неоднократно намекалось. хорошо, в кратком переводе с си на русский тот код означает следующее: получать данные с дальномера и отправить в уарт. по выводу можно было понять, у вас с датчиков всё нормально или нет. если не понимаете, почему нельзя по вашему коду и данным с уверенностью делать выводы, обьясняю. что там за код в библиотеки неизвестно, соответственно от полученных данных толку 0.
а что конкретней хотите увидеть, если не хотите понять, что либо играетесь в rc кубики, либо начинаете учиться программированию. или не понимаете, что копаться в ваших бездумно слепленых кусках кода, желающих всё меньше и меньше?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Тележка с манипулятором и брандспойтом
СообщениеДобавлено: 07 ноя 2014, 10:26 
Не в сети

Зарегистрирован: 07 авг 2010, 21:29
Сообщения: 1725
Откуда: КМВ
прог. языки: C
ФИО: Андрей
У меня дальномер давал нулевое расстояние - когда принимал еще не отправленный импульс.

_________________
Дым, идущий из всех устройств в помещении предвещает появление электрика.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 216 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8 ... 15  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO