Programas

Programación de los microcontroladores PICAXE

Los micros PICAXE que usamos en el taller se pueden programar con distintas aplicaciones.
La mejor opción es utilizar la aplicación oficial:



Principales características de PICAXE Editor 6
  • Totalmente gratis.
  • Traducido al español, además de a otros idiomas.
  • Funciona en Windows. Está prevista la migración a Mac y Linux 
  • La hemos probado en Ubuntu 14 con Wine y funciona correctamente.
  • Completísimo editor de texto con múltiples funciones. Exporta en varios formatos.
  • Sistema de ayudas a varios niveles. Por ejemplo, para cada comando escrito salen sus opciones y enlaces a los manuales. Vienen integrados todas las hojas de datos y manuales.
  • Lenguajes de programación: BASIC y Diagramas de flujo
  • En modo depuración (DEBUG), puede verse el valor de cada pin y de cada variable del programa.
  • Múltiples asistentes, por ejemplo para calibrar sensores analógicos.
  • IMPORTANTÍSIMO
    • Permite la simulación de los programas en el ordenador sin ningún hardware adicional, sin controladoras, ni sensores, ni nada de nada. Línea a línea se va viendo cómo evoluciona el programa.
    • Además se puede ver gráficamente la simulación sobre la tarjeta controladora que se use.

NOTA
Los programas que se muestran a continuación, pueden simularse en el ordenador sin necesidad de tener en ese momento físicamente las tarjetas controladoras. Es suficiente la aplicación anterior, con la que podremos visualizar dichas tarjetas y su funcionamiento.


PLANTILLA para los programas
PICAXE Editor permite empezar a programar con una plantilla por defecto cada vez que se crea un archivo BASIC nuevo.
Nosotros recientemente estamos utilizando la siguiente plantilla que prácticamente cubre todos los casos de programación y que está dividida en cuatro secciones:
  • I - INFORMACIÓN. Datos con los que se documenta el programa (micro, entradas y salidas utilizadas, funcionalidad,...).
  • II - INICIALIZACIÓN. Instrucciones que solo se ejecutan una vez al iniciar el programa.
  • III - BUCLE PRINCIPAL. Conjunto de instrucciones que por defecto ejecutan indefinidamente.
  • IV - SUBRUTINAS. Bloques de código que pueden llamarse desde el bucle principal u otra subrutina.

 
PLANTILLA para los programas
 
;------------- INFORMACIÓN --------------
;    Nombre  :      
;    Autor   :      
;    Micro   :      
;    Entradas:      
;    Salidas :      
;    Función :      
;----------------------------------------


;----------- INICIALIZACIÓN -------------

;----------------------------------------


;----------- BUCLE PRINCIPAL ------------
do
      
loop
;----------------------------------------


;------------- SUBRUTINAS ---------------

;----------------------------------------
 

NOTA
La plantilla anterior solo aparece en los programas más recientes.
En los más antiguos aún utilizamos el formato clásico con "inicio:" y "goto inicio"








LISTA DE PROGRAMAS
que hemos desarrollado para nuestras prácticas y proyectos:

IMPORTANTE: hemos actualizado todos los programas para que funcionen con micros "M2", que son los últimos que se ofrecen en el mercado.


Sesiones del programa Profundiza 2012 "El robot resuelve-laberintos".

Proyecto Tecnológico "Cinta elevadora con parada automática"

Proyecto Tecnológico "Coche evita-paredes"

Proyecto Tecnológico "Coche evita-caídas"

Proyecto Tecnológico "Coche teledirigido por mando a distancia de infrarrojos"

Configuración del módulo JY-MCU V1.06 para comunicaciones por Bluetooth

Proyecto Tecnológico "Coche controlado por Bluetooth"

Proyecto Tecnológico "Puertas automatizadas"


Proyecto Tecnológico "Ascensor de tres plantas"



























 
01.1 Programando un led en la salida C.0 de un Picaxe (parpadeo simple)
 
  • Microcontrolador: Picaxe08.
  • Tarjeta controladora: "Alarmas Picaxe".
  • Actuador: Led conectado a la salida C.0 del micro (viene integrado en la tarjeta).
  • Función: El programa hace parpadear indefinidamente el led; puede ajustarse el tiempo que está encendido y apagado.
  • Implementación práctica: Desarrollado en la SESIÓN 01 del programa Profundiza 2012.
  • Código del programa:
 
'Tarjeta: Alarmas PICAXE
'Micro  : PICAXE-08M2 (también versiones anteriores)
'Salidas: C.0 -> LED

'El siguiente programa hace parpadear el LED:
'    un segundo encendido, medio segundo apagado
'    y todo se repite indefinidamente.

inicio:
    high C.0        'salida C.0 -> ON
    pause 1000      'pausa de 1,0 segundos

    low C.0         'salida C.0 -> OFF
    pause 500       'pausa de 0,5 segundos

    goto inicio     'ir a inicio
  

 
01.2 Programando un led en la salida C.0 de un Picaxe (parpadeo doble)
 
  • Microcontrolador: Picaxe08.
  • Tarjeta controladora: "Alarmas Picaxe".
  • Actuador: Led conectado a la salida 0 del micro (viene integrado en la tarjeta).
  • Función: El programa hace parpadear el led dos veces muy rápido, seguido de una pausa lenta; todo indefinidamente.
  • Implementación práctica: Desarrollado en la SESIÓN 01 del programa Profundiza 2012.
  • Código del programa:
 
'Tarjeta:  Alarmas PICAXE
'Micro  :  PICAXE-08M2 (también versiones anteriores)
'Salidas:  C.0 -> LED

'El siguiente programa hace parpadear el LED:
'    dos parpadeos muy rápidos seguido de una pausa lenta
'    y todo se repite indefinidamente.

inicio:
                'PRIMER PARPADEO RÁPIDO
    high C.0    'salida C.0 -> ON,  o bien "nivel alto", o bien "1"
    pause 200   'pausa de 0,2 segundos (200 milisegundos)
    low C.0     'salida C.0 -> OFF, o bien "nivel bajo", o bien "0"
    pause 200   'pausa de 0,2 segundos (200 milisegundos)

                'SEGUNDO PARPADEO RÁPIDO
    high C.0    'salida C.0 -> ON,  o bien "nivel alto", o bien "1"
    pause 200   'pausa de 0,2 segundos (200 milisegundos)
    low C.0     'salida C.0 -> OFF, o bien "nivel bajo", o bien "0"
    pause 200   'pausa de 0,2 segundos (200 milisegundos)

    pause 2000  'PAUSA LARGA (2 segundos)

    goto inicio 'ir a inicio
 











 
02.1 Semáforo simple con tres led
 
  • Microcontrolador: PICAXE-18M2 (también versiones anteriores)
  • Tarjeta controladora: "Proyectos PICAXE-18 estándar" (también la de alta potencia)
  • Actuadores: Tres led conectados a la salidas B.0, B.1 y B.2 (rojo, amarillo y verde).
  • Función: Alternativamente se van encendiendo los led verde (el que más dura), amarillo y rojo.
  • Implementación práctica: Desarrollado en la SESIÓN 02 del programa Profundiza 2012. 
  • Código del programa:

'Tarjeta: Proyectos PICAXE-18 estándar (también la de alta potencia)
'Micro:   PICAXE-18M2                  (también versiones anteriores)
'Salidas: B.0 -> LED ROJO
'         B.1 -> LED AMARILLO
'         B.2 -> LED VERDE

'Se simula un semáforo simple
'Los LED se van encendiendo alternativamente
'El verde dura un poco más que el resto

inicio:              'etiqueta para poder volver a ella
         low B.0          'se apaga    la salida 0
         low B.1          'se apaga    la salida 1
         high B.2         'se enciende la salida 2 - VERDE -
         pause 2000       'se esperan 2 segundos
 
         low B.0          'se apaga    la salida 0
         high B.1         'se enciende la salida 1 - AMARILLO -
         low B.2          'se apaga    la salida 2
         pause 500        'se esperan 0,5 segundos
 
         high B.0         'se enciende la salida 0 - ROJO -
         low B.1          'se apaga la salida 1
         low B.2          'se enciende la salida 2
         pause 500        'se espera 0,5 segundos
 
         goto inicio      'se vuelve a la etiqueta inicio
 











 
03.1 Semáforo peatonal (I), tres led y un pulsador
 
  • Microcontrolador: PICAXE-18M2 (también versiones anteriores)
  • Tarjeta controladora: "Proyectos PICAXE-18 estándar" (también la de alta potencia)
  • Actuadores: Tres led conectados a la salidas 0, 1 y 2 (rojo, amarillo y verde)
  • Sensores: Un pulsador en la entrada 7
  • Función:  Se enciende el led VERDE; se espera pulsación; si se PULSA se pasa a AMARILLO, ROJO y de nuevo al verde, y todo se vuelve a REPETIR
  • Implementación práctica: Desarrollado en la SESIÓN 03 del programa Profundiza 2012
  • Código del programa:
 
'Tarjeta:  Proyectos PICAXE-18 estándar (también la de alta potencia)
'Micro  :  PICAXE-18M2                  (también versiones anteriores)

'Salidas:  B.0 -> LED ROJO
'          B.1 -> LED AMARILLO
'          B.2 -> LED VERDE

'Entradas: C.7 <- pulsador

'Por defecto se enciende el LED verde
'Si hay pulsación se inicia la secuencia rojo-amarillo-verde
'volviendo a la situación inicial


inicio:
                    '--- SEMÁFORO EN VERDE ---
        low B.0       'se apaga la salida 0
        low B.1       'se apaga la salida 1
        high B.2      'se enciende la salida 2 - VERDE -

pulsacion:          'Se espera hasta que se pulse en entrada 7
        if pinC.7 is on then cambiar
        goto pulsacion

cambiar:
                    '--- SEMÁFORO EN AMARILLO ---
        low B.0       'se apaga la salida 0
        high B.1      'se enciende la salida 1 - AMARILLO -
        low B.2       'se apaga la salida 2
        pause 1000    'se espera 1000 milisegundos - 1 segundo -

                    '--- SEMÁFORO EN ROJO ---
        high B.0      'se enciende la salida 0 - ROJO -
        low B.1       'se apaga la salida 1
        low B.2       'se apaga la salida 2
        pause 3000    'se espera 3000 milisegundos - 3 segundos -

        goto inicio   'se vuelve a inicio (SEMÁFORO EN VERDE y a esperar)
 













 
04.1 Siete LED en salidas distintas parpadeando simultáneamente
 
  • Microcontrolador: PICAXE-18M2 (también versiones anteriores)
  • Tarjeta controladora: "Proyectos PICAXE-18 estándar"
  • Actuadores: Siete led dispuestos circularmente en placa protoboard (con sus resistencias de protección)
  • Función: Aunque conectados a salidas distintas, parpadean todos a la vez cada 0,5 segundos
  • Implementación práctica: Desarrollado en la SESIÓN 04 del programa Profundiza 2012.
  • Código del programa:
 
'Tarjeta:  Proyectos PICAXE-18 estándar
'Micro  :  PICAXE-18M2                  (también versiones anteriores)

'Salidas: B.0 a B.7 -> 7 LED rojos (con resistencias de protección de 330ohm)

'Se trata de una prueba básica de funcionamiento
'Todos los LED se encienden y apagan simultáneamente cada medio segundo

'En este ejemplo vemos cómo pueden manejarse simultánemente todas las salidas


let dirsB=%11111111         ;indicamos que desde B.0 a B.7 son todos salidas

