Sei sulla pagina 1di 9

Sistemas Embebidos

Hernández Hernández Jorge Alan Isaí


338760
MÓDULO GPS SERIAL NEO-6M por UART

Se trata de un módulo GPS actualizado que puede utilizarse con mega-v2 ArduPilot. Este
módulo GPS utiliza la última tecnología para dar la mejor información de posición posible,
permitiendo un mejor rendimiento con el ArduPilot u otra plataforma de control Multirotor.
Es posible que necesite configurar este módulo para su uso con el controlador de vuelo (tarjeta
MultiWii Copter I2C GPS requiere 115.200 baudios). Usted necesitará un USB a la tarjeta del
adaptador FTDI para hacer esto. Tenga en cuenta que este módulo se entrega con la configuración
defualt

Receptor GPS independiente


-Módulo GPS ? U-blox NEO-6M
-En 1 segundo el tiempo de lanzamiento a
primera solución para arranques en caliente y
ayudados
-SuperSense ® GPS interior: -162 dBm de
sensibilidad de seguimiento
-La tecnología anti-jamming
-Soporte SBAS (WAAS, EGNOS, MSAS,
GAGAN)
-u-blox motor de posicionamiento 6 50
canales con más de 2 millones correladores
eficaces
-Timepulse
-Tasa de actualización de la posición 5 Hz
-Temperatura de funcionamiento: -40 a 85 ° C
-UART TTL zócalo
-EEPROM para guardar los ajustes
-Batería recargable de copia de seguridad
-Construir en antena GPS 18x18mm
-compatible con RoHS

Diagrama de Conexión
Sistemas Embebidos
Hernández Hernández Jorge Alan Isaí
338760

Código en Python

import gps

# Listen on port 2947 (gpsd) of localhost


session = gps.gps("localhost", "2947")
session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE)

while True:
try:
report = session.next()
# Wait for a 'TPV' report and display the current time
# To see all report data, uncomment the line below
# print report
if report['class'] == 'TPV':
if hasattr(report, 'time'):
print report.time
except KeyError:
pass
except KeyboardInterrupt:
quit()
except StopIteration:
session = None
print "GPSD has terminated"

SENSOR DIGITAL DE TEMPERATURA SHT2X POR I2C

Los sensores digitales de temperatura y humedad de la serie Sensirion SHT2x de DFN digital están
basados en CMOSens®. Son sensores de humedad y temperatura estándares del sector y
ampliamente utilizados. La humedad se mide mediante un sensor capacitivo mientras que la
temperatura se mide con un sensor de brecha energética. Los sensores SHT2x también contienen
un chip de silicio de la versión 4 con un amplificador, convertidor A/D, memoria OTP y una interfaz
digital. Se suministran en un encapsulado de plástico que deja la zona del sensor abierta, para
proteger los dispositivos de impactos externos y proporcionar estabilidad a largo plazo.

Los sensores SHT2x son ideales en aplicaciones de volumen alto y bajo.


El SHT21P tiene una salida PWM y el PDM SHT21S tiene una salida PDM; estas se pueden convertir
en salidas analógicas mediante el uso de filtros de paso bajo adecuados.
SHT20 - Bajo coste, SHT21 - Estándar, SHT25 - Alta precisión

Tecnología basada en CMOSens®


Completamente calibrado
Interfaz serie I²C (no SHT21P/SHT21S)
Salida digital
Bajo consumo
Estabilidad a largo plazo
Sistemas Embebidos
Hernández Hernández Jorge Alan Isaí
338760
Rango de tensión de alimentación: 2,1 a 3,6 V

Diagrama de Conexión

Código en Phyton para lectura por I2c

#!/usr/bin/python
import struct, array, time, io, fcntl

I2C_SLAVE=0x0703
HTU21D_ADDR = 0x40
CMD_READ_TEMP_HOLD = "\xE3"
CMD_READ_HUM_HOLD = "\xE5"
CMD_READ_TEMP_NOHOLD = "\xF3"
CMD_READ_HUM_NOHOLD = "\xF5"
CMD_WRITE_USER_REG = "\xE6"
CMD_READ_USER_REG = "\xE7"
CMD_SOFT_RESET= "\xFE"

class i2c(object):
def __init__(self, device, bus):

self.fr = io.open("/dev/i2c-"+str(bus), "rb", buffering=0)


self.fw = io.open("/dev/i2c-"+str(bus), "wb", buffering=0)

# set device address

fcntl.ioctl(self.fr, I2C_SLAVE, device)


fcntl.ioctl(self.fw, I2C_SLAVE, device)

def write(self, bytes):


self.fw.write(bytes)

def read(self, bytes):


return self.fr.read(bytes)
Sistemas Embebidos
Hernández Hernández Jorge Alan Isaí
338760
def close(self):
self.fw.close()
self.fr.close()

class HTU21D(object):
def __init__(self):
self.dev = i2c(HTU21D_ADDR, 1) #HTU21D 0x40, bus 1
self.dev.write(CMD_SOFT_RESET) #soft reset
time.sleep(.1)

def ctemp(self, sensorTemp):


tSensorTemp = sensorTemp / 65536.0
return -46.85 + (175.72 * tSensorTemp)

def chumid(self, sensorHumid):


tSensorHumid = sensorHumid / 65536.0
return -6.0 + (125.0 * tSensorHumid)

def crc8check(self, value):


# Ported from Sparkfun Arduino HTU21D Library:
https://github.com/sparkfun/HTU21D_Breakout
remainder = ( ( value[0] << 8 ) + value[1] ) << 8
remainder |= value[2]

