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

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

Жизнь в провинции не спешна, не прошло и года. В общем собрал наконец то своего робота. Очень похож на робота nitrior . Но есть некоторые отличия. Изначально делал с кнопками на передней панели, которые сигнализируют что робот уперся. Но конструкция оказалась не надежна и сложна, решил отказаться.

Купил акселерометр Adxl335 и сделал датчик тока (можно купить готовый)а так же установил шесть датчиков IR как у nitrior. А так же сделал подвеску моторов как на последних двух фото на пружинах, получилось мягко, в общем доволен.

Дополнительно установил переменный резистор мощности пылесоса (вывел на крышку), использовал авиамодельный мотор и регулятор к нему готовый. А так же добавил переменный резистор установки времени работы, от 5 мин до 1 часа. Кнопка ВКЛ и ВЫКЛ на схеме показаны. Предусмотрено выключение от сигнала контроллера и при падении напряжения на батареях менее 6в., пылесос отключается полностью вместе с ардуиной и всеми нагрузками. Т.е старался сделать робота так чтобы уходя из мастерской включить робота и домой. Он сам все сделает и через определенное время выключится.

Батареии http://ru.aliexpress.com/item/10pcs-lot-Original-18650-ICR18650-26F-3-7V...

Плата контроля батареи http://ru.aliexpress.com/item/Free-shipping-10PCS-7-4v-18650-battery-pro...

Драйвер мотора http://ru.aliexpress.com/item/2pcs-lot-New-Dual-H-Bridge-DC-Stepper-Moto...

Плата зарядки аккумуляторов http://ru.aliexpress.com/item/Free-Shipping-1PC-LM2596-LED-Driver-DC-DC-...

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

exploed
Offline
Зарегистрирован: 30.11.2015

Здравствуйте "Илья73", очень хорошо получился робот-пылесос. Можете выложить видео демонстрации работы робота и код? Сейчас сам заказал запчасти жду пока приедут. Интересно как работает у вас датчик тока. У вас он просто хаотично ездиет?

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

exploed пишет:

Интересно как работает у вас датчик тока. У вас он просто хаотично ездиет?

В том то и дело что не только датчик тока в деле, но и шесть IR модулей и сенор акселерометр Adxl335.

Раз уж поставил то и выдергивать обратно не стал.

int PSH = 9; //шим правый мотор
int PM1 = 7; // управление правым мотором
int PM2 = 6; // управление правым мотором

int LSH = 10; // шим левый мотор
int LM1 = 5; // управление левым мотором
int LM2 = 4; // управление левым мотором
int power = 0; // переменная мощности пылесоса
int sp =0; 

int x = 0;
int y = 0;
int z = 0;
int a = 0;
int b = 0;

int lled1 =A4;
int lled2 =A3;
int lled3 =12;
int pled1 =A2;
int pled2 =13;
int pled3 =8;

