oferta

sábado, 7 de mayo de 2011

CONTADOR CON PULSADOR

Bien esta vez haremos un contador de 0 a 9 mediante un pulsador en Ra0 que cada vez que es pulsado incrementara la cuenta en el contador en forma binaria y mostrado  por el puerto B, usando un decodificador 7447 convertiremos este conteo de binario a decimal, si la cuenta llega a 9 se reiniciara el conteo.
Esto mismo se puede hacer sin usar el 7447 usando las famosas tablas del pic, pero queria hacerlo de esta forma para entender el algoritmo de programacion, en una proxima publicacion haremos el contador sin 7447.




;EL PROGRAMA

list p=16f84

status    equ 0x03
trisb      equ 0x86
portb    equ 0x06
trisa      equ 0x85
porta    equ 0x05
reg1     equ 0x0C ; Estos 3 registros los utilizaré
reg2     equ 0x0D ; para hacer el retardo
reg3     equ 0x0E

org 0x00                                 ;inicio del programa
bsf status,5                              ;vamos al banco1
clrf trisb                                   ;portb es salida
movlw b'00000001'                ;Ra0 es entrada
movwf trisa
bcf status,5                             ;regresamos al banco0
inicio clrf portb
        repite btfss porta,0          ;presiono pulsador Rao?
       goto $-1                         ;si no regresa atras
       call rebote                       ;llama antirebote
       incf portb,1                     ;incrementa el conteo mas 1
;comparacion del conteo=9
   MOVF portb,0
   XORLW B'1010'               ;pregunta si conteo=9
   BTFSC status,2                 ;aqui ve la respuesta
   goto inicio                          ;si es asi vuelve a inicio
   btfsc porta,0                      ;solto el pulsador?
   goto $-1                            ;si no regresa atras
   goto repite

rebote  movlw 10              ; Aquí se cargan los registros
            movwf reg1           ; reg1, reg2 y reg3
            tres movlw 10        ; respectivamente
            movwf reg2
  dos    movlw 10
           movwf reg3
  uno   decfsz reg3,1            ; Aquí se comienza a decrementar
          goto uno                    ; Cuando reg3 llegue a 0
          decfsz reg2,1             ; le quitare 1 a reg2
          goto dos                    ; cuando reg2 llegue a 0
          reg1,1                       ; le quitare 1 a reg1
          goto tres                    ; cuando reg1 llegue a 0
          return                         ; regresare al lugar
          end
Aqui tienen el archivo HEX. comprobado y lo pueden bajar del siguiente link:
http://www.4shared.com/file/nCXiviU8/contador.html

sábado, 26 de marzo de 2011

BRAZO ROBOTICO A CONTROL REMOTO

Usando un control remoto para Television marca SONY y aprovechando un software hecho de control remoto sony para pic16f84a , haremos el control de un brazo robotico de 6 o mas grados de libertad.
Primero la construccion del brazo robotico, esto mas que todo es ingenio de uno , puede hacerse usando material reciclado de computadoras, impresoras, poleas , engranajes, servomotores, etc.

Sugiero la construccion de este brazo, debemos tener en cuenta que la armazon no pese tanto para no forzar a los servomotores que iran en cada articulacion, por ejemplo la mica puede ser un buen material liviano y resistente, los servomotores si no los consiguen en reciclaje se los pueden comprar de la marca FUTABA y seran 6:

Este segundo brazo para su construccion se necesita un poco mas de ingenio pero al final dara mas satifaccion al que lo construya o copien en algo la idea de su hechura
servomotor1: para cerrar y abrir la pinza
servomotor2: para rotacion de la muñeca
servomotor3: para rotacion del codo
servomotor4: para rotacion de el antebrazo
servomotor5 : para rotacion de el hombro
servomotor6 : para rotacion de la base
Aqui hay un detalle de la pinza hecho con engranajes reciclados de impresoras y un servo que los acciona, repito esto de hacer la construccion del brazo es ingenio de cada uno mas que todo


