Самодельный робот-пылесос.

Udalite
Offline
Зарегистрирован: 09.05.2015

Простите, я не очень понял, с чем связано то, что лопасти турбины расположены вертикально, а не горизонтально? Как он всасывает мусор? Всю ночь не спал, в голову лезла мысль об этом. Объясните, пожалуйста)

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Udalite пишет:

Простите, я не очень понял, с чем связано то, что лопасти турбины расположены вертикально, а не горизонтально? Как он всасывает мусор? Всю ночь не спал, в голову лезла мысль об этом. Объясните, пожалуйста)

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

А в контейнер пыль поподает через прорезь снизу.

Вот через эту круглую дырку турбина сосет воздух.

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

SLOM пишет:

а есть возможность проверить работу на другой ардуине? может в ней проблема? 

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

Спасибо за ссылки.

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

С УЗ дальномерами дело не имел. Но мне кажется для четырех дальномеров надо ставить мегу, а то на уне, или на про мини всего два прерывания. маловато будет. если бы были такие дальномеры, чтобы выставить на них дистанцию срабатывания к примеру 3 см и они выдавали на пин ноль, или единицу, тогда другое дело.

dpzsvao
Offline
Зарегистрирован: 15.05.2015

супер круто! давайте сделаем эту модель на 3D принтере и доработаем ? ))

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

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

dpzsvao пишет:

супер круто! давайте сделаем эту модель на 3D принтере и доработаем ? ))

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

Я бы с удовольствием поделился чертежами, но они все у меня в голове.

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

Muzykant
Offline
Зарегистрирован: 26.05.2015

Всем привет! Офигенный проект вы замутили!!

У самого лежит робот XR210, такие же колеса, 16 датчиков, пульт, виртаульная стена, поиск базы)))

Почему-то выдал ошибку центральной щетки и все тут, ехать не хочет. Причины найти не могу.

Давно уже была мысль сделать новую плату самому, наткнулся на Вашу тему и подумал, почему бы тоже не замутить ее на ардуинке. Кстати, насчет поиска - алгоритм-то простейший - просто двигаться вдоль правой стены. Не важно сколько там комнат, он все равно объедет всю квартиру и найдет базу. Мой пока работал, если базу выключить, больше часа мог ее искать, запаса зарядки хватало.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

dpzsvao пишет:

супер круто! давайте сделаем эту модель на 3D принтере и доработаем ? ))

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

дайте ему 3D-принтер - он сделает !
:)

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Вот доделал версию 2.0: Видео уборки.

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

А вот версия 1.0 и 2.0 вместе:)  Два робота-пылесоса делают уборку.

Muzykant
Offline
Зарегистрирован: 26.05.2015

Да, здорово!