inicio:

    let pinsB=%00000000     ;salidas con LED 0 a 6 apagadas (la 7 no se usa)
    pause 500

    let pinsB=%01111111     ;salidas con LED 0 a 6 encendidas (la 7 no se usa)
    pause 500

    goto inicio            ;se vuelve a empezar
 

















 
04.2 Seis led dispuestos circularmente y luz-doble dando vueltas
 
  • Microcontrolador: PICAXE-18M2 (también versiones anteriores)
  • Tarjeta controladora: "Proyectos PICAXE-18 estándar"
  • Actuadores: Seis LED dispuestos circularmente.en placa protoboard (con sus resistencias de protección).
  • Función: Se simulan dos luces dando vueltas; el estado de los 6 LED se cambia simultáneamente.
  • Implementación práctica: Desarrollado en la SESIÓN 04 del programa Profundiza 2012
  • Código del programa:
 
'Tarjeta:  Proyectos PICAXE-18 estándar
'Micro  :  PICAXE-18M2                  (también versiones anteriores)

'Salidas:  B.0 a B.5 -> 6 LED (con resistencias de protección de 330ohm)

'Los 6 LED están montados en la protoboard formando un círculo
'Se encienden y apagan simultáneamente de dos en dos
'simulando una luz-doble dando vueltas

'En este ejemplo vemos cómo pueden manejarse simultánemente todas las salidas

let dirsB=%11111111         ;indicamos que desde B.0 a B.7 son todos salidas

inicio:

    let pinsB=%00000011     ;encendidos 0 y 1
    pause 150
    let pinsB=%00000110     ;encendidos 1 y 2
    pause 150
    let pinsB=%00001100     ;encendidos 2 y 3
    pause 150
    let pinsB=%00011000     ;encendidos 3 y 4
    pause 150
    let pinsB=%00110000     ;encendidos 4 y 5
    pause 150
    let pinsB=%00100001     ;encendidos 5 y 0
    pause 150

    goto inicio            ;se vuelve a empezar
 
















 
04.3 Semáforo peatonal completo (y II) con cinco led, pulsador y zumbador
 
  • Microcontrolador: PICAXE-18M2 (también versiones anteriores)
  • Tarjeta controladora: "Proyectos PICAXE-18 estándar"
  • Actuadores
    • Tres LED para luces semáforo coches (rojo en salida B.0, amarillo en B.1 y verde en B.2)
    • Dos LED para luces semáforo peatones (verde en salida B.6 y rojo en la B.7)
    • Zumbador para semáforo peatones (en salida B.4)
  • Sensor:
    • Pulsador fin de carrera para cambiar a paso de peatones (en entrada C.7).
  • Función: El programa controla un paso de peatones en una vía de coches.
    Inicialmente siempre está en verde el semáforo de coches.
    Tras pulsar, se cambia a rojo y se pone en verde el de los peatones. Un sonido intermitente se emite mientras dura el paso de peatones.
  • Implementación práctica: Desarrollado en la SESIÓN 04 del programa Profundiza 2012
  • Esquema eléctrico del circuito: E04.3
  • Código del programa:
 
'Tarjeta:  Proyectos PICAXE-18 estándar
'Micro  :  PICAXE-18M2                  (también versiones anteriores)

'Salidas:

'     LUCES en semáforo para los COCHES
'         B.0 -> LED ROJO
'         B.1 -> LED AMARILLO
'         B.2 -> LED VERDE
'     LUCES y SONIDO en semáforo para los PEATONES
'         B.6 -> LED VERDE
'         B.7 -> LED ROJO
'         B.4 -> Zumbador

'Entradas:

'     BOTÓN para pasar los PEATONES
'         C.7 <- pulsador

'Se simula un SEMÁFORO PEATONAL
'En principio Verde-Coches y Rojo-Peatones siempre encendidos
'Si pulsamos:
'    - se pasa a Amarillo-Coches
'    - se pasa a Rojo-Coches y Verde-Peatones
'    - el zumbador suena 10 veces
'    - un último sonido más largo indica que termina
'    - se vuelve al principio.


inicio:
    low B.0       'se apaga la salida B.0
   
low B.1       'se apaga la salida B.1
    high
B.2      'se enciende la salida B.2    -VERDE coches-
   
low B.6       'se apaga la salida B.6
   
high B.7      'se enciende la salida B.7    -ROJO peatones-
   
pulsacion:      'Se espera PULSACION en la entrada C.7
                '  a) si se pulsa cambiamos a paso de peatones
                '  b) si no se pulsa seguimos esperando
    if pinC.7 is on then cambiar    'a)
    goto pulsacion                  'b)

cambiar:
   
low B.0           'se apaga la salida B.0
   
high B.1       'se enciende la salida B.1   -AMARILLO coches-
   
low B.2           'se apaga la salida B.2       
   
    pause 2000     'se espera 2 segundos

   
high B.0       'se enciende la salida B.0   -ROJO coches-
   
low B.1           'se apaga la salida B.1
   
low B.2           'se apaga la salida B.2
   
high B.6       'se enciende la salida B.6   -VERDE peatones-
   
low B.7           'se apaga la salida B.7
   
    for b1=1 to 10           '10 pitidos
        sound 4, (100,60)    'para el paso de peatones
        pause 100
    next b1

    sound 4, (100,200)       'último pitido más largo
   
low B.4                  'termina el paso de peatones

   
goto inicio              'se vuelve a inicio

  














 
05.1 LED con parpadeo proporcional a la distancia a un objeto
 
  • Microcontrolador: PICAXE-18M2 (también versiones anteriores)
  • Tarjeta controladora: "Proyectos PICAXE-18 estándar" (también la de alta potencia)
  • Actuador: Led conectado a la salida 0
  • Sensor: Sensor analógico de distancia (Sharp GP2Y0A41SK0F; rango de 4 a 30cm; 4,5V).
  • Función: El programa hace parpadear un led proporcionalmente al valor raw que devuelve al micro.
    Cuanto más cerca está el objeto, mayor es este valor raw y más rápido parpadea.
  • Implementación práctica: Desarrollado en la SESIÓN 05 del programa Profundiza 2012.
  • Código del programa:
 
'Tarjeta:  Proyectos PICAXE-18 estándar (también la de alta potencia)
'Micro  :  PICAXE-18M2                  (también versiones anteriores)

'Entradas: 

'          C.0 <- Sensor analógico de proximidad;
'                 el sensor también está conectado a +4,5V y 0V;

'Salidas :

'          B.0 <- LED

'
La señal analógica que devuelve el sensor  se guarda en la variable b0
'El led parpadea con velocidad proporcional a la señal raw que da el sensor
'Mientras más cerca detecte algo el sensor, más rápido parpadea el led


inicio:
    readadc C.0,b0 'se lee la señal analógica del sensor y mete el valor en b0
                   'cuanto más cerca detecte algo el sensor, menor será este valor
   
    'debug         'por si se quisiera mostrar en pantalla el valor de "b0"
   
    high B.0       'se enciende el led
    pause 
b0       'pausa de "b0" milisegundos
   
    low
B.0        'se apaga el led
    pause 
b0       'pausa de "b0" milisegundos
   
    goto inicio
  














 
05.2 Cuenta repetitiva de 0 a 9 con un visualizador con intervalos de 1 segundo.
 
  • Microcontrolador: PICAXE-18M2 (también versiones anteriores)
  • Tarjeta controladora: "Proyectos PICAXE-18 estándar".
  • Actuador: Visualizador (display) de 7 segmentos conectados a las salidas 0 a 6.
    Se usan resistencias de protección para cada entrada, puesto se encienden LED.
  • Función: El programa muestra consecutiva e indefinidamente los dígitos del 0 al 9 en un visualizador en intervalos de 1 segundo.
  • Implementación práctica: Desarrollado en la SESIÓN 05 del programa Profundiza 2012.
  • Código del programa:
 
'Tarjeta:  Proyectos PICAXE-18 estándar (también la de alta potencia  [**])
'[**]:     ¡Ojo! En la de alta pot. las salidas B.4 a B.7 tienen la lógica invertida
'Micro:    PICAXE-18M2                  (también versiones anteriores)

'Salidas: 

'       Desde B.0 a B.6 se conectan a los segmentos (LED) del visualizador
'       (en total hay 7 resistencias de protección para los 7 LED)

'       B.0 -> led_A;   B.1 -> led_B;   ...  ; B.6 -> led_G

'Se cuenta indefinidamente de 0 a 9 cada segundo


let dirsB = %01111111        'ponemos B.0 a B.6 como salidas

inicio:
    'La equivalencia de pines-led es:  pinsB = '0GFEDCBA'

    let pinsB = %00111111    '0
    pause 1000
   
   
let pinsB = %00000110    '1
   
pause 1000
   
   
let pinsB = %01011011    '2
   
pause 1000
   
   
let pinsB = %01001111    '3
   
pause 1000
   
   
let pinsB = %01100110    '4
   
pause 1000
   
   
let pinsB = %01101101    '5
   
pause 1000
   
   
let pinsB = %01111101    '6
   
pause 1000
   
   
let pinsB = %00100111    '7
   
pause 1000
   
   
let pinsB = %01111111    '8
   
pause 1000   
   
   
let pinsB = %01100111    '9
   
pause 1000
   
    goto inici
o
  
















 
06.1 Calibración de un sensor de distancias
 
  • Microcontrolador: PICAXE-18M2 (también versiones anteriores)
  • Tarjeta controladora: "Proyectos PICAXE-18 estándar" (también la de alta potencia)
  • Sensor: Sensor analógico de distancia (Sharp GP2Y0A41SK0F; rango de 4 a 30cm; 4,5V).
  • Actuador: Ninguno. El resultado lo vemos en pantalla al depurar (DEBUG).
  • Función: El programa funciona en modo depuración. Muestra en pantalla en la variable b0 el valor que devuelve el sensor (0 a 255) cuando colocamos un objeto a una determinada distancia.
  • Código del programa:
 
'Tarjeta:  Proyectos PICAXE-18 estándar (también la de alta potencia)
'Micro:    PICAXE-18M2                  (también versiones anteriores)

'Entradas:
'      C.0 (ADC0) <- Sensor de distancias (4 a 30cm).
'                    Las otras dos patas del sensor van a G y a V+

'CALIBRACIÓN

'- Construimos la tabla: distancia_real_obstáculo - valor_devuelto_por_sensor.
'- Colocamos un obstáculo delante del sensor y anotamos a la distancia que está,
'  y en PICAXE Editor vemos el valor que devuelve el sensor.

'Esta tabla de valores nos servirá para hacer la conversión
'distancia_real_obstáculo vs. valor_devuelto_por_sensor.

'NOTA: también se puede usar el asistente de Calibrar Sensor Analógico 
'      de la aplicación PICAXE Editor e incluso obtener una gráfica.

inicio:
    readadc C.0, b0     ;se lee de C.0 el valor de la distancia y se guarda en b0
                        ;  (C.0 es la entrada analógica 0
                        ;   también se puede usar readadc 0, b0)
    debug               ;con "debug" podemos leer b0 en pantalla
    pause 100           ;se espera 0,1 segundos entre lecturas
    goto inicio

  











 