EL PROGRAMA PARA CONTROL REMOTO Y SU CIRCUITO
En el circuito mostrado tenemos 12 salidas del pic16f84 desde Rb0 hasta Rb7 y Ra0 hasta Ra3, estas salidas corresponden a un numero o canal del control remoto SONY de un televisor, tomamos un par de salidas por ejemplo Rb0 y Rb1 para el  servomotor1 , Rb2y Rb3 para el servomotor2 y asi sucesivamente, con el control remoto con cada numero o canal podemos activar cada salida del pic16f84a, esto es con el mismo numero o canal del control remoto apagamos o activamos su salida correspondiente.

Esto lo aprovechamos para controlar un servo, logicamente que antes de conectarlo al servo lo tenemos que conectar a un puente H a base transistores o  a base relays. Como son 12 salidas tomamos 2 salidas para cada servomotor.
El fotoreceptor de 3 terminales es un demodulador y amplificador es el TS0P21, TS0P23 lo pueden comprar  o utilizar uno usado de los que tienen los televisores a colores.

Bien como dije este programa no es mio , sus creditos a quien lo hizo, lo probe y funciona perfectamente lo pueden bajar  el HEX y fuente en ASM del siguiente link:

http://www.4shared.com/file/Ta1tCvfp/Sony.html
http://www.4shared.com/file/qF6QYgRK/Sony.html

jueves, 27 de enero de 2011

ELEVADOR DE 3 NIVELES

Esta aplicacion mas seria un elevador de 3 pisos que empieza en un sotano y subira de piso en piso en forma ascendente del 1 al 2 y del 2 al 3 y en la misma forma en descender(3-2-1), los botones de llamada son: Rb0=piso1
Rb1=piso2
Rb2=piso3
y los stop finales de carrera  ubicados en su piso correspondiente:
Rb5=piso1
Rb6=piso2
Rb7=piso3
todos los botones pulsadores de llamada y finales de carrera (o sensor magnetico) normalmente conectados a tierra, el motor usado es de corriente continua y  se usa el  Ra2 y Ra1 como salidas para el motor DC, sin mas que decir vamos al programa principal.

;ELEVADOR DE 3 NIVELES

INCLUDE "P16F84A.INC"
ORG 0X00
BSF STATUS,5
CLRF PORTA                ;puerto A es de salida
MOVLW B'11111111'
MOVWF TRISB            ;puerto B es  entrada de sensores
BCF STATUS,5
CLRF PORTB

;programa principal

INICIO
SUBEPISO1  BTFSS PORTB,0
                      GOTO SUBEPISO1
                      CALL SUBE
STOP1           BTFSS PORTB,5
                      GOTO STOP1
                      CALL STOP
SUBEPISO2  BTFSS PORTB,1
                      GOTO SUBEPISO2
                      CALL SUBE
STOP2          BTFSS PORTB,6
                      GOTO STOP2
                      CALL STOP
SUBEPISO3  BTFSS PORTB,2
                      GOTO SUBEPISO3
                     CALL SUBE
STOP3         BTFSS PORTB,7
                    GOTO STOP3
                    CALL STOP

BAJAPISO2   BTFSS PORTB,1
                      GOTO BAJAPISO2
                      CALL BAJA
PARADA2    BTFSS PORTB,6
                     GOTO PARADA2
                     CALL STOP
BAJAPISO1  BTFSS PORTB,0
                      GOTO BAJAPISO1
                      CALL BAJA
PARADA1    BTFSS PORTB,5
                     GOTO PARADA1
                     CALL STOP
                     GOTO INICIO

;Subrutinas de stop, bajada y subida de motor

STOP            MOVLW B'00000000'
                      MOVWF PORTA
                      RETURN
SUBE            MOVLW B'00000010'
                      MOVWF PORTA
                      RETURN
BAJA             MOVLW B'00000100'
                       MOVWF PORTA
                       RETURN
                       END

