¿ Cómo construir un carro seguidor de linea con pic 16f84 ?

pues como es mi primer robot no tengo bien planteado como seria la parte mecanica del mismo, asi como un poco de la circuiteria.

mi problema en si seria que tipo de configuracion podria utilizar para los motores y que tipo de motores me servirian que me puedan responder en los dos modos de operacion ya sea como seguidor de linea o que me esquibe obstaculos

espero averme expresado bien
 
Los motores: Utiliza servomotores, que tu mismo puedes trucara para que tengan un giro de
360 grados. Los motores los puedes controlar con un driver de potencia o con unos transistores.
 
jim_17 dijo:
Los motores: Utiliza servomotores, que tu mismo puedes trucara para que tengan un giro de
360 grados. Los motores los puedes controlar con un driver de potencia o con unos transistores.

es muy buena idea ya lo avia pensado utilizar servos pero el unico inconveniente es que estan un poko caritos y no contamos con presupuesto, no sabrias de donde los podria sacar o algun otro tipo de motores

Gracias
 
Hola !

Me parece un buen proyecto el del carrito espero que lo saquen adelante...

Para Ivet, si no te urge mucho, te recomiendo que armes el programador, es facil y con este puedes programar solo el 16F877, sino muchos otros más y su costo es muy reducido, por si te interesa te dejo un archivo adjunto con la información de este sencillo circuito.
 

Adjuntos

  • programador_158.zip
    462.1 KB · Visitas: 807