06.2 Midiendo con sensor de distancia y mostrando en visualizador de 7 segmentos
 
  • Microcontrolador: PICAXE-18M2(también versiones anteriores)
  • Tarjeta controladora: "Proyectos PICAXE-18 estándar" (también la de alta potencia)
  • Sensor: Sensor analógico de distancia (Sharp GP2Y0A41SK0F; rango de 4 a 30cm; 4,5V)
  • Actuadores: Display de 7 segmentos de ánodo común conectado a las salidas B.0 a B.6 usando las correspondientes resistencias de protección (330ohm)
  • Función: El rango de medición del sensor se ha dividido en 8 segmentos.
    Si se coloca un objeto al inicio del primero, se visualiza un "1" en el display.
    Al llegar al segundo un "2" y así sucesivamente hasta el final del último en el se muestra un "9".
    Cuando no hay objeto se muestra un "0".
    NOTA: previamente hubo que calibrar el sensor como se indica en el programa anterior.
  • Implementación práctica: Desarrollado en la SESIÓN 06 del programa Profundiza 2012.
  • Código del programa:
 
'Tarjeta:  Proyectos PICAXE-18 estándar (también la de alta potencia)
'Micro:    PICAXE-18M2                  (también versiones anteriores)

'Entradas:
'      C.0 (ADC0) <- Sensor de distancias (4 a 30cm).
'                    Las otras dos patas del sensor van a G y a V+
'Salidas:
'      B.0 a B.6  -> Visualizador de 7 segmentos
'                    (ver en la sección de "Actuadores" cómo se conecta)

'Funcionamiento:
'  - El rango de distancias del sensor se ha dividido en 8 tramos
'    y se ha tomado el valor (RAW) que devuelve el sensor.
'  - Según a la distancia que pongamos un objeto,
'    se mostrará un valor en el display del 1 al 9
'  - En caso de fuera de distancia o sin objeto, se mostrará un 0.

let dirsB = %11111111 ;indicamos que desde B.0 a B.7 son salidas


inicio:
    readadc C.0, b0   ;se lee de C.0 el valor de distancia y se guarda en b0
    debug             ;con "debug" podemos ver la variable b0 en pantalla
    pause 100         ;se espera 0,1 segundos entre lecturas

                      ;La siguiente calibración se ha realizado
                      ;previamente de forma manual.
                      ;Según el valor devuelto mostramos uno u otro
                      ;dígito en el display de 7 segmentos.

    if b0 > 168 then goto num_1     ; 4cm
    if b0 > 112 then goto num_2     ; 8cm
    if b0 >  72 then goto num_3     ;12cm
    if b0 >  53 then goto num_4     ;16cm
    if b0 >  42 then goto num_5     ;20cm
    if b0 >  34 then goto num_6     ;24cm
    if b0 >  29 then goto num_7     ;28cm
    if b0 >  26 then goto num_8     ;32cm
    if b0 >  23 then goto num_9     ;36cm
    goto num_0                      ;fuera de rango


num_0: 
    let pinsB = %00111111     '0
    goto inicio

num_1: 
    let pinsB = %00000110     '1
    goto inicio

num_2:
    let pinsB = %01011011     '2
    goto inicio

num_3:
    let pinsB = %01001111     '3
    goto inicio

num_4:
    let pinsB = %01100110     '4
    goto inicio

num_5:
    let pinsB = %01101101     '5
    goto inicio

num_6:
    let pinsB = %01111101     '6
    goto inicio

num_7: 
    let pinsB = %00100111     '7
    goto inicio

num_8:
    let pinsB = %01111111     '8
    goto inicio

num_9:
    let pinsB = %01100111     '9
    goto inicio


  











 
07.1 Leyendo los códigos de las teclas de un mando a distancia
 
  • Microcontrolador: PICAXE-18M2 (también versiones anteriores)
  • Tarjeta controladora: "Proyectos PICAXE-18 estándar" (también la de alta potencia)
  • Sensor: Receptor de señales infrarrojas emitidas por un mando a distancia (protocolo Sony).
  • Actuador: Ninguno. El resultado lo vemos en pantalla con "DEBUG".
  • Función: El programa funciona en modo depuración. Muestra en pantalla la variable b5 en la que se ha guardado el valor que devuelve el sensor para cada tecla pulsada del mando a distancia.
  • Código del programa:
 
'Tarjeta:  Proyectos PICAXE-18 estándar" (también la de alta potencia)
'Micro:    PICAXE-18M2                   (también versiones anteriores)

'Entradas:
'          C.0 (ADC0) <- Receptor de infrarrojos (protocolo Sony)
'                        conectado según manual de PICAXE.

'UTILIDAD DEL PROGRAMA:
'          Con este sencillo programa leemos los códigos de las teclas pulsadas
'          en el mando a distancia de TV
'          y los vemos directamente en la pantalla del ordenador,
'          concretamente en la variable b5.


inicio:
    irin [200],C.0,b5  ;durante 0,2s se espera señal del mando a distancia
    debug              ;para ver en pantalla el valor b5 con la tecla pulsada
    goto inicio

  











 
07.2 Controlando cuatro led con un mando a distancia
 
  • Microcontrolador: Picaxe-18M2.
  • Tarjeta controladora: "Proyectos Picaxe-18".
  • Sensor: Receptor de señales infrarrojas emitidas por un mando a distancia (protocolo Sony).
  • Actuadores: Cuatro led conectados a las salidas 0 a 3..
  • Función: El programa detecta 5 teclas del mando a distancia. Realiza distintas funciones de encendido y apagado de los led según la tecla pulsada.
  • Implementación práctica: Desarrollado en la SESIÓN 07 del programa Profundiza.
  • Esquema eléctrico del circuito: E07.2
  • Código del programa:
 
'Tarjeta "Proyectos Picaxe-18"
'Microcontrolador "Picaxe-18M2"

'Receptor de infrarrojos (protocolo Sony)
'conectado según esquema que proporciona Picaxe en el manual.

'En la entrada 0 (C.0) se conecta la señal que devuelve el sensor anterior.


'En las Salidas 0 a 3 se conectan 4 led.

;Función del programa
;Según la tecla que se pulse en un mando a distancia,
;llega un valor distinto del sensor de infrarrojos
;y se realizan distintas acciones de encendido y apagado con los led.


inicio:
    irin [200],C.0,b5  
    ;Si hay nueva señal del mando a distancia (por la entrada 0) se guarda en b5.
    ;Si no hay nueva señal por el mando a distancia, se sale a los 0,2 segundos
    ;y en b5 sigue el mismo valor anterior.    

    ;irin [200,otra_accion],C.0,b5
    ;se podría poner que a los 0,2seg sin recibir señal se saltara a otro sitio
   
    ;debug b5   
    ;se puede visualizar en el ordenador el valor de tecla_pulsada


    if b5=13 then        ;tecla flecha arriba
        low 0
        low 1
        high 2
        low 3      
    endif
  
   
if b5=22 then        ;tecla flecha abajo
       
high 0
       
low 1
       
low 2
       
low 3      
   
endif
  
   
if b5=17 then        ;tecla flecha izquierda
       
low 0
       
high 1
       
low 2
       
low 3      
   
endif
  
   
if b5=16 then        ;tecla flecha derecha
       
low 0
       
low 1
       
low 2
       
high 3      
   
endif
  
    if b5=23 then        ;tecla play
        for b0=0 to 10
            high 0
           
high 1
           
high 2
           
high 3      
            pause 50
           
low 0
           
low 1
           
low 2
           
low 3      
            pause 50
        next b0
        b5=100          
;para reiniciar (cualq. valor)
    endif

    goto inicio

  














 
08.2 Movimientos básicos de dos motores con un mando a distancia
 
  • Microcontrolador: Picaxe 18M2.
  • Tarjeta controladora: "Proyectos Picaxe 18 alta potencia".
  • Sensor: Receptor de señales infrarrojas emitidas por un mando a distancia (protocolo Sony).
  • Actuadores: Dos motores con movimiento reversible. 
    • El motor derecho en las salidas B.4 y B.5 (cables negro y rojo).
    • El motor izquierdo en las salidas B.6 y B.7 (cables rojo y negro).
  • Función: El programa detecta 5 teclas del mando a distancia. Realiza distintas combinaciones de movimiento de los motores según la tecla pulsada.
  • Implementación práctica: Desarrollado en la SESIÓN 08 del programa Profundiza.
  • Código del programa:
 
'Tarjeta "Proyectos Picaxe 18 de alta potencia"
'Microcontrolador "Picaxe-18M2"

'SENSOR
'Receptor de infrarrojos (protocolo Sony) 

'conectado según esquema que proporciona Picaxe en el manual
'En la entrada 0 (C.0) se conecta la señal que devuelve el sensor anterior
'la señal se guarda en la variable b0

'ACTUADORES
'Motor derecho   en las entradas B.4 (negro) y B.5 (rojo)
'Motor izquierdo en las entradas B.6 (rojo)  y B.7 (negro)

'Función
'Según las teclas pulsadas en el mando 

'conseguimos distintos movimientos de los motores


inicio:
    irin [200],C.0,b0           ;durante 0,2s se espera señal del mando a distancia
   
    ;debug b0                   ;para ver en pantalla los valores de tecla pulsada
   
    if b0=13 then gosub Avanza      ;tecla flecha arriba
       
   
if b0=22 then gosub Retrocede   ;tecla flecha abajo
   
   
if b0=17 then gosub Izquierda   ;tecla flecha izquierda
   
   
if b0=16 then gosub Derecha     ;tecla flecha derecha 
       
   
if b0=23 then gosub Para        ;tecla debajo de flecha abajo

    goto inicio
   


Avanza:
    low B.4         ; rueda derecha AVANZA
    high B.5
   
low B.6         ; rueda izquierda AVANZA
   
high B.7
    return          ; vuelve al "gosub"

Retrocede:
   
high B.4        ; rueda derecha RETROCEDE
   
low B.5
   
high B.6        ; rueda izquierda RETROCEDE
   
low B.7
   
return          ; vuelve al "gosub"

Para:
   
low B.4         ; rueda derecha PARADA
   
low B.5
   
low B.6         ; rueda izquierda PARADA
   
low B.7
   
return          ; vuelve al "gosub"

Derecha:
   
low B.4         ; rueda derecha PARADA
   
low B.5
   
low B.6         ; rueda izquierda AVANZA
   
high B.7
   
return          ; vuelve al "gosub"

Izquierda:
   
low B.4         ; rueda derecha AVANZA
   
high B.5
   
low B.6         ; rueda izquierda PARADA
   
low B.7
   
return          ; vuelve al "gosub" 
  













 
11.1 Probando el sensor frontal del robot resuelve-laberintos
 
  • Microcontrolador: Picaxe-18M2.
  • Tarjeta controladora: "Proyectos Picaxe-18M2 de alta potencia".
  • Sensor: Sensor analógico de distancia (Sharp GP2Y0A41SK0F; rango de 4 a 30cm; 4,5V).
    El sensor está situado en la parte FRONTAL del coche y conectado a la entrada analógica C.0
  • Actuadores: Dos motores con movimiento reversible. 
    • El motor derecho en las salidas B.4 y B.5
    • El motor izquierdo en las salidas B.6 y B.7
  • Función: El coche avanza mientras no encuentre una pared enfrente. Si la encuentra gira a la izquierda.
    El coche debe ser capaz de recorrer un recinto cerrado (por ejemplo cuadrado) por su interior.
  • Implementación práctica: Desarrollado en la SESIÓN 11 del programa Profundiza.
  • Código del programa:
 
'Tarjeta "Proyectos Picaxe-18M2 de alta potencia"
'Microcontrolador "Picaxe-18M2"

'PRUEBA 1. El coche avanza hasta encontrar una pared de frente
'          y entonces gira a la izquierda


