Hola a todos!!
Después de este descanzo navideño
y año nuevo.
Y álgo más cuerdo
He realizado las pruebas con los sensores infrarrojos (pna4602).
El programa realiza lo siguiente :
Si el sensor detecta la señar infrarroja se pone en estado logico alto el pin que esta conectado al control del motor.
Si el sensor no detecta la señal infraroja el pin de salida correspondiente sera puesto a 0.
Sensores conectados a GP0(pin7) y GP1(pin6). Led infrarrojo a GP2(pin5). Resistencia de 220 ohms.
Todo esto lo he simulado y armado en proto , funciona correctamente.
Cubrir los leds ir con termofill o algun otro tipo de cubierta, esto para evitar un mal funcionamiento,ya que la luz escapa por los costados del led.
Si es necesario colocar un capacitor electrolitico de 4.7uF minimo a la salida del sensor esto es si hay inestabilidad de los sensores (algunos picos que se interpreten como sensado)Asi que con el capacitor evitamos esto ya que no se descarga rapidamente haciendo un pequeño filtro a la salida.
;**********************************************************************
; *
; Filename: MICRO_SUMO *
; Date: *
; File Version: 1.0 *
; *
; Author: AKENAFAB *
; *
; *
; *
;**********************************************************************
list p=12f629 ; list directive to define processor
#include <p12f629.inc> ; processor specific variable definitions
errorlevel -302 ; suppress message 302 from list file
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
#DEFINE BANK0 BCF STATUS,5
#DEFINE BANK1 BSF STATUS,5
#DEFINE PORT GPIO
;***** VARIABLE DEFINITIONS
CBLOCK 0X20
COUNTER
REPEAT
PDel0
PDel1
REPEAT2
ENDC
;**********************************************************************
ORG 0x000 ; processor reset vector
goto main ; go to beginning of program
ORG 0x020 ;
main
;---- ----------- --- CONFIGURACION OSCILADOR INTERNO 4MHz ---- ----- -----
BANK0
call 0x3FF
BANK1
movwf OSCCAL
BANK0
;--------------------------------------------------------
; --------------- INICIO DE PROGRAMA ----------------
; --------------- CONFIGURACION DEL PUERTO -------------
BANK0 ;CAMBIO A BANCO 0
CLRF GPIO
MOVLW 0X07
MOVWF CMCON ;COMPARADORES APAGADOS
BANK1 ;CAMBIO A BANCO 1
MOVLW B'001011' ;GP0-GP1 = pna1,PNA2
MOVWF TRISIO ;GP2= IR LED ~ 38 KHz
;GP4=Motor1 GP5=Motor2
BANK0 ;CAMBIO BANCO 0
;---------------------------------------------------------------------------
INICIO
MOVLW .50 ; 50 VECES SE REALIZA LA PWM
MOVWF REPEAT
CALL IR_BEACON_1 ; LLAMA SUBRUTINA PWM 38KHz 50%
BTFSC PORT,0 ; DETECTA SEÑAL IR?
GOTO NO
BSF PORT,5 ; SI, ACTIVA MOTOR1
PNA2
BTFSC PORT,1 ; DETECTA SEÑAL IR?
GOTO NO2 ;
BSF PORT,4 ;SI, ACTIVA MOTOR2
GOTO INICIO
NO
BCF PORT,5 ;ALTO MOTOR1
GOTO PNA2
NO2
BCF PORT,4 ;ALTO MOTOR2
GOTO INICIO ;REGRESOS AL INICIO DEL PROGRAMA
;------------------ Modulación 38Kz --- 26 us ---
IR_BEACON_1
BSF PORT,GP2 ;Ir LED ENCENDIDO
;NOP ; CON LOS 2 NOPS SE OPTIENE 38.5 KHz
;NOP ; SIN LOS NOPS SE OBTIENE 41.6KHZ
MOVLW .5
MOVWF COUNTER
DECFSZ COUNTER,F
GOTO $-1
BCF PORT,GP2 ;Ir LED APAGADO
nop
nop
NOP
DECFSZ REPEAT,F
GOTO IR_BEACON_1
RETURN
;----------------------__________________________--------------------------
;----------- Valor de Calibracion ---------
ORG 0X3FF
RETLW 0X080
;------------------------------------------
END ; directive 'end of program'
Bueno , si lo montamos en nuestro microsumo lo único que hara es seguir lo que se lo ponga enfrente si es que detecta algo , en caso de que no detecte y siguiendo a pie firme el diagrama , ira de reversa.
Modificando un poco el código , cosa que es mínima. Podemos hacer que evada obstáculos.Es más , podemos hacer que el bot nos siga si le apuntamos con el control remoto y presionamos cualquier tecla.
Hasta pronto
Atentamente
Akenafab