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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.11.2013, 23:26   #1
Alex98
Junior Member
 
Регистрация: 03.07.2013
Адрес: Санкт-Петербург
Возраст: 27
Сообщений: 14
Вес репутации: 0
Alex98 is an unknown quantity at this point
По умолчанию Робот-пылесос+Arduino

Увидев не так давно, что такое робот-пылесос, меня сразу же заинтересовала идея собрать это чудо инженерной мысли самому.
Я пришел к выводу, что правильнее будет не собирать само шасси самому, а купить уже готовое и напичкать его интересными штуками. Сперва была идея купить сломанный пылесос( просто шасси) на Ebay, но потом поискав в интернете нашел уцененный пылесос. Он обошелся мне всего в 2500 руб, он был с полной комплектацией но не работающей платой. Шасси оказалось очень проходимым и на нем достаточно место для установки электроники. Вдохновившись статьей на этом форуме, я решил построить всю электронику на Arduino.

После покупки, спайки и советов Админа робот наконец-то научился ездить от пульта. На данный момент, дополнительно было докуплено: солнечная батарея на 6 вольт, собрано но пока не до конца доделано ориентирование в пространстве.

Чтобы я хотел сделать в итоге? Мне бы хотелось сделать робота как можно более функциональным, чтобы он не просто сам ориентировался в пространстве, но и убирался. К сожалению мои знания в программировании ардуино не так велики. Само управление роботом осуществляется через пульт по ик-приемнику. Мне бы хотелось сделать дополнительные кнопки на пульте, которые отвечали бы за включение щеток, уф лампы и т.д, всего 4 кнопки. Я был бы очень признателен в вашей помощи моему проекту
Фото:
Миниатюры
Нажмите на изображение для увеличения
Название: IMG_0534.jpg
Просмотров: 999
Размер:	455.9 Кб
ID:	1307  
Alex98 вне форума   Ответить с цитированием
Старый 25.11.2013, 20:04   #2
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
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: Робот-пылесос+Arduino

Добавил сохранение 9 кнопок
И считываю 6 кнопок, на 1 кнопку больше чем в проекте моего робота
Я думаю что дальше все будет понятно как еще 3 кнопки добавить
Код:
#include <IRremote.h>  
#include <CyberLib.h>
#include <avr/wdt.h> 

#define robot_pins D4_Out; D5_Out; D6_Out; D7_Out
#define robot_go D4_Low; D5_High; D6_High; D7_Low
#define robot_back D4_High; D5_Low; D6_Low; D7_High
#define robot_left  D4_Low; D5_High; D6_Low; D7_Low
#define robot_right D4_Low; D5_Low; D6_High; D7_Low;
#define robot_stop D4_Low; D5_Low; D6_Low; D7_Low

IRrecv irrecv(8);  //вход для ик приемника
decode_results results;  
unsigned long ir_go, ir_back, ir_left, ir_right, ir_stop, ir_cool, ir_tmp;


void setup()  
{  
  robot_pins; //управление мотрами
  D11_Out;  D11_Low; //пищалка
  D15_In;  //вход для перемычки
  D15_High;  //включить подтяжку
  robot_stop;
  
  irrecv.enableIRIn(); // включить приемник 
  irrecv.blink13(true);  // включить мигание светодиода при приеме
  
  ProgPush() ; //программирование кнопок
  
  ir_go=ReadEEPROM_Long(0);//прочитать команду из EEPROM 
  ir_back=ReadEEPROM_Long(1);//прочитать команду из EEPROM
  ir_left=ReadEEPROM_Long(2);//прочитать команду из EEPROM
  ir_right=ReadEEPROM_Long(3);//прочитать команду из EEPROM
  ir_stop=ReadEEPROM_Long(4);//прочитать команду из EEPROM   
  ir_cool=ReadEEPROM_Long(5);//прочитать команду из EEPROM   

  randomSeed(A6_Read); //Получить случайное значение 
  for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); //звуковое оповещение готовности робота  

wdt_enable (WDTO_8S);    //Сторожевая собака 8сек.
}  
   