'(SDF) Sensor analógico de distancias FRONTAL conectado a +4,5V y 0V;
'      La señal analógica que devuelve (SDF)
'      se lee en la entrada analógica C.0
'      y se guarda en la variable b0

'(MD)  Motor derecho   conectado en las salidas B.4 y B.5
'(MI)  Motor izquierdo conectado en las salidas B.6 y B.7

;      B.4  B.5  (MD)          B.6  B.7  (MI)
;      low  low  parado        low  low  parado    
;      low  high avanza        low  high Avanza    
;      high low  retrocede     high low  Retrocede 
;      high high parado        high high Parado    
 


    goto para        ; se inicia con el coche parado

inicio:
    readadc C.0, b0  ;se toma el valor de distancia en b0
    ;debug           ;con "debug" podemos leerlo en pantalla
    pause 50         ;se espera 0,050 segundos entre lecturas
  
    ;La siguiente calibración de (SDF) se ha realizado previamente de forma manual 
                     ;b0 -> 168 ->  4cm  
    
                 ;b0 -> 112 ->  8cm
    
                 ;b0 -> 72  -> 12cm
    
                 ;b0 -> 53  -> 16cm
    
                 ;b0 -> 42  -> 20cm
      
               ;b0 -> 34  -> 24cm
     
               ;b0 -> 29  -> 28cm
    
                ;b0 -> 26  -> 32cm
    
                 ;b0 -> 23  -> +32cm
  
    ;PRUEBA 1 - si pared al frente -> giro a la izquierda


    if
b0>150 then goto Para           ;si se esta demasiado cerca -> Para
   
if b0<50 then goto Avanza          ;si quedan mas   de 20cm -> Avanza (CALIBRAR)
   
if b0>49  then goto Giro_Izq_corto ;si quedan menos de 20cm -> Giro_Izq_corto
    goto inicio

Avanza:
    low  B
.4    ;MD avanza
    high B
.5
   
low  B.6    ;MI avanza
   
high B.7
    goto inicio
  
Para:  
   
low  B.4    ;MD detenido
    low  B.5
    low  B.6    ;MI detenido
    low  B.7
    goto inicio
    
Giro_Der_corto:
   
low  B.4    ;MD detenido
    low  B.5
    low  B.6    ;MI avanza
   
high B.7
    pause 300    ;giro de 0,3 seg
   
goto inicio   
    

Giro_Izq_corto:
   
low  B.4    ;MD avanza
   
high B.5
    low  B.6    ;MI detenido
    low  B.7
    pause 300    ;giro de 0,3 seg
    goto inicio

  










 
11.2 Probando el sensor derecho del robot resuelve-laberintos
 
  • Microcontrolador: Picaxe-18M2.
  • Tarjeta controladora: "Proyectos Picaxe-18M2 de alta potencia".
  • Sensor: Sensor analógico de distancia (Sharp GP2Y0A41SK0F; rango de 4 a 30cm; 4,5V).
    El sensor está situado en la cara DERECHA del coche y conectado a la entrada analógica C.1
  • Actuadores: Dos motores con movimiento reversible. 
    • El motor derecho en las salidas B.4 y B.5
    • El motor izquierdo en las salidas B.6 y B.7
  • Función: El coche avanza mientras detecte una pared a la derecha. Si no la encuentra gira a la derecha.
    El coche debe ser capaz de recorrer un recinto cerrado (por ejemplo cuadrado) por su exterior.
  • Implementación práctica: Desarrollado en la SESIÓN 11 del programa Profundiza.
  • Código del programa:
 
'Tarjeta "Proyectos Picaxe-18M2 de alta potencia"
'Microcontrolador "Picaxe-18M2"

; PRUEBA 2. El coche avanza mientras tenga pared a la derecha
;           cuando no la hay entonces gira a la derecha


'(SDD) Sensor analógico de distancias DERECHO conectado a +4,5V y 0V;
'      La señal analógica que devuelve (SDD)
'      se lee en la entrada analógica C.1
'      y se guarda en la variable b1

'(MD)  Motor derecho   conectado en las salidas B.4 y B.5
'(MI)  Motor izquierdo conectado en las salidas B.6 y B.7

;      B.4  B.5  (MD)          B.6  B.7  (MI)
;      low  low  parado        low  low  parado    
;      low  high avanza        low  high Avanza    
;      high low  retrocede     high low  Retrocede 
;      high high parado        high high Parado    


    goto para        ; se inicia con el coche parado

inicio:
    readadc C.1, b1  ;se toma el valor de distancia en b1
    ;debug           ;con "debug" podemos leerlo en pantalla
    pause 50         ;se espera 0,050 segundos entre lecturas
  
    ;La siguiente calibración de (SDD) se ha realizado previamente de forma manual 
                     ;b1 -> 168 ->  4cm  
    
                 ;b1 -> 112 ->  8cm
    
                 ;b1 -> 72  -> 12cm
    
                 ;b1 -> 53  -> 16cm
    
                 ;b1 -> 42  -> 20cm
      
               ;b1 -> 34  -> 24cm
     
               ;b1 -> 29  -> 28cm
    
                ;b1 -> 26  -> 32cm
    
                 ;b1 -> 23  -> +32cm
  
    ;PRUEBA 2 - si no hay pared a la derecha -> giro a la derecha
   
   
if b1>109 then goto Giro_Izq_corto      ;si muy cerca     -> Giro_Izq_Corto
   
if b1>49 AND b1<110 then goto Avanza    ;entre 20cm y 4cm -> AVANZA (CALIBRAR)
   
if b1<50  then goto Giro_Der_corto      ;si más de 20cm   -> Giro_Der_corto
   
goto inicio

Avanza:
    low  B
.4    ;MD avanza
    high B
.5
   
low  B.6    ;MI avanza
   
high B.7
    goto inicio
  
Para:  
   
low  B.4    ;MD detenido
    low  B.5
    low  B.6    ;MI detenido
    low  B.7
    goto inicio

Giro_Der_corto:
   
low  B.4    ;MD detenido
    low  B.5
    low  B.6    ;MI avanza
   
high B.7
    pause 300    ;giro de 0'3 seg
   
goto inicio   
    

Giro_Izq_corto:
   
low  B.4    ;MD avanza
   
high B.5
    low  B.6    ;MI detenido
    low  B.7
    pause 300    ;giro de 0'3 seg
    goto inicio

  



















 
12.1 PROGRAMA FINAL del "Robot resuelve-laberintos"
 
  • Microcontrolador: Picaxe-18M2.
  • Tarjeta controladora: "Proyectos Picaxe-18M2 de alta potencia".
  • Sensores: Dos sensores analógico de distancia (Sharp GP2Y0A41SK0F; rango de 4 a 30cm; 4,5V).
    • Un sensor está situado en parte FRONTAL y se lee en la entrada analógica C.0
    • En otro sensor está en la cara DERECHA y se lee en la entrada analógica C.1
  • Actuadores: Dos motores con movimiento reversible. 
    • El motor derecho está conectado a las salidas B.4 y B.5
    • El motor izquierdo está conectado a las salidas B.6 y B.7
  • Función: El coche intenta salir de un laberinto. Para ello sigue siempre la pared de su derecha.
  • Implementación práctica: Desarrollado en la SESIÓN 12 del programa Profundiza.
  • Código del programa:
 
'Tarjeta "Proyectos Picaxe-18M2 de alta potencia"
'Microcontrolador "Picaxe-18M2"

;SALIR DE UN LABERINTO. 
;      El coche sigue siempre la pared de su derecha.
;      Para ello intenta estar siempre cerca de la pared de la derecha
;      y si se encuentra una pared de frente entonces gira a la izquierda.


'(SDF) Sensor analógico de distancias FRONTAL conectado a +4,5V y 0V;
'      La señal analógica que devuelve (SDF)
'      se lee en la entrada analógica C.0
'      y se guarda en la variable b0


'(SDD) Sensor analógico de distancias DERECHO conectado a +4,5V y 0V;
'      La señal analógica que devuelve (SDD)
'      se lee en la entrada analógica C.1
'      y se guarda en la variable b1

'(MD)  Motor derecho   conectado en las salidas B.4 y B.5
'(MI)  Motor izquierdo conectado en las salidas B.6 y B.7

;      B.4  B.5  (MD)          B.6  B.7  (MI)
;      low  low  parado        low  low  parado    
;      low  high avanza        low  high Avanza    
;      high low  retrocede     high low  Retrocede 
;      high high parado        high high Parado    


    goto para        ; se inicia con el coche parado

inicio:
    readadc C.0, b0  ;se toma el valor de distancia en b0

    readadc C.1, b1  ;se toma el valor de distancia en b1
    ;debug           ;con "debug" podemos leerlo en pantalla
  
    ;La calibración
puede encontrarse en los programas de prueba
    

    ;SENSOR DERECHO
    ;Se intenta estar entre 10 y 20cm de la pared derecha
    ;Pared derecha a menos de 10cm se gira a la izq
    ;Pared derecha a mas   de 20cm se gira a la der
   
if b1>65 then goto Giro_Izq    ;menos de 10 cm -> girar izq
   
if b1<30 then goto Giro_Der    ;mas   de 20 cm -> girar der

    ;SENSOR FRONTAL
    ;Pared frontal a menos de 15cm ¡¡se ROTA a la izq!!
    ;Pared frontal a menos de 24cm se gira a la izquierda
    ;Pared frontal a mas   de 24cm se avanza
   
if b0>50 then goto Rotar_Izq ;menos de 15cm   -> rotacion izq
   
if b0>24 then goto Giro_Izq  ;entre 15 y 24cm -> girar izq
                                 ;más de 24 cm    -> se avanza
   
goto Avanza    ;desde Avanza se vuelve a Inicio
 

Avanza:
    low  B
.4    ;MD avanza
    high B
.5
   
low  B.6    ;MI avanza
   
high B.7
    goto inicio
  
Para:  
   
low  B.4    ;MD detenido
    low  B.5
    low  B.6    ;MI detenido
    low  B.7
    goto inicio

Giro_Der:
   
low  B.4    ;MD detenido
   
low  B.5
    low  B.6    ;MI avanza
   
high B.7
    pause 300   ;giro de 0,3 seg
   
goto inicio   
    

Giro_Izq:
   
low  B.4    ;MD avanza
    high B.5
    low  B.6    ;MI detenido
    low  B.7
    pause 300   ;giro de 0,3 seg
   
goto inicio   
Rotar_Izq:
   
low  B.4    ;MD avanza
   
high B.5
    low  B.6    ;MI detenido
    low  B.7
    pause 500   ;rotación izq de 0,5 seg
    goto inicio

  















 
Proyecto Tecnológico "Cinta elevadora con parada automática".
1. Calibración de la LDR.
 
  • Microcontrolador: Picaxe08.
  • Tarjeta controladora: "Alarmas Picaxe".
  • Sensor:
    • LDR conectada a la entrada 1 del micro (entrada digital).
  • Función: El programa lee y muestra en pantalla el valor RAW que devuelve la LDR según las condiciones de iluminación.
  • Implementación práctica: Desarrollado en el Proyecto Cinta elevadora con parada automática.
  • Código del programa:
 
;Tarjeta controladora: Alarmas Picaxe
;Microcontrolador:     Picaxe-08

;Sensores:   LDR conectada a la entrada analógica in1
;            e iluminado por una bombilla pequeña a unos 10cm.


;Funcionamiento
;En el ordenador leemos los distintos valores que devuelve la LDR
;según la luz que le llega.
;Se tiene en cuenta la bombillita que tiene enfrente,
;si hay o no un objeto entre ambos
;y la iluminación de la sala de trabajo.



