TODOPIC

Mecatrónica => Robótica => Mensaje iniciado por: alpha44 en 20 de Junio de 2009, 16:59:13

Título: Robot evita obstaculos
Publicado por: alpha44 en 20 de Junio de 2009, 16:59:13
.
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 21 de Junio de 2009, 06:41:58
que mas necesito porfbor?
Título: Re: Robot evita obstaculos
Publicado por: Goblin Welder en 21 de Junio de 2009, 13:40:23
Respecto a la electrónica necesitará diseñar un circuito impreso o placa de topos con el microcontrolador, el cristal y el condensador necesario para su funcionamiento si no va a usar el oscilador interno, conectores para unir los servos y el sensor de ultrasonidos a la placa del microcontrolador, un condensador de desacoplo para eliminar el ruido del micro, un regulador de tensión dependiendo del voltaje de su batería con sus respectivos componentes, zócalo para insertar el microcontrolador si no va a implementar un conector de programación en el circuito.

Un ejemplo de un robot muy sencillo para empezar desde cero: http://www.tarribot.com/?id=4&idm=1

Un saludo.
Título: Re: Robot evita obstaculos
Publicado por: MLO__ en 21 de Junio de 2009, 13:50:27
Hola.

En que lenguaje programas? ASM, C, Basic, Pascal?

Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 21 de Junio de 2009, 16:56:58
.
Título: Re: Robot evita obstaculos
Publicado por: Carli en 21 de Junio de 2009, 17:07:18
Si faltarte el respeto, te recomiendo que empieces, con un proyecto mas facil y elemental como encender y apagar 1 led.

Desde ahi, te falta un montonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn, para leer un sensor de ultrasonidos y mandar PWM a los servos.

Espero no te caiga mal mi sugerencia, pero es con el mayor de los respetos y la mejor de las intenciones.
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 21 de Junio de 2009, 17:22:28
.
Título: Re: Robot evita obstaculos
Publicado por: MLO__ en 21 de Junio de 2009, 17:43:44
Hola.

Como recomendacion: siempre es bueno revisar las bases conceptuales del proyecto antes de iniciar algo, hay veces que nos metemos en lios por suponer.

Respecto a tu proyecto, te recomiendo C como lenguaje de programacion.

Hay otras maneras de hacer esos robots evita-obstaculos sin recurrir a la programacion de micros, se hace por medio de comparadores de voltaje, los sensores en este caso son infrarrojos.

Saludos
Título: Re: Robot evita obstaculos
Publicado por: Carli en 21 de Junio de 2009, 21:46:29
Yo te recomiendo Mikrobasic y despues pasa al C.
El Mikrobasic tiene muchos tutoriales y es ma facil, el C es para cuando estes mas avanzado. Es mi parecer.

Con respecto de no tirarce atras, de lo unico que no zafas, es de la muerte, hablando todo se arregla. Sino empeñate dedicale mucho tiempo y esfuerzo, todo lo que te propongas lo podes hacer, siempre que no te des por vencido. En este foro hay muchas cosas, a buscar y trabajar. Aqui se te va a ayudar pero nadie va a hacer tu trabajo.

Yo le haria caso a MLO_ y haria un robot sigue lineas con unos CNY70.
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 22 de Junio de 2009, 05:50:05
.
Título: Re: Robot evita obstaculos
Publicado por: Miquel_S en 22 de Junio de 2009, 13:30:13
Hola alpha44,mi opinion es la misma que Carli que empieces con algo mas facil, pero si te quieres hacer una idea hay va un codigo en ASM copiado de Microsystems Engineering.

 ;***************************************************************************************
;               ESCAPADA
;
;         Autor:   Mikel Etxebarria Isuskiza
;      (c) Ingeniería de Microsistemas Programados S.L.
;            Bilbao 2002
;
;El microbot trata de alejarse de cualquier objeto que trata de acercarse, bien por delante,
;como por detras. Para ello, el objeto se detecta empleando los dos sensores delanteros
;(RB4-RB5) y de los dos traseros (RB6-RB7).

      list      p=16F877      ;Tipo de procesador
      include      "P16F877.INC"      ;Definición de registros internos
      include      "DEFINIR.INC"      ;Definición de sensores

