You are on page 1of 57

2.

1 INVESTIGAR, ANALIZAR Y SELECCIONAR SENSORES A EMPLEAR PARA LA


DETECCIN DE LAS VARIABLES MENCIONADAS EN EL PLANTEAMIENTO DEL
PROBLEMA

Los sensores imitan la capacidad de percepcin de los seres humanos, por ello es cada
vez ms usual encontrarlos incorporados a cualquier rea tecnolgica. Debido a esta
caracterstica de imitar la percepcin humana, se pueden encontrar sensores
relacionados con los diferentes sentidos: vista, odo, tacto, es decir, responden a la
informacin que reciben del entorno. Los dispositivos que incorporan sensores dan
informacin acerca del estado del sistema.

Por lo tanto, los sensores, son dispositivos electrnicos que permiten interactuar con el
entorno, de forma que proporcionen informacin de ciertas variables que nos rodean
para poder procesarlas y as generar rdenes o activar procesos (Serna,2010: Pg.3).

2.1.1 CLASIFICACIN

Dada la gran cantidad de sensores que existen, es necesario clasificarlos para entender
mejor su naturaleza y funcionamiento. No obstante, esta tarea no es fcil, por lo que
existen varios tipos de clasificaciones (Serna, 2010: Pg.3).

De acuerdo a su funcionamiento

Activos: requieren de una fuente externa de energa de la que recibir


alimentacin de corriente para su funcionamiento.

Pasivos: no requieren de una fuente de energa externa, si no que las propias


condiciones medioambientales son suficientes para que funcionen segn su
cometido. (Serna, 2010: Pg.3).
De acuerdo a las seales que proporcionan

Analgicos: Proporcionan la informacin mediante una seal analgica (tensin,


corriente), es decir, que pueden tomar infinidad de valores entre un mnimo y
un mximo.

Digitales: Proporcionan la informacin mediante una seal digital que puede ser
un 0 o un 1 lgicos, o bien un cdigo de bits.

De acuerdo a la naturaleza de su funcionamiento

Posicin: son aquellos que experimentan variaciones en funcin de la posicin


que ocupan en cada instante los elementos que lo componen.

Fotoelctricos: Son aquellos que experimentan variaciones en funcin del campo


magntico que les atraviesa.

Temperatura: Son aquellos que experimentan variaciones en funcin de la


temperatura del lugar donde estn ubicados.

Humedad: Son aquellos que experimentan variaciones en funcin del nivel de


humedad existente en el medio en que se encuentran.

Presin: Son aquellos que experimentan variaciones en funcin de la presin a


que son sometidos (Serna, 2010: Pg.5).

Movimiento: Son aquellos que experimentan variaciones en funcin de los


movimientos a los que son sometidos.

Qumicos: Son aquellos que experimentan variaciones en funcin de los agentes


qumicos externos que pudieran incidir sobre ellos.
Atendiendo a los elementos utilizados en su fabricacin

Mecnicos: son aquellos que utilizan contactos mecnicos que se abren o


cierran.

Resistivos: Son aquellos que utilizan en su fabricacin elementos resistivos.

Capacitivos: son aquellos que utilizan en su fabricacin condensadores.

Inductivos: son aquellos que utilizan en su fabricacin bobinas.

Piezoelctricos: son aquellos que utilizan en su fabricacin cristales como el


cuarzo.

Semiconductores: son aquellos que utilizan en su fabricacin semiconductores.

2.1.2 CARACTERSTICAS

A la hora de elegir un sensor para una aplicacin concreta, es necesario tener en cuenta
determinados aspectos para obtener el mejor rendimiento dentro de dicha aplicacin:

Rapidez en la respuesta.

Situacin donde van a ser utilizados.

Radio de accin.

Fiabilidad en el funcionamiento.

Tensiones de alimentacin.

Consumo de corriente.

Mrgenes de temperatura de funcionamiento.

Posibles interferencias por agentes externos.


Resistencia a la accin de agentes externos.

Relacin calidad/precio

En algunas ocasiones es necesario conocer determinadas caractersticas tcnicas que


brindan informacin sobre la calidad del sensor:

Resolucin: es la mnima variacin de la magnitud de entrada que puede


apreciarse a la salida.

Sensibilidad: es la relacin entre la variacin de la magnitud de salida y la


variacin de la magnitud de entrada.

Error: es la desviacin de la medida proporcionada por el sensor respecto de la


real. Se suele expresar en %.

Precisin: Es el error esperado al repetir varias veces la misma medida.

La tabla 15 muestra el tipo de sensores que habitualmente ms se utiliza en funcin de


la aplicacin (Serna, 2010: Pg.6).

Tabla 1: Aplicacin de los distintos sensores


2.1.3 REQUERIMIENTOS DE MEDICIN DE LOS SENSORES DEL PSSLR

Laberinto en T
Variables a medir:

Deteccin de presencia del ratn por cuadrantes.

Tiempo que el ratn que tarda en llegar a la recompensa.

Laberinto elevado
Variables a medir:

Numero de dippings realizados.

Nmero de entradas y salidas a los brazos abiertos y cerrados.

Numero de estiramientos realizados.

Actgrafo
Variables a medir:

Deteccin de presencia del ratn por cuadrantes.

Tiempo de permanencia del ratn en los cuadrantes.

Mecanismo del sistema


Variables a medir:

Posicionamiento correcto del mdulo a utilizar.

Con un mismo tipo de sensor se puede monitorear ms de una variable, las variables
son las siguientes: Deteccin de presencia del ratn por cuadrantes, tiempo que el ratn
tarda en llegar a la recompensa, nmero de entradas , salidas a los brazos abiertos y
cerrados, tiempo de permanencia del ratn en los cuadrantes y deteccin de dipping.
Se utilizar otro sensor para registrar cuando el sistema est en la posicin correcta. Por
lo que el sensor 1: se encargar de detectar la presencia del ratn y el sensor 2: se
encargar de detectar el posicionamiento correcto del sistema.
Para el requerimiento de variables a cumplir por el sensor 1 y sensor 2 se utilizara la
tabla 16 para realizar la seleccin.
Apropiado para el funcionamiento
Sensor Descripcin
requerido