Última edición por un moderador:
mmm pueden intentar hacer una lagartija, basicamente es un seguidor de linea con un motor de dc y un servo, con una especie de transmisión haces que el motor le de potenca a las dos ruedas traseras (con su respectivo puente h para proteger el pic, y el servo SIN operar lo pones para que le de direccion a una unica rueda delantera, los sensores deben ir adelante de esta, el resto es cuestion de programacion, este tipo de seguidores son los mas rapidos que he visto, pero sopn muy dificiles de controlar, y un vez logrado esto, son imparables
 
Última edición por un moderador:
Aquí libero un código que hice para un PIC12F675, no recuerdo si funciona, pueden adaptarlo para el 16f84 o cualquier otro, este código tiene CopyLeft, significa que deben de mencionar el autor original (osease yo, Aztk) y liberar -publicar- las modificaciones que le hayan hecho, jejeje

Código:
; -----------------------------------------------------------------------
; Aztk CopyLeft 2008
; --------------------
;
; GP0 : input, Sensor derecho
; GP1 : input, Sensor izquierdo
; GP4 : output, bitA del puenteH
; GP5 : output, bitB del puenteH
;
; Si los dos sensores están apagados, el móvil sigue derecho
; Si los dos sensores están encendidos, el móvil tiene memoria de la
;	ultima dirección elegida.
; -----------------------------------------------------------------------
; Template source file generated by piklab
    #include <p12f675.inc>

; -----------------------------------------------------------------------
; Bits de configuración: adapte los parámetros a su necesidad
    __CONFIG 0x01E4

; -----------------------------------------------------------------------
; Variables declaration
D0X   equ    0x20
; -----------------------------------------------------------------------
; Inicio de programa

    org   0x00

    bsf   STATUS,RP0       ; Bank 1
    call  3FFh             ; Get the cal value
    movwf OSCCAL           ; Calibrate
    bcf   TRISIO,GP4
    bcf   TRISIO,GP5
    bcf   STATUS,RP0       ; Bank 0

main
    movlw 0x03
    andwf GPIO,W           ; Analizar solamente GP0 y GP1
    btfsc STATUS,Z	   ; ¿Estan en cero (off)?
    goto  acelera	   ; Si, entonces acelera
    movwf D0X		   ; No, guardar dato para analizar

    movlw 0x01
    andwf D0X,W		   ; Analizamos solamente GP0
    btfsc STATUS,Z	   ; ¿Está off?
    goto  left		   ; Si, entonces a la izq
			   ; No, probaremos con GP1
    movlw 0x02
    andwf D0X,W		   ; Analizamos solamente GP1
    btfsc STATUS,Z	   ; ¿Está off?
    goto  right		   ; Si, entonces a la derecha
    goto  main		   ; Repetir de nuevo el algoritmo

acelera
    bcf   GPIO,GP4	   ; off A
    bcf   GPIO,GP5	   ; off B
    goto  main		   ; repetir de nuevo el algoritmo

left
    bcf   GPIO,GP4	   ; off A
    bsf   GPIO,GP5	   ; on B
    goto  main		   ; repetir de nuevo el algoritmo

right
    bcf   GPIO,GP5	   ; off B
    bsf   GPIO,GP4	   ; on A
    goto  main		   ; repetir de nuevo el algoritmo

    org   3FFh
    retlw 0x4C             ; cal value

END

; ------------------------------------Author: Aztk
; ------CopyLeft----------------------------------

Los bits A y B son de control para un puenteH y así hacer girar el móvil.
Buena Vibra!
 
ivet
Un servo para la dirección no necesita ser modificado (a menos que quieras que gire los 360 grados para hacer una funcion de reversa).

El tipo de direccion separada de la traccion se llama Ackerman (y es como la de los coches), esta tiene la ventaja de que puedes tener un motor de mucha velocidad para las vueltas y uno capaz de hacer giros lentos pero con torque para los ajustes de dirección, la desventaja es que no pueden dar vueltas tan cerradas como un sistema diferencial (como de tanque), ya que siempre necesitan un radio de giro minimo, y si no haces una montura especial para la dirección (de tal forma que la rueda interna se cierre mas que la externa en las vueltas), son inestables.

Para los concursos, los robots que mas se usan son diferenciales (dos motores iguales para la traccion), porque son más faciles de hacer.
 
Hola que tal, soy alumno de electronica y me han encargado una proyecto que consiste en un vehiculo capaz de evadir los obstaculos. Por dejar todo a lo ultimo me ganaron las prisas, ademas de que no vivo en un lugar donde pueda llegar a encontar cualquier material a la mano a no ser de que lo mande a pedir( lo cual tardaria mas de una semana). Lo que hice fue lo siguiente:

Utilizar LDR como sensores de proximidad conectadas directamente a positivo (+5) y a un pic 16F84A, tomando cuatro salidas por que tengo dos puentes H con dos motores respectivamente. Los puentes H estan hechos tal y como lo muestra el adjunto.

Lo que no pude solucionar es que usa dos baterias de 9v, ya que si solo uso una para todos los circuitos se baja muy rapido, entonces utilice dos reguladores de voltaje de 5v lm7805 y dividi los circuitos, un puente con el pic y un regulador y el otro regulador con un puente H.

Quedo bien a pesar de todo pero con pequeñas fallas de acuerdo a los sensores. P ero el motivo de esta charla es que ahora que ya tengo tiempo me gustaria mejorarlo, sustituir algunos elementos por integrados o mejorar el funcionamiento de los sensores ademas de reducir el consumo (lograr utilizar una sola bateria) y si es posible, porque no, integrar una fotocelda para recargarse de manera automatica y asi evitar el desgaste de baterias.

Yo se que puede sonar muy confunso por mi mala redaccion pero quisiera algunas ideas para empezar de nuevo y poder realizarlo.

De antemano muchas gracias y saludos a todos en el foro.

P.D. Tengo el diagrama final pero con un error, en cuanto lo arregle lo adjuntare, gracias por su ayuda
 

Adjuntos

  • motorcc_puenteh_123.gif
    motorcc_puenteh_123.gif
    8.4 KB · Visitas: 391
;PROGRAMA QUE CONTROLA GIROS DE MOTORES PARA ROBOT SEGUIDOR DE LINEA negra
;--------------------------------------------------------------------------------------------------------

LIST P= 16f84A
INCLUDE<P16F84A.inc>


tmr0_opt EQU 1h ;Registro compartido para TMR0(Banco 0) y OPTION_REG(Banco 1)
porta equ 05h ;registro del puerto A
portb equ 06h ;registro del puerto B


org 0x00

goto inicio

inicio bsf STATUS,RP0 ;se ubica en el segundo banco de la RAm
movlw B'11111'
movwf PORTA ;se programan los pines del puerto A
movlw B'00000000'
movwf PORTB ;se programan los pines del puerto B
movlw 82h
movwf tmr0_opt
bcf STATUS,RP0 ;se ubica en el primer banco de la memoria RAM

PREGUNTA
movlw b'00101' ;activa bit 0 y 2 indica gire atras
subwf PORTA
btfsc STATUS,2
goto ATRAS
movlw b'00001' ;activa bit 0 para que gire derecha
subwf PORTA
btfsc STATUS,2
goto DERECHA
movlw b'00100' ;activa bit 2 para que gire izquierda
subwf PORTA
btfsc STATUS,2
goto IZQUIERDA
movlw b'00000' ; bit en ceros para que siga adelante el carro
subwf PORTA
btfsc STATUS,2
goto ADELANTE

ATRAS
movlw b'00001010' ;bit 1 y 3 se activan en salida portb
movwf PORTB
bcf STATUS,2
goto PREGUNTA

DERECHA
movlw b'00000110' ;bit 1 y 2 se activan en salida portb
movwf PORTB
bcf STATUS,2
goto PREGUNTA

ADELANTE
movlw b'00000101' ;bit 0 y 2 se activan en salida portb
movwF PORTB
bcf STATUS,2
goto PREGUNTA

IZQUIERDA
movlw b'00001001' ;bit 0 y 3 se activan en salida portb
movwF PORTB
bcf STATUS,2
goto PREGUNTA

END

ojala les sirva este programa en asm solo lo cargan al pic 16f84a con sus respectivos elementos y funcionara bn.....suerte!!!!!Ver el archivo adjunto simulacion proteus seguidor listo.rar

programa ejecutado en mplab ide v8.1 en mayor v. tambien les corre!!!!! buena suerte!!

se utilizaran dos sensores cny70

este circuito es el que va a utilizar en el sensado de los dos cny70 ojo este es para un solo cny70 pero solo es adicionarle las misma conexiones ya que ese circuito integrado trabaja la otra parte o mejor el otro lado de pines igual no hay ningun problema.......ojala les sirva!!!!!
 

Adjuntos

  • cny70_168[1].jpg
    cny70_168[1].jpg
    28.9 KB · Visitas: 129
Última edición:
hola yo tengo un programa que me dio uno de mis profesores en el cual usa 1 PIC16F84A 3 sensores cny 70, lo probe en el mplab 8.6.
;instrucciones para el carrito seguidor de lineas
;
;COMIENZA RUTINA
;******************************************************************************************************************
;
;programa de pic 16 f84

;*************************************************************************************************************



LIST P=16F84A, R=DEC ;PROCESOR A UTILIZAR Y SISTEMA DECIMAL

#INCLUDE<P16F84.INC>

__CONFIG_CO_OFFY_WDT_OFFY_PWRTE_ONY_XT_OSC

;**************************************************************************************************************


LED EQU H'03'
SWITCH EQU H'04'

CNT1 EQU H'10'
CNT2 EQU H'11'
CNT3 EQU H'12'
CNT4 EQU H'13'
CNT5 EQU H'14'
CNT6 EQU H'15'
CNT7 EQU H'16'

ORG 0000 ;VECTOR DE REESTABLECIMIENTO DEL PROGRAMADOR
GOTO INICIO


;************************************************INICIO DEL SISTEMA DE INSTRUCCIONES**************************



INICIO
CLRF PORTA
BSF STATUS,RP0 ;CAMBIAR AL BANCO 1
MOVLW B'10111' ;W <=B'10111'
MOVWF TRISA ;RA0 RA1 RA2 RA4>ENTRADAS, RA3 SALIDA
MOVLW 0X00 ;W <=B'00000000'>
MOVWF TRISB ;<RB0 A RB7> SALIDAS
BCF STATUS,RP0 ;REGRESA AL BANCO 0

;***************************************************************************************************************
;RUTINA QUE PERMITE ENCENDER UN LED POR 5 OCASIONES, DESPUES DE QUE SE PRESIONA EL INTERRUPTOR
;TIPO MINITACTO, DESPUES ARRANCA EL CARRO, COMPORTANDOSE DE ACUERDO A LOPROGRAMADO EN LA
;RUTINA DE CONTROL

MAIN
BCF PORTA,LED ;coloca un cero en el bit declarado como led de la memoria (led apagado)
CLRF PORTB ;BORRA EL CONTENIDO DEL PORTB APAGANDO ALOS MOTORES

BTFSS PORTA,SWITCH ; SI EL SWITCH ESTA ACTIVADO ENTONCES EL PROGRAMA BRINCA A MOVLW'5'
GOTO MAIN ;si el switch no esta activado el progrema regresa a main
MOVLW D'5' ;CARGA UN CINCO LITERAL EN EL ARCHIVO W
MOVWF CNT4 ;CARGA CON 5W EL ARCHIVO CONTADOR 4

LED_LOOP
BSF PORTA,LED ;COLOCA UNO(SET) EN EL BIT LED DEL ARCHIVO PORTA
CALL TMR1
BCF PORTA,LED ;COLOCA UN CERO EN EL BIT ARCHIVO PORTA
CALL TMR1
DECFSZ CNT4,1
GOTO LED_LOOP
GOTO PRINCIPAL

;**********************************************************************************************************************************************************
;RUTINA COMPUESTA POR EL USO DE 3 TIMERS CONESTADOS EN FORMA ANIDADA LOS CUALES PERMITEN EL EFECTO DE RETRASO DE APROXIMADAMENTE 500mS




TMR1
MOVLW D'41' ;CARGA 41 LITERAL EN EL ARCHIVO W
MOVWF CNT1

DELAY1
CALL TMR2 ;LLAMAR ALA SUBRUTINAETIQUETADA CON TIMER 2 PARA EJECUTARLA
GOTO $+1 ;INSTRUYCCION QUE PERMITA HACER UN SALTO A LA SIGUIENTE INSTRUCCION
DECFSZ CNT1,1 ;DECREMENTA EL VALOR DEL CONTADOR 1 EN UNO
GOTO DELAY1 ;SI EL RESULTADO DE DECREMENTO NO ES 0, REGRESA A DELAY 1
RETURN ;SI EL RESULTADO DEL DECREMENTO NO ES CERO REEGRESA A DELAY1

TMR2
MOVLW D'100' ;CARGA 100 LITERAL EN EL ERCHIVO W
MOVWF CNT2 ;MUEVE EL 100 (ARCHIVO) AL CONTADOR 2

DELAY2
CALL TMR3 ;LLAM ALA SUBRUTINA ETIQUETADA CON TIMER 3 PARA EJECUTARLA
GOTO $+1 ;INSTRUCCIN QUE PERMITE EL SALTO A LA SIGUIENTE DENTRO DE LA SUBRUTINA
DECFSZ CNT2,1 ;DECREMENTA EL VALOR DEL CONTADOR 2 EN 1
GOTO DELAY2 ;SI EL RESULTADO DEL DECREMEBNTO NO ES CERO REGRESA A DELAY2
RETURN ; SI EL RESULTADO0 DEL DECREMENTO ES CEROREGRESA A $+1 DE DELAY1


TMR3
MOVLW D'100' ; CARGA 100 LITERAL EN EL ARCHIvO W
MOVWF CNT3 ;MUEVE EL 100 (ARCHIVO) AL CONTADOR3

DELAY3
GOTO $+1
DECFSZ CNT3,1
GOTO DELAY3
RETURN


;=================================================================================================================================================================
;==============================================RUTINA DE CONTROL DEL MOVIMIENTO DEL CARRITO=======================================================================
;=================================================================================================================================================================


PRINCIPAL ;ETIQUETA
BTFSS PORTA,0 ;INSTRUCCION QUE EXPLORA EL ESTADO DEL BIT 0 DEL PORTA (SENSOR IZQUIERDO)
CALL IZQUIERDA ;SI EL RSULTADO ES CERO LLAMA A LA SUBRUTINA IZQUIERDA
BTFSS PORTA,1 ;INSTRUCCION QUE EXPLORA EL ESTADO DEL BIT 1 DEL PORTA (SENSOR CENTRAL)
CALL ADELANTE ;SI EL RESULTADO ES CERO LLAMA ALA SUBRUTINA ADELANTE
BTFSS PORTA,2 ;INSTRUCCION QUE EXPLORA EL ESTADO DEL BIT2 DEL PORTA (SENSOR DERECHO)
CALL DERECHA ;SI EL RESULTADO ES CERO LLAMA A LA SUBRUTINA DERECHA
GOTO PRINCIPAL ;INDICA AL PROGRAMA SALATAR A LA INSTRUCCION ETIQUETADA CON PRINCIPAL

ADELANTE ;ETIQUETA
MOVLW B'10100000' ;MUEVE EL VALOR EN ARCHIVO W
MOVWF PORTB ;MUEVE EL ARCHIVO W EN PORTB
RETURN ;REGRESO A PRINCIPAL, LAINSTRUCCION BTFSS, PORTA,2

IZQUIERDA ;ETIQUETA
MOVLW B'10000000' ;MUEVE EL VALOR EN ARCHIVO W
MOVWF PORTB ;MUEVE EL ARCHIVO W EN PORTB
RETURN ;REGRESO A PRINCIPAL, A LA INSTRUCCION BTFSS, PORTA,1

DERECHA ;ETIQUETA
MOVLW B'00100000' ;MUEVE EL VALOR EN ARCHIVO W
MOVWF PORTB ;MUEVE ARCHIVO W EN PORTB
RETURN ;REGRESO A PRINCIPAL A LA INSTRUCCION BTFSS,PORTA,0

;=================================================================================================================================================================
;=================================================TERMINA TODAS LAS INSTRUCCIONES PARA EL CARRITO SEGUIDOR========================================================
;=================================================================================================================================================================

END


espero que les sirva
(no se mucho por que soy un novato y espero no se enreden con las instrucciones)
 
Atrás
Arriba