Temp      equ   0x20      ;Variable temporal

      org   0x05
      goto   Inicio
      include      "MACROS.INC"      ;Definición de macros

Inicio      clrf   PORTA      ;Desconectar motores
      clrf   Status_motores   ;Borrar flags de movimiento
      bsf   STATUS,RP0   ;Selecciona banco 1
      movlw   b'00000110'
      movwf   ADCON1      ;Puerta A es digital
      movlw   b'11010001'
      movwf   TRISA      ;RA4-RA0 entrada, resto salidas
      movlw   b'11000000'
      movwf   OPTION_REG
      movlw   0xff
      movwf   TRISB      ;Puerta B entrada
      bcf   STATUS,RP0   ;Selecciona banco 0

;Bucle principal de movimiento

Loop      clrwdt
      movf   PORTB,W
      iorlw   b'00001111'   
      movwf   Temp      ;Leer las entradas RB4-RB7

      movlw   b'11001111'
      iorwf   Temp,W
      sublw   b'11001111'
      btfsc   STATUS,Z   ;Están activados sensores delanteros (RB4-RB5)??
      goto   Esc_atras   ;Si, escapada hacia atrás

      btfss   Sen_de_izdo   ;Está activado el sensor delantero izdo. (RB4)??
      goto   Esc_at_dcha   ;Si, escapada hacia atrás/derecha
      btfss   Sen_de_dcho   ;Está activado el sensor delantero dcho. (RB5) ??
      goto   Esc_at_izda   ;Si, escapada hacia atrás/izquierda

      movlw   b'00111111'
      iorwf   Temp,W
      sublw   b'00111111'
      btfsc   STATUS,Z   ;Están activados sensores traseros (RB6-RB7)?
      goto   Esc_adelan   ;Si escapada hacia adelante

      btfss   Sen_tr_izdo   ;Está activado el sensor trasero izdo. (RB6)??
      goto   Esc_ad_dcha   ;Si, escapa hacia adelante/derecha
      btfss   Sen_tr_dcho   ;Está activado el sensor trasero dcho. (RB7)??
      goto   Esc_ad_izda   ;Si, escapada hacia adelante/izquierda

Parar      Stop
      goto   Loop      ;No hay ningún objeto cercano.Detener el robot

Esc_atras   btfsc   M_atras      ;Se está moviendo hacia atrás ??
      goto   Loop      ;Si
      Atras         ;No, movimiento hacia atras
      goto   Loop

Esc_adelan   btfsc   M_adelante   ;Se está moviendo hacia adelante ??
      goto   Loop      ;Si
      Adelante      ;No, movimiento hacia adelante
      goto   Loop

Esc_at_dcha   At_dcha         ;Movimiento atras/derecha
      goto   Loop

Esc_at_izda   At_izda         ;Movimiento atras/derecha
      goto   Loop

Esc_ad_dcha   Ad_dcha         ;Movimiento adelante/derecha
      goto   Loop

Esc_ad_izda   Ad_izda         ;Movimiento adelante/izquierda
      goto   Loop
      
      end
      
 Espero haberte ayudado aunque sea poco.