La funcin del detector capacitivo consiste en sealar


un cambio de estado, basado en la variacin del Sensor 2: Para el correcto posicionamiento de
estmulo de un campo elctrico. Los sensores los mdulos del sistema, se podra emplear
capacitivos detectan objetos metlicos, o no esta clase de sensor ya que algunas partes del
Capacitivos
metlicos, midiendo el cambio en la capacitancia, la sistema son metlicas y mediante el sensado
cual depende de la constante dielctrica del material podra indicar la posicin correcta del
a detectar, su masa, tamao, y distancia hasta la mdulo.
superficie sensible del detector.

Sensor 1: Esta clase de sensores son


adecuados debido a que se puede detectar la
Es un dispositivo electrnico que responde al cambio
obstruccin ocasionada entre emisor y
en la intensidad de luz. Estos sensores requieren de
receptor con la configuracin electrnica
Fotoelctrico un componente emisor que genere la luz (diodo led),
adecuada, en este caso se utilizara para la
y un componente receptor que recoge la luz
deteccin del ratn.
generada por el emisor.

Est formado por un devanado enrollado en un Sensor 2: Para el correcto posicionamiento de


ncleo. Al aproximar el extremo del devanado a un los mdulos del prototipo, se puede emplear
objeto metlico, cambia su inductancia. Este cambio este sensor ya que se podra adaptar una
Inductivo
puede monitorearse por el efecto que produce en un parte metlica adecuada en el prototipo para
circuito resonante. Solo se puede usar para detectar la deteccin y as indicar la posicin correcta
objetos metlicos. del mdulo.

Los sensores de ultrasonidos son detectores de


proximidad que trabajan libres de roces mecnicos y Sensor 1: Se puede ocupar para la deteccin
que detectan objetos a distancias de hasta 8m. El de presencia, debido a que tiene un rango de
Ultrasnico sensor emite impulsos ultrasnicos. Estos reflejan en alcance suficiente para implementarse.
un objeto, el sensor recibe el eco producido y lo
convierte en seales elctricas, las cuales son
elaboradas en el aparato de valoracin.
El final de carrera o sensor de contacto (tambin Sensor 2: En el caso de requerimientos del
conocido como "interruptor de lmite") o limit switch, sensor 2, este sensor cumple con los
son dispositivos elctricos, neumticos o mecnicos requerimientos, ya que para identificar la
Interruptores de
situados al final del recorrido de un elemento mvil, posicin arriba o abajo del mdulo del
posicin
como por ejemplo una cinta transportadora, con el prototipo slo se requerir de una ubicacin
objetivo de enviar seales que puedan modificar el adecuada de cada uno de los sensores en el
estado de un circuito. mismo.

Tabla 2: Descripcin de sensores de presencia

En la tabla 16 se realiz una descripcin de los diferentes grupos de sensores, adems


se realiz un anlisis de acuerdo a la informacin para seleccin de un grupo de sensores
que pueda ayudar a cubrir las tareas por los sensores 1 y 2.

Factores que influyen


Sensor1: Alcance (distancia), frecuencia de trabajo, tamao, precio, disponibilidad,
apropiado para trabajar con ratones.
Sensor2: tamao, precio y disponibilidad.
Lmites de los factores

Sensor1.

Alcance (distancia): 60 cm o ms.


Frecuencia: 32-48 Khz
Tamao: 4cm x 1cm.
Precio: $20 a $80
Disponibilidad: Ag electrnica, ect.
Sensor 2.
Precio: $20 a $80
Disponibilidad: Ag electrnica, ect.
Recabar informacin de los proveedores
Seleccionar el componente que rena las mejores caractersticas
Sensor 1

Sensores R. de Trabaja Tamao Precio Disponibilidad Ideal para el Rapidez en


accin. idealmente trabajo con respuesta
con luz roja roedores.
Sharp Si Si Si No Si Si Si
GP2D12
Sharp Si Si Si No Si Si Si
GP2Y0D02
Sensor de Si No No No Si Si Si
presencia
infrarrojo
industrial
IRM-8601 Si Si Si Si Si Si Si
TSOP 1838 Si Si Si Si Si Si Si
Ultrasnico Si Si No Si Si No Si

Sensor 2

Sensores Tamao Precio Disponibilidad Rapidez en respuesta Trabaja


idealmente con
luz roja
Sensor efecto hall Si Si Si Si Si
Micro switch Si Si Si Si Si
Ultrasnico Si No Si Si Si
Emisor-receptor Si Si Si Si No
Reglas de ruteo
La finalidad de las reglas de ruteo tiene que ver con la minimizacin del rea utilizada, la
disminucin de posibilidades de interferencia y de ruidos, y una apropiada distribucin de los
componentes.

A continuacin, se mencionan las reglas destacadas de acuerdo a los requerimientos.

Separacin mnima de pistas: si se trabaja con tensiones bajas, el mnimo debe ser de 0.3mm,
pero tiene que aumentarse para tensiones mayores.

Separacin entre los bordes de la placa y las pistas: tiene que ser, como mnimo, de
aproximadamente entre 2 y 3 mm.

Ancho de las pistas: entre otros factores, depender de la corriente que pasar por ellas. A
mayor corriente, mayor ancho de pistas. Las pistas de alimentacin tendrn que tener como
mnimo 1 o 2 mm, independientemente de la corriente que consuma el circuito.

Un grosor de la capa de cobre de 35 um (comn) 4mm de anchura soportan 8 a 10 A mximo,


1.5mm para 2 a 4 A y 0.2mm para 0.5 A.

Largo de las pistas: Se procura de hacer lo ms cortas posibles las pistas, con el fin de hacer un
diseo simple y reducir el tamao del pcb.

Trazado de intersecciones: Debe evitarse, que, en la interseccin de dos pistas, se forme


ngulos de 90 grados.

Conectores entrada-salida: Tienen que colocarse alejados entre s; en lo posible, ubicados en


extremos opuestos, para evitar un acoplamiento entre ellos.

Uniones pista-pad: En las uniones pista-pad la pista debe ser radial a dicho pad, y no
tangencial, no deben unirse dos o ms pads, dicha unin se debe hacer mediante una pista.

