Autor Tema: Algoritmo 6 CNY70 robot siguelineas  (Leído 5739 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Juanolo

  • PIC10
  • *
  • Mensajes: 10
Algoritmo 6 CNY70 robot siguelineas
« en: 08 de Enero de 2009, 20:08:43 »
Hola amigos, he estado buscando en muxos foros utilizando las busquedas y el google, y no he conseguido encontrar un algoritmo básico para 6 cny 70 para usar con las bifurcaciones en un plano complejo para una competicion de siguelineas.

Estoy buscando como programar en basic como hacer que al detectar la linea de indicacion de bifurcacion (esa linea de no mas de 5-10 cm al lado de la linea principal que te indica la direccion correcta).

Sin son tan amables de indicarme algun lugar que pueda encontrarlo se lo agradeceria ya que dentro de nada viene una competicion y no hay forma de encontrarlo

muchas gracias!

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Algoritmo 6 CNY70 robot siguelineas
« Respuesta #1 en: 08 de Enero de 2009, 21:44:47 »
Hola Juanolo, hace tiempo compre un boe bot, con 3 cny para detectar una linea negra sobre fondo blanco.... es similar a lo que estas buscando, asi que a modo de ejemplo, creo te será bueno
Claro que tendras que adaptarlo a tus necesidades... ademas este maneja un par de servos y posee 4 sensores para-choques...

Código: ASM
  1. '***********************************************************************
  2. '*  Name       : Complete Robot.BAS                                    *
  3. '*  Hard Ware  : ET-ROBOT-877                                          *
  4. '*  CPU        : PIC 16F877-20P                                        *
  5. '*  Date       : 8/10/2003                                             *
  6. '*  Program By : Watcharin Kaolop                                      *
  7. '*                                                                     *
  8. '*  Hard Ware Setup :                                                  *  
  9. '*              Servo-L               <-- RC2                              *
  10. '*              Servo-R               <-- RC1                              *
  11. '*              SW bumper left front  <-- RA4                              *  
  12. '*              SW bumper right front <-- RE0                              *
  13. '*              SW bumper left back   <-- RE1                              *
  14. '*              SW bumper right back  <-- RA5                              *
  15. '*                                                                     *
  16. '*  Notice  : This demo program is control robot car by tracker sensor *
  17. '*            and switchs bumper sensor and display massage to LCD.    *
  18. '*                                                                     *
  19. '***********************************************************************
  20.  
  21. '   INCLUDE "modedefs.bas"          ' Include serial modes
  22.    
  23.    DEFINE  OSC   10
  24.    
  25.    pulse_1ms    CON   250          ' constant value for pulse 1 ms
  26.     pulse_2ms    CON   500          ' constant value for pulse 2 ms
  27.    Motor_L      VAR   PORTC.2      ' left servo motor
  28.     Motor_R      VAR   PORTC.1      ' right servo motor
  29.    SW_Start     VAR   PORTA.2
  30.    SPK          VAR   PORTD.1      ' speaker
  31.     Run_LED      VAR   PORTD.0
  32.    
  33.     SW_FL        VAR   PORTA.4      ' bumper switch in left front position
  34.    SW_FR        VAR   PORTE.0      ' bumper switch in right front position
  35.     SW_BL        VAR   PORTE.1      ' bumper switch in left back position
  36.    SW_BR        VAR   PORTA.5      ' bumper switch in right back position
  37.    
  38.     LFT          VAR   PORTB.0      ' tracker sensor left position
  39.    MID          VAR   PORTB.1      ' tracker sensor middle position
  40.     RGT          VAR   PORTB.2      ' tracker sensor right position
  41.    i            VAR   Byte          
  42.    
  43. '*****  Define configuration for LCD ******
  44.     DEFINE  LCD_DREG    PORTD       '
  45.    DEFINE  LCD_DBIT    4           ' PORTD[7:4] is LCD data pin
  46.     DEFINE  LCD_RSREG   PORTD       '
  47.    DEFINE  LCD_RSBIT   3           ' RD3 is RS pin
  48.     DEFINE  LCD_EREG    PORTD
  49.     DEFINE  LCD_EBIT    2           ' RD2 is E pin
  50.    DEFINE  LCD_BITS    4           ' LCD 4 bit mode
  51.  
  52. '***** Define input and output  *****
  53.    Output  Motor_R                  ' RC1 is output
  54.     Output  Motor_L                 ' RC2 is output
  55.    Low     Motor_R
  56.    Low     Motor_L    
  57.    Input   SW_Start
  58.    Input   SW_FL
  59.    Input   SW_FR
  60.    Input   SW_BL
  61.    Input   SW_BR
  62.    TRISB = $FF
  63.    TRISD = 0
  64.    ADCON1 = 7
  65.    
  66.    Gosub   Beep2
  67.    LCDOut  $FE,1,"  ET-ROBOT 877",$FE,$C0," (CPU PIC16F877)"  
  68.    
  69.    Goto    wait_st
  70.    
  71. stop_press:   pause  50
  72.              if  SW_Start = 0 Then  stop_press  
  73.              Gosub  Beep2
  74.                  
  75. wait_st:      High     Run_LED          
  76.              IF  SW_Start = 1 Then  wait_st           ' Wait start button (RA2)
  77. wait_1:       Pause  50
  78.               if  SW_Start = 0 Then  wait_1
  79.               Low     Run_LED    
  80. '**************************************
  81. '       main program                  *
  82. '**************************************
  83. main:        
  84.                IF (LFT = 0) AND (MID = 0)AND (RGT = 0) Then  Gosub forward  
  85.                if  SW_Start = 0 Then  stop_press              
  86.                IF (LFT = 0) AND (MID = 0)AND (RGT = 1) Then  Gosub turn_right    ' turn right speed mode              
  87.                 if  SW_Start = 0 Then  stop_press
  88.                 IF (LFT = 0) AND (MID = 1)AND (RGT = 0) Then  Gosub forward              
  89.                 if  SW_Start = 0 Then  stop_press
  90.                 IF (LFT = 0) AND (MID = 1)AND (RGT = 1) Then  Gosub turn_norm_R   ' turn right normal mode            
  91.                if  SW_Start = 0 Then  stop_press
  92.                IF (LFT = 1) AND (MID = 0)AND (RGT = 0) Then  Gosub turn_left     ' turn left speed mode
  93.                 if  SW_Start = 0 Then  stop_press
  94.                 IF (LFT = 1) AND (MID = 0)AND (RGT = 1) Then  Gosub forward
  95.                 if  SW_Start = 0 Then  stop_press
  96.                 IF (LFT = 1) AND (MID = 1)AND (RGT = 0) Then  Gosub turn_norm_L   ' turn left normal mode                    
  97.                if  SW_Start = 0 Then  stop_press
  98.                IF (LFT = 1) AND (MID = 1)AND (RGT = 1) Then  Gosub turn_right
  99.                if  SW_Start = 0 Then  stop_press
  100.             Goto  main
  101.          
  102. '******************************************
  103. '          Walking Format control         *
  104. '******************************************
  105. forward:      IF  SW_FL = 0  Then  Gosub evade_left          
  106.               IF  SW_FR = 0  Then  Gosub evade_right
  107.               PulsOut   Motor_L,pulse_2ms     ' Generate pulse 2 ms to left servo motor                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
  108.              Low       Motor_L               ' off
  109.               PulsOut   Motor_R,pulse_1ms     ' Generate pulse 1 ms to right servo motor
  110.              Low       Motor_R               ' off
  111.               Pause     18                    ' 18 ms
  112.              Return
  113. '---------------------------------------------              
  114. evade_left:   Gosub   Beep1
  115.               for i = 0 to 30               ' Beeping
  116.                  GoSub   backward          ' move to backward
  117.               IF  SW_BL = 0  Then  turn_R45              
  118.               IF  SW_BR = 0  Then  turn_L45          
  119.               Next i
  120.                
  121. turn_R45:     for i = 0 to 30
  122.                   GoSub   turn_norm_R       ' turn right 45 degree
  123.              Next i
  124.              Return
  125. '---------------------------------------------
  126. evade_right:  Gosub  Beep1
  127.               for i = 0 to 30              
  128.                   GoSub   backward          ' move to backward
  129.              IF  SW_BL = 0  Then  turn_R45              
  130.              IF  SW_BR = 0  Then  turn_L45                  
  131.              Next i
  132.                
  133. turn_L45:     for i = 0 to 30
  134.                  GoSub   turn_norm_L         ' turn left 45 degree
  135.               Next i
  136.               Return
  137. '---------------------------------------------
  138.            
  139. backward:     PulsOut   Motor_L,pulse_1ms     ' Generate pulse 1 ms to left servo motor
  140.               Low       Motor_L               ' off
  141.              PulsOut   Motor_R,pulse_2ms     ' Generate pulse 2 ms to right servo motor
  142.               Low       Motor_R               ' off
  143.              Pause     18                    ' 18ms
  144.               Return                                    
  145. '---------------------------------------------          
  146. turn_right:   PulsOut   Motor_R,pulse_2ms     ' Generate pulse 2 ms to right servo motor
  147.               Low       Motor_R               ' off
  148.              PulsOut   Motor_L,pulse_2ms     ' Generate pulse 2 ms to left servo motor
  149.               Low       Motor_L               ' off
  150.              Pause     18                    ' 18ms
  151.               if  SW_Start = 0 Then  Return
  152.               IF  SW_FR = 0    Then  Return
  153.               IF MID = 0 Then  turn_right  
  154.               Return
  155. '---------------------------------------------                
  156. turn_left:    PulsOut   Motor_R,pulse_1ms     ' Generate pulse 1 ms to right servo motor
  157.               Low       Motor_R               ' off
  158.              PulsOut   Motor_L,pulse_1ms     ' Generate pulse 1 ms to left servo motor
  159.               Low       Motor_L               ' off
  160.              Pause     18                    ' 18ms
  161.               if  SW_Start = 0 Then  Return
  162.               IF  SW_FL = 0    Then  Return
  163.               IF MID = 0 Then  turn_left  
  164.               Return
  165. '---------------------------------------------              
  166. turn_norm_R:  Low       Motor_R               ' off
  167.               PulsOut   Motor_L,pulse_2ms     ' Generate pulse 2 ms to left servo motor
  168.              Low       Motor_L               ' off
  169.               Pause     18                    ' 18ms
  170.              Return
  171. '---------------------------------------------                
  172. turn_norm_L:  Low       Motor_L               ' off
  173.              PulsOut   Motor_R,pulse_1ms     ' Generate pulse 1 ms to right servo motor
  174.               Low       Motor_R               ' off                            
  175.              Pause     18                    ' 18ms  
  176.               Return
  177.      
  178. '---------------------------------------------  
  179. Beep1:        FreqOut SPK,100,2000            ' Beep
  180.               Return
  181.  
  182. Beep2:        FreqOut SPK,100,2000            ' Beep
  183.              Pause   100                     ' delay
  184.               FreqOut SPK,50,2000             ' Beep
  185.              Return

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado jpardo

  • PIC10
  • *
  • Mensajes: 6
Re: Algoritmo 6 CNY70 robot siguelineas
« Respuesta #2 en: 08 de Agosto de 2010, 17:34:50 »
Hola referente al programa en que lenguaje esta escrito....???
D elo que se y analizando un poco se parece mas al de un sumobot??

Sin embargo hay otras que he visto en competencias con ¡8! sensores en una sola línea y siguen una estrategia "por cantidad de desviación" ...

Las dudas mas simples son por ejemplo ¿esto depende del ancho de la línea? ¿no? ... y de los ángulos de las curvas que tenga la línea ¿no? ... si tienen o no cruces ... ¿no?

También he visto una marcas junto a las líneas que no se si son usuales el leerlas o no ... como en las competencias en la que en los tramos rectos con esquinas aparecen o a ambos lados o en uno solo de ellos,   

Buscando por la red encontre un programa de algoritmo pero para 8 sensores analogicos Tipo ARRAY
espero les sirva:

http://www.jmnlab.com/robotzero/robotzerov.html

Saludos...