Saludos y no te rindas.
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 05 de Agosto de 2009, 16:19:56
Muchas gracias a todos por las respuestas.
Mi robot ya va tomando forma.
Ahora estoy en la fase final y me queda programar el pic y me han surgido dos dudas.
La primera que no tiene que ver con la programación es como se conectaria el sensor de ultrasonidos srf04 a una placa como la del tarribot.
Mi otra pregunta es que lenguaje seria mas facil para lo que quiero hacer, estoy empezando a aprender asm pero mirando ejemplos aveces me resulta mas facil de entender c. cual es mas facil para un principiante?
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 05 de Agosto de 2009, 16:22:17
.
Título: Re: Robot evita obstaculos
Publicado por: Miquel_S en 06 de Agosto de 2009, 02:07:38
Hola alpha44,la configuracion de los pines la defines tu,si estan a 0 los pines seran salida y si estan a 1 seran entrada.
 
   Por ejemplo:
 
   movlw              b'00001111'
   movwf              TRISB             ;Asi tendriamos que los bits RB0-RB3 entradas el resto salidas.
 

   Saludos.
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 06 de Agosto de 2009, 20:47:31
.
Título: Re: Robot evita obstaculos
Publicado por: Miquel_S en 07 de Agosto de 2009, 04:09:34
Hola de nuevo, el criterio a seguir tambien lo decides tu, siempre y cuando tengas en cuenta que hay pines con funciones especificas.Lo mismo da que los pines de la puerta A los uses para conectar los sensores en este caso los tendrias como entradas, y en la puerta B conectes los motores que los tendrias como salida,como si los sensores los conectas a la puerta C.
Yo personalmente prefiero conectar los motores en la puerta B, porque de esta manera no tengo que preocuparme de las resistencias pull-up al ser pines de colector abierto.
 
  Saludos.
Título: Re: Robot evita obstaculos
Publicado por: Miquel_S en 07 de Agosto de 2009, 05:11:38
Hola otra vez, se me ocurre que podria echarte una mano con lo del bot de la siguiente manera:
Dame tiempo hasta la tarde porque en estos momentos estoy trabajando y me daran un tiron de orejas,  :D te prestare uno de los primeros programas para bot que hice y te lo explicare instruccion por instruccion lo mejor que sepa, pero como todo tiene un precio tienes que prometer que lo modificaras a tu gusto,por ejemplo un buzzer que emita un pitido cuando cambia de direccion,unos leds que se enciendan cuando oscurece ,etc etc. Y debes postearlo en el foro para que lo veamos no vale con decir que lo haras,tenemos que ver el resultado.  :mrgreen:  :mrgreen:

  PD: Que malo que soy.

   
                  Saludos.
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 07 de Agosto de 2009, 09:23:35
.
Título: Re: Robot evita obstaculos
Publicado por: Miquel_S en 08 de Agosto de 2009, 17:37:34
Hola alpha44, siento haber tardado tanto pero el internet no me funcionaba.
 
  Lo prometido es deuda:


; El recorrido se inicia al accionar cualquiera de los bumpers.
; Si durante el recorrido los bumpers detectan cualquier obstaculo frontal,el BOT,retrocede,se
; detiene durante 0,5" y vuelve a intentarlo.




                     LIST      P=16F84A            ;Se indica el tipo de procesador
                     
                     INCLUDE      "P16F84A.INC"         ;Incluimos la definicion de los registros
                     
#define         SD         PORTB,0                        ;Sensor derecho
#define         SI         PORTB,1                        ;Sensor izquierdo

; Con estos dos #define lo que hacemos es que cada vez que tengamos que llamar a un sensor no necesitamos
; recordar en que Puerto o en que bit lo tenemos conectado.

   Temp_1         equ         0x0c                     ;Nombre de la variable donde vamos a almacenar
                                                ;la temporizacion la cual se guarda en el reg 0x0c
                                                
               org         0x00
               goto      Inicio                     ;Saltamos a la etiqueta inicio,donde empieza el programa.
                                                ;Aqui pondriamos el vector de interrupcion si fuera necesario,
                                                ;el cual seria org 0x04.
               org         0x05
               
; Rutina de temporizacion la cual temporiza 50ms tantas veces como indique la variable Temp_1.

Delay50ms         movwf      Temp_1
Delay50ms_2         bcf         INTCON,2                  ;Borramos el flag TOIF
               movlw       0x3c
               movwf      TMR0                     ;Cargamos el complemento de 195 en el TMR0.