Diagrama de flujo para la fabricacin de un pcb.

reas funcionales del PSSLR (parte electrnica):

Etapa de potencia: Puentes H, motoreductores y micromotoreductores.


Etapa de sensado.
Generacin de frecuencia (36-38KHz).
Etapa de control, Recepcin y envi de datos, procesamiento de informacin.
Diagrama por bloques Electrnica.

Etapa de potencia
(Puentes H)

c Controlador
de posicin
Tx Actuadores
c Principal

(Micromotoreductores
envi de datos.
Recepcin y
Bluetooth.

y motoreductores)
Limit switch
Rx

c Deteccin
de presencia

Matriz de c Generador
Leds emisores
sensores de frecuencia
infrarrojos
receptores
Micro controlador principal

Descripcin: Es el micro controlador encargado de la recepcin y transmisin de datos, es decir acumula los datos obtenidos por los dems micro
controladores (microcontrolador control de posicin y microcontrolador deteccin de presencia) y enva por rs232 los datos, a su vez recibe la
informacin por rs232 y distribuye las tareas correspondientes a los dems micro controladores (microcontrolador control de posicin y
microcontrolador deteccin de presencia) segn el dato recibido.

Datos que se reciben o envan por bluetooth.

Se reciben: Emisor Se envan: Receptor


Variable del mdulo a utilizar. Bluetooth (Rx). Posicin del ratn por Bluetooth (Tx)
cuadrantes.
Inicio de prueba por modulo. Bluetooth (Rx). Dippings. Bluetooth (Tx)
Fin de la prueba. Bluetooth (Rx). Estiramientos. Bluetooth (Tx)
Posicin lista del mdulo a c control de Modulo requerido c Control de
utilizar. posicin. posicin
Posicion del raton por c deteccin
cuadrantes de presencia.

Proceso que llevara a cabo despus de transmisin o recepcin.

Despus de recepcin por bluetooth: Activacin y desactivacin de pines de microcontrolador para la distribucin de tareas.

Despus de transmisin: Recibe la informacin obtenida por los microcontroladores y la enva por rs232.
Microcontrolador Control de posicin.

Descripcin: Es el microcontrolador encargado de cambiar los estados lgicos en la salida de los puertos del mismo que estn conectados a las
entradas de los puentes H, con el objetivo de habilitar o desactivar los motorreductores y micromotoreductores, donde tendr integrado por
cdigo un sistema de control ON-OFF, adems se comunica con el c Principal para recibir los datos seleccionados por el usuario y enva
variables al c Principal de acuerdo a la posicin del sistema o modulo.

Datos que se reciben o envan.

Se reciben: Emisor Se envan: Receptor


Variable del mdulo a utilizar. Posicionamiento correcto del c Principal
* Laberinto en T. c Principal sistema.
* Laberinto elevado.
* Actigrafo.
Prueba terminada c Principal Estado lgico en pines de salida Puente H.
del c para el control de
posicin.

Proceso que llevara a cabo despus de transmisin o recepcin.

Por medio de condicionales se eligen que pines se van a activar o desactivar para el posterior control de motoreductores y microreductores
mediante puente H, configurado en el cdigo del microcontrolador , a su vez terminado de posicionar el sistema se enviara la variable de
posicionamiento correcto.
Microcontrolador Deteccin de presencia.

Descripcin: Es el microcontrolador encargado de leer las seales entregadas por los sensores que se utilizan para detectar la presencia del
ratn, adems, dipping, estiramientos, nmero de veces que entra y sale el roedor de los brazos abiertos , cerrados y eleccin correcta o
incorrecta del brazo.

Datos que se reciben y envan

Se reciben: Emisor Se envan: Receptor


Modulo Posicin del uc
elegido para uc ratn por Principal
activacin de Principal cuadrantes.
lectura de
sensores.
Seales para Matriz de Variables: uc
determinar la sensores. Dippings, Principal
posicin del estiramientos,
raton. brazos abiertos,
brazos cerrados

Mediante un men de casos incluido en el cdigo de este microcontrolador se enva una variable o variables especficas cdigo binario al uc
Principal.
Tabla de envi de datos principal

Envi de datos por Envi de datos por Envi de datos por Envi de datos por Envi de datos por Envi de datos por
bluetooth a microcontrolador microcontrolador microcontrolador microcontrolador microcontrolador
microcontrolador principal a bluetooth. principal a control de posicin a principal a deteccin de presencia
principal. microcontrolador microcontrolador microcontrolador a microcontrolador
control de posicin. principal. deteccin de principal.
presencia.
Variable del mdulo a Posicin del ratn por Variable del mdulo a Posicin requerida Inicio de Posicin del ratn por
utilizar. 2bits cuadrantes. utilizar. 2 bits lista. 1 bit sensado.(men de cuadrantes.
casos)
Inicio de prueba por Dippings. Dippings
modulo.1 bit
Fin de la prueba.1 bit Estiramientos. Estiramientos.
Aprox 4 bits
Posicin lista del Modulo requerido listo
mdulo a utilizar. 1 bit 1 bit

Inicio de prueba por modulo. (Sensores en especfico): Con el objetivo de sensar las partes correspondientes y no producir malinterpretacin en
los datos.

Fin de la prueba: para volver al men principal de microcontrolador deteccin de presencia y regresar a la posicin principal del sistema
controlado por microcontrolador control de posicin.

Posicin lista del mdulo a utilizar: Indica al usuario cuando est listo el modulo solicitado, debido a cuestiones de limpieza .
Microcontrolador generador de frecuencia

Es el microcontrolador encargado de generar la frecuencia requerida para establecer la


comunicacin con el sensor receptor TSOP 1838 con ayuda de leds infrarojos, para lo anterior se
utilizaron registros especficos del microcontrolador obtenidos de la hoja de especificacin del
fabricante, para la generacin de frecuencia se utilizaron registros del Timer 0.

El funcionamiento general de un timer consiste en guardar en un registro especial de