A pedido de muchos lectores aqui les dejo el link para descargar el archivo HEX, probado y comprobado
http://www.4shared.com/file/yZXHAim-/elevador3.html
Aqui una maqueta sugerida de un elevador de 3 niveles, con pulsadores de llamada tanto de la cabina como del panel frontal para poder llamarlo desde las 2 posiciones, para esto solo colocamos en paralelo otro pulsador en paralelo para cada piso desde Rb0 a Rb2.


ETAPA DE POTENCIA PARA MOTOR dC
Para el motor DC hacemos un puente H con  transistores 2n3904 para motores pequeños  y los cambian por tip41 si usan  motores DC mas grandes. Conectar la salida  Ra1 y Ra2 del PIC a la entrada del puente H (izquierda y derecha), los diodos d1-d4 son de proteccion contra chispazos que produce el motor DC.
Si es posible prueben el puente H solo para ver si sus entradas son excitadas con 0 y 5 voltios, generalmente los TIP41 necesitan mas corriente que la que genera un pic, lo mejor es usar darlingtongs y solucionamos el problema.


Para un ascensor de 4 pisos (que sube y baja a cualquier piso) el programa  en asembler seria muy extenso y engorroso, por eso hice el programa en  PICBASICPRO y lo pueden ver en mi pagina
http://www.proyectoselectronicoos.blogspot.com/  ascensor de 4 pisos con picbasic.

sábado, 15 de enero de 2011

CONTROL PUERTA DE GARAGE CON PAP

El control se hara con un motor PAP  unipolar por ser de la velocidad adecuada para abrir y cerrar el porton , al cual le colocaremos finales de carrera para detener la abrida o cerrada de la puerta.

El programa sera para el circuito siguiente donde en vez de relays  empleamos el ULN2803 como driver para el PAP conectando  Rb1, Rb2, Rb3 y Rb4  a las entradas del uln2803, y las salidas del uln2803 al motor pap unipolar. Rb5 colocar un led que indicara solo la subida (se enciende) y la bajada (apagado)






INCLUDE "P16F84A.INC"

REG1 EQU 0X0C                          ; Registro para hacer  un retardo
REG2 EQU 0X0D                         ; Registro para hacer  un retardo

; ***Configuracion de puertos******
ORG    0X00
BSF STATUS,5
CLRF PORTB                              ; Puerto B es de salida
MOVLW B'11111111'          
MOVWF TRISA                         ; Puerto A es de entrada de sensores
BCF STATUS,5

; *****Programa principal**********

INICIO         BTFSS PORTA,3               ;espero llamada RA3 para abrir la puerta
                     GOTO INICIO
ABRIENDO  CALL ABRIR                       ; subrutina abrir
                     BTFSS PORTA,1                ;chequea swicht de stop de abrir
                     GOTO ABRIENDO 
                     CALL STOP
ESPERA1    BTFSS PORTA,0              ; espero llamada RA2 para cerrar puerta
                     GOTO ESPERA1
CERRANDO  CALL CERRAR              ;subrutina de cerrar
                     BTFSS PORTA,2              ;chequea swicht de stop de cerrar
                    GOTO CERRANDO
                    CALL STOP
                    GOTO INICIO

; ******Parada del motor PAP********

STOP    MOVLW B'00000000'
              MOVWF PORTB
              RETURN

; *****Secuencia pasos de subida de motor PAP****


ABRIR    MOVLW B'00110000'     
               MOVWF PORTB
               CALL     RETARDO                          
                MOVLW B'00101000'
                MOVWF PORTB
                CALL RETARDO
               MOVLW B'00100100'
               MOVWF PORTB
               CALL RETARDO
               MOVLW B'001000010'
               MOVWF PORTB
               CALL RETARDO
               RETURN

; *****Secuencia pasos de subida de motor PAP****

