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".
- 01.1 Programando un led en la salida C.0 de un Picaxe (parpadeo simple).
- 01.2 Programando un led en la salida C.0 de un Picaxe (parpadeo doble).
- 02.1 Semáforo simple con tres led.
- 03.1 Semáforo peatonal (I) con tres led y un pulsador.
- 04.1 Siete led en salidas dinstintas parpadeando simultáneamente.
- 04.2 Seis led dispuestos circularmente y luz-doble dando vueltas.
- 04.3 Semáforo peatonal completo (y II) con cinco led, pulsador y zumbador.
- 05.1 Led con parpadeo proporcional a la distancia de un objeto.
- 05.2 Cuenta repetitiva de 0 a 9 en un visualizador (display de 7 segmentos) con intervalos de 1 segundo.
- 06.1 Calibración de un sensor de distancias.
- 06.2 Midiendo con sensor de distancia y mostrando el resultado en un visualizador de 7 segmentos.
- 07.1 Leyendo los códigos de las teclas de un mando a distancia.
- 07.2 Controlando cuatro led con un mando a distancia.
- 08.2 Movimientos básicos de dos motores con un mando a distancia.
- 11.1 Probando el sensor frontal del robot resuelve-laberintos.
- 11.2 Probando el sensor derecho del robot resuelve-laberintos.
- 12.1 PROGRAMA FINAL del 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"
- 1. Lectura de los códigos de los botones a usar del mando a distancia de IR.
- 2. Prueba básica de movimiento de los motores.
- 3. PROGRAMA FINAL del "Coche teledirigido por mando a distancia de infrarrojos".
Configuración del módulo JY-MCU V1.06 para comunicaciones por Bluetooth
- Enviar comando "AT+VERSION" y leer la versión del módulo
- Cambiar el nombre del módulo con "AT+NAMEnombrehasta20caracte"
Proyecto Tecnológico "Coche controlado por Bluetooth"
Proyecto Tecnológico "Puertas automatizadas"
Proyecto Tecnológico "Ascensor de tres plantas"
- 1. Ascensor de tres plantas. Programa modelo-A de referencia"
- 2. Ascensor de tres plantas. Programa modelo-B de referencia"
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
'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
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)
'El siguiente programa hace parpadear el LED:
- 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
'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"
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:
'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
'Por defecto se enciende el LED verde
'Si hay pulsación se inicia la secuencia rojo-amarillo-verde
'volviendo a la situación inicial
- 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)
'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
'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
'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
'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)
'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 inicio
'[**]: ¡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 inicio
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+
'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
' 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)
'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 '2goto 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 '7goto 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.
'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.
'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"
'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
'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
'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
'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.
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
;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".
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.
;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".
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
'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".
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
'
'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.
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.
'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.
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"
'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" .
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"
'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"
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 ;----------------------------------------
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
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.
;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.
- 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 ;----------------------------------------
- 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 ----------- ;--------------------------------
- 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
;----------------------------------------
- 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)
;----------------------------------------