Форум по Роботика

Проекти за роботи => Робо-сумо => Темата е започната от: durankulakat в Май 05, 2009, 12:10:49 pm

Титла: Моят сумо робот
Публикувано от: durankulakat в Май 05, 2009, 12:10:49 pm
От миналата седмица започнах работа по този проект и вече е почти готов :clap:
Остават само ралото, капакът и сензорите за следене на линия.
Вчера го тествах само с IR сензорите и изникна проблем...
Ето я схемата:
(http://upload.robotics-bg.com/files/schematic.jpg) (http://upload.robotics-bg.com/files/schematic.jpg)
И кодът:#include <avr/io.h>
#include <avr/delay.h>
#define F_CPU 4000000UL // 4 MHz clock rate

int main(void)
{      
    DDRD=0xff;
    DDRC=0x00;
    DDRB =1<<PB2;  
    TCCR1A=(1<<COM1B1)|(1<<WGM11)|(1<<WGM10);
    TCNT1=0;
    OCR1A=105;   //tuning to 38kHz
    OCR1B=53; //50% duty cycle
    TCCR1B=(1<<WGM12)|(1<<WGM13)|(1<<CS10);
   
    PORTD|=_BV(PD0);
    PORTD|=_BV(PD3);
   
    while(1)
    {
       
       if(!(PINC&(1<<PC3)))
       {
       
          PORTD&=~_BV(PD0);
          PORTD&=~_BV(PD3);
          PORTD|=_BV(PD1);
          PORTD|=_BV(PD2);
          _delay_ms(500);
          PORTD&=~_BV(PD1);
          PORTD&=~_BV(PD2);
          PORTD|=_BV(PD0);
          _delay_ms(500);
          PORTD|=_BV(PD3);
         
       }
         
       if(!(PINC&(1<<PC2)))
       {
       
          PORTD&=~_BV(PD0);
          PORTD&=~_BV(PD3);
          PORTD|=_BV(PD1);
          PORTD|=_BV(PD2);
          _delay_ms(500);
          PORTD&=~_BV(PD1);
          PORTD&=~_BV(PD2);
          PORTD|=_BV(PD3);
          _delay_ms(500);
          PORTD|=_BV(PD0);
         
       }              
       
       while(PINC&(1<<PC2),PINC&(1<<PC3),!(PINC&(1<<PC2)),PINC&(1<<PC5))
       {
       
          PORTD&=~_BV(PD0);
         
       }
       
       PORTD|=_BV(PD0);
       
       while(PINC&(1<<PC2),PINC&(1<<PC3),PINC&(1<<PC4),!(PINC&(1<<PC5)))
       {
       
          PORTD&=~_BV(PD3);
         
       }
       
          PORTD|=_BV(PD3);
         
       while(PINC&(1<<PC2),PINC&(1<<PC3),PINC&(1<<PC4),PINC&(1<<PC5))
       {
       
          PORTD|=_BV(PD3);
          PORTD|=_BV(PD0);
       
       }
       
    }    

}

А проблемът е, че когато пусна контролера подава сигнал само на дясното серво и то назад  :shock:
Изобщо не реагира на сензорите и само се върти в кръг
Имам съмнения относно кода, но немога да намеря грешка
Някой може ли да ми помогне?
Титла: Моят сумо робот
Публикувано от: yasko в Май 05, 2009, 04:24:32 pm
Добре. Нека да го подкараме този сумбот :)
Първо имам няколко забележки по схемата:
1. Не виждам никъде филтрови кондезатори - сложи поне един 100nF и 10uF. Не е лошо да има и един по-голям филтров кондезатор (47-100uF) при L293D.
2. Вързал си Q1(биполярен транзистор) директно към изхода на микроконтролера (пин 11). Рискуваш да изгориш порта на контролера или транзистора. Трябва да има токоограничаващ резистор (примерно 1к).
Моля те поправи ги тези неща защо иначе объркваш другите участници във форума.
Относно софтуера - ако обясниш какъв алгоритъм искаш да постигнеш, ще може да измислим как да стане. За момента кода ми е малко неясен. Като начало функцията _delay_ms(500), няма да може да ти генерира толкова дълго закъснение, писал съм защо. Второ не виждам нищо свързано на PC2, PC3 според горната схема. И трето израза:
while(PINC&(1<<PC2),PINC&(1<<PC3),!(PINC&(1<<PC2)),PINC&(1<<PC5))
няма особен смисъл и компилатора предупреждава за това. Ако искаш да провериш всичките тези условия трябва да използваш логически операции помежду им. Но като начало мисля че ще е много полезно да направиш логическа схема на алгоритъма и след това да се облече с код.
Титла: Моят сумо робот
Публикувано от: durankulakat в Май 05, 2009, 06:36:08 pm
1. Така, филтрови кондензатори всъщност съм сложил (100нано и 10микро) но ги няма на схемата :oops: . Ще те послушам и ще добавя един за драйвера  :)
2. И за транзистора ще те послушам :)
3. Алгоритъма (незнам как да направя логическа схема, засега само ще го обясня) -
Старт

