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