CERRAR  MOVLW B'00000010' 
                 MOVWF PORTB
                 CALL RETARDO 

                 MOVLW B'00000100'
                 MOVWF PORTB
                 CALL RETARDO
                 MOVLW B'00001000'
                 MOVWF PORTB
                 CALL RETARDO
                 MOVLW B'00010000'
                 MOVWF PORTB
                 CALL RETARDO
                 RETURN

; *****Secuencia de retardo*********
RETARDO  MOVLW 60                 
                     MOVWF REG1               
         DOS   MOVLW 60
                    MOVWF REG2
          UNO  DECFSZ REG2,1
                     GOTO UNO
                     DECFSZ REG1,1
                    GOTO DOS
                     RETURN
                     END                              ; fin


Aqui tienen el archivo HEX. del proyecto probado, lo  pueden bajare del siguiente link:
http://www.4shared.com/file/dBXkgKG4/puertagaraje.html


martes, 28 de diciembre de 2010

INVERSION DE GIRO: MOTOR DC

En robotica se emplea mucho el control de motores DC para hacer la inversion de giro, como sabemos un motor de corriente continua tiene 2 polos: positivo y negativo, para hacer la inversion del motor solo tenemos que invertir la polaridad de la fuente y conectar al motor DC.

Inversion de giro para motor DC con el pic16f84a con puente H



Este programa controla un motor DC mediante un swicth en el puertob (Rb0) y utilizando Rb1 y Rb2 del puertob como salida para enviar los pulsos que invertiran el giro del motor DC, en el circuito deberan conectar ademas el cristal de 4 mhz y su respectiva alimentacion de 5Vdc.
Q1,Q2,Q3,Q4=BC548 para motores pequeños y TIP41 para motores grandes.
R1,R2,R3,R4= 300 ohmios.

;Programa para inversion de giro de motor DC
list p=16f84a           ; declaramos el pic que usaremos
; Declaracion de registros a usar
puertob  equ 0x06
trisb       equ 0x86
status     equ  0x03
; Configuracion de puertos
org        0x00
bsf        status,5               ; nos vamos al banco 1 de la memoria del pic
movlw   b'0000001'        ; guardamos en el registro W a  Rb0 como entrada
movwf   trisb                   ; y Rb1 a Rb7 como salidasy  mandamos lo de W a trisb
bcf        status,5              ; regresamos al banco 0 de la memoria del pic
; Programa principal
inicio   btfsc puertob,0                   ;  testeamos Rbo (pin6) si esta en 0 o 1
           goto izquierda                    ;  vamos a la etiqueta izquierda
           goto derecha                      ; vamos a la etiqueta derecha
izquierda   bsf puertob,1                ;  encendemos pin Rb1
                 bcf puertob,2               ;  y apagamos Rb2 para giro a la izquierda
                 goto     inicio                ; regresamos a inicio a ver si cambio el swicth
derecha    bcf  puertob,1               ; apagamos pin Rb1
                bsf  puertob,2               ; y encendemos Rb2 para invertir giro de motor
                goto     inicio                 ; regresamos a inicio a ver si cambio el swicth
                end                               ; y terminamos

Un proyecto mas interesante aplicando el control de un motor DC , ascensor de 4 niveles, para que lo bajen.

http://www.proyectoselectronicoos.blogspot.com/

sábado, 27 de marzo de 2010

CONTROL MOTOR PASO A PASO CON PIC


UN POCO DE TEORIA

Los motores paso a paso son ideales para la construcción de mecanismos en donde se requieren movimientos muy precisos. En este capítulo trataremos solamente los motores P-P del tipo de imán permanente, ya que estos son los mas usados en robótica.

Principio de funcionamiento

Básicamente estos motores están constituidos normalmente por un rotor sobre el que van aplicados distintos imanes permanentes y por un cierto número de bobinas excitadoras bobinadas en su estator.
Las bobinas son parte del estator y el rotor es un imán permanente. Toda la conmutación (o excitación de las bobinas) deber ser externamente manejada por un controlador.
Existen dos tipos de motores paso a paso de imán permanente:

Motor bipolar. tiene generalmente cuatro cables de salida (ver figura 1). Necesitan ciertos trucos para ser controlados, debido a que requieren del cambio de dirección del flujo de corriente a través de las bobinas en la secuencia apropiada para realizar un movimiento.
En figura 3 podemos apreciar un ejemplo de control de estos motores mediante el uso de un puente en H (H-Bridge). Como se aprecia, será necesario un H-Bridge por cada bobina del motor, es decir que para controlar un motor Paso a Paso de 4 cables (dos bobinas), necesitaremos usar dos H-Bridges iguales al de la figura 3 . El circuito de la figura 3 es a modo ilustrativo y no corresponde con exactitud a un H-Bridge. En general es recomendable el uso de H-Bridge integrados como son los casos del L293 .


Motor unipolar.- Estos motores suelen tener 6 o 5 cables de salida, dependiendo de su conexionado interno (ver figura 2). Este tipo se caracteriza por ser más simple de controlar.





figura2


Identificacion de bobinas en motores unipolares
  • Seleccionar un cable y conectarlo a masa. Ese será llamado cable A.
  • Manteniendo el cable A conectado a masa, probar cuál de los tres cables restantes provoca un paso en sentido antihorario al ser conectado también a masa. Ese será el cable B.
  • Manteniendo el cable A conectado a masa, probar cuál de los dos cables restantes provoca un paso en sentido horario al ser conectado a masa. Ese será el cable D.
  • El último cable debería ser el cable C. Para comprobarlo, basta con conectarlo a masa, lo que no debería generar movimiento alguno debido a que es la bobina opuesta a la A.
Secuencias para manejar motores paso a paso unipolares

A continuación se puede ver la tabla con la secuencia necesaria para controlar motores paso a paso del tipo unipolares
Primera secuencia de pasos para motores PAP

















Segunda secuencia de pasos para motores PAP




























CONTROL DE UN MOTOR UNIPOLAR (en un solo sentido)
En la figura podemos apreciar un ejemplo de conexionado para controlar un motor paso a paso unipolar mediante el uso de un ULN2803 el cual es una array de 8 tansistores tipo Darlington capaces de manejar cargas de hasta 500mA. Las entradas de activación (Activa A, B , C y D) se conectan al puerto B del pic16f84A , pin6=A, pin7=B, pin8=C y pin9=D respectivamente

LIST P=16F84A
;DECLARACION REGISTROS A USAR
status equ 0x03
portb equ 0x06
trisb equ 0x86
reg1 equ 0x0c                  ;registro usado para el retardo
reg2 equ 0x0d                  ;registro usado para el retardo
;CONFIGURACION PUERTO B COMO SALIDA
org    0x00                       ;origen del programa
bsf status,5                       ;vamos al banco1 de la memoria RAM
clrf trisb                            ;puerto queda configurado como salida
bcf status,5                       ;regresamos al banco0 de la memoria RAM
;PROGRAMA PRINCIPAL
inicio movlw b'00001000'    ;cargamos W con b'00001000'
movwf portb                         ;mandamos lo que hay en W al puerto B
call retardo                            ;hacemos una pausa
movlw b'00000100'
movwf portb
call retardo
movlw b'000000010'
movwf portb
call retardo
movlw b'00000001'
movwf portb
call retardo
goto inicio
retardo
MOVLW 0x90                   ;cargamos (w) con el hexadecimal 90
MOVWF reg1                    ;mover lo que hay en W al registro1
MOVLW 0x90                   ;cargamos (w) con hexadecimal 90
MOVWF reg2                    ;mover que hay en W al registro2
uno DECFSZ reg1,1           ;Decrementa registro1 y el resultado guardalo en el mismo
GOTO uno
dos DECFSZ reg2,1           ;decrementa registro2 y el resultado guardalo en el mismo
GOTO dos
RETURN                            ;retorna de donde lo llamaron
end                                      ;Fin del programita

Aqui tienen el archivo HEX. probado:
http://www.4shared.com/file/41AN3W3e/motorunipolar.html