Delay50ms_1         btfss      INTCON,2                  ;Exploramos si el TMR0 se ha desbordado.
               goto      Delay50ms_1                  ;Todavia no.
               decfsz      Temp_1,F                  ;Decrementamos la variable Temp_1
               goto      Delay50ms_2                  ;Todavia no es 0
               return                              ;Ahora si,con esta instruccion volvemos donde lo habiamos dejado.
               
Inicio                                             ;Aqui empezamos el programa,configuramos los bits de salida y entrada
                                                                ;el TMR0, etc.
                    clrf      PORTA                     ;Borramos los bits de la puerta A
                    bsf         STATUS,RP0                  ;Seleccionamos la pagina 1.
                    movlw      b'00010000'
                    movwf      TRISA                     ;Configuramos los bits como salidas o entradas,en este caso tenemos
                                                     ;RA0-RA3 salidas,RA4 entrada.
                    movlw      b'11111111'
                    movwf      TRISB                     ;Puerta B todo entradas.
                    movlw      b'11010111'                  ;Preescaler de 256 para el TMR0.
                    movwf      OPTION_REG
                    bcf         STATUS,RP0                  ;Seleccionamos la pagina 0.
                    bcf         INTCON,GIE                  ;Desabilitamos las interrupciones.
                   
; Ahora esperamos que se accione alguno de los dos bumpers.

Wait            clrwdt
               clrf      PORTA                     ;Situacion inicial de parada.
               btfss      SD                        ;Sensor derecho en ON??
               goto      Avanza                     ;Si,empieza a caminar.
               btfsc      SI                        ;Sensor izquierdo en ON??
               goto      Wait
               
;Bucle principal

Avanza            clrwdt
               btfsc      SD                        ;Sensor derecho ON??
               goto      No_Obstaculo
               btfsc      SI                        ;Sensor izquierdo ON??
               goto      No_Obstaculo
Atras            movlw      b'00001110
               movwf      PORTA
               btfss      SD
               goto      Atras
               btfss      SI
               goto      Atras
               clrf      PORTA
               call      Delay50ms
               goto      Avanza
               
No_Obstaculo      btfsc      SD                        ;Ha salido por la izquierda?
               goto      No_Izq                     ;No
               movlw      b'00001100'
               movwf      PORTA                     ;Si,movimiento a la derecha.
               goto      Avanza
               
No_Izq            btfsc      SI                        ;Ha salido por la derecha?
               goto      No_Dcha
               movlw      b'00001111'
               movwf      PORTA
               goto        Avanza
               
No_Dcha            movlw      b'00001101'
               movwf      PORTA
               goto      Avanza
               
               END                           
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 10 de Agosto de 2009, 15:32:08
.
Título: Re: Robot evita obstaculos
Publicado por: Miquel_S en 11 de Agosto de 2009, 12:39:31
Referente a los sensores de ultrasonidos se conectan de diferente manera, y es un poco mas dificil su programacion, dale una ojeada a este programa que usa un sensor como el tuyo y lo que no entiendas preguntalo.


;********************************** Sensor_ Ultrasonido_01.asm **************************

;

;   ===================================================================

;     Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"

;     E. Palacios, F. Remiro y L. López.          www.pic16f84a.com

;      Editorial Ra-Ma.  www.ra-ma.es

;   ===================================================================

;

; Programa para un medidor de distancias hasta un objeto utilizando sensor por ultrasonido SRF04.

;

; Para el control del sensor en primer lugar se genera un  pulso de 10 µs a nivel alto por la

; línea RA3 que se conecta a la entrada de disparo del sensor. Seguidamente se espera a que en el

; sensor se ponga un nivel alto en la salida ECO que se conecta a la línea RA4 y se utilizan las

; interrupciones por desbordamiento del Timer 0 para medir el tiempo que está en alto el pulso.

; Seguidamente se visualiza en el módulo LCD el valor de la distancia hasta el objeto expresada en

; centímetros.

;

; Por cada centímetro de distancia al objeto el SRF04 aumenta 60 µs la anchura del pulso.

; En este programa la distancia mínima es 3 cm y la máxima 250 cm.

;