almacenamiento un valor mximo al que llegar un contador, cuando el valor en el contador sea
igual al registro almacenado un comparador
puede realizar las siguientes acciones:
Activar el flag de salida del timer iniciando as una interrupcin.
Programamos un evento en el cual en el pin de salida se conmute elnivel anterior, se
ponga a nivel bajo o se ponga a nivel alto y as generar una seal a determinada
frecuencia.
Registros de configuracin para timer0.
Timer/Counter Control (TCCRn).

Este registro configura la frecuencia a la que trabajar el timer, el modo de trabajo y si el timer
controlar la salida del pin asociado a l, en este caso el pin OC0.

Timer/Counter Register (TCNTn)


Este registro permite realizar operaciones de escritura o lectura en el Timer, por ejemplo al
especificar un cierto valor con el que se requiere que inicie el contador. Adems este registro es el
que guarda la cuenta del Timer/Counter0 (0 a 255).
Output Compare Register (OCRn)
Aqu se guarda el valor a comparar con el registro TCNT0. Cuando el valor del registro TCNT0
coincide con el valor guardado en este registro, se realiza el evento programado para la coincidencia
en comparacin, ya sea generar una interrupcin o cambiar el estado del pin OC0.

Timer Interrupt Mask Register (TIMSK)


En este registro se encuentran los bits de habilitacin de interrupciones para cada timer, los
requeridos de este resgistro es el bit TOIE0 y OCIE0 que son los correspondientes al timer0 y los bits
TOIE1, OCIE1A y OCIE1B que son los correspondientes al timer1. Sin embargo al no estar ocupando
el registro OCRn no hay necesidad de modificar el valor de los bits OCIEn.

Formulas ocupadas para la generacin de frecuencia.

= 1 /

= ( / ( ) ) 1
Metodologa

Algoritmo

Definicin: Conjunto de pasos, procedimientos o acciones que nos permiten alcanzar un resultado
o resolver un problema.

Caractersticas que los algoritmos deben reunir son las siguientes:

Precisin: Los pasos a seguir en el algoritmo deben ser precisados claramente.

Determinismo: El algoritmo, dado un conjunto de datos idnticos de entrada, siempre debe


arrojar los mismos resultados.

Finitud: El algoritmo, independientemente de la complejidad del mismo, siempre debe ser de


longitud finita.

Diagrama de flujo.

Un diagrama de flujo representa la esquematizacin grafica de un algoritmo. En realidad, muestra


grficamente los pasos o procesos a seguir para alcanzar la solucin a un problema. Su correcta
construccin es sumamente importante porque a partir del mismo se escribe un programa en
algn lenguaje de programacin. Si el diagrama de flujo est completo y correcto, el paso del
mismo lenguaje de programacin es relativamente simple y directo.

Reglas para la construccin de diagrama de flujo.

Un diagrama de flujo debe ilustrar grficamente los pasos o procesos a seguir para alcanzar la
solucin de un problema. Los smbolos presentados, colocados adecuadamente, permiten crear
una estructura grafica flexible que ilustra los pasos a seguir para alcanzar un resultado especifico.
El diagrama de flujo facilitara ms tarde la escritura del programa en algn lenguaje de
programacin.

Los smbolos estndar normalizados por ANSI (abreviatura de American National Standards
Institute) son muy variados, aqu se presentan algunos:
Diagrama de flujo microcontrolador principal
Diagrama de flujo microcontrolador generador de frecuencia.
Diagrama de flujo microcontrolador control de posicin
Diagrama de flujo microcontrolador deteccin de presencia.
Simulaciones, diseos de pistas y diseos 3D.
Micromotorreductor.

Simulacion en proteus de puente H de micromotorreductores.

Diseo de pistas de placas de micromotorreductores.


Diseo en 3D de placa de micromotorreductores.

Motorreductor.
Simulacion de puente H de motorredcutor
Diseo de pistas de puente H de motorreductores.

Diseo 3D de puente H de motorreductores.


Microcontrolador principal.
Simulacin de microcontrolador principal.

Diseo de pistas de microcontrolador principal.


Diseo en 3D de microcontrolador principal.

Microcontrolador Deteccin de presencia.

Simulacin de microcontrolador deteccin de presencia.


Diseo de pistas de microcontrolador deteccin de presencia.

Diseo en 3D de microcontrolador deteccin de presencia.


Microcontrolador Control de posicin.

Simulacion de microcontrolador control de posicin.

Diseo de pistas de microcontrolador control de posicin.


Diseo en 3D de microcontrolador control de posicin.
Generador de frecuencia.
Simulacion de microcontrolador generador de frecuencia.

Seales entragadas por el osciloscopio en la simulacion.


Diseo de pistas de microcontrolador generador de frecuencia.

Diseo en 3D de placa generadora de frecuencia.


Regulacin de voltaje.
Simulacion de circuitos reguladores de voltage.

Diseo de pistas de placa de reguladores de voltage.


Diseo en 3D de fuente con reguladores de voltaje

Diseo mini placas


Diseo miniplacas para conexin de leds infrarojos.
Diseo en 3D de mini placas para conexin de leds infrarrojos
Resultados.
Microcontrolador principal.

Micromotorreductores.
Motorreductores (Dos placas)

Microcontrolador control de posicin.


Microcontrolador deteccin de presencia.

Microcontrolador generador de frecuencia


Construccion de miniplacas
Cdigos implementados en los microcontroladores.

Microcontrolador control de posicin

#define F_CPU 4000000UL