моторите напред

ако десният сензор за линия се запуши (робота е на ръба), тогава:
моторите спират, включват се назад за определено време, спират, само десния се включва напред за определено време, и левия се включва.

ако левият сензор за линия се запуши, тогава:
моторите спират, включват се назад за определено време, спират, само левия се включва напред за определено време, и десния се включва.

ако десният IR сензор подава сигнал, левия и десния сензор за линия подават сигнал (робота не е на ръба), тогава:
десния мотор спира, докато не се получи сигнал и от двата IR сензора, тогава се пуска отново.

ако левият IR сензор подава сигнал, левия и десния сензор за линия подават сигнал (робота не е на ръба), тогава:
левият мотор спира, докато не се получи сигнал и от двата IR сензора, тогава се пуска отново.

край.

Това е алгоритъма който искам да постигна :)
За кодът предполагам че ще помогнат тези:
C5 - IR дясно
C4 - IR ляво
C3 - линия дясно
C2 - линия ляво

D0 - десен мотор напред
D1 - десен мотор назад
D2 - ляв мотор назад
D3 - ляв мотор напред

Към C2 и C3 не съм вързал нищо защото още не съм монтирал датчиците за линия. И тъй като висящите крачета на контролера са в високо ниво, няма да се изпълни кода за линията.
За израза който си цитирал - щом не се образува така е много вероятно заради него да не работи :?

Поздрави!
Титла: Моят сумо робот
Публикувано от: yasko в Май 08, 2009, 12:11:04 am
Първо ще е добре да качиш, новата и поправена схема, където има всички компоненти. Относно програми за правене на блок-схеми и дргуги подобни -попаднах на тази:
http://live.gnome.org/Dia - тя е open source и има добри възможности
Сега да минем към софтуера - твърдението че когато даден порт е конфигуриран като вход, ще се чете като високо ниво не е съвсем коректно.
Ако вземе Порт C и имаме:
DDRC=0x00; PORTC=0x00;
тогова I/O порта е конфигуриран като високо импедансен вход и ако бъде оставен висящ, състоянието на отделните пинове няма да ясно, най-верояно поради наличието на външни смущения ще се преключват от 0-1 и обратно. Обаче ако конфигурираме порта така:
DDRC=0x00; PORTC=0xFF; ,
тогава включваме вградените pull-up резистори (50-100к) и входовете ше бъдат във високо ниво, дори ако са оставени висящи.
Сега нека да видим как изглежда на C следната проверка от няколко условия:
Цитат
ако десният IR сензор подава сигнал, левия и десния сензор за линия подават сигнал (робота не е на ръба), тогава:

Доколкото сxващам под подава сигнал се разбира нулево ниво така че нещата изглеждат така:

if  (!PINC&(1<<PC5)&&(PINC&(1<<PC2))&&(PINC&(1<<PC3))&&(PINC&(1<<PC4))) {}

С други думи условието ще бъде валидно, когато PC5=0, a PC2,PC3,PC4=1. Така написано това условие изглежда малко тромаво, но утре ще измислим нещо по елегантно.
Титла: Моят сумо робот
Публикувано от: durankulakat в Май 09, 2009, 12:11:58 am
Ето я пълната схема на робота  :)
(http://upload.robotics-bg.com/files/schematic1.JPG) (http://upload.robotics-bg.com/files/schematic1.JPG)
Титла: Моят сумо робот
Публикувано от: Borislav в Май 09, 2009, 09:45:19 pm
Браво за проекта!
Само че ще си позволя малка забележка към схемата ти... Най-добре пусни захранването към цялата схема през стабилизатор (L7805), за да избегнеш проблема, с който аз се бях сблъскал - падът на напрежение. Другият вариант е да подадеш по-високо захранващо напрежение на 8-мото краче на драйвера L293 - нещо от порядъка на 9V.
Поздрави и все така! :)
Титла: Моят сумо робот
Публикувано от: durankulakat в Май 09, 2009, 10:18:51 pm
Мерси!
А как по-точно с стабилизатора се избягва падът на напрежение?
Титла: Моят сумо робот
Публикувано от: Borislav в Май 10, 2009, 11:14:10 am
Цитат на: "durankulakat"
Мерси!
А как по-точно с стабилизатора се избягва падът на напрежение?