unsigned long time; // переменная времени работы
unsigned long stopMillis;
void setup()
{
  pinMode (PSH, OUTPUT); 
  pinMode (PM1, OUTPUT);
  pinMode (PM2, OUTPUT);
  pinMode (LSH, OUTPUT); 
  pinMode (LM1, OUTPUT);
  pinMode (LM2, OUTPUT);
  
  pinMode (3, OUTPUT); // мощность пылесоса
  pinMode (2, OUTPUT); // 2 цифровой пин отключений
  pinMode(lled1, INPUT); // 1 левый датчик
  pinMode(lled2, INPUT); // 2 левый датчик
  pinMode(lled3, INPUT); // 3 левый датчик
  pinMode(pled1, INPUT); // 3 правый датчик
  pinMode(pled2, INPUT); // 2 правый датчик
  pinMode(pled3, INPUT); // 1 правый датчик
  analogWrite(11,255); //включаем веник
  
   power = analogRead(A1); // регулятор мощности пылесоса
   analogWrite(3,10);
   delay(2500);
   power = map(power,0,1023,150,190);
   analogWrite(3,power);
   //Serial.begin(9600);
   time = analogRead(A0); // регулировка времени работы
   time = map(time,0,1023,300000,3600000); //время работы от 5мин до 1 час
   vpered();
  
}
void loop()
{ 
  if(digitalRead(lled1)==LOW || digitalRead(lled2)==LOW || digitalRead(lled3)==LOW)
    {
      stopm();
      delay(100);
      nazad();
      delay(100);
      stopm();
      delay(100);
      vpravo();
      delay(random(200,400));
      stopm();
      delay(100);
      vpered();
    }
   if(digitalRead(pled1)==LOW || digitalRead(pled2)==LOW || digitalRead(pled3)==LOW)
    {
      stopm();
      delay(100);
      nazad();
      delay(100);
      stopm();
      delay(100);
      vlevo();
      delay(random(200,400));
      stopm();
      delay(100);
      vpered();
    }
    
   if(millis() > time) {digitalWrite(2,1);} // отключение по времени
   if(analogRead(A5)<280 || analogRead(A5)>380) { x = 1;} //читаем удар по х
   if(analogRead(A6)<280 || analogRead(A6)>380) { y = 1;} // читаем удар по у 
   if(analogRead(A7)>545) { z = z++; a = a++; } // читаем датчик превышения тока
   //Serial.println (a);
   if(z>400||x!=0||y!=0) 
   
    {
      stopm();
      delay(100);
      nazad();
      delay(100);
      stopm();
      delay(100);
      b = random(1,10);
      if(b>5) {vlevo();}
      if(b<5) {vpravo();}
      delay(random(200,400));
      stopm();
      delay(100);
      vpered(); 
      z = 0;
      x = 0;
      y = 0;
    }
     // if (millis() - stopMillis >5000)  // если превышение тока более 3 секунд                                        
      //{                                 
       //if(a>210) {digitalWrite(2,1);}   // (робот застрял и не двигается) то отключаем робота
       //if(a<205) { a = 0;}
       //stopMillis = millis(); 
       //Serial.println (a);
      //}
}
 
  void vpered()
  {
    digitalWrite(PM1,1); // правый вперед
    digitalWrite(PM2,0); 
    digitalWrite(LM1,0); // левый вперед
    digitalWrite(LM2,1);
     for (int sp=50; sp <= 150; sp++)
     { analogWrite(PSH,sp); analogWrite(LSH,sp) ; delay(3);}
  }
  void nazad()
  {
    digitalWrite(PM1,0); // правый назад
    digitalWrite(PM2,1);
    digitalWrite(LM1,1); // левый назад
    digitalWrite(LM2,0);
     for (int sp=50; sp <= 150; sp++)
    { analogWrite(PSH,sp); analogWrite(LSH,sp) ; delay(3);}
  }
  void vlevo()
  {
    digitalWrite(PM1,1); // правый вперед
    digitalWrite(PM2,0);
    digitalWrite(LM1,1); // левый назад
    digitalWrite(LM2,0); 
     for (int sp=50; sp <= 150; sp++)
    { analogWrite(PSH,sp); analogWrite(LSH,sp) ; delay(3);}
  }
  void vpravo()
  {
    digitalWrite(LM1,0); // левый вперед
    digitalWrite(LM2,1);
    digitalWrite(PM1,0); // правый назад
    digitalWrite(PM2,1);
     for (int sp=50; sp <= 150; sp++)
     { analogWrite(PSH,sp); analogWrite(LSH,sp) ; delay(3);}
  }
  void stopm()
  {
    digitalWrite(LM1,1); // левый стоп
    digitalWrite(LM2,1);
    analogWrite(LSH,0);
    digitalWrite(PM1,1); // правый стоп
    digitalWrite(PM2,1);
    analogWrite(PSH,0);
  }
    

 

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

Отличный проект!

Igor_Simanov
Offline
Зарегистрирован: 25.10.2016

Превосходный проект! Хорошо выполненный! Может быть ультрозвуковой дальномер лучше определяет преграды чем ИК? Этот дальномер может служить прекрасным датчиком для робота, благодаря которому он сможет определять расстояния до объектов, объезжать препятствия, или строить карту помещения. Вот такой например: http://amperka.ru/product/hc-sr04-ultrasonic-sensor-distance-module  Вот думаю, может, переделать своего в такой же, еще и с управлением со смаотфона по Bluetooth. Осталось только корпус спроектировать для него :) : https://youtu.be/AIZ3olAV26g

Fedor CH
Offline
Зарегистрирован: 19.01.2017

А сколько вольт на выходе у DC-DC преобразователя ??? И моторчик для турбины питается через преобразователь?

nithrous
Offline
Зарегистрирован: 28.01.2017

nitrior пишет:

Илья73 пишет:

Что планируете в качестве мощной турбины?

Сейчас у меня такого типа, только самодельная.

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

типа такой

 

и мотор помощнее

 

 

Не подскажете, откуда черпали информацию по аэродинамике крыльчатки? Делаю свою пока что из картона =) Хочу рассчитать её параметры

sega2177
Offline
Зарегистрирован: 20.10.2014

nitrior, подключил блютуз-не работает((, к каким пинам подключается блютуз?

Fedor CH
Offline
Зарегистрирован: 19.01.2017

RX и TX

sturia
Offline
Зарегистрирован: 13.06.2019

Здравствуйте уважаемы nitrior. Если возможно выложите чертежи корпусу Вашего робота. Спасибо.