Главное - исполнение от заводского не отличишь! Жаль, на парковку сам не ездит((((

Как удалось победить разницу вращений колес?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

хватает человеку времени)) классно получилось

вот интересная статья

http://geektimes.ru/post/163637/

 

Muzykant
Offline
Зарегистрирован: 26.05.2015

nitrior, вопросик к Вам: как вы крепили провода к моторам, ибо на моих из мотора выведен вот такой разъем и вставляется в ответный разъем на плате. Или у Вас не так?

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Muzykant пишет:

nitrior, вопросик к Вам: как вы крепили провода к моторам, ибо на моих из мотора выведен вот такой разъем и вставляется в ответный разъем на плате. Или у Вас не так?

Вот здесь посмотрите: http://robocraft.ru/blog/3357.html

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Muzykant пишет:

Да, здорово!

Главное - исполнение от заводского не отличишь! Жаль, на парковку сам не ездит((((

Как удалось победить разницу вращений колес?

Пока ШИМом подобрал значения.

Muzykant
Offline
Зарегистрирован: 26.05.2015

Спасибо. А что касается датчиков приближения - расстояние как-то настраивается или зависит от расположения/угла диодов?

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

На каждом датчике есть подстроечный резистор, им настраивается расстояние срабатывания.

Эти датчики не видят черную поверхность.

Muzykant
Offline
Зарегистрирован: 26.05.2015

Ну у меня-то штатные. Резистор-то значит регулирует напряжение на источнике, надо будет это учесть. Спасибо!

Muzykant
Offline
Зарегистрирован: 26.05.2015

Еще вопрос назрел: что за контроллер заряда у Вас? Он на 5В как я понял? Ищу что-нибудь похожее, но на 12 или лучше 14В, а мне везде здоровые (относительно) попадаются для солнечных батарей, габаритами 11х6 см. Куда я его запихну, даже без корпуса...

Antiskim
Offline
Зарегистрирован: 26.03.2014

Nitrior, подскажите, что за моторы стоят на приводе боковых заметающих щетках? Хотя бы количество оборотов и можность.

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

У меня стоит такой: http://zapas-m.ru/shop/UID_280.html но он без балансира.

Поищите здесь: http://zapas-m.ru/shop/CID_45.html там есть под любой вольтаж.

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Antiskim пишет:
Nitrior, подскажите, что за моторы стоят на приводе боковых заметающих щетках? Хотя бы количество оборотов и можность.

Вот такие микромоторы с редукторами.

 

на 12 вольт, 2 оборота в секунду. брал на али.

Antiskim
Offline
Зарегистрирован: 26.03.2014

Nitrior, подскажите, что за моторы стоят на приводе боковых заметающих щеток? Хотя бы количество оборотов и мощость.

Antiskim
Offline
Зарегистрирован: 26.03.2014

А щетки уже покупные или так же самодельные?

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Antiskim пишет:
А щетки уже покупные или так же самодельные?

Самодельные.

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Оба пылесоса заняли первое место на Робокрафте.

Здесь: http://robocraft.ru/blog/RoboCraft/3364.html

Там есть полное описание обеих пылесосов.

Antiskim
Offline
Зарегистрирован: 26.03.2014

Что скажете на счет таких щеток с моторами? Стоит брать? Есть комплекты по 2 шт. http://ru.aliexpress.com/item/WHOLE-SALE-15pcs-DC-motor-for-DIY-robot-sw...

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Все зависит от размера робота пылесоса. у меня диаметр робота 34 сантиметра, диаметр одной щетки 17 сантиметров. если сделать щетку меньше половины диаметра пылесоса, то она не будет захватывать весь мусор вдоль стен. если вы сместите моторы ближе к краям пылесоса, то щетки не будут захватывать мусор по центру.

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

я расположил так

rover_scan
Offline
Зарегистрирован: 15.01.2015

О! Если бы я знал, что на робокрафте был конкурс, тоже бы своего пылесоса выставил бы :

Правда он у меня еще не полностью собран, но стимул был бы отличный :-)

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

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

Разобрал самсунговскую, а там шесть банок по 2000мА, одна убитая остальные вроде целые.Воткнул одну в аймакс поставил на зарядку, принял 1822 мА , сейчас разряжаю, хочу узнать сколько он отдаст.

 

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Отдал 1713 мА. Почти как новый.

Muzykant
Offline
Зарегистрирован: 26.05.2015

Насчет колес: Энкодеры-то в них не используются? А микрокнопки? Еще, если можно распайку разъема не набросаете? А то там непонятные буквы какие-то.

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Muzykant пишет:

Насчет колес: Энкодеры-то в них не используются? А микрокнопки? Еще, если можно распайку разъема не набросаете? А то там непонятные буквы какие-то.

Энкодеры я пока так и не осилил, но подключил.

Схема и подробное описание колес есть здесь: http://robocraft.ru/blog/mechanics/992.html

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Вставил новые аккумуляторы 4 штуки по 2500 мА и сгорел контроллер заряда-разряда АКБ. Думал, что делать и надумал, заказал пищалку которая контролирует разряд батарей и когда любая из батарей выходит за нижние пределы вольтажа, то включается пищалка. А заряжаю я все равно аймаксом, так что контроллер заряда не нужен.

rover_scan
Offline
Зарегистрирован: 15.01.2015

А почему бы не использовать возможности ардуины? воткни выход первой банки в аналоговый вход - и вот тебе очень приближенный тестер батарей. Опытным путем можно определить показания, соответствующие, к примеру, 3,1 вольтам и предпринимать какие-нибудь действия. Например, включать пищалку. Можно в принципе снимать данные с общего вольтажа, но через делитель.Я у себя так и собираюсь делать, вроде никаких побочных эффектов не вижу.

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

А если одна банка разрядится быстрее той, которую контролировать Ардуиной?

Та пищалка, которую я заказал, контролирует каждую банку и если одна из них выходит за пределы срабатывания, то раздается громкий сигнал. И всего-то за 100 рублей.

Вот такая:

Я бы заказал новый контроллер, но цена пересылки дороже, чем сам контроллер.

Илья73
Offline
Зарегистрирован: 06.09.2013

Игрался я с такой штукой. Брал сигнал с пищалки, вернее выпаивал ее полностью и подавал на аналоговый вход  контроллера и как только просадка на банке ниже заданного уровня  контроллер отрубал мосфет (нагрузку) полностью.

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Илья73 пишет:

Игрался я с такой штукой. Брал сигнал с пищалки, вернее выпаивал ее полностью и подавал на аналоговый вход  контроллера и как только просадка на банке ниже заданного уровня  контроллер отрубал мосфет (нагрузку) полностью.

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

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

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

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

Как осилю энкодеры, добавлю режим елочка.

Приложение для смартфона, исходники для AppInventor и код для Ардуино можно скачать отсюда:

https://docs.google.com/file/d/0B9iK8nv3lQ08a0RocFgxQURLUDQ/

 

Илья73
Offline
Зарегистрирован: 06.09.2013

Да, запоминает. Питание берет от первых двух банок. Если больше банок висит на этой штуке постоянно, со временем появится разбаланс.

Я свой робот потихоньку делаю по вечерам пока только корпус и механику.

Летом тяжело делать, время не хватает, вечером ждет море и велосипед :)

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

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

А я его уже отпаял, теперь по-новой надо припаивать.

mitos
Offline
Зарегистрирован: 11.12.2011

Что то тема затихла, очень жаль.

Нашел шасси от робота пылесоса , так что с механической частью проблем не было . Взял моторшилд , уно и 

на основе приведного тут скетча сделал под своего робота .

Бампер сделал на резисторах для экономии пинов. Теперь жду пример скетча для поиска базы .

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

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

Nitrior не бросай последователей на полпути.

Робот не робот если сам к кормушке не едет.



#include <AFMotor.h> // Подключаем библиотеку для управления двигателями 
#include <Servo.h> // Подключаем библиотеку для сервоприводом
//#define r_r A0 //пин 1 orange rr
//#define mid_r A1 //пин 2 purple mid r
//#define mid_l A2 //пин 3 yellow mid l
//#define l_l A3 //пин 4 blue ll
Servo myservo; 
const int analogBump = A4; // пин 4 аналоговый вход бамперов
// 0 правый. 180 средний правый. 410 средний левый. 20 левый.
// A4 free for use
// D2 free for use
const int analogInPin = A5;  // Analog input pin volt meter 
float sensorValue = 0;        // value read from the pot
float outputValue = 0;  
float bumperValue = 1023;      
int rezim = 'C'; //режим работы робота 'C' - по спирали
int turnnum = 0;
int turnvalue_left = 0;
int turnvalue_right = 0;
int flag_turn = 0;
int flag_bat = 0;
int flag = 0;
int resc_delay = 0;
AF_DCMotor motor1(1); //канал М1 на Motor Shield — left
AF_DCMotor motor2(2); //канал М2 на Motor Shield — right
AF_DCMotor motor4(4); //  Motor Shield M4 brush motor
AF_DCMotor motor3(3); //  Motor Shield M4 venta




//-----------------------
unsigned long previousMillis = 1500;        //время цикла езды по спирали
long interval = 400;           // интервал между циклами езды по спирали
unsigned long currentMillis = 0; //время с начала программы
//------------------------


void setup() {
  Serial.begin(9600);
  randomSeed(analogRead(A3));
  //myservo.attach(10);
 
myservo.write(0);
  //-------------------------------------------
  // bumper sensor
// pinMode(r_r, INPUT);  //
 //pinMode(mid_r, INPUT);
 //pinMode(mid_l, INPUT);
 //pinMode(l_l, INPUT);

  //---------------------------
  delay(500);

  // ROB_FORWARD();
}

void loop()
{
// read the analog in value:
   bumperValue = analogRead(analogBump);
   sensorValue = analogRead(analogInPin);            
   outputValue = float(analogRead(analogInPin))/54.70;
  // Serial.println(outputValue);  
  if (flag_bat == 0)
 { 
  if (outputValue < 11 )
  {
  ROB_STOP();
  motor3.run(RELEASE);
  flag = 1 ;
  }
  else {
  motor3.run(FORWARD); 
  motor3.setSpeed(255);
  ROB_FORWARD();
  if(rezim == 'C')
  {
    // езда по квадратной спирали
    currentMillis = millis();
    //проверяем не прошел ли нужный интервал, если прошел то
    if(currentMillis - previousMillis > interval)
    {
      ROB_STOP();
      delay(100);
      ROB_RIGHT();
      delay(1270); // поворот на 90 градусов
      ROB_STOP();
      delay(100);
      ROB_FORWARD();
      // сохраняем время последнего переключения
      previousMillis = currentMillis;  
      interval = interval + 600; // интервал длинны езды
    } 
  }
  //---------------------------
 currentMillis = millis();
  // если срабатывает левый выключатель на бампере
  if (bumperValue > 15 && bumperValue < 25)
  { 
    previousMillis = currentMillis;
    ROB_RIGHT();
    delay(500);
	ROB_STOP();
    delay(100);
	flag +=1;
    ROB_FORWARD();
    rezim = 'X';
	
  }
 
  //-----------------------------------------------
  // right sensor
  if (bumperValue > 0 && bumperValue < 10)
  { 
    previousMillis = currentMillis;     
    ROB_LEFT();
    delay(500);
	ROB_STOP();
    delay(100);
	flag +=1;
    ROB_FORWARD();
    rezim = 'X';
	
  }
  //-----------------------------------------------

  //  mid  sensor
 if (bumperValue > 400 && bumperValue < 430 )
  {
   previousMillis = currentMillis; 
	ROB_RIGHT_M();
	flag +=1;
    rezim = 'X';
	
	}

 if (bumperValue >130 && bumperValue < 190 )
  {
     previousMillis = currentMillis; 
	ROB_LEFT_M();
	
	flag +=1;
    rezim = 'X';	 
	
 }
  currentMillis = millis();
 if(currentMillis - previousMillis < 2600)
	{
	if (flag >3)
	{
	ROB_RESC();
	}
	}
 else
 {
 
 resc_delay = 0;
 flag = 0; 
 rezim = 'X';
 if(currentMillis - previousMillis > 10600)
 {
 flag_turn = random(0,1) ;
 if (flag_turn == 0)
 {
 ROB_LEFT_M();
 }
 ROB_RIGHT_M() ;
 }
 
 
 }
   //-----------------------------------------------
 
 
  //-----------------------------------------------
  //принятие команд с блютуса
 // if (Serial.available())
 // {
 //   rezim = Serial.read();
//    if (rezim == 'C')
//    {
//      interval = 200;
//    } 
//    if (rezim == 'X')
//    {
 //     ROB_VPERED();
//    } 
//    if (rezim == 'Z')
//    {
//
//    } 
//    if (rezim == 'W')
//    {
//      ROB_VPERED();
//    } 
//    if (rezim == 'L')
//    {
//      ROB_LEV();
//    } 
//    if (rezim == 'S')
//    {
//      ROB_STOP();
//    } 
//    if (rezim == 'P')
//    {
//      ROB_PRAV();
//    } 
 //   if (rezim == 'N')
 //   {
 //     ROB_NAZAD();
 //   } 
//
//  }
  //-------------------------
}
  }
}


// right turn
void ROB_RIGHT() 
{

motor4.run(FORWARD); 
motor4.setSpeed(250);
motor1.run(FORWARD); 
motor1.setSpeed(100);
motor2.run(BACKWARD); 
motor2.setSpeed(100);


}
//-----------------
// left turn
void ROB_LEFT() 
{
motor4.run(FORWARD); 
motor4.setSpeed(250);
motor1.run(BACKWARD); 
motor1.setSpeed(100);
motor2.run(FORWARD); 
motor2.setSpeed(100);



}
//---------------------
// forward
void ROB_FORWARD() 
{
motor1.run(FORWARD); 
motor1.setSpeed(150);
motor2.run(FORWARD); 
motor2.setSpeed(150);
motor4.run(FORWARD); 
motor4.setSpeed(250);

}
//-------------------------------------
// reverse
void ROB_REVERS() 
{
motor1.run(BACKWARD); 
motor1.setSpeed(100);
motor2.run(BACKWARD); 
motor2.setSpeed(100);
motor4.run(RELEASE); 

}
//------------------------------------
// стоп 
void ROB_STOP() 
{
motor1.run(RELEASE); 
motor2.run(RELEASE); 
motor4.run(RELEASE); 
}
//--------------------------------
// motion rigth
void ROB_RIGHT_M()
{
  //myservo.write(45);
    previousMillis = currentMillis; 
    turnvalue_right = random(250,1250) ;
    ROB_STOP();
    delay(100);
	ROB_REVERS();
	delay(300);
    ROB_RIGHT();
    delay(turnvalue_right);
	ROB_STOP();
    delay(100);
	
}


//motion left
void ROB_LEFT_M()
{ //myservo.write(120);
    previousMillis = currentMillis; 
    turnvalue_left = random(250,850);
    ROB_STOP();
    delay(100);
	ROB_REVERS();
	delay(300);
    ROB_LEFT();
    delay(turnvalue_left);
	ROB_STOP();
    delay(100);
}
// self rescue
void ROB_RESC()
{
	
	 if (bumperValue > 15 && bumperValue < 25 or bumperValue > 0 && bumperValue < 10 or bumperValue > 130 && bumperValue < 200 or bumperValue > 390 && bumperValue < 420)
{ 
  //myservo.write(90);
	ROB_STOP();
    delay(100);
	ROB_REVERS();
	delay(200);
	resc_delay +=150;
    ROB_LEFT();
    delay(resc_delay);
	ROB_STOP();
    delay(100);
	ROB_FORWARD();
}
}

 

 

 

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Я никого не бросаю, стараюсь отвечать на все вопросы. Просто уже все сделал и не знаю о чем еще писать. Выложил все фотографии, схемы, скетч и приложение для Андроид, у себя Вконтакте: http://vk.com/id309307515

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

mitos
Offline
Зарегистрирован: 11.12.2011

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

И если я правильно понял моторы щеток и турбины никак не контрольруются и просто сидят на выключателе ? 

Спасибо.

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

mitos пишет:

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

И если я правильно понял моторы щеток и турбины никак не контрольруются и просто сидят на выключателе ? 

Спасибо.

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

да просто на выключателе.

Muzykant
Offline
Зарегистрирован: 26.05.2015

mitos пишет:

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

 

Я думаю, у всех тут есть! Показывайте!

mitos
Offline
Зарегистрирован: 11.12.2011

 Вопрос был про скетч . Он в сообщении есть.

Сам робот выглядит так .

В бампере 4 кнопки.

Колеса подключены к моторшилд.

Турбина и щетка подключены к реле которые управляются тоже через шилд. Потому как шилд нормально отдает 600 мА а надо прилично больше . Так что пришлось отказаться от контроля за скоростью и просто запитать через реле .

Дисплей и кнопки пока не используются . Возможно поставлю туда недельный таймер для запуска по расписанию . Но сначала надо научить робота на зарядку приходить. База родная есть , в нее только маяк поставить.

 

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

Поменял в пылесосе аккумуляторы на ноутбучные, проработал три часа и еще остался заряд.

nitrior
nitrior аватар
Offline
Зарегистрирован: 02.02.2015

https://www.youtube.com/watch?v=rjl3_pJOdvk&feature=youtu.be&app=desktop

Самодельный робот-пылесос управляемый со смартфона по Bluetooth