Да, това е добра забележка, защото съм забравил схемата. :D
Ето един от възможните варианти, над които да помислиш:
(http://upload.robotics-bg.com/files/stabilizator.JPG)

Единственото изяснение по схемата е това, че Vin е желателно да бъде в границите 7,4 - 12 V.
Поздрави!
Титла: Моят сумо робот
Публикувано от: zoro1 в Май 10, 2009, 12:34:18 pm
Горе долу се спазва следното :входния  капацитет да е 10 пъти по-голям от изходния .Случвало ми се е без кондензатори интегралата да дава изходно напрежение 7,6 Волта.След поставянето на 100 нано фарада на фхода и изхода ,нещата се нормализираха.
Титла: Моят сумо робот
Публикувано от: Аматьор в Май 10, 2009, 03:09:09 pm
Относно линейните стабилизаторо 78ХХ.
  Електролитен кондензатор на входа е необходим, когото той се намира на по-голямо разстояние от изправителя.  Служи да поеме импулсният ток от консуматора.  В случая с батерийно захранване този кондензатор пак може да помогне, защото вътрешното съпротивление на последоватено свързаните батерии се получава с относително голяма стойност.  
На изхода на стабилизатора кондензатор с типична стойност 100 nF на практика е задължителен.  Той трябва да се запои в непосредствена близост до изводите на стабилизатора и служи за предпазване от саможъзбуждане.  Ако се получи самовъзбуждане с постояннотоков волтметър обикновено се измерва по-голямо напрежение от 5V, но с осцилоскоп се наблюдават генерации .  Вероятно заради пробива на цифровите схеми (за ТТЛ е някъде към 7.5V), амплитудата има такава стойност.
Допустимото входно напрежение  може да бъде различно и трябва да се проверят справочните данни на конкретния производите.  За корпуси ТО220 обикновено то е 37V, a за Т092 (78L05) - 20V.

  Имам идея за намаляване на консумирания ток на показаната схема - светодиодите D1 и D2 да се вържат последователно. Вариантите са два.
  Ако се изпозва стабилизираното напрежение (5V) може да не се поставя токоограничаващ резистор.  На пръв поглед схемата ще изглежда грешна, но всъщност не е.  Причината е, че както отпушения транзистор, така и светодиодите имат някакво съпротивление, което обикновено е няколко десетки ома.   Така, ако сумарният пад на напрежение върху транзистора и диодите е 4.2V, а сумарното им съпротивление е 80 ома, ще преминава ток 10 мА.  Разбира се това са само предположения и трябва да се направят конкретни измервания.  Недостатък на този вариант е, че параметрите не са гарантирани, а освен това са температурно зависими.  Все пак решението е допустимо.
 Другият  вариант е да се използва нестабилизираното напрежение и да се използва подходящ по големина токоограничаващ резистор.  Така няма да се товари стабилизатора.  Поради същата причина е желателно двигателят също да се захранва непосредствено от батериите.  Възможно е при комутациите на двигателя да възникват смущения по захранване и процесорът да се прецаква.  И аз съм съгласен , че в непосредствена  близост до L293, както и до Д1 и Д2 трябва да има електролитни кондензатори с прилични капацитети.
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 02, 2011, 06:00:13 pm
Привет съфорумници!  :D
Ето че пак се връщам към този проект и този път смятам да го завърша.
Има подобрения по системата:
- ползвам Atmega88
- кодът е писан в MikroC (много по-лесно е)
- алгоритъмът е по-добър (така мисля...)
- електронната схема е усъвършенствана
- шасито на робота е от 30-годишен метален конструктор (голяма надеждност)

Нека да започна с електронната схема:

(http://i56.tinypic.com/2poz52u.jpg)

Пояснение за пиновете на Atmega88:
C5 - Вход ляв IR приемник
C4 - Вход десен IR приемник
C3 - Вход десен сензор за линия
C2 - Вход ляв сензор за линия
D0 - Изход ляв мотор напред
D1 - Изход ляв мотор назад
D2 - Изход десен мотор напред
D3 - Изход десен мотор назад
D5 - Изход 38KHz за IR светодиодите

Сложил съм два регулатора, като този за микроконтролера е в корпус TO92, а другия TO220.

Сензорите за линия са свързани към главната платка по следния начин:

(http://i53.tinypic.com/sorgr7.jpg)

Крачетата на конектора съответстват: квадратно (1-во) към квадратно.

Захранването ще е от две 9-волтови батерии свързани паралелно.

Ето го и кодът:
void str() // Function for turning both motors forward
{
 PORTD=0b00000101;
}
void left() // Function for turning the left motor back and the right one forward
{
 PORTD=0b00000110;
}
void right() // Function for turning the left motor forward and the right one back
{
 PORTD=0b00001001;
}
void back() // Function for turning both motors backward
{
 PORTD=0b00001010;
}
void clear() // Function for making all PORT C pins go low (actually I dont use it...)
{
 PORTD=0x00;
}
void main() // Main function
{
 DDRC=0x00; // Defining all PORT C pins as Inputs
 DDRD=0xFF; // Defining all PORT D pins as Outputs
 PORTC=0b0111100; // Activating Pull-up resistors on pins C2, C3, C4 and C5
 TCCR0A=(1<<COM0B1)|(1<<WGM01)|(1<<WGM00); // Timer 0 settings
 TCNT0=0; // Enabling Timer 0 (I think...)
 OCR0A=210;   //Tuning to 38kHz
 OCR0B=105; //50% duty
 TCCR0B=(1<<WGM02)|(1<<CS00); // More Timer 0 settings
 
 delay_ms(5000); // Initial 5sec delay
 str(); // Go straight!
 while(1) // Primary endless cycle
 {
  while(PINC3_bit&&PINC2_bit) // While the robot is not on the line
  {
   if(PINC5_bit&&PINC4_bit) str(); // If both IR are inactive go straight
   else if(PINC5_bit&&(!PINC4_bit)) right(); // If the left IR is inactive and the right one is active, go right
   else if((!PINC5_bit)&&PINC4_bit) left(); // If the left IR is active and the right one is inactive, go left
   else str(); // If all fails...just go straight :D
  }
   if(!PINC3_bit) // If right line sensor is active
   {
    while(!PINC3_bit) // Go back while its active
    {
     back();
    }
    PORTD=0b00000010; // Turn only left motor back
    delay_ms(300);   // for 300ms
   }
   else // Else if the left line sensor is active
   {
    while(!PINC2_bit) // Go back while its active
    {
     back();
    }
    PORTD=0b00001000; // Turn only left motor back
    delay_ms(300);   // for 300ms
   }
 }
}


Коментарите съм писал на английски защото на кирилица не излизат.

Най-вероятно тази вечер ще наредя елементите на бредборда и ще тествам.

Очаквайте резултати!  :D

П.П. Ако някой се затруднява с четенето на коментарите, да каже, ще ги напиша в notepad на български.
Титла: Моят сумо робот
Публикувано от: sv_shady в Февруари 02, 2011, 06:04:34 pm
Може да махнеш регулатора на L293D, дори ще е хубаво :)
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 02, 2011, 06:05:53 pm
Ползвам сервомашинки и като подам директно 9 волта няма ли да изгорят?
Титла: Моят сумо робот
Публикувано от: sv_shady в Февруари 02, 2011, 10:22:24 pm
Ами 9 волта и около 2волта върху L293 остават около 7в за сервомашинките. Виж им харектеристиките - може да са до 6в или до 7,2в.
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 03, 2011, 11:56:26 am
Значи 7в са идеални за сервотата.
Скоро ще кача поправената схема.
Имам проблем:
Ползвам PonyProg за записване в микроконтролера и програматор тип 5 проводника. От настройките давам Probe и изписва тест окей. Избрал съм AVR Auto за модела микроконтролер, всичко засега е наред. Като му кажа да прочете паметта, изписва че не разпознава устройството или няма такова  :?:
Проверих всички връзки по схемата, няма пропуски.
Как мога да проверя дали микроконтролера е наред? Може да му е изгоряла някоя част...
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 03, 2011, 02:52:32 pm
Здравейте отново!
След няколко часа опити да програмирам микроконтролера се оказа че на другия ми компютър става а на този не...сигурно му има нещо на лпт порта.
Така, записах програмата но сега има друг проблем:
При подаване на сигнал към L293D за задвижване и на двете сервота се случва нещо странно...трепват много за малко, после спират за 3секунди и пак.
Когато откача едното серво, другото тръгва нормално. Като го свържа пак, и то тръгва (двете работят). От това излиза че двете сервота едновременно не могат да тръгнат, но защо?
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 03, 2011, 03:11:23 pm
Имам много добри новини  :D
Алгоритъмът работи  :clap: тествах го като към крачетата за сигналите към драйвера свързах светодиоди  :)
Сега остава да се оправи задвижването на моторите и да се сглобява робота  :-D

Ето кодът преработен за WinAVR с коментари на български
#include <avr/io.h>
#include <avr/delay.h>
#define F_CPU 8000000UL  // 8 MHz

int main(void) // Главна функция
{
DDRC=0x00; // Конфигуриране на всички пинове на порт С като входове
DDRD=0xFF; // Конфигуриране на всички пинове на порт С като изходи
PORTC=0xFF; // Активиране на pull-up резисторите на порт С
TCCR0A=(1<<COM0B1)|(1<<WGM01)|(1<<WGM00); // настройки на таймер 0
TCNT0=0; //
OCR0A=210;   //Настройване на 38 килохерца
OCR0B=105; // 50% коефициент на запълване
TCCR0B=(1<<WGM02)|(1<<CS00); // още настройки на таймер 0

_delay_ms(5000); // Начално забавяне 5 секунди

PORTD=0x5; // И двата мотора напред

while(1) // Основен безкраен цикъл
{
while((PINC&(1<<PC3))&&(PINC&(1<<PC2))) // Докато роботът не е на линията
{
if((PINC&(1<<PC5))&&(PINC&(1<<PC4))) PORTD=0x5; // Ако и двата инфрачервени сензора са неактивни, давай напред
else if((PINC&(1<<PC5))&&(!(PINC&(1<<PC4)))) PORTD=0x9; // Ако левият инфрачервен сензор е неактивен, а десният активен - завивай надясно
else if((!(PINC&(1<<PC5)))&&(PINC&(1<<PC4))) PORTD=0x6; // Ако левият инфрачервен сензор е активен, а десният неактивен - завивай наляво
else PORTD=0x5; // Ако и двата са активни - напред
}

if(!(PINC&(1<<PC3))) // Ако десният сензор за линия е активен
{
while(!(PINC&(1<<PC3))) // Давай назад докато е активен
{
PORTD=0xA;
}
PORTD=0x2;          // Завърти само левият мотор назад
_delay_ms(1500);   // за 1500ms
}

else // Ако левият сензор за линия е активен
{
while(!(PINC&(1<<PC2))) // Давай назад докато е активен
{
PORTD=0xA;
}
PORTD=0x8;          // Завърти само десният мотор назад
_delay_ms(1500);   // за 1500ms
}
}
}


Има две промени: времето за завъртане след дръпването от линията съм увеличил на 1,5 секунди, защото 300мс е твърде малко, а сервотата са бавни.
Тук няма отделни функции за движението, защото май само се усложнява кода.
Титла: Моят сумо робот
Публикувано от: sv_shady в Февруари 03, 2011, 07:36:19 pm
Ами най-вероятно тока не стига за двете сервота на куп. Каква батерия ползваш? Другия вариант е да внасят прекалено много смущения и да рестартират контролера. Сложи на всяко серво по успоредно, близко до сервото, по 100 микрофарада и кажи какви са резултатите.
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 03, 2011, 08:58:24 pm
Ползвам 9 волта от адаптор 1А, проблемът се оправи като вместо да подавам и към двата пина Enable по 9v (захранващо напрежение), подадох 5 волта от стабилизираното за микроконтролера. Може би 9 му е идвало в повече...

Имам един друг въпрос:
В кода, когато отначало включвам pull-up резисторите, през цялото време ли ще са включени? Ако външно се промени нивото (примерно стане 0), после крачето като се остави висящо все още ли ще има пул-уп резистори?
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 04, 2011, 03:29:03 pm
Ъпдейт  :)
Изглежда че съм изгорил двата таймера на Atmega88, и този с  PWM на Atmega8....причините: всеки опит го правих със свързване директно на NPN транзистор без резистор ( :? напълно забравих за това), та вече не излиза никаква честота...
Имам Attiny2313, който смятам че ще свърши работа, даже ще заема по-малко място. Проектът продължава с него. Ето я обновената схема:

(http://i55.tinypic.com/35iqhas.jpg)

Скоро ще пиша какви са резултатите  :)
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 04, 2011, 07:20:57 pm
Резултатите не са обнадеждаващи  :(
Имам 3 нови Attiny2313, и трите пробвах да прочета, всеки път изписва че няма устройство или не го разпознава...
Всичко по кабела е добре, с другите микроконтролери става, но точно с тези не!?
Някой срещал ли е такъв проблем?
Титла: Моят сумо робот
Публикувано от: zoro1 в Февруари 05, 2011, 04:31:47 pm
С каквъв програматор си?Да си объркал крачета?
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 05, 2011, 04:52:22 pm
Пробвах с два програматора:
-5 кабела
- Комбиниран програматор за микроконтролери и памети (от Млад Конструктор)
И при двата ми казва че не разпознава устройството
Пробвах с ponyprog, sinaprog, icprog - едно и също
Сигурно вече 50 пъти проверявам връзките - всичко е наред, но не иска да се програмира  :(
Титла: Моят сумо робот
Публикувано от: kotaraka в Февруари 05, 2011, 08:58:58 pm
Може 100 пъти да пробваш да записваш но няма да стане при положение че не намира контролера.
Прегледах набързо горната схема и ми се струва че свързването е правелно.
Ако си сигурен във връзката със програматора провери настройката на софтуера с който програмираш.
Дано да стане.
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 06, 2011, 09:00:40 pm
Проверих настройките - всичко е наред...
Пробвах и с BASCOM AVR, нищо не стана.
Утре ще взема един атмега88 и ще се реши проблема
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 07, 2011, 01:47:54 pm
Здравейте!
Имам няколко въпроса към хората които са се ползвали инфрачервени сензори на робот:
Ако това е основния дизайн на робота:

(http://i56.tinypic.com/20tf514.jpg)

Къде е по добре да са светодиодите - отвътре или отвън?
На една линия ли трябва да са или едното да е по-напред?
Какъв е най-добрият ъгъл спрямо червената линия - 90, 60, 45?
Добре ли е да светят силно светодиодите?
Да ги облепям ли с нещо непрозрачно отстрани за да не светят в приемника?

Сега отивам до няколко магазина за електроника и тази вечер ще се занимавам с робота :D
Титла: Моят сумо робот
Публикувано от: zoro1 в Февруари 07, 2011, 02:25:05 pm
Това зависи от светодиодите който ползваш ,както и от приемниците.Трябва да експериментираш до постигане на задоволителен резултат.
Титла: Моят сумо робот
Публикувано от: mivr в Февруари 07, 2011, 07:55:24 pm
Малко не разбрах за кои сензори говириш за тези за линия или за разстояние?


Но все пак ще отговоря и на двата варианта:)
1.Ако говорим за сензори за линия е най-добре да си вземеш готови от роботев понеже всякакви други сензори не са много надежни за състезание и отнемат много повече време за подкарване(а както знаем времето е пари:))(не си струва да си спестиш 50ст. и да работиш 3 часа повече:))
2.Ако става на въпрос за сензори за разстояние е най-добре изобщо да не правиш сензори за разстояние от личен опит голяма гад са за подкарване и най-често се заглушават честотите на светодиодите и сензорите изобщо не работят на състезанието(така се случи с мен на последното състезание)
Затова ако искаш надежни сензори за разстояние просто си купи едни сензори SHARP от роботев работят перфектно и са много по-трудни за заглушаване (почти невъзможно)