EXPLICACION DEL PROGRAMA
Vamos hacer uso de la primera secuencia de pasos para controlar el motor PAP en un solo sentido, fijese que son 4 pasos para que complete una secuencia, por lo que podemos repetir estos 4 pasos con una etiqueta inicio e indicar que todo se repite con GOTO inicio.
con MOVLW b'00001000' guardamos la primera secuencia de paso en el registro auxiliar W y luego con MOVWF portb enviamos al puerto B la secuencia guardada en W anteriormente, en este momento se encendera solo el pin9 del puerto B y los restantes pines estaran apagados y finalmente con CALL retardo hacemos una pausa para poder visualizar el encendido


Las tres instruccciones siguientes hacen lo mismo ejecuntando el paso 2 para motores PAP (ver tabla de pasos) y solo encendera el pin8 del pic, y asi las 3 instrucciones siguientes ejecutan el paso3 y encendera el pin7 del pic, ylas 3 ultimas instrucciones ejecutan el paso4 y encendera el pin6 del pic.
Para que todo este proceso se repita solo colocamos una etiqueta inicio y hacemos bucle con GOTO inicio.


Led parpadeante


DIODO LED PARPADEANTE EN EL PUERTO B (PIN 6= RBO)

 

El led se prendera y apagara  y no lo podremos notar porque es tan rapido la ejecucion del programa que el pic ejecuta un millon de instrucciones en 1 segundo, entonces necesitamos que el PIC entre el apagado y encendido haga una pausa o retardo para poder visualizar el encendido y apagado del led, para eso haremos otro pequeño programita que retarde el encendido y apagado del led. Lo llamaremos RETARDO para lo cual usaremos 2 registros; y los llamaremos reg1 y reg2 respectivamente (puede ser cualquier nombre).Con esta rutina de RETARDO,  el pic16f84 pierde tiempo haciendo un conteo descendente con 2 registros, cada registro de 8 bits es desde  0 hasta 255 =11111111=0xff, entonces con 2 registros aumentamos el tiempo de retardo :
*************************************************************************

LIST P=16F84A              ; indicamos el PIC que utlizaremos;
;DECLARACION REGISTROS A USAR
STATUS EQU 0x03        ; Registros de la memoria RAM
PORTB   EQU 0x06        ;con  su direccion hexadecimal
TRISB     EQU 0x86
reg1         EQU 0X0C      ;registro usado para el retardo
reg2         EQU 0X0D      ;registro usado para el retardo

org         0x00                  ;inicio del programa


; CONFIGURAMOS PUERTO B COMO SALIDA
BSF STATUS,5                ;vamos al banco1
CLRF TRISB                    ;puerto b es salida(colocamos '00000000')
BCF STATUS,5               ;regresamos banco0

;PROGRAMA PRINCIPAL
inicio  BSF PORTB,0         ;enviamos un "1"(5 voltios) al pin6, prende el led
          call RETARDO         ;se dirige a subrutina RETARDO
          BCF PORTB,0         ;enviamos un "0" (0 voltios) al pin6, apaga el led
         call RETARDO          ;se dirige a subrutina RETARDO
         GOTO inicio

RETARDO
MOVLW 0x90                  ;cargamos (w) con el hexadecimal 90
MOVWF reg1                   ;mover lo que hay en W al registro1
MOVLW 0x90                  ;cargamos (w) con hexadecimal 90
MOVWF reg2                   ;mover lo que hay en W al registro2
uno DECFSZ reg1,1          ;Decrementa registro1 y el resultado guardalo en el mismo
      GOTO uno
dos DECFSZ reg2,1          ;decrementa registro2 y el resultado guardalo en el mismo
      GOTO dos
      RETURN                    ;retorna de donde lo llamaron
     END
********************************************************************

Si quisieramos que el parpadeo sea mas lento tenemos que hacer un conteo descendente de mayor cantidad en este caso tendriamosque cambiar 0x90 por 0xFF en reg1 y reg2.