void loop() 
{   Start

   if (irrecv.decode(&results))   //если был сигнал с пульта
     { 
        ir_tmp=results.value;
        
      if(ir_go==ir_tmp) //если принятый код равен коду который в памяти то вперед
        {
          robot_go;
          beep(100,300);
        } else  
        
      if(ir_back==ir_tmp) //если принятый код равен коду который в памяти то назад
        {
          robot_back;
          beep(100,400);  
        } else
        
      if(ir_left==ir_tmp) //если принятый код равен коду который в памяти то назад
        {
          robot_right;
          beep(100,450);  
        } else   
        
      if(ir_right==ir_tmp) //если принятый код равен коду который в памяти то назад
        {
          robot_left;
          beep(100,500);  
        } else     

      if(ir_cool==ir_tmp) //если принятый код равен коду который в памяти то включить вентилятор
        {
         //код для включения 
          beep(100,500);  
        } else       
        
      if(ir_stop==ir_tmp) //если принятый код равен коду который в памяти то стоп
        {
         robot_stop; 
         beep(10,300);
         beep(10,400); 
         beep(10,300);
        } 
     irrecv.resume();            //очистить входящий буфер 
     
    } 
  
wdt_reset(); //покормить собаку, что бы она не сбежала    
End }
//////////////////////////////////////////////////////////////////////////////////////////////
void SavePush(uint8_t addr)  //сохранить нажатие кнопки
{
delay_ms(400);  //задержка для крректной работы
       for(uint32_t i=0; i<2000000; i++)//ждем нажатия кнопки пульта
       {
         if (irrecv.decode(&results))   //если был сигнал с пульта
          {                              // то сохраняем результат в EEPROM 
            WriteEEPROM_Long(addr, results.value);            
            break;                  //прервать цикл
          }
         wdt_reset();           //покормить собаку
        }
      delay_ms(100);  
       irrecv.resume();            //очистить входящий буфер
}
//////////////////////////////////////////////////////////////////////////////////////////////////
void ProgPush() 
{
if(D15_Read==0)//если кнопка нажата
   {
         beep(50,800); 
          beep(50,900);
         beep(50,1000);
          SavePush(0);  //сохранить первое кодовое значение пульта
         beep(80,800); 
          SavePush(1);  //сохранить второе кодовое значение пульта
         beep(80,900);  
          SavePush(2);  //сохранить третье кодовое значение пульта
         beep(80,850);  
          SavePush(3); //сохранить четвертое кодовое значение пульта
          beep(80,950);  
          SavePush(4);  //сохранить пятое кодовое значение пульта       
         beep(50,1000); 
          beep(50,900);
          SavePush(5);  //сохранить  кодовое значение пульта       
         beep(50,1000); 
          beep(50,900);
          SavePush(6);  //сохранить  кодовое значение пульта       
         beep(50,1000); 
          beep(50,900);
          SavePush(7);  //сохранить  кодовое значение пульта       
         beep(50,1000); 
          beep(50,900);
          SavePush(8);  //сохранить  кодовое значение пульта       
         beep(50,1000); 
          beep(50,900);
         beep(50,800);   
   } 
}
Admin вне форума   Ответить с цитированием
Старый 25.11.2013, 22:49   #3
Alex98
Junior Member
 
Регистрация: 03.07.2013
Адрес: Санкт-Петербург
Возраст: 27
Сообщений: 14
Вес репутации: 0
Alex98 is an unknown quantity at this point
По умолчанию Re: Робот-пылесос+Arduino

Большое спасибо, буду пробовать.
Alex98 вне форума   Ответить с цитированием
Старый 26.11.2013, 07:39   #4
filinmd
Senior Member
 
Регистрация: 18.09.2012
Адрес: Moscow
Сообщений: 157
Вес репутации: 0
filinmd is an unknown quantity at this point
Отправить сообщение для filinmd с помощью ICQ
По умолчанию Re: Робот-пылесос+Arduino

Цитата:
Сообщение от Admin Посмотреть сообщение
Код:
      if(ir_right==ir_cool) //если принятый код равен коду который в памяти то включить вентилятор
        {
         //код для включения 
          beep(100,500);  
        } else
В этом месте наверное опечатка? или я что то не так понял?
filinmd вне форума   Ответить с цитированием
Старый 26.11.2013, 11:19   #5
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
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: Робот-пылесос+Arduino

Так и есть, ошибка.
Спасибо!
Подправил
Admin вне форума   Ответить с цитированием
Старый 29.12.2013, 23:48   #6
Alex98
Junior Member
 
Регистрация: 03.07.2013
Адрес: Санкт-Петербург
Возраст: 27
Сообщений: 14
Вес репутации: 0
Alex98 is an unknown quantity at this point
По умолчанию Re: Робот-пылесос+Arduino

Не подскажете, какие выбрать выходы от ардуино, чтобы получился включатель?
Alex98 вне форума   Ответить с цитированием
Старый 30.12.2013, 00:21   #7
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
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: Робот-пылесос+Arduino

Любые
Admin вне форума   Ответить с цитированием
Старый 30.12.2013, 00:43   #8
Alex98
Junior Member
 
Регистрация: 03.07.2013
Адрес: Санкт-Петербург
Возраст: 27
Сообщений: 14
Вес репутации: 0
Alex98 is an unknown quantity at this point
По умолчанию Re: Робот-пылесос+Arduino

Я имел ввиду, что не совсем понял, если вывести от ардуино 2 провода, то они будут как выключатель? И при нажатии на пульте будет замыкаться цепь?
Alex98 вне форума   Ответить с цитированием
Старый 30.12.2013, 01:06   #9
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
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: Робот-пылесос+Arduino

Смотря чем управлять
Admin вне форума   Ответить с цитированием
Старый 30.12.2013, 02:23   #10
Alex98
Junior Member
 
Регистрация: 03.07.2013
Адрес: Санкт-Петербург
Возраст: 27
Сообщений: 14
Вес репутации: 0
Alex98 is an unknown quantity at this point
По умолчанию Re: Робот-пылесос+Arduino

Ничем управлять не надо, а просто по типу включателя(нажал на пульте замкнулась цепь, нажал еще раз разомкнулась).
Alex98 вне форума   Ответить с цитированием
Ответ


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

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

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

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


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


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