Надявам се съветите ми да са ти от полза!:-D
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 07, 2011, 09:47:59 pm
По миналия ми пост: говоря за сензорите за разстояние.
Благодаря за съветите  :)  Все пак ще пробвам с това което имам, а ако не стане ще взема тези от роботев.

Вече имам работещ микроконтролер  :clap:
Успях да запоя TQFP корпуса на атмега8 (много дълго и мъчително беше  :roll: ) и утре вече започва работата по платката на робота    :-D
Очаквайте добри новини!
Титла: Моят сумо робот
Публикувано от: sv_shady в Февруари 07, 2011, 10:03:37 pm
Щом говориш за сензорите за разстояние, ето ти няколко съвета от личен опит.
Хубаво е за всеки сензор да имаш 2 излъчвателя и един приемник, разположен между тях. Така независимо от ъгъла на опонента ще можеш да го засечеш. Най - добрия вариант е да ползваш TSOP-и защото те държат ниско ниво докато попада инфрачервена светлина върху тях, което улеснява четенето има. Ако ползваш RPR-и тогава трябва да ги следиш с прекъсване на контролера. Също така ще е хубаво да сложиш по един тример/потенциометър, който да регулира тока през светодиодите, така че да можеш да регулираш разстоянието, на което "виждат" сензорите. Хубаво е също така да сложиш например черен термосвиваем шлаух върху диодите, така ще ограничиш ъгъла на разпространение на светлината. Също така, тъй като управляваш честотно диодите можеш да си позволиш им пускаш дори 1А, но за много кратко. Това изключително много увеличава чуствителността на сенозора, както и обхвата. И разбира се най-важното е да си настроиш точно честота, с която модулираш светлината.