; ZONA DE DATOS **********************************************************************



   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

   LIST      P=16F84A

   INCLUDE  <P16F84A.INC>



   CBLOCK  0x0C

   Distancia            ; Se expresará en centímetros.

   ENDC



#DEFINE  Disparo   PORTA,3         ; Disparo para iniciar la medida.

#DEFINE  Eco      PORTA,4      ; Pulso cuya anchura hay que medir.



MinimaDistancia   EQU   .3

MaximaDistancia   EQU   .250

TMR0_Carga60micros   EQU   -d'27'       ; Valor obtenido experimentalmente con la

               ; ventana Stopwatch para una interrupción del

; Timer 0 cada 60 µs.  Si no mide correctamente por las tolerancias de los componentes habrá

; que hacer un ajuste fino de este valor, comprobándolo sobre las condiciones reales.

;

; ZONA DE CÓDIGOS ********************************************************************



   ORG    0

   goto   Inicio

   ORG   4

   goto   ServicioInterrupcion



Mensajes

   addwf   PCL,F

MensajeDistancia

   DT "   Distancia: ", 0x00

MensajeCentimetro

   DT " cm", 0x00

MensajeDistanciaMenor

   DT "Dist. MENOR de:", 0x00

MensajeDistanciaMayor

   DT "Dist. MAYOR de:", 0x00

Inicio

   call   LCD_Inicializa

   bsf   STATUS,RP0

   bcf   Disparo

   bsf   Eco

   movlw   b'00000000'      ; Prescaler de 2 para el TMR0.

   movwf   OPTION_REG

   bcf   STATUS,RP0

   bcf   Disparo         ; Inicializa línea de disparo en bajo.

Principal

   clrf   Distancia         ; Inicializa el registro.

   bsf   Disparo         ; Comienza el pulso de disparo.

   call   Retardo_20micros      ; Duración del pulso.

   bcf   Disparo         ; Final del pulso de disparo.

Espera_Eco_1

   btfss   Eco         ; Si ECO=0, espera el flanco de subida de la señal

   goto   Espera_Eco_1      ; de salida del sensor.

   movlw   TMR0_Carga60micros   ; Ya se ha producido el flanco de subida.

   movwf   TMR0         ; Carga el Timer 0.

   movlw   b'10100000'      ; Autoriza interrupción del TMR0 (T0IE).

   movwf   INTCON

Espera_Eco_0

   btfsc   Eco         ; Espera flanco de bajada de la señal de la salida

   goto   Espera_Eco_0      ; del SRF04.

   clrf   INTCON         ; Se ha producido el flanco de bajada. Prohíbe interrup.

   call   Visualiza         ; Visualiza la distancia.

   call   Retardo_2s      ; Espera un tiempo hasta la próxima medida.

Fin   goto   Principal

   

; Subrutina "ServicioInterrupcion" ------------------------------------------------------

;

; Se ejecuta debido a la petición de interrupción del Timer 0 cada 60 µs que es el incremento

; de la anchura de pulso por centímetro de distancia medido. La variable "Distancia" contiene el

; valor de la distancia expresada en centímetros.

;

ServicioInterrupcion

     movlw   TMR0_Carga60micros   ; Carga el Timer 0.

   movwf   TMR0

   movlw   .1         ; Se utiliza instrucción "addwf", en lugar de "incf"

   addwf   Distancia,F      ; para posicionar flag de Carry.

   movlw   MaximaDistancia      ; En caso de desbordamiento carga su máximo valor.

   btfsc   STATUS,C

   movwf   Distancia

   bcf   INTCON,T0IF

   retfie



; Subrutina "Visualiza" -----------------------------------------------------------------

;

; Visualiza la distancia expresada en centímetros. Se hace de manera que cuando haya que

; visualizar un número mayor de 99 las decenas siempre se visualicen aunque sean cero.

; Y cuando sea menor de 99 las decenas no se visualicen si es cero.

;

; Si la distancia es menor de 3 cm o mayor de 250 cm aparece un mensaje de error.

