![]() |
|
|
#1 |
|
Junior Member
Регистрация: 03.07.2013
Адрес: Санкт-Петербург
Возраст: 29
Сообщений: 14
Вес репутации: 0 ![]() |
Увидев не так давно, что такое робот-пылесос, меня сразу же заинтересовала идея собрать это чудо инженерной мысли самому.
Я пришел к выводу, что правильнее будет не собирать само шасси самому, а купить уже готовое и напичкать его интересными штуками. Сперва была идея купить сломанный пылесос( просто шасси) на Ebay, но потом поискав в интернете нашел уцененный пылесос. Он обошелся мне всего в 2500 руб, он был с полной комплектацией но не работающей платой. Шасси оказалось очень проходимым и на нем достаточно место для установки электроники. Вдохновившись статьей на этом форуме, я решил построить всю электронику на Arduino. После покупки, спайки и советов Админа робот наконец-то научился ездить от пульта. На данный момент, дополнительно было докуплено: солнечная батарея на 6 вольт, собрано но пока не до конца доделано ориентирование в пространстве. Чтобы я хотел сделать в итоге? Мне бы хотелось сделать робота как можно более функциональным, чтобы он не просто сам ориентировался в пространстве, но и убирался. К сожалению мои знания в программировании ардуино не так велики. Само управление роботом осуществляется через пульт по ик-приемнику. Мне бы хотелось сделать дополнительные кнопки на пульте, которые отвечали бы за включение щеток, уф лампы и т.д, всего 4 кнопки. Я был бы очень признателен в вашей помощи моему проекту ![]() Фото: |
|
|
|
|
|
#2 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Добавил сохранение 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);
}
}
|
|
|
|
|
|
#3 |
|
Junior Member
Регистрация: 03.07.2013
Адрес: Санкт-Петербург
Возраст: 29
Сообщений: 14
Вес репутации: 0 ![]() |
Большое спасибо, буду пробовать.
|
|
|
|
|
|
#4 |
|
Senior Member
|
|
|
|
|
|
|
#5 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Так и есть, ошибка.
Спасибо! Подправил |
|
|
|
|
|
#6 |
|
Junior Member
Регистрация: 03.07.2013
Адрес: Санкт-Петербург
Возраст: 29
Сообщений: 14
Вес репутации: 0 ![]() |
Не подскажете, какие выбрать выходы от ардуино, чтобы получился включатель?
|
|
|
|
|
|
#7 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Любые
|
|
|
|
|
|
#8 |
|
Junior Member
Регистрация: 03.07.2013
Адрес: Санкт-Петербург
Возраст: 29
Сообщений: 14
Вес репутации: 0 ![]() |
Я имел ввиду, что не совсем понял, если вывести от ардуино 2 провода, то они будут как выключатель? И при нажатии на пульте будет замыкаться цепь?
|
|
|
|
|
|
#9 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Смотря чем управлять
|
|
|
|
|
|
#10 |
|
Junior Member
Регистрация: 03.07.2013
Адрес: Санкт-Петербург
Возраст: 29
Сообщений: 14
Вес репутации: 0 ![]() |
Ничем управлять не надо, а просто по типу включателя(нажал на пульте замкнулась цепь, нажал еще раз разомкнулась).
|
|
|
|
![]() |
| Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|