Без лоши чуства към Мишо, но зависи как си направиш сенозрите. На последното състезание победих със сензори, които аз съм си правил.

Така, че просто трябва търпение и мислене. :)
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 08, 2011, 12:34:40 pm
По 2 излъчвателя ще сложа, таман взех 4 светодиода. Ще ползвам TSOP2438. Не разбрах това за 1А - когато се подава този ток с честота 38кхц безопасно ли е? Или може само за кратко да се пускат светодиодите? За честотата ползвам микроконтролера, доколкото може да е точен.
Титла: Моят сумо робот
Публикувано от: sv_shady в Февруари 08, 2011, 03:17:23 pm
Ами контролер и е достатъчно точен, стига да му зададеш подходящите стойности в регистрите.
Когато управляваш диодиоте с 38кHz направи така, че в един период на вълната приблизително 26 микро секунди, диода е включен например 10% от времето - 2.6 микро секунди и тока, който преминава е 1А. След това останалите 90% от времето на периода нивото да е ниско, тоест диода да не свети и да изстива. Това се нирача широчинно импулсна модулация. Най-вероятно е възможно да контролираш широчината на импулса с хардуерния модул на контролера, който ползваш.
Титла: Моят сумо робот
Публикувано от: mivr в Февруари 08, 2011, 05:25:50 pm
Цитат на: "sv_shady"
.... зависи как си направиш сенозрите...