#include <avr/io.h>//Libreria entradas y salidas
#include <avr/interrupt.h>//Libreria interrupcion
#include <util/delay.h>//Libreria para retardos
int VTB=0X5A,VTD=0X05,i=1;
int main(void)
{
DDRB=0XFF;//Configuracion de puerto B como salida
DDRD=0X8F;//Configuracion de puerto D como salida
DDRA=0X00;//Configuracion de puerto A como entrada
DDRC=0X00;//Configuracion de puerto C como entrada
PORTA=0X00;
PORTB=0X00;
PORTC=0X00;
PORTD=0X00;//Puertos valores iniciales en 0.

while(1)
{

//Primeros dos bits menos significativos del puerto A se


//utilizan para saber cual modulo es el requerido.
//01 & 00---> Laberinto en T.
//10---> Laberinto Elevado.
//11---> Actigrafo.
//PORTB=0XAA;
if (bit_is_clear(PINC,5) && bit_is_set(PINC,4) | bit_is_clear(PINC,5) &&
bit_is_clear(PINC,4) )
{
// Laberinto T
if (bit_is_set(PIND,4) && bit_is_clear(PIND,5))// Configuracion
compuerta derecha
{
if( bit_is_clear(PINA,0) && bit_is_set(PINA,1) &&
bit_is_clear(PINA,2) && bit_is_set(PINA,3) && bit_is_set(PINA,4) && bit_is_clear(PINA,5) &&
bit_is_set(PINA,6) && bit_is_clear(PINA,7) && bit_is_set(PINC,0) && bit_is_clear(PINC,1) &&
bit_is_clear(PINC,2) && bit_is_set(PINC,3) )
{
PORTB=0X00;
//PORTD = 0x80;
PORTD = (1<<PD7); //Modulo listo
//Configuracion compuertas a utilizar
//PORTD, D4,D5
//D4 COMPUERTA IZQUIERDA LS5=0 LS6=1
//D5 COMPUERTA DERECHA LS7=0 LS8=1

}
else{
PORTD = (0<<PD7);
while (!(bit_is_set(PINA,1)))
{
PORTB=0X02;
PORTD=0X00;
}

while (!(bit_is_set(PINA,3)))
{
PORTB=0X08;
PORTD=0X00;
}

//compuerta izquierda A4,A5


while (!(bit_is_set(PINA,4)))
{
PORTB=0X10;
PORTD=0X00;
}
//compuerta derecha A6,A7
while (!(bit_is_set(PINA,6)))
{
PORTB=0X40;
PORTD=0X00;
}

while (!(bit_is_set(PINC,0)))
{
PORTD=0X01;
PORTB=0X00;
}
while (!(bit_is_set(PINC,3)))
{
PORTD=0X08;
PORTB=0X00;
}

}
}

else if (bit_is_clear(PIND,4) && bit_is_set(PIND,5))//Compuerta


izquierda
{
if( bit_is_clear(PINA,0) && bit_is_set(PINA,1) &&
bit_is_clear(PINA,2) && bit_is_set(PINA,3) && bit_is_set(PINA,4) && bit_is_clear(PINA,5) &&
bit_is_set(PINA,6) && bit_is_clear(PINA,7) && bit_is_clear(PINC,0) && bit_is_set(PINC,1) &&
bit_is_set(PINC,2) && bit_is_clear(PINC,3) )
{
PORTB=0X00;
//PORTD = 0x80;
PORTD = (1<<PD7); //Modulo listo
//Configuracion compuertas a utilizar
//PORTD, D4,D5
//D4 COMPUERTA IZQUIERDA LS5=0 LS6=1
//D5 COMPUERTA DERECHA LS7=0 LS8=1

}
else{
PORTD = (0<<PD7);
while (!(bit_is_set(PINA,1)))
{
PORTB=0X02;
PORTD=0X00;
}

while (!(bit_is_set(PINA,3)))
{
PORTB=0X08;
PORTD=0X00;
}

//compuerta izquierda A4,A5


while (!(bit_is_set(PINA,4)))
{
PORTB=0X10;
PORTD=0X00;
}
//compuerta derecha A6,A7
while (!(bit_is_set(PINA,6)))
{
PORTB=0X40;
PORTD=0X00;
}

while (!(bit_is_set(PINC,1)))
{
PORTD=0X02;
PORTB=0X00;
}
while (!(bit_is_set(PINC,2)))
{
PORTD=0X04;
PORTB=0X00;
}

}
}

//PORTD = (1<<PD2);
//La siguiente condicional comprueba si el laberinto en T esta listo
else if (bit_is_clear(PIND,4) && bit_is_clear(PIND,5))// Configuracion
sin compuerta
{

if( bit_is_clear(PINA,0) && bit_is_set(PINA,1) && bit_is_clear(PINA,2)


&& bit_is_set(PINA,3) && bit_is_set(PINA,4) && bit_is_clear(PINA,5) && bit_is_set(PINA,6) &&
bit_is_clear(PINA,7) && bit_is_set(PINC,0) && bit_is_clear(PINC,1) && bit_is_set(PINC,2) &&
bit_is_clear(PINC,3) )
{
PORTB=0X00;
//PORTD = 0x80;
PORTD = (1<<PD7); //Modulo listo
//Configuracion compuertas a utilizar
//PORTD, D4,D5
//D4 COMPUERTA IZQUIERDA LS5=0 LS6=1
//D5 COMPUERTA DERECHA LS7=0 LS8=1
}
else{
PORTD = (0<<PD7);
while (!(bit_is_set(PINA,1)))
{
PORTB=0X02;
PORTD=0X00;
}

while (!(bit_is_set(PINA,3)))
{
PORTB=0X08;
PORTD=0X00;
}

//compuerta izquierda A4,A5


while (!(bit_is_set(PINA,4)))
{
PORTB=0X10;
PORTD=0X00;
}
//compuerta derecha A6,A7
while (!(bit_is_set(PINA,6)))
{
PORTB=0X40;
PORTD=0X00;
}

while (!(bit_is_set(PINC,0)))
{
PORTD=0X01;
PORTB=0X00;
}
while (!(bit_is_set(PINC,2)))
{
PORTD=0X04;
PORTB=0X00;
}

}
}/////

else if ( bit_is_set(PINC,5) && bit_is_clear(PINC,4) )


{
// Laberinto Elevado
//La siguiente condicional comprueba si el laberinto en Elevado esta
listo
if( bit_is_set(PINA,0) && bit_is_clear(PINA,1) && bit_is_set(PINA,2) &&
bit_is_clear(PINA,3) && bit_is_clear(PINA,4) && bit_is_set(PINA,5) && bit_is_clear(PINA,6) &&
bit_is_set(PINA,7) && bit_is_set(PINC,0) && bit_is_clear(PINC,1) && bit_is_set(PINC,2) &&
bit_is_clear(PINC,3))
{
PORTB=0X00;
PORTD = 0x80;//Modulo laberinto elevado listo
}
else{
PORTD = (0<<PD7);
while (!(bit_is_set(PINA,0)))
{
PORTB=0X01;
PORTD=0X00;
}

while (!(bit_is_set(PINA,2)))
{
PORTB=0X04;
PORTD=0X00;
}

while (!(bit_is_set(PINA,5)))
{
PORTB=0X20;
PORTD=0X00;
}

while (!(bit_is_set(PINA,7)))
{
PORTB=0X80;
PORTD=0X00;
}

while (!(bit_is_set(PINC,0)))
{
PORTB=0X00;
PORTD=0X01;
}

while (!(bit_is_set(PINC,2)))
{
PORTB=0X00;
PORTD=0X04;
}

else if ( bit_is_set(PINC,5) && bit_is_set(PINC,4) )


{
// Actigrafo.
//La siguiente condicional comprueba si el Actigrafo esta listo
if( bit_is_clear(PINA,0) && bit_is_set(PINA,1) && bit_is_set(PINA,2) &&
bit_is_clear(PINA,3) && bit_is_set(PINA,4) && bit_is_clear(PINA,5) && bit_is_set(PINA,6) &&
bit_is_clear(PINA,7) && bit_is_set(PINC,0) && bit_is_clear(PINC,1) && bit_is_set(PINC,2) &&
bit_is_clear(PINC,3))
{
PORTB=0X00;
PORTD = 0x80;//Modulo Actigrafo listo
}
else{
PORTD = (0<<PD7);
while (!(bit_is_set(PINA,1)))
{
PORTB=0X02;
PORTD=0X00;
}

while (!(bit_is_set(PINA,2)))
{
PORTB=0X04;
PORTD=0X00;
}

while (!(bit_is_set(PINA,4)))
{
PORTB=0X10;
PORTD=0X00;
}

while (!(bit_is_set(PINA,6)))
{
PORTB=0X40;
PORTD=0X00;
}

while (!(bit_is_set(PINC,0)))
{
PORTB=0X00;
PORTD=0X01;
}

while (!(bit_is_set(PINC,2)))
{
PORTB=0X00;
PORTD=0X04;
}

}
}

}
}
Microcontrolador deteccin de presencia.
#define F_CPU 4000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
DDRA=0X1F;//Configuracion como salida del puerto A
DDRB=0X00;//Configuracion como entrada del puerto B
DDRC=0X00;//Configuracion como entrada del puerto C
DDRD=0X00;//Configuracion como entrada del puerto D
//Dipping 14
//Centro 15
//Estiramiento 16
while(1)
{
if (bit_is_set(PINA,7) && bit_is_clear(PINA,6) && bit_is_clear(PINA,5))
{

/////////////////////////// Empieza --->Laberinto en T ///////////////////////////////

if (bit_is_clear(PINB,0)){
//Cuadrante 1
//s1
PORTA=0x01;
}
else if (bit_is_clear(PINB,1)){
//Cuadrante 2
//s2
PORTA=0x02;
}

else if (bit_is_clear(PINB,2)){
//Cuadrante 2
//s3
//brazo abierto
PORTA=0x02;
}
/////////////////////////////////////Empieza -----
>Centros/////////////////////////////////////

else if (bit_is_set(PINB,3) && bit_is_clear(PINB,4) && bit_is_clear(PIND,2)){


//Centro
//s4
PORTA=0x0F;
}

else if (bit_is_set(PINB,4) && bit_is_clear(PINB,3) && bit_is_clear(PIND,2)){


//Centro
//s5
PORTA=0x0F;
}

else if (bit_is_set(PIND,2) && bit_is_clear(PINB,4) && bit_is_clear(PINB,3)){


//Centro
//s11
PORTA=0x0F;
}

/////////////////////////////////////Termina-----
>Centros/////////////////////////////////////

else if (bit_is_clear(PINB,5)){
//Cuadrante 5
//s6
//brazo abierto
PORTA=0x05;
}

else if (bit_is_clear(PINB,6)){
//Cuadrante 5
//s7
PORTA=0x05;
}
else if (bit_is_clear(PINB,7)){
//Cuadrante 4
//s8
PORTA=0x04;
}

else if (bit_is_clear(PIND,0)){
//Cuadrante 4
//s9
PORTA=0x04;
}
else if (bit_is_clear(PIND,1)){
//Cuadrante 3
//s10
PORTA=0x03;
}

else if (bit_is_clear(PIND,3)){
//Cuadrante 6
//s12
//brazo cerrado
PORTA=0x06;
}
else if (bit_is_clear(PIND,4)){
//Cuadrante 6
//s13
PORTA=0x06;
}
else if (bit_is_clear(PIND,5)){
//Cuadrante 7
//s14
PORTA=0x07;
}
else if (bit_is_clear(PIND,6)){
//Cuadrante 7
//s15
PORTA=0x07;
}
else if (bit_is_clear(PIND,7)){
//Cuadrante 8
//s16
PORTA=0x08;
}
/////////////////////////// Termina --->Laberinto en T ///////////////////////////////
}

else if (bit_is_clear(PINA,7) && bit_is_set(PINA,6) && bit_is_clear(PINA,5))


{
///////////////////////////////////////////////Empieza ----->Laberinto
elevado////////////////////////////////////////////
if (bit_is_clear(PINC,1)){
//Brazo abierto
//s18
PORTA=0x02;
}

else if (bit_is_clear(PIND,3)){
//Brazo cerrado
//s12
PORTA=0x05;
}

else if (bit_is_clear(PINB,5)){
//Brazo cerrado
//s6
PORTA=0x05;
}

else if (bit_is_clear(PINC,6)){
//Dipping 14
PORTA=0x0E;
}

else if (bit_is_set(PINC,0) && bit_is_set(PINB,4)){


//Estiramiento
PORTA=0x12;

}
else if (bit_is_set(PINC,0) && bit_is_set(PIND,2)){
//Estiramiento
PORTA=0x12;

else if (bit_is_set(PINB,3) && bit_is_set(PIND,2)){


//Estiramiento
PORTA=0x12;

}
else if (bit_is_set(PINB,4) && bit_is_set(PINB,3)){
//Estiramiento
PORTA=0x12;

////////////////////////Centro///////////////////////////////

else if (bit_is_set(PINB,3) && bit_is_clear(PINB,4) && bit_is_clear(PINC,0) &&


bit_is_clear(PIND,2)){
//Centro
//s4
PORTA=0x0F;
}

else if (bit_is_set(PINB,4) && bit_is_clear(PINB,3) && bit_is_clear(PINC,0) &&


bit_is_clear(PIND,2)){
//Centro
//s5
PORTA=0x0F;
}
else if (bit_is_set(PIND,2) && bit_is_clear(PINB,4) && bit_is_clear(PINC,0) &&
bit_is_clear(PINB,3)){
//Centro
//s11
PORTA=0x0F;
}

else if (bit_is_set(PINC,0) && bit_is_clear(PINB,4) && bit_is_clear(PINB,3) &&


bit_is_clear(PIND,2)){
//Centro
//s17
PORTA=0x0F;
}

///////////////////////////////////////////////Termina ----->Laberinto
elevado////////////////////////////////////////////
}

else if (bit_is_set(PINA,7) && bit_is_set(PINA,6) && bit_is_clear(PINA,5))


{

//////////////////////////////////////// Empieza ---


>Actigrafo///////////////////////////////////////////////////

if (bit_is_set(PINC,2)){
//cuadrante 12
//s19
PORTA=0x0C;
}
else if (bit_is_set(PINC,3)){
//cuadrante 11
//s21
// (PINA,5) ---> (PINC,3)
PORTA=0x0B;
}

else if (bit_is_set(PINC,4)){
//cuadrante 13
//s24
// (PINC,6) ---> (PINC,4)
PORTA=0x0D;
}

else if (bit_is_set(PINC,5)){
//cuadrante 10
//s25
// (PINC,4) ---> (PINC,5)
PORTA=0x0A;
}

else if (bit_is_clear(PINC,2) && bit_is_clear(PINC,3) && bit_is_clear(PINC,4) &&


bit_is_clear(PINC,5)){
//cuadrante 9
//s19
PORTA=0x09;
}

////////////////////////////////////////Termina ---
>Actigrafo///////////////////////////////////////////////////
}
else if (bit_is_clear(PINA,7) && bit_is_clear(PINA,6) && bit_is_clear(PINA,5))
{
////////////////////////////////////////Empieza --->Compuerta
izquierda///////////////////////////////////////////////////

if (bit_is_clear(PINB,0)){
//Cuadrante 1
//s1
PORTA=0x01;
}
else if (bit_is_clear(PINB,1)){
//Cuadrante 2
//s2
PORTA=0x02;
}

else if (bit_is_clear(PINB,2)){
//Cuadrante 2
//s3
//brazo abierto
PORTA=0x02;
}

else if (bit_is_set(PINB,3) && bit_is_clear(PIND,2)){


//Centro
//s4
PORTA=0x0F;
}

else if (bit_is_set(PIND,2) && bit_is_clear(PINB,3)){


//Centro
//s5
PORTA=0x0F;
}

else if (bit_is_clear(PIND,3)){
//Cuadrante 6
//s12
//brazo cerrado
PORTA=0x06;
}
else if (bit_is_clear(PIND,4)){
//Cuadrante 6
//s13
PORTA=0x06;
}
else if (bit_is_clear(PIND,5)){
//Cuadrante 7
//s14
PORTA=0x07;
}
else if (bit_is_clear(PIND,6)){
//Cuadrante 7
//s15
PORTA=0x07;
}
else if (bit_is_clear(PIND,7)){
//Cuadrante 8
//s16
PORTA=0x08;
}

////////////////////////////////////////Termina --->Compuerta
izquierda///////////////////////////////////////////////////
}
else if (bit_is_set(PINA,7) && bit_is_clear(PINA,6) && bit_is_set(PINA,5))
{
////////////////////////////////////////Empieza --->Compuerta
derecha///////////////////////////////////////////////////
if (bit_is_clear(PINB,0)){
//Cuadrante 1
//s1
PORTA=0x01;
}
else if (bit_is_clear(PINB,1)){
//Cuadrante 2
//s2
PORTA=0x02;
}

else if (bit_is_clear(PINB,2)){
//Cuadrante 2
//s3
//brazo abierto
PORTA=0x02;
}

else if (bit_is_clear(PINB,5)){
//Cuadrante 5
//s6
//brazo abierto
PORTA=0x05;
}

else if (bit_is_clear(PINB,6)){
//Cuadrante 5
//s7
PORTA=0x05;
}
else if (bit_is_clear(PINB,7)){
//Cuadrante 4
//s8
PORTA=0x04;
}

else if (bit_is_clear(PIND,0)){
//Cuadrante 4
//s9
PORTA=0x04;
}
else if (bit_is_clear(PIND,1)){
//Cuadrante 3
//s10
PORTA=0x03;
}
////////////////////////
else if (bit_is_set(PINB,3) && bit_is_clear(PINB,4)){
//Centro
//s4
PORTA=0x0F;
}

else if (bit_is_set(PINB,4) && bit_is_clear(PINB,3)){


//Centro
//s5
PORTA=0x0F;
}

////////////////////////////////////////Termina --->Compuerta
derecha///////////////////////////////////////////////////
}

}
}

Microcontrolador Principal

#define F_CPU 4000000UL


#include <avr/io.h>//Libreria entradas y salidas
#include <avr/interrupt.h>//Libreria interrupcion
#include <util/delay.h>//Libreria para retardos
void UART_config(void);//Funcion para configurar la UART
unsigned char rx,var,men1,var1;
unsigned char ch; //La variable ch es para guardar el dato que se recibe a traves del
bluetooth
unsigned char a='a'; //La constante a se refiere a actigrafo
unsigned char e='e'; //La constante e se refiere al laberinto elevado
unsigned char t='t'; //La constante t se refiere al laberinto t
unsigned char p='p'; //La constante p se refiere a parar el experimento
unsigned char i='i'; //La constante i se refiere a iniciar el experimento
unsigned char g='g'; //La constante g se refiere a que el programa entrara a la parte del codigo
en el que del micro envia informacion a labview
unsigned char w='w'; //La constante w se refiere a la compuerta izquierda
unsigned char q='q'; //La constante q se refiere a la compuerta derecha
uint8_t v,d; //Las variables v y w son para una comparacion y que no se repita el numero que
se envia la info a la pc
int val;
ISR(USART_RXC_vect)
{
rx = UDR;
};
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}

unsigned char USART_Receive( void )


{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) )
;
/* Get and return received data from buffer */
return UDR;
}
void UART_config(void)
{
//UBRRH
//configura a 9600
UBRRL =25;
//habilita RX y TX y parcialmente configura a 8 bits
//habilita interrupcion para RX
UCSRB |= (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (1<<RXCIE);
//brinda acceso al registro
//modo asincrono
//sin paridad
//1 bit de paro
//configra a 8bits
UCSRC |= (1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ0) |
(1<<UCSZ1);
}
int main(void)
{
DDRD=0X82;//Configuracion del puerto D, dejando como entrada solo RX
DDRB=0XB7;//Configuracion puerto B como entrada
DDRC=0X00;//Configuracion del puerto C como salidas (Variables de modulo a
utilizar,luz,etc).
cli();
UART_config();
do
{
//printf("Esperando")
ch=USART_Receive(); //En ch se guardara toda la informacion recibida a travez
del bluetooth
_delay_ms(100);
if (ch==t)//configuracion de laberinto en T
{
PORTB=0X01;
//PORTB = (0<<PB5);

val=1;

else if (ch==e)//configuracion de laberinto en elevado


{
PORTB=0X02;
//PORTB = (0<<PB5);
val=2;
}

else if (ch==a)//configuracion de actigrafo


{
PORTB=0X03;
// PORTB = (0<<PB5);
val=3;
}
else if (ch==i)//iniciar prueba
{
PORTD=0X80;
}
else if (ch==p)// parar prueba
{
PORTD=0X40;
}
else if (ch==q)// Activacion de la compuerta derecha
{
//PORTD=0X40;
PORTB=0X05;
PORTB = (1<<PB4);

}
else if (ch==w)// Activacion de la compuerta izquierda
{
//PORTD=0X40;
PORTB=0X24;
}

else if (ch==g)
{
v=PINC;//Lo del puerto C ponlo en v
if ( bit_is_set(PINB,7))

{
v=100;//el 100 significa que el sistema se transformo
correctamente
}
else if ( bit_is_set(PIND,2))
{
v=110;//el 110 significa que el sistema tiene un error
}

//USART_Transmit('D');
if (val==2)
{
if (v==2)//Brazo abierto
{
USART_Transmit('2');
USART_Transmit('2');
}

else if (v==6)//Brazo cerrado


{
USART_Transmit('2');
USART_Transmit('3');
}
else if (v==5)//Brazo cerrado
{
USART_Transmit('2');
USART_Transmit('3');
}
else if (v==14)
{
USART_Transmit('2');//No. dipping
USART_Transmit('4');

}
else if (v==15)
{
USART_Transmit('c');//centro

}
else if (v==16)
{
USART_Transmit('2');//No. estiramientos
USART_Transmit('1');

}
else if (v==21)
{
USART_Transmit('2');//Entrada a brazo abierto
USART_Transmit('2');

}
}
if (val==1){
if (v==1)
{
USART_Transmit('1');
}
else if (v==2)
{
USART_Transmit('2');
}
else if (v==3)
{
USART_Transmit('3');
}
else if (v==4)
{
USART_Transmit('4');
}
else if (v==5)
{
USART_Transmit('5');
}
else if (v==6)
{
USART_Transmit('6');
}
else if (v==7)
{
USART_Transmit('7');
}
else if (v==8)
{
USART_Transmit('8');
}
}
if (val==3)
{

if (v==9)
{
USART_Transmit('9');
}
else if (v==10)
{
USART_Transmit('1');
USART_Transmit('0');
}
else if (v==11)
{
USART_Transmit('1');
USART_Transmit('1');
}
else if (v==12)
{
USART_Transmit('1');
USART_Transmit('2');
}
else if (v==13)
{
USART_Transmit('1');
USART_Transmit('3');
}

}
else if (v==100)//el 100 significa que el sistema se transformo correctamente
{
USART_Transmit('1');
USART_Transmit('0');
USART_Transmit('0');

}
else if (v==110)
{
USART_Transmit('1');
USART_Transmit('1');
USART_Transmit('0');

}
}
}
while(ch!='n');
}
Microcontrolador generador de frecuencia.

#define F_CPU 8000000UL


#include <avr/io.h>
#include <avr/interrupt.h>

int aux=0;

ISR(TIMER0_OVF_vect)
{

if(PORTB) PORTB = 0;
else PORTB = 15;

if(PORTD) PORTC = 0;
else PORTC = 15;

if(PORTD) PORTD = 0;
else PORTD = 31;

TCNT0 = 247;
//aumentar sube la freq
//TCNT0 = 246;
}

int main(void)
{
cli();
//0 entrada
//1 salida

//PUERTO B COMO SALIDA


DDRB = (1 << DDB0) | (1 << DDB1) | (1 << DDB2) | (1 << DDB3) | (1 << DDB4) | (1 << DDB5)
| (1 << DDB6) | (1 << DDB7);
//PUERTO C COMO SCLIDC
DDRC = (1 << DDC0) | (1 << DDC1) | (1 << DDC2) | (1 << DDC3) | (1 << DDC4) | (1 << DDC5)
| (1 << DDC6);
//PUERTO D COMO SDLIDD
DDRD = (1 << DDD0) | (1 << DDD1) | (1 << DDD2) | (1 << DDD3) | (1 << DDD4) | (1 << DDD5)
| (1 << DDD6) | (1 << DDD7);
//configuramos el prescaler a 8
TCCR0 |= (0 << CS02) | (1 << CS01) | (0 << CS00);
//cargo el valor inicial del conteo

//TCNT0 = 246;

TCNT0 = 247;

//TCNT0 = 0XB2;
//habilita interrupcion por desbordamiento
TIMSK |= (1 << TOIE0);
//habilita interrupciones globales
sei();

while(1)
{
}
}

You might also like