inicio:


    debug                   ;Para visualizar los datos en el ordenador
 
    readadc 1,b1            ;Se lee el valor que devuelve la LDR
 
    pause 500               ;Se deja algo de tiempo para poder leer
 
   
goto inicio
  













 
Proyecto Tecnológico "Cinta elevadora con parada automática".
2. PROGRAMA FINAL de la "Cinta elevadora con parada automática".
 
  • Microcontrolador: Picaxe08.
  • Tarjeta controladora: "Alarmas Picaxe".
  • Sensor:
    • LDR conectada a la entrada 1 del micro (entrada digital).
  • Actuadores
    • Led conectado a la salida 0 del micro (viene integrado en la tarjeta).
    • Piezoeléctrico conectado a la salida 2 del micrho (viene integrado en la tarjeta).
    • Motor conectado a la salida 4 del micro (salida de potencia hasta 500mA).
  • Función: El programa detecta cuando llega poca luz a la LDR debido a que tiene un objeto delante.
  • Implementación práctica: Desarrollado en el Proyecto Cinta elevadora con parada automática.
  • Código del programa:
 
;Tarjeta controladora: Alarmas Picaxe
;Microcontrolador:     Picaxe-08

;Sensores:   LDR conectada a la entrada analógica in1
;            e iluminado por una bombilla pequeña a unos 10cm.
;Actuadores: Motor conectado a la salidad de potencia out4
;            LED integrado en la tarjeta y conectado a la salida out0
;            Piezoeléctrico también integrado y conectado a la salida out2

;Funcionamiento
;La LDR devuelve un valor RAW alto cuando le llega mucha luz
;y bajo cuando le llega poca luz.
;Previa calibración y mediante pruebas
;(hay que tener en cuenta la iluminación de la sala de trabajo),
;se establece el valor a partir del cual se considera que llega poca luz
;porque hay un objeto entre la LDR y la bombilla (en este ejemplo es 120).


inicio:
    readadc 1,b1            ;Se lee el valor que devuelve la LDR
    if b1<120 then Parada   ;Si se baja de un valor previamente calibrado
                            ;entonces ejecutamos la parada.
    high 4                  ;Caso contrario se pone en marcha el motor
    low 0                   ;Y se apaga el led
    goto
inicio
    
Parada:
   
low 4                   ;Se apaga el motor
    
   
high 0                  ;Se ejecuta un parpadeo rápido del led
    pause 200
   
low 0
    pause 200
    
    sound 2, (120,30)       ;Se da también un rápido aviso sonoro
    
   
goto inicio             ;Volvemos a leer la LDR  repetir el proceso.
  
















 
Proyecto Tecnológico "Coche evita-paredes".
1. PROGRAMA FINAL del "Coche evita-paredes".
 
  • Microcontrolador: Picaxe-18M2.
  • Tarjeta controladora: "Proyectos Picaxe-18M2 de alta potencia".
  • Sensores:
    • Fin de carrera derecho en entrada C.1
    • Fin de carrera izquierdo en entrada C.2
  • Actuadores
    • Motor derecho en salidas B4 y B5 (movimiento reversible).
    • Motor izquierdo en salidas B6 y B7 (movimiento reversible).
  • Función
    • Si no está pulsado ningún fin de carrera, el coche avanza.
    • Si se pulsa un fin de carrera, el coche se para, retrocede, gira atrás para evitar el obstáculo que pulsó el fdc, se para y vuelve a avanzar.
  • Implementación práctica: Desarrollado en el Proyecto "Coche evita-paredes".
  • Código del programa:
 
'Tarjeta "Proyectos Picaxe-18M2 de alta potencia"
'Microcontrolador "Picaxe-18M2"

'Sensores :
'  Fin de carrera derecho   (fdcD) en entrada C.1
'  Fin de carrera izquierdo (fdcI) en entrada C.2
'Actuadores:
'  Motor derecho   (MD) en salidas B4 y B5
'  Motor izquierdo (MI) en salidas B6 y B7

'Funcionamiento:
'Si el fdcD no está pulsado, el MD avanza
'Si el fdcI no está pulsado, el MI avanza
'Si el fdcD sí está pulsado, (obstáculo a la derecha) entonces:
'  - se detienen los dos motores
'  - se retrocede (ambos motores giran hacia atrás)
'  - se vuelven a detener los dos motores
'  - el MI gira hacia atrás (con lo que el coche gira a izq.)
'  - y por último empieza a avanzar de nuevo
'Si el fdcI sí está pulsado, todo se hace simétricamente a lo anterior.



principal:
    'pin 1     -> fin de carrera derecho
    'out 4 y 5 -> rueda derecha

    if pinC.2 = 0 then gosub r_izq_avanza
   
if pinC.1 = 0 then gosub r_der_avanza
   
   
if pinC.2 = 1 then gosub retro_y_gira_r_der
   
if pinC.1 = 1 then gosub retro_y_gira_r_izq
   
    goto
principal


r_der_avanza:
    low B.4
    high
B.5
   
return

r_izq_avanza:
   
high B.6
   
low B.7
   
return

retro_y_gira_r_der:
    gosub parar
    wait 1
   
gosub retroceder
   
wait 1
   
gosub parar
   
wait 1
   
gosub r_der_atras
   
wait 2
   
gosub parar
   
return
   
retro_y_gira_r_izq:
   
gosub parar
   
wait 1
   
gosub retroceder
   
wait 1
   
gosub parar
   
wait 1
   
gosub r_izq_atras
   
wait 2
   
gosub parar
   
return

parar:
   
low B.4   
   
low B.5
   
low B.6
   
low B.7
   
return

retroceder:
   
high B.4
   
low B.5
   
low B.6
   
high B.7
   
return

r_der_atras:
   
high B.4
   
low B.5
   
return
   
       
r_izq_atras:
   
low B.6
   
high B.7
    return
  









 
Proyecto Tecnológico "Coche evita-caídas".
1. PROGRAMA FINAL del "Coche evita-caídas".
 
  • Microcontrolador: Picaxe-18M2.
  • Tarjeta controladora: "Proyectos Picaxe-18M2 de alta potencia".
  • Sensores:
    • Fin de carrera derecho en entrada C.1
    • Fin de carrera izquierdo en entrada C.2
  • Actuadores
    • Motor derecho en salidas B4 y B5 (movimiento reversible).
    • Motor izquierdo en salidas B6 y B7 (movimiento reversible).
  • Función
    • Si están pulsados ambos conmutadores fin de carrera, el coche avanza.
    • Si algún fin de carrera deja de estar pulsado, el coche se detiene, retrocede, gira atrás para evitar caer, se para y vuelve a avanzar.
  • Implementación práctica: Desarrollado en el Proyecto "Coche evita-caídas".
  • Código del programa:
 
'COCHE EVITA-CAÍDAS
'
'Tarjeta "Proyectos Picaxe-18M2 de alta potencia"
'Microcontrolador "Picaxe-18M2"

'Sensores :
'  Fin de carrera derecho   (fdcD) en entrada C.1
'  Fin de carrera izquierdo (fdcI) en entrada C.2
'Actuadores:
'  Motor derecho   (MD) en salidas B4 y B5
'  Motor izquierdo (MI) en salidas B6 y B7

'Funcionamiento:
'Si el fdcD sí está pulsado, el MD avanza
'Si el fdcI sí está pulsado, el MI avanza
'Si el fdcD no está pulsado, (obstáculo a la derecha) entonces:
'  - se detienen los dos motores
'  - se retrocede (ambos motores giran hacia atrás)
'  - se vuelven a detener los dos motores
'  - el MI gira hacia atrás (con lo que el coche gira a izq.)
'  - y por último empieza a avanzar de nuevo
'Si el fdcI no está pulsado, todo se hace simétricamente a lo anterior.



principal:
    'pin 1     -> fin de carrera derecho
    'out 4 y 5 -> rueda derecha

    if pinC.2 = 1 then gosub r_izq_avanza
   
if pinC.1 = 1 then gosub r_der_avanza
   
   
if pinC.2 = 0 then gosub retro_y_gira_r_der
   
if pinC.1 = 0 then gosub retro_y_gira_r_izq
   
    goto
principal


r_der_avanza:
    low B.4
    high
B.5
   
return

r_izq_avanza:
   
high B.6
   
low B.7
   
return

retro_y_gira_r_der:
    gosub parar
    wait 1
   
gosub retroceder
   
wait 1
   
gosub parar
   
wait 1
   
gosub r_der_atras
   
wait 2
   
gosub parar
   
return
   
retro_y_gira_r_izq:
   
gosub parar
   
wait 1
   
gosub retroceder
   
wait 1
   
gosub parar
   
wait 1
   
gosub r_izq_atras
   
wait 2
   
gosub parar
   
return

parar:
   
low B.4   
   
low B.5
   
low B.6
   
low B.7
   
return

retroceder:
   
high B.4
   
low B.5
   
low B.6
   
high B.7
   
return

r_der_atras:
   
high B.4
   
low B.5
   
return
   
       
r_izq_atras:
   
low B.6
   
high B.7
    return
  












 
Proyecto Tecnológico "Coche teledirigido por mando a distancia de IR".
1. Lectura de los códigos de los botones a usar del mando a distancia.
 
  • Microcontrolador: Picaxe-18M2.
  • Tarjeta controladora: "Proyectos Picaxe-18".
  • Sensor: Receptor de señales infrarrojas emitidas por un mando a distancia (protocolo Sony) según esquema proporcionado por Picaxe.
  • Actuador: Ninguno. El resultado lo vemos en pantalla.
  • Función: El programa funciona en modo depuración. Muestra en pantalla en la variable b1 el valor que devuelve el sensor para cada tecla pulsada del mando a distancia.
    Se trata del mismo programa usado en la "Práctica 7 del Programa Profundiza 2012".
  • Código del programa:
 
'Tarjeta "Proyectos Picaxe-18"
'Microcontrolador "Picaxe-18M2"

'Receptor de infrarrojos (protocolo Sony)
'conectado según esquema que proporciona Picaxe en el manual.

'En la entrada 1 (C.1) se conecta la señal que devuelve el sensor anterior.


'UTILIDAD DEL PROGRAMA
'Usamos este sencillo programa para leer los codigos de las teclas del mando
'directamente en la pantalla del ordenador, concretamente en la variable b1.


inicio:
    irin [200],C.1,b1  ;durante 0,2s se espera señal del mando a distancia
    debug b1           ;para ver en pantalla el valor de la tecla pulsada
    goto inicio

  









 
Proyecto Tecnológico "Coche teledirigido por mando a distancia de IR".
2. Prueba básica de movimiento de los motores.
 
  • Microcontrolador: Picaxe-18M2.
  • Tarjeta controladora: "Proyectos Picaxe-18".
  • Sensor: Ninguno.
  • Actuadores:
    • Motor derecho en salidas B4 y B5 (movimiento reversible).
    • Motor izquierdo en salidas B6 y B7 (movimiento reversible).
  • Función: El programa funciona realiza los siguientes movimientos indefinidamente:
    • Avanza 3 segundos (MD y MI avanzan).
    • Retrocede 3 segundos (MD y MI retroceden).
    • Giro a la izquierda 3 segundos (MD avanza y MI se detiene).
    • Giro a la derecha 3 segundos (MD se detiene y MI avanza).
    • Parada durante 3 segundos (MD y MI se detienen).
  • Código del programa:
 
'Tarjeta "Proyectos Picaxe 18"
'Microcontrolador "Picaxe-18M2"