Май не съм се изразил точно , ето за този проблем говоря:
http://www.youtube.com/watch?v=a4phUrojgqk
Ако имаш решение на този проблем моля те пиши във форума да се изучим и ние.
Титла: Моят сумо робот
Публикувано от: Аматьор в Февруари 08, 2011, 05:45:51 pm
Нека и аз да се вмъкна.  Отзад напред. :)
Това, което @sv_shady описва не е ШИМ (широчинно импулсна модулация) по простата причина , че никакъв сигнал не се модулира.  Това е импулсна поредица с коефициент на запълване 0.1.  Този метод наистина позволява да се изстискат добре възможностите на светодиодите.  Първо токът в импулса може да бъде по-голям, отколкото постоянния, а от там горе-долу пропорционално расте и излъчваната оптична мощност. Освен това светодиодът грее по-малко, а от там неговия КПД става по-голям при еднакви други условия.  Стареенето на полупроводниковия кристал , което в конкретния случай не е важно, също е  по-малко.   По отношение на това какъв максимален ток може да се пусне през светодиода е добре да се следват препоръките на производителя.  Ако няма такива, можем в разумни граници да приемем, че средният ток трябва да е не по-голям от максимално допустимия постоянен ток.   Така ако максимално допустимия постоянен ток през светодиода е 100мА, то при коефициент на запълване 0.1, импулсният ток не трябва да е по-голям от 1А.  Бих препоръчал по-малка стойност.
В конкретната схема има една уловка.  Възможно е този ток от 1А да представлява проблем за батерията особено , ако не е добре заредена.  В такъв случай е добре по захранване да се използва RC филтър, като кондензаторът по същество изпълнява ролята на акумулатор, а съпротивлението ограничава тока от батерията.  Добре би било да има осцилоскоп на разположение, за да се прецизират стойностите на елементите.
В моя робот подходих по следния начин към датчика на разстояние.
За излъчвател изпозвах 4 последователно свързани светодиода, разположени един до друг в центъра.  Около свтодиодите има обръч, който не позволява директното облъчване на фототранзисторите. Последователното свързване на светодиодите всъщност пести енергия - токът през тях е един и същ.  По спомен честотата е няколко килохерца, а коефициента на запълване към 0.1.  Реших да избягам от готовите решения, за да не се смущват противниците един от друг по време на състезанията.  Фотоприемниците са два, разположени в двата края на робота.  Така може да се локализира положението на противника и да се атакува централно.  Приложих хардуерна и софтуерна филтрация, за да намаля влиянието на изкуственото осветление.  Работното разстояние се получи прилично - към 30-40 см, което е добре  спрямо размерите на тепиха.  Работата на далекомерите онагледих с две светодиодни стълбици.  Много са полезни за диагностика на работа.
Титла: Моят сумо робот
Публикувано от: sv_shady в Февруари 08, 2011, 08:33:17 pm
Дам, наистина конкретно не става въпрос за модулация, тъй като коефициента се запазва, нещо съм спал докато съм го писал, но идеята е доста сходна. :)

@mvr
Както е направил Аматьор, използването на друга честота е вариант за разрешаването на проблема. Друг възможен начин е, ако се търси изменение в сигнала от фототранзистора.
1. Да предположим, че има друг източник на сходна честоста. Тогава определено количество светлина ще попада върху фототранзистора и ще имаш изходно напрвжение Vb, което зависи от количеството светлина попадаща върху сензора. Ипращаш сигнал от твоя излъчвател.
  1.1. Ако има предмет пред теб, то част от него ще се отрази и количеството светлина върху сензора ще се увеличи, респективно ще получиш ново напрежение Vo > Vb. Трябва да следиш именно за появата на такава разлика между Vо и Vb.
  1.2. Ако няма предмет срещу теб, то тогава изхода ще остане Vb или ще се променя плавно, ако се движиш спрямо външния излъчвател. Тоест, ако производната на сигнала от сензора се променя, но плавно тогава няма предмет. Ако нараства рязко, обаче, тогава има предмет. Това най-лесно се следи с втора производна на сигнала.
2. Да предположим, че няма друг източник, тогава няма проблеми. Ако обаче има такъв източник, който е неактивен, и се включи, това ще доведе до рязко увеличаване на изходното напрежение на сензора, което би трябвало да се отчете като препядствие. Но робота знае кога е пратил сигнал и кога трябва да очаква, така че може да елиминираме и този проблем. Единствения вариант е робота да изпрати сигнал, да чакак отразен, но вместо това се появи сигнал от тъкмо включения външен източник. Това, обаче, имайки предвид, че говорим за няколко микросекунди е доста невероятно да се случи.

