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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.04.2013, 20:06   #1
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
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
По умолчанию Робот управляемый любым ИК(IR) пультом ДУ

ИК приемник подключен к D8
Драйвер левого мотора подключен к D4 и D5
Драйвер правого мотора подключен к D6 и D7
Нажмите на изображение для увеличения
Название: Robot_IR.PNG
Просмотров: 17375
Размер:	42.2 Кб
ID:	948
Для входа в режим программирования пульта ДУ,
нужно установить перемычку на пин (A1) и GND Arduino и нажать кнопку сброса,
после сброса прозвучит сигнал готовности.
Вы заранее должны выбрать на пульте удобные для управления роботом кнопки. Теперь после сигнала готовности,
последовательно нажимайте выбранные Вами кнопки

Порядок назначения кнопок будет такой:
1-вперед
2-назад
3-влево
4-вправо
5-стоп

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

Код:
#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_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   

  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_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);
         beep(50,800);   
   } 
}
Библиотеки IRemote и CyberLib

Вложения
Тип файла: rar libraries.rar (22.7 Кб, 1938 просмотров)
Admin вне форума   Ответить с цитированием
Старый 10.04.2013, 20:21   #2
4dnik
Junior Member
 
Регистрация: 29.01.2013
Сообщений: 3
Вес репутации: 0
4dnik is an unknown quantity at this point
По умолчанию

А есть схема подключения ИК приемника к плате?

Голодная же у вас собака )))

Еще бы электролит и резистор на питание TSOP непомишал бы

Последний раз редактировалось 4dnik; 10.04.2013 в 21:28.
4dnik вне форума   Ответить с цитированием
Старый 11.04.2013, 10:46   #3
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
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
По умолчанию

Цитата:
Сообщение от 4dnik Посмотреть сообщение
Еще бы электролит и резистор на питание TSOP непомишал бы
У меня без резистора и без конденсатора, работает стабильно без нареканий

Цитата:
А есть схема подключения ИК приемника к плате?
Схему выложил

Цитата:
Голодная же у вас собака )))
Собаку обязательно кормите, а то сбежит
Admin вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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


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


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