# POLYNOMIAL = 0x0131 = x^8 + x^5 + x^4 + 1


# divsor = 0x988000 is the 0x0131 polynomial shifted to farthest left of three bytes
divsor = 0x988000

for i in range(0, 16):


if( remainder & 1 << (23 - i) ):
remainder ^= divsor
divsor = divsor >> 1

if remainder == 0:
return True
else:
return False

def read_tmperature(self):
self.dev.write(CMD_READ_TEMP_NOHOLD) #measure temp
time.sleep(.1)

data = self.dev.read(3)
buf = array.array('B', data)

if self.crc8check(buf):
temp = (buf[0] << 8 | buf [1]) & 0xFFFC
return self.ctemp(temp)
else:
return -255
Sistemas Embebidos
Hernández Hernández Jorge Alan Isaí
338760

def read_humidity(self):
self.dev.write(CMD_READ_HUM_NOHOLD) #measure humidity
time.sleep(.1)

data = self.dev.read(3)
buf = array.array('B', data)

if self.crc8check(buf):
humid = (buf[0] << 8 | buf [1]) & 0xFFFC
return self.chumid(humid)
else:
return -255

if __name__ == "__main__":
obj = HTU21D()
print "Temp:", obj.read_tmperature(), "C"
print "Humid:", obj.read_humidity(), "% rH"

ACELERÓMETRO ADXL345 CON I2C y SPI

El ADXL345 es un acelerómetro de 3 ejes de alta resolución (13 bit) que puede medir hasta
± 16 g. Es pequeño y delgado, y tiene bajo consumo de energía. El formato de los datos de salida
es de complemento a dos de 16 bit. Los datos se pueden obtener a través de interfaz SPI de 3 o 4
alambre, o I2C.

El ADXL345 es adecuado para medir la aceleración estática de la gravedad para aplicaciones de


detección de inclinación, así como la aceleración dinámica ocasionada por algún movimiento o
impacto. Su alta resolución (4 mg/LSB) permite medir cambios de inclinación de menos de 1.0°.
Incluye funciones especiales de detección. Puede reconocer cuando no hay inactividad con base
en la presencia o ausencia de movimiento, y si la aceleración en cualquier eje excede de un nivel
establecido por el usuario. También detecta pequeños impulsos individuales y dobles, cuando el
dispositivo está en caída libre. Estas funciones se pueden asignar a cualquiera de los dos pines de
salida de interrupción. La tarjeta cuenta con un buffer de 32 bits tipo FIFO, para almacenar datos y
minimizar la intervención del procesador que se esté empleando. Incluye modalidades de bajo
consumo que permiten administrar la energía con base en la detección de movimiento y la
medición del umbral de aceleración activa para lograr consumos de energía extremadamente
bajos.
Sistemas Embebidos
Hernández Hernández Jorge Alan Isaí
338760

Voltaje de alimentación: 2.0 - 3.6 V DC


Bajo consumo de potencia: 40 µA en modalidad de medición, y
0.1 µA en modo de espera @ 2.5 V
Detección de pequeños impulsos (sencillo y doble, semejante a
un doble click)
Detección de caída libre
Compatible con interfaces SPI e I2C

Diagrama de Conexión
Sistemas Embebidos
Hernández Hernández Jorge Alan Isaí
338760
Código en Python
Sistemas Embebidos
Hernández Hernández Jorge Alan Isaí
338760
LECTURA DE SEÑALES ANALÓGICAS CON MCP3008 Y SPI

En muchas ocasiones cuando quieres convertir una señal analógica a digital para capturar
su valor, el microcontrolador que se utiliza no tiene suficientes entradas. PAra estos casos el
MCP3008 de Microchip es muy cómodo ya que proporciona 8 entradas analógicas las cuales
podemos controlar fácilmente mediante un único bus SPI. Es especialmente útil con Raspberry Pi
ya que no dispone de este tipo entradas analógicas y con la ayuda de esta placa y un pequeño
script en Python podemos leer fácilmente los valores de sensores analógicos, potenciómetros etc.

Interfaz de Datos: Serie, SPI


Frecuencia de Muestreo: 200kSPS
Temperatura de Trabajo Máx.:-40ºC a 85°C
Resolución: 10bit
Tensión de Alimentación Máx.: 2.7V a 5.5V
Dimensiones: 22x17 mm

Diagrama de conexión
Sistemas Embebidos
Hernández Hernández Jorge Alan Isaí
338760
Código en Python

#!/usr/bin/python

import spidev
import time
import os

# SPI bus
spi = spidev.SpiDev()
spi.open(0,0)

# Function to read SPI data from MCP3008 chip


# Channel must be an integer 0-7

def ReadChannel(channel):
adc = spi.xfer2([1,(8+channel)<<4,0])
data = ((adc[1]&3) << 8) + adc[2]
return data

# Function to convert data to voltage level,


# rounded to specified number of decimal places.
def ConvertVolts(data,places):
volts = (data * 5.0) / float(1023)
volts = round(volts,places)
return volts

# Define sensor channels


pot = 0

# Define delay between readings


delay = 3

while True:

# Read the light sensor data


adc = ReadChannel(pot)
pot_volts = ConvertVolts(adc,2)

# Print out results


print ("--------------------------------------------")
print ("Lectura ADC: ", adc)
print("Voltaje: {}V".format(pot_volts))

# Wait before repeating loop


time.sleep(delay)

Potrebbero piacerti anche