Надявам се съм отоговорил на въпроса. :)
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 09, 2011, 09:16:05 pm
Всичко е готово  :clap:
Ето снимки: (големи са)
http://i54.tinypic.com/11qsh2e.jpg
http://i51.tinypic.com/334lzwk.jpg
http://i56.tinypic.com/sni8ev.jpg
http://i55.tinypic.com/2drgm0m.jpg
(това по пръстите ми е резултата от невнимаването с поялника и макетното ножче...)
Сега ще пооправя кода и ще го пробвам да видим какво ще стане  :D
Титла: Моят сумо робот
Публикувано от: zoro1 в Февруари 10, 2011, 12:24:56 pm
Май си пиновете от обратната страна?контролера не трябва ли да е от горе.
Титла: Моят сумо робот
Публикувано от: durankulakat в Февруари 10, 2011, 12:56:04 pm
Относно това: рейката не минаваше през отворите на преходника и я запоих от другата страна, като самата схема е направена с обърнати пинове  :)
Титла: Моят сумо робот
Публикувано от: mivr в Февруари 10, 2011, 09:52:25 pm
Видях алгоритъмът ти за сензорите за растояние и искам да ти предложа един друг алгоритъм:

Идеята е , че последният стадий на сензорите се запазва и примерно ако последен е бил 1 а след това е 4 то противникът е някъде от ляво на робота и обратното за 3 и 4.Ако се приложи този алгоритъм никога няма да загубиш противника след като веднъж си го намерил. :D
Ето я и картинката на всички възможности:
(http://media.snimka.bg/8056/022368050.jpg)



@sv_shady
Не разбрах много как ще премеря силата на сигнала с TSOP но все пак искам да обясня отново за какво изобщо говоря (от последният ти пост разбрах само че не си ме разбрал ама изобщо).
Така...... ето това е картинка на два сигнала предназначени за TSOP(38KHz)  и отдолу както най-вероятно си забелязал са двата сигнала но смесени (точно това става когато два диода от различни роботи  осветяват един датчик) в главни линий това е роблема:Как да премахнем това заглушаване???
(http://media.snimka.bg/8056/022368047.jpg)

Относно идеята на Аматьора не знам как точно ще стане застъпването няма ли да заглуши напълно ниско честотният сензор???
Например така:
(http://media.snimka.bg/8056/022368048.jpg)
Титла: Моят сумо робот
Публикувано от: sv_shady в Февруари 11, 2011, 12:22:35 am
@mivr
На всякъде пиша, че става въпрос за фототранзистори, не за ТСОП.
Иначе това с интерферирането на двете честоти не е точно така. Представи си два източника на червена светлина, които светят едновременно. Резултатната светлина не е с два пъти по-висока честота (т.е. различен цвят), ами просто с по-голям интензитет ;)
Титла: Моят сумо робот
Публикувано от: mivr в Февруари 11, 2011, 07:59:46 am
@sv_shady
Така явно пак ще обяснявам........
Когато имаме ШИМ модулация на X честота с коефициент 10 процента и втора ШИМ модулация отново на X честота и отново с 10 процента коефициент на запълване при съвпадане на тези две честоти се получава нова честота която никога не е X  даденият от мен пример беше за 38+38=76KHz и да това може да се случи но е много вероятно да се получи съвсем друг сигнал които изобщо да не е на дадена честота и логично демудолаторите в ТСОП или друг такъв тип сензор няма да разпознаят сигнала и няма да сработят.:D С други думи роботът ослепява.


И така и не разбрах какво общо има това със светлината която не е ШИМ модулация а е синосоид???
Титла: Моят сумо робот
Публикувано от: sv_shady в Февруари 11, 2011, 10:24:38 am
@mivr
И само за последно, говоря за фототранзистори, не за ТСОП. А, за да разбереш, си помисли какво става с две синусоиди.
Титла: Моят сумо робот
Публикувано от: Аматьор в Февруари 11, 2011, 05:38:10 pm
Разбира се , при смесването на да сигнала се получава друг сигнал, но ролята на приемната верига е да отфилтрира това, което се счита за нужно.   В моята реализация съм използвал похвата "електронна врата" - анализирам сигнала само когато излъчвам.  Колкото по-малък е коефициентът на запълване на импулсите, толкова по-ефективен е този метод.  И въпреки, че и трите роботчета, които направихме са еднакви в тази си част, не сме наблюдавали проблем при измерване на разстоянието.  Трябва да се има предвид и че приеманият сигна от противника е с многократно по-голяма амплитуда - зависимостта е квадратична, докато отразения сигнал намалява с четвърта степен  от разстоянието.
Титла: Re: Моят сумо робот
Публикувано от: mr.x_gs в Септември 11, 2015, 10:58:50 am
Някой може ли да помогне с програмирането?