;

Visualiza

   call   LCD_Borra      ; Borra la pantalla anterior.

   movlw   MinimaDistancia      ; Va a comprobar si es menor del mínimo admisible.

   subwf   Distancia,W      ; (W)=(Distancia)-MinimaDistancia

   btfss   STATUS,C      ; ¿C=1?, ¿(W) positivo?, ¿(Distancia)>=MinimaDistancia?

   goto   DistanciaMenor      ; No ha resultado menor, y salta al mensaje de error.

   movf   Distancia,W      ; Va a comprobar si es mayor del máximo admisible.

   sublw   MaximaDistancia      ; (W)=MaximaDistancia-(Distancia)

   btfsc   STATUS,C      ; ¿C=0?, ¿(W) negativo?, ¿MaximaDistancia<(Distancia)?

   goto   DistanciaFiable      ; No, la medida de la distancia entra dentro del rango.

;

DistanciaMayor

   movlw   MaximaDistancia      ; La distancia es mayor que el máximo.

   movwf   Distancia

   movlw   MensajeDistanciaMayor

   goto   VisualizaDistancia

;

DistanciaMenor

   movlw   MinimaDistancia      ; La distancia es menor del mínimo fiable.

   movwf   Distancia

   movlw   MensajeDistanciaMenor

   goto   VisualizaDistancia

DistanciaFiable

   movlw   MensajeDistancia

VisualizaDistancia

   call   LCD_Mensaje

   movlw   .5         ; Centra la medida de la distancia en la segunda línea

   call   LCD_PosicionLinea2   ; de la pantalla.

   movf   Distancia,W

   call   BIN_a_BCD      ; Lo pasa a BCD.

   movf   BCD_Centenas,W      ; Primero las centenas.

   btfss   STATUS,Z      ; Si son cero no visualiza las centenas.

   goto   VisualizaCentenas

   movf   Distancia,W      ; Vuelve a recuperar este valor.

   call   BIN_a_BCD      ; Lo pasa a BCD.

   call   LCD_Byte      ; Visualiza las decenas y unidades.

   goto   Visualiza_cm

VisualizaCentenas

   call   LCD_Nibble      ; Visualiza las centenas.

   movf   Distancia,W      ; Vuelve a recuperar este valor.

   call   BIN_a_BCD      ; Lo pasa a BCD.

   call   LCD_ByteCompleto   ; Visualiza las decenas (aunque sea cero) y

Visualiza_cm            ; unidades.

   movlw   MensajeCentimetro

   call   LCD_Mensaje

   return



   INCLUDE  <RETARDOS.INC>

   INCLUDE  <LCD_4BIT.INC>

   INCLUDE  <LCD_MENS.INC>

   INCLUDE  <BIN_BCD.INC>

   END

 Te dejo un link para que veas como funciona.

 http://www.robot-electronics.co.uk/htm/srf04tech.htm
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 11 de Agosto de 2009, 20:28:35
.
Título: Re: Robot evita obstaculos
Publicado por: Miquel_S en 12 de Agosto de 2009, 05:05:20
Perdona por no haberme expresado bien,lo digo en el sentido de que no es como un interruptor que su estado es abierto o cerrado,si no que necesitas generar unos pulsos de una duracion x y luego leer por el receptor las señales recibidas.

 Saludos y animo.
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 12 de Agosto de 2009, 09:13:50
.
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 12 de Agosto de 2009, 09:18:47
.
Título: Re: Robot evita obstaculos
Publicado por: Miquel_S en 12 de Agosto de 2009, 13:10:43
Me gusta, vas aprendiendo, al final terminaras dandome clases a mi, la electronica es la correcta me refiero al segundo esquema el que usa el sensor que tu tienes, solo dos cosas:

- Recuerda que puedes usar cualquiera de los pines de los puertos, en el esquema se usa el puerto A pero podrias usar el puerto B.
- Una cosa que no hemos comentado es la alimentacion, te aconsejo que separes lo que es la electronica de los motores para evitar interferencias en el pic o en el sensor.

 Estoy impaciente por ver las fotos.  :-/  :-/
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 12 de Agosto de 2009, 16:37:17
.
Título: Re: Robot evita obstaculos
Publicado por: tapi8 en 12 de Agosto de 2009, 17:01:05
http://picmania.garcia-cuervo.net/proyectos_aux_srf04.php

Aqui una excelente explicacion, como siempre, de Don Diego, el programa esta en C pero creo que os puede ayudar.

tapi8
Título: Re: Robot evita obstaculos
Publicado por: DanMech21 en 15 de Agosto de 2009, 01:52:01
Hola alpha44 (metiendome un poco al post) el sensor ultrasonico lo que hace es enviar un "sonido" y esperar el revote del mismo para asi  poder calcular la distancia ya que Velocidad = Distancia / Tiempo de ahi sacas las medidas , ahora respecto al SRF04 si no me equivoco el pulso que tienes que enviar de la salida del pic a el Trigger del SRF04 no debe ser menor a 10us.

Ahora respecto al programa... sinceramente veo muy dificil que puedas manejar un sensor ultrasonico con lenguaje ASM siendo este tu primer proyecto en programacion. Hace unos meses yo realize un programa para verificar el buen estado de un SRF05 que es muy similar al tuyo estoy casi seguro que te servira pero mi proyecto esta echo en PicBasic , de cualquier forma te dejo el programa espero y te ayude en algo.
Código: [Seleccionar]
Include "modedefs.bas" ' Include serial modes

trisa = %00000000 ' set porta to outputs
trisb = %00001000 ' set portb pin 3 to input

lcd           var PORTA.3 ' define variables and constants
piezo       var PORTB.4
trigger      var PORTB.2
echo         var PORTB.3
left_led     var PORTB.0
right_led   var PORTB.1
baud          con N2400
dist_raw     var word
dist_inch    var word
dist_cm      var word
conv_inch    con 15
conv_cm      con 6

low trigger ' set trigger pin to logic 0
low left_led ' turn off left LED
low right_led ' turn off right LED

Serout lcd,baud,[254,1] ' clear lcd screen

pause 1000 ' give time to initialize lcd

Serout lcd,baud,[254,128,"- Sonar Ranger -"] ' display program title on the LCD

sound piezo,[100,10,50,5,70,10,50,2] ' Make startup sound
                                              
pause 1000 ' wait for 1 second

Serout lcd,baud,[254,128,"inches:         "] ' set up the LCD display

Serout lcd,baud,[254,192,"centimeters:    "]