'Motor derecho   en las entradas B.4 (negro) y B.5 (rojo)
'Motor izquierdo en las entradas B.6 (rojo)  y B.7 (negro)

'Función: se prueban los movimientos básicos de los motores

inicio:

    gosub Avanza        ;tecla flecha arriba
    pause 3000            ;espera 3 segundos
   
    gosub Retrocede        ;tecla flecha abajo
    pause 3000            ;espera 3 segundos
   
    gosub Izquierda        ;tecla flecha izquierda
    pause 3000            ;espera 3 segundos
   
    gosub Derecha        ;tecla flecha derecha 
    pause 3000            ;espera 3 segundos
       
    gosub Para
    pause 3000            ;espera 3 segundos

    goto inicio            ;vuelve a inicio
   


Avanza:
    low B.4         ; rueda derecha AVANZA
    high B.5
    low B.6         ; rueda izquierda AVANZA
    high B.7
    return          ; vuelve al "gosub"

Retrocede:
    high B.4        ; rueda derecha RETROCEDE
    low B.5
    high B.6        ; rueda izquierda RETROCEDE
    low B.7
    return          ; vuelve al "gosub"

Para:
    low B.4         ; rueda derecha PARADA
    low B.5
    low B.6         ; rueda izquierda PARADA
    low B.7
    return          ; vuelve al "gosub"

Derecha:
    low B.4         ; rueda derecha PARADA
    low B.5
    low B.6         ; rueda izquierda AVANZA
    high B.7
    return          ; vuelve al "gosub"

Izquierda:
    low B.4         ; rueda derecha AVANZA
    high B.5
    low B.6         ; rueda izquierda PARADA
    low B.7
    return          ; vuelve al "gosub"
 












 
Proyecto Tecnológico "Coche teledirigido por mando a distancia de IR".
3. PROGRAMA FINAL del "Coche teledirigido por mando de IR" .
 
  • Microcontrolador: Picaxe-18M2.
  • Tarjeta controladora: "Proyectos Picaxe-18".
  • Sensores: 
    • Receptor de infrarrojos en entrada C.1 para leer la señal del mando a distancia.
  • Actuadores:
    • Motor derecho en salidas B4 y B5 (movimiento reversible).
    • Motor izquierdo en salidas B6 y B7 (movimiento reversible).
  • Función: El programa funciona realiza los siguientes movimientos indefinidamente:
    • Avanza 3 segundos (MD y MI avanzan).
    • Retrocede 3 segundos (MD y MI retroceden).
    • Giro a la izquierda 3 segundos (MD avanza y MI se detiene).
    • Giro a la derecha 3 segundos (MD se detiene y MI avanza).
    • Parada durante 3 segundos (MD y MI se detienen). 
  • Implementación práctica: Utilizado en el Proyecto "Coche teledirigido por mando a distancia de infrarrojos".
  • Código del programa:
 
'TARJETA : "Proyectos Picaxe 18 de alta potencia"
'MICRO   : "Picaxe-18M2"
'SENSORES:
' - Receptor de infrarrojos (Sony) conectado según esquema de Picaxe
'   En la entrada 1 (C.1) se conecta la señal que devuelve el sensor de IR
'   y la señal se guarda en la variable b1
'ACTUADORES:
' - Motor derecho   en las entradas B.4 (negro) y B.5 (rojo)
' - Motor izquierdo en las entradas B.6 (rojo)  y B.7 (negro)
'FUNCIONAMIENTO:
' - Según tecla pulsada en el mando -> distintos movimientos de los motores
  b1=222;                       ;valor usado para no hacer nada (reset)

inicio:
  irin [100],C.1,b1                ;durante 0,1s se espera señal del mando
                                    ;si no llega señal 'b1' no cambia
  debug b1                      ;para ver en b1 en el ordenador
   
  ;Movimientos básicos: se realiza la acción hasta que llegue otra nueva
  if b1=13 then gosub Avanza    ;TECLA flecha arriba    
  if b1=22 then gosub Retrocede ;TECLA flecha abajo
  if b1=17 then gosub Izquierda ;TECLA flecha izquierda
  if b1=16 then gosub Derecha   ;TECLA flecha derecha 
  if b1=23 then gosub Para      ;TECLA debajo de flecha abajo
   
  ;Maniobras varias programadas. Al terminal el coche se detiene
  if b1=10 then                 ;TECLA 0 - giro cerrado sobre si mismo a izq
    gosub Giro_cerrado_izquierda
    pause 3000
    gosub Para
    b1=222
  endif
  if b1=0  then                 ;TECLA 1 - avanza 50cm, retrocede 50cm
    gosub Avanza            ;          y al final se detiene
    pause 700
    gosub Retrocede
    pause 700
    gosub Para
    b1=222
  endif
  if b1=1  then                 ;TECLA 2 - cuadrado de 20cm lado hacia izq.   
    gosub Avanza            ;          y al final se detiene
    pause 3000
    gosub Giro_cerrado_izquierda
    pause 2000

    gosub Avanza
    pause 3000
    gosub Giro_cerrado_izquierda
    pause 2000

    gosub Avanza
    pause 3000
    gosub Giro_cerrado_izquierda
    pause 2000

    gosub Avanza
    pause 3000
    gosub Giro_cerrado_izquierda
    pause 2000
    b1=222
  endif
  if b1=2  then                  ;TECLA 3 - triangulo de 25cm lado hacia der.
    gosub Giro_cerrado_derecha         ;y al final se detiene
    pause 1500
    gosub Avanza
    pause 4000

    gosub Giro_cerrado_derecha
    pause 2000
    gosub Avanza
    pause 4000
       
    gosub Giro_cerrado_derecha
    pause 2000
    gosub Avanza
    pause 4000
    b1=222
  endif

  goto inicio

;--- Fin del bucle principal del programa ---   





;SUBRUTINAS DE MOVIMIENTOS DE LAS RUEDAS
Avanza:
    low B.4         ; rueda derecha AVANZA
    high B.5
    low B.6         ; rueda izquierda AVANZA
    high B.7
    return          ; vuelve al "gosub"

Retrocede:
    high B.4        ; rueda derecha RETROCEDE
    low B.5
    high B.6        ; rueda izquierda RETROCEDE
    low B.7
    return          ; vuelve al "gosub"

Para:
    low B.4         ; rueda derecha PARADA
    low B.5
    low B.6         ; rueda izquierda PARADA
    low B.7
    return          ; vuelve al "gosub"

Derecha:
    low B.4         ; rueda derecha PARADA
    low B.5
    low B.6         ; rueda izquierda AVANZA
    high B.7
    return          ; vuelve al "gosub"

Izquierda:
    low B.4         ; rueda derecha AVANZA
    high B.5
    low B.6         ; rueda izquierda PARADA
    low B.7
    return          ; vuelve al "gosub"
 
















Configuración con módulo JY-MCU de Bluetooth
Enviar comando "AT+VERSION" y leer la versión del módulo

  • Microcontrolador:
    • PICAXE-18M2
  • Tarjeta controladora:
    • "Proyectos PICAXE-18 de alta potencia (CHI035)
    • "Proyectos PICAXE-18 de estándar (CHI030)
  • Sensor/actuador:
    • Módulo JY-MCU V1.06 de comunicaciones por Bluetooth (HC-06)
  • Función
    • Enviar comando "AT+VERSION" para leer la versión del módulo
    • Leer en pantalla la versión que se devuelve ("OK LinvorV1.8" en nuestro caso)
    • De forma similar, enviar cualquier comando "AT" y leer su resultado
  • Conexiones (módulo-Picaxe): 
    • Vcc ---- V+ (por ej. 4,5V)
    • Gnd ---- G
    • Txd ---> C.0
    • Rxd <--- C.1 (hay que programar C.1 como salida)
    • Resistencia de 10K entre V+ y C.0 (también vale de 1K).
      Esta resistencia se pone porque las entradas de las tarjetas traen una resistencia de pull-down de 10K que no hace posible la lectura directa desde el módulo.
    • NOTA: si usamos directamente un PICAXE-18M2 sin tarjeta controladora, NO hace falta la resistencia anterior
  • Código del programa:

;------------- INFORMACIÓN --------------
;    Nombre  :      bluetooth-1-test.bas
;    Autor   :      robotica-escolar-eso.blogspot.com
;    Micro   :      PICAXE-18M2 (tarjeta CHI035A)
;    Entradas:      C.0 <- Txd (del módulo Bluetooth)
;    Salidas :      C.1 -> Rxd (del módulo Bluetooth)
;                   Vcc -- V+
;                   Gnd -- 0V
;    Función :      Testear envío y recepción de datos
;                   entre PICAXE y módulo de Bluetooth
;                   usando el comando AT+VERSION
;                   Debe aparecer: "OK LinvorV1.8" en b0,b1,...
;    Notas   :      Módulo usado JY-MCU V1.06 (HC-06)
;                   (tiene 4 pines; Vcc-Gnd-Txd-Rxd)
;                   Entre C.0 y Txd debe ir 10k ohm.
;                   Configurar C.1 como entrada
;                   (o bien usar B.0 junto al micro)
;                   Si se usa solo el comando "AT"
;                   debe aparecer: "OK" en b0,b1
;----------------------------------------


;----------- INICIALIZACIÓN -------------
pause 1000
output C.1  ;(indicamos que C.1 funcionará como salida) 
setfreq m8  ; ponemos la frecuencia a 8MHz (por defecto es 4MHz)
;----------------------------------------


;----------- BUCLE PRINCIPAL ------------
do
    ;Envío del comando AT por salida C.1
    serout C.1, T9600_8, ("AT+VERSION")
    pause 200
 
    ;Lectura de datos devueltos por entrada C.0
    serin [1000], C.0, T9600_8, b0,b1,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15
    debug 
    pause 8000  ; (debe aparecer "OK LinvorV1.8" en b0-...-b15)
 
    w0=0  w1=0  w2=0  w3=0  w4=0  w5=0  w6=0  w7=0
    debug
    pause 4000  ; (todas las variables aparecen a "0")    
loop
;----------------------------------------
  



















Configuración con módulo JY-MCU de Bluetooth
Enviar comando "AT+NAMEnombre" para cambiar nombre del módulo

  • Microcontrolador:
    • PICAXE-18M2
  • Tarjeta controladora
    • "Proyectos PICAXE-18 de alta potencia (CHI035)"
    • "Proyectos PICAXE-18 de estándar (CHI030)"
  • Sensor/actuador:
    • Módulo JY-MCU V1.06 de comunicaciones por Bluetooth (HC-06)
  • Función
    • Enviar comando "AT+NOMBREnombrehasta20caracte" para cambiar el nombre del módulo (por defecto se llama HC-06)
    • Leer en pantalla "OK setname" si el cambio se realizó correctamente
    • Comprobar desde tableta Android que cambió el nombre
  • Conexiones (módulo-Picaxe): 
    • Vcc ---- V+ (por ej. 4,5V)
    • Gnd ---- G
    • Txd ---> C.0
    • Rxd <--- C.1 (hay que programar C.1 como salida)
    • Resistencia de 10K entre V+ y C.0 (también vale de 1K).
      Esta resistencia se pone porque las entradas de las tarjetas traen una resistencia de pull-down de 10K que no hace posible la lectura directa desde el módulo
    • NOTA: si usamos directamente un PICAXE-18M2 sin tarjeta controladora, NO hace falta la resistencia anterior
  • Código del programa:

;Tarjeta: "Proyectos PICAXE-18 estándar" (también la de alta potencia)
;Micro  : PICAXE-18M2 
;Otros  : Módulo JY-MCU V1.06 (tiene 4 pines; Vcc-Gnd-Txd-Rxd)
;
;Vcc -- V+
;Gnd -- 0V
;Txd -> C.0  ;más una resistencia de 10K (o de 1K) entre C.0 y V+  !!
;Rxd <- C.1 

;Parámetros iniciales de configuración
pause 1000
output C.1  ;(indicamos que C.1 funcionará como salida) 
setfreq m8  ; ponemos la frecuencia a 8MHz (por defecto es 4MHz)

do while b0=0
    ;Envío del comando AT por salida C.1
    serout C.1, T9600_8, ("AT+NAMEnombrehasta20caracte")
    pause 200
    ;Lectura de datos devueltos por entrada C.0
    serin [1000], C.0, T9600_8, b0,b1,b3,b4,b5,b6,b7,b8,b9
    debug ;(debe aparecer "OK setname" en b0-...-b9
loop

;NOTAS FINALES
;Este programa finalizará cuando se devuelva el "OK setname".
;Si buscamos ahora el módulo Bluetooth desde una tableta o móvil Android,
;debería aparecer en la misma el nuevo nombre (por defecto es HC-06).
;De forma similar, con el correspondiente comando AT
;se podría cambiar también la contraseña o la velocidad de transmisión.
  
















1. Coche controlado por Bluetooth (5 movimientos básicos)

  • Microcontrolador:
    • PICAXE-18M2
  • Tarjeta controladora:
    • "Proyectos PICAXE-18 de alta potencia (CHI035)"
  • Sensor/actuador:
    • Módulo JY-MCU V1.06 de comunicaciones por Bluetooth (HC-06)
  • Actuadores:
    • Dos motores. El primero en B.4 y B.5 . El segundo en B.6 y B.7
  • Función
    • Se leen los códigos enviados desde la tableta por Bluetooth
    • Según el valor el coche avanza, gira a izquierda o derecha, se detiene o retrocede.
    • Comprobar desde tableta Android que cambió el nombre
  • Conexiones (módulo-Picaxe): 
    • Vcc ---- V+ (por ej. 4,5V)
    • Gnd ---- G
    • Txd ---> C.0 
    • Resistencia de 10K entre V+ y C.0 (también vale de 1K).
    • Esta resistencia se pone porque las entradas de las tarjetas traen una resistencia de pull-down de 10K que no hace posible la lectura directa desde el módulo
    • NOTA: si usamos directamente un PICAXE-18M2 sin tarjeta controladora, NO hace falta la resistencia anterior
  • Código del programa:

;------------- INFORMACIÓN --------------
;    Nombre  :      coche-controlado-por-Bluetooth.bas
;    Autor   :      Departamento de Tecnología - IES J. Romero Murube
;    Micro   :      PICAXE-18M2 (CHI035A)
;    Entradas:      C.0 <- Tx del módulo Bluetooth (HC-06)
;    Salidas :      B.4 B.5 -> motor izquierdo
;                   B.6 B.7 -> motor derecho
;    Función :      Se controlan los 5 movimientos básicos del coche
;                   desde una tableta a través de Bluetooth
;                   usando nuestra App de Androig "MultiControlBT"
;----------------------------------------


;----------- INICIALIZACIÓN -------------
pause 1000
setfreq m8
pause 1000
;----------------------------------------


;----------- BUCLE PRINCIPAL ------------
do
      serin c.0, T9600_8, b0  ;se guarda en b0 el valor 
      ;debug                  ;transmitido por Bluetooth 
      select case b0
            case 2                            ;Códigos
                  gosub avanzar               ;   2
            case 5                            ; 4 5 6
                  gosub detener               ;   8
            case 4
                  gosub girar_izquierda
            case 6
                  gosub girar_derecha                  
            case 8
                  gosub retroceder
      endselect
loop            
;----------------------------------------

      
;------------- SUBRUTINAS ---------------
detener:
      low B.4      ;rueda izquierda se detiene
      low B.5
      
      low B.6      ;rueda derecha se detiene
      low B.7
return

girar_izquierda:
      low B.4      ;rueda izquierda se detiene
      low B.5
      
      high B.6      ;rueda derecha avanza
      low B.7
return

girar_derecha:
      high B.4      ;rueda izquierda avanza
      low B.5
      
      low B.6      ;rueda derecha se detiene
      low B.7
return      

avanzar:
      high B.4      ;rueda izquierda avanza
      low B.5
      
      high B.6      ;rueda derecha avanza
      low B.7
return


retroceder:
      low B.4      ;rueda izquierda retrocede
      high B.5
      
      low B.6      ;rueda derecha retrocede
      high B.7
return
;----------------------------------------
  














1. Puertas automatizadas.  Programa modelo de referencia

  • Microcontrolador:
    • PICAXE-18M2
  • Tarjeta controladora:
    • "Proyectos PICAXE-18 de alta potencia (CHI035A)"
  • Sensores:
    • Pulsador y finales de carrera en B.2, B.5 y B.6 respectivamente
  • Actuadores:
    • Motor en B.4 y B.5 . LED verde en B.0 y LED rojo en B.1
  • Función
    • Por defecto la puerta está cerrada (LED rojo encendido)
    • Si presionamos pulsador empieza a abrirse (LED verde parpadea)
    • La puerta termina de abrirse (LED verde encendido) y se esperan 10 segundos.
    • La puerta empieza a cerrarse (LED rojo parpadea).
    • Tras cerrarse volvemos a estar en la situación inicial.
  • Código del programa:

;--------- INFORMACIÓN ----------
;    Nombre  :    0-puerta-modelo.bas
;    Autor   :    Dep. Tecnología - IES J. Romero Murube
;    Micro   :    PICAXE-18M2
;    Tarjeta :    CHI035A
;    Entradas:    C.1 -> Pulsador/FDC para abrir la puerta
;                 C.5 -> FDC1 puerta totalmente cerrada
;                 C.6 -> FDC2 puerta totalmente abierta
;    Salidas :    B.0 <- LED verde
;                 B.1 <- LED rojo
;                 B.4 y B.5 <- Motor
;    Función :    PROYECTO "Puerta automatizada" - TEC 4ºESO 2013-2014
;                 CERRADA -> estado_puerta = 0
;                       Puerta cerrada; LED rojo encendido
;                       Pulsación (C.2) para abrir
;                 ABRIÉNDOSE -> estado_puerta = 2 
;                       Se abre la puerta; LED verde parpadea
;                 ABIERTA -> estado_puerta = 1
;                       Puerta abierta; LED verde encendido
;                       Pausa de 10 segundos
;                 CERRÁNDOSE -> estado_puerta = 3
;                       Se cierra la puerta; LED rojo parpadea
;     NOTA1  :    Cada grupo puede personalizar su programa
;     NOTA2  :    Se utilizan dos tareas simultáneas START0 y START1
;                 En START0 se comprueban sensores y se controla motor
;                 En START1 se controlan los LED según "estado_puerta"
;--------------------------------


start0:
      ;------ INICIALIZACIÓN 0 --------
      symbol estado_puerta = b0
      estado_puerta = 0                   ;Puerta inicialmente cerrada
      ;--------------------------------

      ;------ BUCLE PRINCIPAL 0 -------
      do
            ;Se comprueba pulsación para abrir
            if pinC.1 is on then          ;SI se pulsa ENTONCES
                  estado_puerta = 2       ;     (ABRIÉNDOSE)
                  high B.4                ;     motor en marcha (abrir)
                  low  B.5                ;     para abrir la puerta;
                  pause 5000              ;     al menos 5s abriendo
            endif                         ;(FIN del SI-ENTONCES)
                  
            ;Se comprueba FDC2 de puerta abierta totalmente
            if pinC.6 is on then          ;SI FDC2 pulsado ENCONTES
                  estado_puerta = 1       ;     (ABIERTA)
                  low B.4                 ;     se para motor
                  low B.5
                  pause 10000             ;     y se esperan 10s;
                  
                  estado_puerta = 3       ;     (CERRÁNDOSE)
                  low B.4                 ;     motor en marcha (cerrar)
                  high B.5                ;     para cerra la puerta;
                  pause 5000              ;     al menos 5 segundos
            endif                         ;(FIN del SI-ENTONCES)
            
            ;Se comprueba FDC1 de puerta cerrada totalmente
            if pinC.5 is on then          ;SI FDC1 pulsado ENCONTES
                  estado_puerta = 0       ;     (CERRADA)
                  low B.4                 ;     se para motor
                  low B.5
            endif                         ;(FIN del SI-ENTONCES)
      loop  
      ;--------------------------------


start1:
      ;------ BUCLE PRINCIPAL 1 -------
      do
            select case estado_puerta
                  case 0                  ;PUERTA CERRADA
                        low B.0           ;      - led verde apagado
                        high B.1          ;      - led rojo encendido
                  case 1                  ;PUERTA ABIERTA
                        high B.0          ;      - led verde encendido
                        low B.1           ;      - led rojo apagado
                  case 2                  ;PUERTA ABRIENDOSE
                        low B.1           ;      - led rojo apagado
                        high B.0          ;      - led verde parpadeando !!!
                        pause 300
                        low B.0
                        pause 300
                  case 3                  ;PUERTA CERRANDOSE
                        low B.0           ;      - led verde apagado
                        high B.1          ;      - led rojo Parpadeando !!!
                        pause 300
                        low B.1
                        pause 300
            end select
      loop
      ;--------------------------------


;--------- SUBRUTINAS -----------

;--------------------------------
  


















1. Ascensor de tres plantas.  Programa modelo-A de referencia

  • Microcontrolador:
    • PICAXE-18M2
  • Tarjeta controladora:
    • "Proyectos PICAXE-18 de alta potencia" (CHI035A)
  • Sensores:
    • Tres pulsadores en C.0, C.1 y C.2
    • Tres interruptores magnéticos en C.5, C.6 y C.7
  • Actuadores:
    • Motor en B.4 y B.5 
    • Tres ledes en B.0, B.1 y B.2 
    • Dos ledes más en B.6 y B.7 (es estos HIGH y LOW están intercambiados)
  • Función
    • Por defecto la cabina está en la planta P1 o en P2 o en P3
    • Cada pulsador envía la cabina a una planta; la parada es automática
    • Mientras sube o baja la cabina se enciende el correspondiente led
    • Siempre está encendido el led de la planta en la que se está
  • Código del programa:

;------------- INFORMACIÓN --------------
;Proyecto   : Ascensor de tres plantas con parada automática - MODELO A
;Tarj/Micro : CHI035A / PICAXE18-M2 
;Entradas   : Pulsadores en C.0, C.1 y C.2 (para ir a plantas 3, 2 y 1)
;             Interrup. magnéticos en C.5, C.6 y C.7 (detecta plantas 3, 2 y 1)
;Salidas    : Motor en B.4 y B.5
;             ledes en B.0, B.1 y B.2 (indican ascensor en planta 1, 2 o 3)
;             ledes en B.6 y B.7 (indican subir y bajar)
;Función    : Ascensor con tres plantas. Un pulsador para ir a cada planta.
;             Indicador de llegada de cabina a planta o paso por la misma.
;             MODELO A: Indicador de subir/bajar. 
;NOTA       : Una vez que se llega a una planta se deben ¡¡¡AJUSTAR!!!
;             demoras antes de parar el motor para situar bien la cabina
;----------------------------------------


;************* INICIALIZACIÓN *************
symbol Pulsador_ir_planta_3 = pinC.0
symbol Pulsador_ir_planta_2 = pinC.1
symbol Pulsador_ir_planta_1 = pinC.2

symbol InterruptorMagn_en_planta_3 = pinC.5
symbol InterruptorMagn_en_planta_2 = pinC.6
symbol InterruptorMagn_en_planta_1 = pinC.7

symbol planta_actual  = b0
symbol planta_destino = b1

symbol t_demora_bajar_a_P1 = 500    ;AJUSTAR para terminar de bajar a P1
symbol t_demora_bajar_a_P2 = 500    ;AJUSTAR para terminar de bajar a P2
symbol t_demora_subir_a_P2 = 500    ;AJUSTAR para terminar de subir a P2
symbol t_demora_subir_a_P3 = 500    ;AJUSTAR para terminar de subir a P3

planta_destino = 0
gosub led_subir_bajar_off     ;inicialmente apagados subir/bajar
;Al iniciar se indica en qué planta estamos
if InterruptorMagn_en_planta_1 is ON then
      gosub led_p1_on
else if InterruptorMagn_en_planta_2 is ON then
      gosub led_p2_on
else if InterruptorMagn_en_planta_3 is ON then
      gosub led_p3_on
endif
;----------------------------------------


;----------- BUCLE PRINCIPAL ------------
do
      ;BOTÓN IR A LA PLANTA 1
      if Pulsador_ir_planta_1 is ON then
            if InterruptorMagn_en_planta_1 is OFF then
                  planta_destino = 1
                  gosub led_bajar_on
                  gosub bajar
                  pause 4000
            endif
      endif
      
      ;BOTÓN IR A LA PLANTA 3
      if Pulsador_ir_planta_3 is ON then
            if InterruptorMagn_en_planta_3 is OFF then
                  planta_destino = 3
                  gosub led_subir_on
                  gosub subir
                  pause 4000
            endif
      endif
      
      ;BOTÓN IR A LA PLANTA 2
      if Pulsador_ir_planta_2 is ON then
            if InterruptorMagn_en_planta_2 is OFF then
                  planta_destino = 2
                  if      InterruptorMagn_en_planta_3 is ON then
                        gosub led_bajar_on
                        gosub bajar
                        pause 4000
                  else if InterruptorMagn_en_planta_1 is ON then
                        gosub led_subir_on
                        gosub subir
                        pause 4000
                  else if planta_actual = 3 then
                        gosub led_bajar_on
                        gosub bajar
                        pause 4000
                  else if planta_actual = 1 then
                        gosub led_subir_on
                        gosub subir
                        pause 4000
                  endif       
            endif
      endif
      
      ;LLEGADA A PLANTA 3
      if InterruptorMagn_en_planta_3 is ON and planta_destino=3 then
            planta_actual = 3
            gosub led_p3_on
            pause t_demora_subir_a_P3     ;para que termine de subir
            gosub parar       
            gosub led_subir_bajar_off
            planta_destino = 0
      endif
      
      ;LLEGADA A PLANTA 2
      if InterruptorMagn_en_planta_2 is ON then
            gosub led_p2_on
            if planta_destino = 2 then
                  if planta_actual = 1 then     ;subiendo
                        pause t_demora_subir_a_P2
                  endif
                  if planta_actual = 3 then     ;bajando
                        pause t_demora_bajar_a_P2
                  endif             
                  gosub parar
                  gosub led_subir_bajar_off
                  planta_destino = 0
            endif
            planta_actual = 2
      endif

      ;LLEGADA A PLANTA 1
      if InterruptorMagn_en_planta_1 is ON and planta_destino=1 then
            planta_actual = 1
            gosub led_p1_on
            pause t_demora_bajar_a_P1     ;para que termine de bajar
            gosub parar       
            gosub led_subir_bajar_off
            planta_destino = 0
      endif
      debug
loop
;----------------------------------------



;------------- SUBRUTINAS ---------------
subir:
      low B.4     ;sube la cabina
      high B.5
      return
      
bajar:
      high B.4    ;baja la cabina
      low B.5
      return
      
parar:
      low B.4     ;se detiene la cabina
      low B.5
      return


led_subir_on:     
      low B.6     ;se enciende led de subir
      high B.7    ;(se apaga el de bajar)
      return
            
led_bajar_on:     
      low B.7     ;se enciende led de bajar
      high B.6    ;(se apaga el de subir)
      return
      
led_subir_bajar_off:
      high B.6    ;se apagan los dos ledes
      high B.7    ;de subir y bajar
      return
      
led_P1_on:
      high B.0    ;Se enciende led de planta 1
      low B.1, B.2
      return
            
led_P2_on:
      high B.1    ;Se enciende led de planta 2
      low B.0, B.2
      return
            
led_P3_on:
      high B.2    ;Se enciende led de planta 3
      low B.0, B.1
      return
      
led_P123_off:
      low B.0, B.1, B.2 ;Se apagan ledes de plantas
      return
;----------------------------------------
  

















2. Ascensor de tres plantas.  Programa modelo-B de referencia

  • Microcontrolador:
    • PICAXE-18M2
  • Tarjeta controladora:
    • "Proyectos PICAXE-18 de alta potencia" (CHI035A)
  • Sensores:
    • Tres pulsadores en C.0, C.1 y C.2
    • Tres interruptores magnéticos en C.5, C.6 y C.7
  • Actuadores:
    • Motor en B.4 y B.5 
    • Tres ledes en B.0, B.1 y B.2 
    • Tres ledes más en B.3, B.6 y B.7 (en los dos últimos HIGH y LOW están intercambiados)
  • Función
    • Por defecto la cabina está en la planta P1 o en P2 o en P3
    • Cada pulsador envía la cabina a una planta; la parada es automática
    • Siempre está encendido el led de la planta en la que se está
    • Cuando se envía a una planta, se enciende el led de destino de esa planta
  • Código del programa:

;------------- INFORMACIÓN --------------
;Proyecto   : Ascensor de tres plantas con parada automática - MODELO B
;Tarj/Micro : CHI035A / PICAXE18-M2 
;Entradas   : Pulsadores en C.0, C.1 y C.2 (para ir a plantas 3, 2 y 1)
;             Interrup. magnéticos en C.5, C.6 y C.7 (detecta plantas 3, 2 y 1)
;Salidas    : Motor en B.4 y B.5
;             ledes en B.0, B.1 y B.2 (indican ascensor en planta 1, 2 o 3)
;             ledes en B.3, B.6 y B.7 (indican que se va a planta 1, 2 o 3)
;Función    : Ascensor con tres plantas. Un pulsador para ir a cada planta.
;             Indicador de llegada de cabina a planta o paso por la misma.
;             MODELO B: Indicador de la planta a la que se va
;NOTA       : Una vez que se llega a una planta se deben ¡¡¡AJUSTAR!!!
;             demoras antes de parar el motor para situar bien la cabina
;----------------------------------------


;************* INICIALIZACIÓN *************
symbol Pulsador_ir_planta_3 = pinC.0
symbol Pulsador_ir_planta_2 = pinC.1
symbol Pulsador_ir_planta_1 = pinC.2

symbol InterruptorMagn_en_planta_3 = pinC.5
symbol InterruptorMagn_en_planta_2 = pinC.6
symbol InterruptorMagn_en_planta_1 = pinC.7

symbol planta_actual  = b0
symbol planta_destino = b1

symbol t_demora_bajar_a_P1 = 500    ;AJUSTAR para terminar de bajar a P1
symbol t_demora_bajar_a_P2 = 500    ;AJUSTAR para terminar de bajar a P2
symbol t_demora_subir_a_P2 = 500    ;AJUSTAR para terminar de subir a P2
symbol t_demora_subir_a_P3 = 500    ;AJUSTAR para terminar de subir a P3

planta_destino = 0

;Al iniciar se indica en qué planta estamos
if InterruptorMagn_en_planta_1 is ON then
      gosub led_p1_on
else if InterruptorMagn_en_planta_2 is ON then
      gosub led_p2_on
else if InterruptorMagn_en_planta_3 is ON then
      gosub led_p3_on
endif
;----------------------------------------


;----------- BUCLE PRINCIPAL ------------
do
      ;BOTÓN IR A LA PLANTA 1
      if Pulsador_ir_planta_1 is ON then
            if InterruptorMagn_en_planta_1 is OFF then
                  planta_destino = 1
                  gosub led_Destino_P1
                  gosub bajar
                  pause 4000
            endif
      endif
      
      ;BOTÓN IR A LA PLANTA 3
      if Pulsador_ir_planta_3 is ON then
            if InterruptorMagn_en_planta_3 is OFF then
                  planta_destino = 3
                  gosub led_Destino_P3
                  gosub subir
                  pause 4000
            endif
      endif
      
      ;BOTÓN IR A LA PLANTA 2
      if Pulsador_ir_planta_2 is ON then
            if InterruptorMagn_en_planta_2 is OFF then
                  planta_destino = 2
                  gosub led_Destino_P2
                  if      InterruptorMagn_en_planta_3 is ON then
                        gosub bajar
                        pause 4000
                  else if InterruptorMagn_en_planta_1 is ON then
                        gosub subir
                        pause 4000
                  else if planta_actual = 3 then
                        gosub bajar
                        pause 4000
                  else if planta_actual = 1 then
                        gosub subir
                        pause 4000
                  endif       
            endif
      endif
      
      ;LLEGADA A PLANTA 3
      if InterruptorMagn_en_planta_3 is ON and planta_destino=3 then
            planta_actual = 3
            gosub led_p3_on
            pause t_demora_subir_a_P3     ;para que termine de subir
            gosub parar       
            planta_destino = 0
      endif
      
      ;LLEGADA A PLANTA 2
      if InterruptorMagn_en_planta_2 is ON then
            gosub led_p2_on
            if planta_destino = 2 then
                  if planta_actual = 1 then     ;subiendo
                        pause t_demora_subir_a_P2
                  endif
                  if planta_actual = 3 then     ;bajando
                        pause t_demora_bajar_a_P2
                  endif             
                  gosub parar
                  planta_destino = 0
            endif
            planta_actual = 2
      endif

      ;LLEGADA A PLANTA 1
      if InterruptorMagn_en_planta_1 is ON and planta_destino=1 then
            planta_actual = 1
            gosub led_p1_on
            pause t_demora_bajar_a_P1     ;para que termine de bajar
            gosub parar       
            planta_destino = 0
      endif
      debug
loop
;----------------------------------------



;------------- SUBRUTINAS ---------------
subir:
      low B.4     ;sube la cabina
      high B.5
      return
      
bajar:
      high B.4    ;baja la cabina
      low B.5
      return
      
parar:
      low B.4     ;se detiene la cabina
      low B.5
      return

led_P1_on:
      high B.0    ;Se enciende led de planta 1
      low B.1, B.2
      return
            
led_P2_on:
      high B.1    ;Se enciende led de planta 2
      low B.0, B.2
      return
            
led_P3_on:
      high B.2    ;Se enciende led de planta 3
      low B.0, B.1
      return
      
led_P123_off:
      low B.0, B.1, B.2 ;Se apagan ledes de plantas
      return
      
led_Destino_P1:
      high B.3            ;Se enciende led para ir a P1
      high B.6, B.7       ;(se apagan para ir a P2 y P3)
      
led_Destino_P2:
      low B.6             ;Se enciende led para ir a P2
      low B.3 : high B.7  ;(se apagan para ir a P1 y P3)
      
led_Destino_P3:
      low B.7             ;Se enciende led para ir a P3
      low B.3 : high B.6  ;(se apagan para ir a P1 y P2)
;----------------------------------------