Es un dispositivo electrónico o electromecánico utilizado para calcular el número de pasos efectuados por el movimiento de la cadera durante un periodo de tiempo.
El podómetro nos permite comprender la importancia del esfuerzo físico que se realiza al caminar. Asimismo, el uso del podómetro hace que las personas se motiven, se tracen objetivos e incrementen su actividad física.
Desarrollo
Para implementar un podómetro se utilizó un Ipod, esto debido a que es un dispositivo que cuenta con sensores capaces de poder detectar el movimiento de las caderas (acelerómetro), además de estar integrado todo en un pequeño espacio.
Con el fin de integrar el uso de una Raspberry Pi, se hizo una conexión por WiFi entre la Raspberry Pi y el Ipod usando el protocolo UDP de comunicación.
El User Datagram Protocol (UDP) es un protocolo del nivel de transporte basado en el intercambio de datagramas (Capa 4 Modelo OSI). Permite el envío de datagramas a través de la red
sin que se haya establecido previamente una conexión, ya que el propio
datagrama incorpora suficiente información de direccionamiento en su
cabecera. Su uso principal es para protocolos como DHCP, BOOTP, DNS
y demás protocolos en los que el intercambio de paquetes de la
conexión/desconexión son mayores, o no son rentables con respecto a la
información transmitida, así como para la transmisión de audio y vídeo
en real.
Para lograrlo se abrió un Socket como servidor en la Raspberry Pi y al estar conectada a un router permitió formar una red en la que el Ipod se pudo unir y establecer conexión mediante un socket como cliente directamente con la Raspberry, el puerto utilizado fue el 8080 debido a que es un puerto que utiliza el Protocolo de Transferencia de Hypertexto (HTTP), que es utilizado comúnmente por internet pero que no lo utilizan los navegadores (utilizan el 80).
Una vez que se haya establecido la conexión con los Sockets, solo queda una transferencia de datos en limpio desde el Ipod hasta la Raspberry. A continuación se muestra un vídeo del funcionamiento del sistema.
Para el desarrollo de la práctica, se tiene que cumplir con los siguientes puntos:
Controlar dos servomotores con el acelerómetro (Uno con el eje x; el otro con y).
Encender un Led con un tapsimple.
Encender dos Leds con un doble tap.
Parpadeo de un led después de caída libre
Para el desarrollo de la práctica, se utilizó:
Acelerómetro ADXL345
2 servomotores
3 Leds
Microcontrolador de 8-bits PSoC 1
Raspberry Pi modelo B+
Bluetooth HC05
Acelerómetro ADXL345
El dispositivo ADXL345 es un acelerómetro de tres ejes (X, Y, Z) que utiliza las interfaces de comunicación I2C y SPI . Posee un regulador de 3.3V lo que permite elegir el voltaje lógico de interfaz, ya sea 3V o 5V.
Utilizando las interfaces se puede definir la sensibilidad del sensor, el cual ofrece los niveles de sensibilidad de +-2g, +-4g, +-8g, +-16g. El menor rango de medición, por lo regular, es utilizado para medir movimientos lentos, mientras que el mayor rango ofrece cambios a movimientos rápidos.
La resolución del acelerómetro ADXL345 es de 10 a 13 bits, por lo que se requiere dos bytes para alojar el resultado completo de cada eje. Esto quiere decir que en total recibiremos 6 bytes, que será necesario convertir a solo 1 byte por eje. El primer byte de cada eje contiene el valor menos significativo.
Entre sus aplicaciones podemos encontrar:
Telefonía móvil
Instrumentación médica
Juegos y dispositivos señaladores
Instrumentación industrial
Dispositivos de navegación personal
Protección de discos duros
Equipo para ejercitarse
Características
2.0-3.6VDC de voltaje de alimentación
Ultra Bajo Consumo: 40uA tiempo de medición, 0.1uA en standby @ 2.5V
Detección de Tap/Doble Tap
Detección de caída libre
Interfaces I2C y SPI
Acelerómetro ADXL345
Las características completas del sensor, así como cada uno de los registros que usa, se pueden ver en el datasheet.
Servomotores
Los servomotores son motores especiales que incluyen circuitería interna para poder controlarse con mucha precisión. Son utilizados para controlar posición (ángulo) de giro. Normalmente pueden girar dentro de un rango de 0-180° y se controlan por PWM.
Servomotor
Comúnmente, el tiempo del pulso en estado alto debe ser entre 1-2ms y la posición cero queda en 1.5ms, mientras que 0°y 180°corresponden a 1ms y 2ms, respectivamente, lo que significa que el movimiento del servomotor no tiene que ser estrictamente lineal. La relación del ancho de pulso respecto al ángulo del eje es lineal. Para mantener la posición del motor es necesario seguir enviando los pulsos continuamente por lo tanto si se deja de enviar pulsos o se excede el tiempo de estado bajo, el motor puede perder fuerza y cambiar su posición.
Desarrollo del programa
El programa se desarrollo en 2 partes, para dar solución al problema de que el microcontrolador tenga que estar conectado mediante cables a la alimentación.
Pseudocódigo de PSoC1
Proceso ProgramaPSoC Definir Registros Como Caracter Dimension BytesEscritura[2] ConfiguracionInicial() BytesEscritura[0] <- DireccionRegistro BytesEscritura[1] <- ConfiguracionRegistro EscribirRegistro(BytesEscritura) Mientras Verdadero es Verdadero Dimension Lecturas[9] Lecturas[0] <- DireccionRegistro EscribirRegistro(Lecturas[0]) LeerRegistro(Lecturas) EscribirEnLCD(Lecturas) MandarPorUART(Lecturas) FinMientras FinProceso
Interrupciones TAP - DOBLE TAP - CAIDA LIBRE
SubProceso GPIO_ISR()
Dimension ISR[2]
Definir TAP_ISR como Entero
Definir DOBLE_TAP_ISR como Entero
Definir CAIDA_ISR como Entero
ISR[0] <- DireccionRegistro
EscribirRegistro(ISR[0])
LeerRegistro(ISR[1])
Si ISR[1] = TAP_ISR Entonces
Encender_1_LED()
FinSi
Si ISR[1] = DOBLE_TAP_ISR Entonces
Encender_2_LEDs()
FinSi
Si ISR[1] = CAIDA_ISR Entonces
Parpadear_LED()
FinSi
FinSubProceso
Imágenes de los dispositivos funcionando independientemente
Código de control de servomotores en Python (Raspberry)
try: import serial import RPi.GPIO as GPIO
port = "/dev/ttyAMA0"
serie = serial.Serial(port,9600) serie.flushInput() serie.flush() GPIO.setmode(GPIO.BCM) GPIO.setup(13, GPIO.OUT) p = GPIO.PWM(13, 1000)
Diseñar una placa PCB para la medición de diferentes variables eléctricas.
Objetivos particulares
•Realizar el diseño del circuito de medición de las diferentes variables eléctricas.
•Realizar el diseño del PCB del circuito.
•Generar el pseudocódigo y diagrama de flujo del proceso de obtención de datos, así mismo del procesamiento de los mismos usando un microcontrolador.
Descripción del problema
Se desea realizar una medición de las variables eléctricas de voltaje, corriente, potencia y energía en corriente alterna de 220 volts a 35 amp. Para eso se diseñará una placa que integre diferente tipo de sensores y un microcontrolador que procese las lecturas obtenidas de manera que la placa PCB diseñada pueda arrojar resultados que puedan ser utilizados de forma inmediata.
Materiales
En la siguiente tabla se mencionarán los materiales que son utilizados para la realización del PCB.
Descripción
Cantidad
Precio unitario
Total
1
Regulador DC-DC 3.3V
1
$ 5.48
$5.48
2
Regulador AC-DC 5V
1
$ 13.25
$ 13.25
3
Op-amp
2
$ 0.55
$ 1.10
4
Atmel ARM Cortex M4
1
$ 8.10
$ 8.10
5
Conector JTAG 10pin
1
6
Capacitor 100 nF
7
$ 0.10
$ 0.70
7
Capacitor 10uF
2
$ 0.53
$ 1.06
8
Resistencia 220 ohms
1
$ 0.10
$ 0.10
9
Capacitor 15pF
2
$ 0.50
$ 1.00
10
Cristal 12Mhz
1
$ 0.79
$ 0.79
11
Sensor de corriente ACS7566
1
$ 6.57
$ 6.57
12
Sensor de voltaje
1
$ 115.00
$ 115.00
Total
$ 168.15
Diseño de la placa
Esquemático
Los sensores de voltaje y corriente tienen aislamiento. Los sensores de corriente y voltaje ya poseen aislamiento por lo que no será necesario aislar esa parte de la placa, sin embargo para la detección del cruce por cero, el circuito no se encuentra aislado.
El proceso de aislamiento se realizará, primero en un transformador 220V – 5V y luego en un optoacoplador, la salida de este último irá directo al microcontrolador. El esquemático del circuito se muestra en la figura anterior.
PCB
El diseño de la placa PCB se muestra en la siguiente figura.
Alimentación
La tarjeta tiene una alimentación de la misma línea de corriente alterna, esto se realiza usando un convertidor AC-DC, con los parámetros de corriente alterna entre 80 – 250V, con un voltaje de corriente directa de 5V.
Además cuenta con un regulador de 5V a 3.3V para la alimentación de los demás componentes del sistema.
Metodología
La característica del microcontrolador de que pueda realizar tareas paralelas permite que el procesamiento sea muy rápido con el mínimo de error en cada una de las lecturas. El proceso general, siguiente diagrama, propone que las lecturas de los sensores se realicen de manera simultánea, al haber elegido los sensores mencionados en la tabla, también facilitó que la parte de medición no necesite un pre-procesamiento de la señal riguroso.
Pseudocódigo
Main.psc
ProcesoMainLeerSensorV,SensorIV=Voltaje(SensorV)I=Corriente(SensorI)//Ejecutar asíncronamente o en interrupciones
F=Frecuencia()P=Potencia(F,V,I)E=Energia(F,V)Escribir"Voltaje: ",VEscribir"Corriente: ",IEscribir"Frecuencia: ",FEscribir"Potencia: ",PEscribir"Energia: ",EFinProcesoSubProcesoV<-Voltaje(ValorSensor)V=250*ValorSensor/5FinSubProcesoSubProcesoI<-Corriente(sensor)I=0Imax=IRepetirI=sensor/.04SiI>ImaxEntoncesImax=IFinSiHastaQueFalsoFinSubProcesoSubProcesofreq<-Frecuenciatiempo=0pulsos=0;Mientrastiempo<1HacerSiDetectoFlancoAscendenteEntoncespulsos=pulsos+1FinSiFinMientrasfreq=pulsosFinSubProcesoSubProcesopot<-Potencia(freq,V,I)tiempo=0T=1/freqpot=0Mientrastiempo<THacerpot=pot+V*IFinMientraspot=pot/TFinSubProcesoSubProcesoE<-Energia(freq,v)tiempo=0T=1/freqE=0Mientrastiempo<THacerE=E+abs(v^2)FinMientrasEscribirEFinSubProceso
Para la medición de los parámetros de voltaje, corriente, energía y potencia en corriente alterna de 220 Volts a 35 amp, se tomaron en cuenta las consideraciones en la elección de los elementos.
Selección del sensor de voltaje.
El sensor de voltaje a utilizar es el modelo 3508_0 - CE-VJ03-32MS2-0.5, del fabricante Phidgets. El sensor es capaz de hacer una medición en un rango entre 0V y 250V en corriente alterna y provee una señal de salida entre 0V y 5V en corriente directa, la cual ya es óptima para que pueda ser procesada por algún microcontrolador.
La señal de salida es proporcional a la entrada de voltaje, el cuál para poder tener valores reales de lectura sólo se necesita aplicar la siguiente fórmula:
Las características se enlistan a continuación:
Tipo de sensor
Voltaje AC
Voltaje mínimo
0 V
Voltaje máximo
250 V
Error
0.5%
Frecuencia
60 Hz
Voltaje de alimentación
12 V DC
Consumo
15 mA
Más información acerca del sensor de voltaje a utilizar en la página oficial de Phidgets.
Selección del sensor de corriente
El sensor de corriente a utilizar es el modelo ACS756, del fabricante Allegro MicroSystems. El dispositivo utiliza el efecto Hall para poder realizar la medición. La corriente aplicada que atraviesa esta trayectoria de cobre de la conducción genera un campo magnético que sea detectado por el integrado y lo convierte en un voltaje proporcional.
La salida del dispositivo es positiva cuando una corriente atraviesa la trayectoria de cobre primaria de la conducción (de terminal 4 a terminal 5), que es la trayectoria usada para la detección actual.
Más información acerca del sensor de corriente a utilizar en la página del fabricante o el datasheet.
Selección del sensor de cruce por cero (Frecuencia)
Para poder medir la frecuencia se utilizará un sensor de cruce por cero, el cual se realizará mediante un amplificador operacional.
En la entrada del operacional se hará un aislamiento ISO122, el cual previamente se atenuará la señal usando un divisor de voltaje. A la salida del circuito de cruce por cero, se tiene un tren de pulsos, con una parte negativa, por lo que se agregará un diodo para hacer un corte a la señal y ésta pueda ser leída por el microcontrolador.
Cálculo de potencia y energía
La potencia de la señal puede ser calculada directamente con los valores de voltaje y corriente que se han obtenido previamente con los sensores antes mencionados.
Para el cálculo de la energía, se realizará mediante un algoritmo de cálculo de integral (Trapecio o simpsons 3/4), integrando la potencia, se podrá obtener la energía de consumo.
Microcontrolador
Se eligió el microcontrolador, del fabricante Atmel de la familia SAM4S8, el cual es un ARM Cortex M4 con las características principales enlistadas a continuación.
Frecuencia de operación máxima de 120 MHz
521 KB de memoria flash y 128 KB de memoria SRAM
Voltaje de suministro entre 1.62 V y 3.6 V
Consumo de 200 μA/MHz
Inferfaces de bus externas que posee: SRAM, PSRAM, NOR, Flash, módulo LCD, y NAND Flash.
Interfaz analógica
Soporte de librería nativa Atmel QTouch®
Captura de datos de entrada/salida de forma paralela.
Una de las principales razones de elegir el microcontrolador SAM4S8 fue que es capaz de realizar procesos paralelos, lo que permitiría que las lecturas de los sensores se puedan llevar a cabo de manera paralela permitiendo una mayor precisión de datos.
La plataforma Electric Imp es una completa solución para conectar de manera fácil cualquier dispositivo a la nube. Posee un nodo de conexión Wireless Wi-Fi con un procesador de 32-bits Cortex M3.
Posee 12 pines entre los que se encuentran GPIO's, PWM, entradas y salidas analógicas, SPI, UART, I2C.
Dejamos dos enlaces, uno para la descripción del hardaware y el otro el API que utiliza electric Imp, además de un vídeo de como usarlo.
El objetivo es poder medir el valor de entrada de un pin analógico del PSoC 4 Pioneer Kit y poderlo mostrar en una pantalla LCD.
El PSoC tiene un ADC con una resolución de 11 bits, por lo tanto entrega valores entre 0 y 2047.
La configuración de los pines a conectar al PSoC se encuentra en las hojas de datos del mismo entorno PSoC creator. Mostramos una imagen de los pines a utilizar en la práctica.
Mostramos el código del main.c, para obtener los resultados que buscamos en el objetivo:
#include <project.h> int main() { /* Place your initialization/startup code here (e.g. MyInst_Start()) */ LCD_Start(); LCD_Position(0,0); LCD_PrintString("Hello world!"); ADC_Start(); ADC_StartConvert(); ADC_IsEndConversion(ADC_WAIT_FOR_RESULT); uint16 lecture; CyGlobalIntEnable; /* Uncomment this line to enable global interrupts. */ for(;;) { /* Place your application code here. */ LCD_Position(1, 0); lecture = ADC_GetResult16(0); if(lecture > 2047){ lecture = 0; } LCD_PrintNumber(lecture); CyDelay(500); LCD_ClearDisplay(); LCD_Position(0, 0); LCD_PrintString("Hello world!"); } }
Y la configuración de los pines:
A continuación dejamos los links para descarga directa de la imagen de disco (ISO) del PSoC Creator y de los drivers necesarios para poder usar el PSoC 4.