main:

     gosub sr_sonar ' get sonar reading

     if dist_cm <= 100 then call LED
    
     IF dist_cm >100 then call APA
    
    
     Serout lcd,baud,[254,135,#dist_inch,"   "] ' display the distance in inches

     Serout lcd,baud,[254,204,#dist_cm,"   "] ' display the distance in centimeters

Goto main
LED:    
    high PORTB.0
    RETURN
APA:
    low PORTB.0
    RETURN

end

sr_sonar:

         pulsout trigger,1 ' send a 10us trigger pulse to the SRF04
         pulsin echo,1,dist_raw ' start timing the pulse width on echo pin
         dist_inch = (dist_raw/conv_inch) ' Convert raw data into inches
         dist_cm = (dist_raw/conv_cm) ' Convert raw data into centimeters
         pause 1 ' wait for 10us before returning to main

return

Lo unico que tendrias que modificar seria las condisiones y la llamada del LED ( que ahi podrias poner los motores) no esta demas decirte que las condiciones vienen con una division que te permite poner la distancia en cm , por ejemplo yo tengo ahi 100cm.
Cualquier duda que tengas espero futuramente poder aclararla.

Saludos

 PD: Disculpen si me equivoque en algo
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 22 de Agosto de 2009, 19:45:28
.
Título: Re: Robot evita obstaculos
Publicado por: DanMech21 en 25 de Agosto de 2009, 21:45:32
Hola alpha44 , me alegra saber que te sirvio de algo mi aportacion y respecto a lo que me dises....si se conecto algo y es de vital importanci en todos los diagramas jejeje , mira donde dise VCC se refiere a 5 vdc y donde dise gnd se conecta la "tierra" de la fuente con la que estas alimentando el circuito con tierra me refiero ala terminal negativa.

Mucha suerte con tu proyecto

Saludos desde México  :-/
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 26 de Agosto de 2009, 21:56:43
.
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 26 de Agosto de 2009, 23:07:26
.
Título: Re: Robot evita obstaculos
Publicado por: tapi8 en 28 de Agosto de 2009, 19:14:48
VCC positivo y GND negativo, en este caso supongo que de 12V.

para el emisor de ultrasonidos si "bsf PORTB,1" tienes que configurar ese pin como salida al principio del programa ponerlo a 0

tapi8
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 29 de Agosto de 2009, 22:13:33
.
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 14 de Octubre de 2009, 09:31:17
.
Título: Re: Robot evita obstaculos
Publicado por: Miquel_S en 14 de Octubre de 2009, 12:50:02
Hola de nuevo alpha44, mira el primer error que veo es al declarar las variables de temporizacion, y es que las estas guardando en el mismo registro las tres
(EQU 0CH) y esto no es la manera correcta de hacerlo.
Se resuelve de la siguiente manera:

 CBLOCK      H'20'
 PDel0
 PDel1
 PDel2
 ENDC

 Dicho trozo de codigo indica que empiezas a almacenar el valor de la primera variable en la direccion H'20' y el resto van correlativas, o podrias hacer lo mismo pero sin el H'20' y guardarias la primera variable en la primera direccion libre que tuvieras.

 Lo siento pero me tengo que ir a una urgencia en el trabajo cuando pueda terminare de ojear el programa. :x

 Saludos  Miquel_S

Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 16 de Octubre de 2009, 09:49:39
.
Título: Re: Robot evita obstaculos
Publicado por: Miquel_S en 16 de Octubre de 2009, 17:59:52
Hola de nuevo, siento llegar tarde a la solucion pero he tenido problemas con una averia en el curro y francamente despues del trabajo lo que menos tenia eran ganas de estar delante del ordenador.
Pero de todas formas sigamos y lo sabras para la proxima:

1º  Al poner el INCLUDE  <P16F84A.INC> no es necesario que declares los registros STATUS,PORTA,TRISA PORTB,TRISB ni ningun otro ya que lo haces al poner el INCLUDE.

2º  La forma correcta de empezar es:
   
  ORG      0X00
  goto      Inicio           ;Va a la primera instruccion del programa
                                 ;Aqui pondrias el vector de interrupcion  0X04 se usa cuando tienes interrupciones
  ORG      0X05           ;Salta el vector de interrupcion

3º  Referente a las macros del movimiento de las ruedas no puedo decirte si las tienes bien porque no se como tienes conectados los motores

 Saludos y lo siento.

 Miquel Servera
Título: Re: Robot evita obstaculos
Publicado por: alpha44 en 16 de Octubre de 2009, 19:32:19
.
Título: Re: Robot evita obstaculos
Publicado por: migsantiago en 26 de Octubre de 2009, 11:19:36
Algunos mensajes han sido eliminados por el usuario Alpha44. Aquí queda el tema completo por si algún usuario lo requiere.

Adjunto a este mensaje: páginas 1 y 2 del tema.

http://www.4shared.com/file/143768996/16bd6830/Robot_evita_obstculos.html
Título: Re: Robot evita obstaculos
Publicado por: MLO__ en 26 de Octubre de 2009, 15:31:44
 :shock:
Título: Re: Robot evita obstaculos
Publicado por: Miquel_S en 26 de Octubre de 2009, 18:14:50
Yo tambien estoy  :shock: despues de haber ayudado en el proyecto.  :mrgreen:

PD:No es que me arrepienta de nada pero no entiendo el porque ha quitado los post's.

Miquel_S