Modernizador 3000 - Ingeniería Civil Telemática UTFSM

Anuncio
Proyecto de Introducción a la Ingeniería Civil Telemática:
Integrantes: -Nicholas Bernal-201530010-0
-Oscar Guajardo-201530016-k
-Rudolf Hartman-2001530023-2
-Joaquín Rodríguez-201530004-6
-Cristian Valenzuela-2001530020-8
Contenido
Introducción...................................................................................................................................... 3
Objetivos.................................................................................................................... ....................... 4
Funcionalidades.............................................................................................................. ................... 5
Requerimientos................................................................................................................................. 6
Carta Gantt......................................................................................................... ............................... 7
Paso a paso........................................................................................................................................ 8
Bibliografía........................................................................................................... ............................. 17
Introducción
Cada vez la tecnología avanza más y más, evoluciona con el tiempo y nos vamos quedando a tras,
por lo que, como seres humanos, buscamos la forma de adaptarnos a ella creando nuevas cosas o
simplemente y por lo general optamos por ‘’dar de baja’’ lo que ya no cumple con nuestras
necesidades o está quedando obsoleto.
Esto mismo sucede con nuestros autos, si bien siguen operables, ya no nos satisfacen todas
nuestras necesidades y/o comodidades, y la solución para eso sería simplemente hacer un cambio
de vehículo.
Pero que sucede cuando se tiene un auto ‘’regalón’’, del cual no te quieres separar, ¿acaso no hay
más opción que cambiar de auto o bien hacer una instalación costosa a tu vehículo, la cual puede
dañar la estética interior y puede también dañar la exterior?
Para evitar este problema hemos iniciado un nuevo proyecto, el cual cumplirá todas las funciones
de un auto moderno, con esto nos referimos a un panel interactivo el cual pueda: reproducir
música en mp3, dar la ubicación del vehículo y seguir rutas en la pantalla, ayudarnos a estacionar
el vehículo con sensores, comunicarse a través de redes sociales como Facebook y WhatsApp y
tener conexión a internet. Pero lo especial de este proyecto y más importante es que será portátil.
Objetivos
Objetivo generales:
Programar software para que funciones ciertos hardware que utilizaremos.
Objetivos específicos:
Programar sensor de ultrasonido.
Programar transmisor FM.
Programar modulo GPS.
Programar y calibrar pantalla táctil .
Programar los software con Python.
Programar BAM .
Integrar todos los hardware para la completa funcionalidad del proyecto.
Objetivo de Modernizador 3000:
Modernizar nuestro vehículo antiguo con un sistema portátil .
Otorgar al usuario acceso a su ubicación exacta.
Estacionarse con más facilidad en lugares complicados.
Funcionalidades
GPS:
El GPS nos permitirá obtener nuestra ubicación en el instante que se desee, tomando las
coordenadas producidas por el GPS y llevándolas a la pantalla en una mapa de la ciudad en la que
estemos . Esto nos ayudara a hacer mas fácil nuestros viajes cuando estemos perdidos.
PI FM:
El objetivo es transmitir desde la raspberry música a la radio del automóvil a través de un pin
gpio4 de la raspberry, sintonizando una radio programada a elección, en este caso 106.8 FM. Para
mayor versatilidad hicimos un acceso directo el cual reproducía una lista de canciones que
pusimos en python
Pantalla táctil:
Permite un uso sencillo y rápido del computador, ya que incluso el conductor tendrá la
capacidad de utilizarlo sin mayor distracción al utilizar con un toque cualquier aplicación o funci ón
que requiera.
Modem BAM:
En los tiempos modernos, la era digital se destaca por su inmediates en cuanto a la
conectividad y comunicación, por ello, al aplicar esta tecnología en nuestro computador,
obtenemos al instante información, música, aplicaciones, entre muchas otras cosas, y todo eso sin
la necesidad de detenernos en el camino.
Sensor de proximidad:
medidor de proximidad la función del medidor de proximidad, valga la redundancia, es medir la
distancia a través de un sonido emitido por un módulo de ultrasonido , enviando una onda de alta
frecuencia que viaja a la velocidad del sonido(340m/s), luego esta choca en alguna superficie y
tiende a volver, este sonido que se dirige a el punto de origen es captado por el módulo y
procesada por este mismo, entregando después de un cálculo de distancia ( D=v * t) , la longitud
entre el lugar del choque y el módulo.
Requerimientos
Hardware:
Raspberry Pi
-Memoria externa 16 GB
-Pantalla TFT 7’’
-Modulo ultrasonido HSF04
-BAM USB
-Protoboard
-Jumpers
-Resistencias 1k
-Modulo GPS Ublox M6
Software:
-Python3
-Kodi 14.0 Helix
-SSH Secure Shell Client
-Libreria RPI.GPO
-Raspbian OS
Paso a Paso
Modulo GPS Ublox M6:
El módulo Ublox M6 es el módulo GPS más pequeño del mundo.
Primero debemos soldar una cabecera de pines a la placa del GPS(como muestra la Imagen)
Para comunicar el módulo Ublox M6 con la Raspberry Pi usaremos el puerto serie
‘/dev/ttyAMA0‘. Para ello conectaremos el módulo GPS a la Raspberry tal como indica el
esquema, hay que recordar que los cables TX y RX deben estar cruzados, es decir, el pin TX de la
Raspberry va conectado al pin RX del módulo GPS y el pin RX de la Raspberry va conectado al pin
TX del módulo GPS. Alimentaremos el módulo desde los pines GPIO de 3.3V y GND de
la Raspberry.
Ahora debemos preparar la Raspberry ya que el puerto serie ‘/dev/ttyAMA0‘ no se encuentra
disponible por defecto.Para eso primero debemos abrir el archivo ‘/boot/cmdline.txt‘ y
cambiamos:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1
root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
por:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline
rootwait
Seguidamente abrimos el archivo ‘/etc/inittab‘ y en la última línea ponemos un ‘#’. Cambiamos:
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
Por:
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
Debemos reiniciar la Raspberry Pi, una vez reiniciada instalaremos algunas dependencias que nos
harán falta para interpretar los datos del módulo GPS con este comando desde la terminal:
sudo apt-get install gpsd gpsd-clients python-gps
GPSD es una aplicación que corre en segundo plano y que recoge los datos GPS del módulo y los
envía a través de un socket que necesita ser activado cada vez que iniciamos la Raspberry, por eso
introducimos en la terminal:
sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd.sock
Por ultimo debemos ingresar el comando:
cgps –s
y nos debe aparece una pantalla como esta:
Sensor de proximidad:
El-SR04 HC sensor ultrasónico que va a utilizar en este tutorial para el Raspberry Pi tiene cuatro
pines: tierra (GND), salida de eco de pulso (ECHO), Trigger pulso de entrada (DISP) y 5V de
alimentación (Vcc). Alimentaremos el módulo usando Vcc, conectaremos a tierra utilizando GND, y
utilizamos nuestra Raspberry Pi para enviar una señal de entrada TRIG, que activa el sensor para
enviar un pulso ultrasónico.
ECHO será "bajo" (0 V) hasta que el sensor se activa cuando recibe el pulso de eco. Una vez que un
impulso de retorno ha sido localizado ECHO se establece "alta" (5V) para la duraci ón de ese
pulso. La duración del pulso es el tiempo completo entre el sensor de la salida de un pulso
ultrasónico, y el impulso de retorno su detección por el receptor del sensor. Por tanto, nuestra
secuencia de comandos de Python debe medir la duración de l pulso y luego calcular la distancia de
esta
Importantes. La señal de salida del sensor (ECHO) en el HC-SR04 tiene una potencia de 5V. Sin
embargo, el pin de entrada en la Raspberry Pi GPIO tiene una potencia de 3.3V. El envío de una
señal de 5V en ese puerto de entrada de 3.3V sin protección podría dañar sus pines GPIO, que es
algo que queremos evitar!Tendremos que usar un pequeño circuito divisor de tensión, que consta
de dos resistencias, para bajar la tensión de salida del sensor a algo nuestro Raspberry Pi puede
manejar.
Divisores de tensión
Un divisor de tensión formado por dos resistencias (R1 y R2) en serie conectados a una tensión de
entrada (Vin), que necesita ser reducido a nuestra tensión de salida (Vout). En nuestro circuito, Vin
será ECHO, que necesita ser disminuido de 5V a nuestra Vout de 3.3V
Montar el circuito
Usaremos cuatro pines en la Raspberry Pi para este proyecto: GPIO 5V [Pin 2]; Vcc (5V), GPIO GND
[Pin 6];GND (0 V a tierra), GPIO 23 [Pin 16]; TRIG (salida GPIO) y GPIO 24 [Pin 18]; ECHO
(GPIOEntrada)
luego realice conexiones según la asignación de su código.
-Codigo que te entrega las mediciones en cm:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
TRIG = 12
ECHO = 16
GPIO.setup(TRIG,GPIO.OUT)
GPIO.output(TRIG,0)
GPIO.setup(ECHO,GPIO.IN)
time.sleep(0.1)
print("Medicion:")
GPIO.output(TRIG, 1)
time.sleep(0.00001)
GPIO.output(TRIG, 0)
while (GPIO.input(ECHO) == 0):
pass
start = time.time()
while (GPIO.input(ECHO) == 1):
pass
stop = time.time()
print ((stop-start) * 17000)
GPIO.cleanup()
-Código para abrir una ventana que entregue las mediciones a cada instante:
from PyQt4 import QtCore, QtGui
import rangefinder
import time
import threading
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
widget = QtGui.QWidget()
self.setCentralWidget(widget)
topFiller = QtGui.QWidget()
topFiller.setSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
self.infoLabel = QtGui.QLabel(
"<i>Choose a menu option, or right-click to invoke a context menu</i>",
alignment=QtCore.Qt.AlignCenter)
self.infoLabel.setFrameStyle(QtGui.QFrame.StyledPanel | QtGui.QFrame.Sunken)
bottomFiller = QtGui.QWidget()
bottomFiller.setSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
self.label = QtGui.QLabel("Holi")
font = QtGui.QFont()
font.setPointSize(72)
font.setBold(True)
color = QtGui.QColor(255, 0, 0, 255)
self.label.setFont(font)
self.label.setStyleSheet("QLabel { background-color : black; color : blue; }")
vbox = QtGui.QVBoxLayout()
vbox.setMargin(5)
vbox.addWidget(topFiller)
vbox.addWidget(self.infoLabel)
vbox.addWidget(bottomFiller)
vbox.addWidget(self.label)
widget.setLayout(vbox)
self.createActions()
self.createMenus()
self.setWindowTitle("Menus")
self.setMinimumSize(160,160)
self.resize(480,320)
def contextMenuEvent(self, event):
menu = QtGui.QMenu(self)
menu.exec_(event.globalPos())
def createActions(self):
pass
def createMenus(self):
pass
def changelabel(self, data):
self.label.setText(data)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
script = threading.Thread(target=rangefinder.getdata, args=(window, ))
script.setDaemon(True)
script.start()
sys.exit(app.exec_())
PIFM:
"http://www.icrobotics.co.uk/wiki/index.php/Turning_the_Raspberry_Pi_Into_an_FM_Transmitte
r " desde esta página descargamos el archivo PiFm.tar.gz desde el link en esta [Download Now!] a
nuestro pc, con este archivo tenemos dos opciones; descomprimirlo en el pc y posteriormente
mediante SSH Secure Shell Transfer, pasar a la raspberry los archivos que saldrán de la
descompresión. O bien pasar el archivo directamente por Secure Shell Transfer para
descomprimirlo en la raspberry con el comando "tar zxf PiFm.tar.gz". Con esto tendremos los
archivos; "pifm.c", "pifm", "PiFm.pyc", "PiFm.py", "sound.wav" y "left_right.wav" estos úl timos
nos servirán como prueba para el funcionamiento de nuestro transmisor fm
segundo paso:
Ya con nuestros archivos en la raspberry, se puede encontrar de dos maneras; en una carpeta o en
home de la raspberry, en ambos caso debemos situarnos en donde estén ubicados nuestros
archivos, en caso de estar en una carpeta, aplicamos el comando "cd 'Nombre de la capeta' " para
estar en el lugar de nuestros archivos. Si están ubicados el home de la raspberry no hay que salir
de ahí.
Cualquiera fuera el caso, el comando a introducir en el terminal de la raspberry será "gcc -lm std=c99 pifm.c" con esto saldrá un nuevo archivo llamado "a.out" el cual usaremos para
reproducir la canciones por el transmisor fm podemos corroborar la su existencia con el comando
"ls"
tercer paso :
con todo esto ahora podemos reproducir las canciones de prueba, colocando la antena de mínimo
20 centímetros con entrada hembra en GPIO4 o pin numero 7, e introduciendo el comando "sudo
./a.out '(Nombre de la canción).wav' " esto se reproducirá en la frecuencia 106.8 fm.
NOTA: solo se reproducen archivos ".wav" así que transformarlos a ese formato.
cuarto paso:
Con nuestro transmisor fm ya listo solo nos falta hacerlo más practico así q haremos un script en
python y luego un bach para su acceso directo y así no tener que escribir todo eso en la terminal.
Primero con la creamos un archivo ".py" con el comando "sudo nano (nombre del archivo).py" y
de la siguiente manera programar la lista de reproducción:
"Importar OS
os.system('sudo ./a.out (nombre de la cancion).wav stereo 22050')
#en caso de escucharse mal la canción modificar el numero al final del comando, repetir la
cantidad de veces como canciones quieras reproducir "
luego para cerrar "ctrl+X" y se cerrara y se guardara
Por último crearemos el bash de la misma manera, con el comando " sudo nano (nombre del
archivo).sh" se creara un archivo el cual de tener escrito lo siguiente:
"
#!/bin/bash
sudo python3 (nombre del archivo de la lista de reproducción).py
# -*- ENCODEING: UTF-8 -*-
"
se creara un archivo el cual cuando se habrá reproducirá tu lista de música
Sakis-3g (modem BAM):
Sudo apt-get install usb-modeswitch
wget "http://darknet.co.za/wiki/uploads/Posts/sakis3g.tar.gz"
tar -xzvf sakis3g.tar.gz
chmod +x sakis3g.
sudo mkdir -p /opt/sakis3g/
sudo mv sakis3g /opt/sakis3g
sudo chown root:root /opt/sakis3g/sakis3g
sudo ln -s /opt/sakis3g/sakis3g /usr/bin
sudo apt-get install ppp
sudo sakis3g –interactive
#Conectamos a internet el modem y pedimos un reporte para ver los datos necesarios en “more
options”-“generate success report”.
sudo nano /etc/sakis3g.conf
USBDRIVER="option"
#USBINTERFACE="3"
APN="bsnlnet"
APN_USER="wap"
APN_PASS="wap"
MODEM="12d1:1001"
sudo nano /etc/init.d/autoconnectnet
#***************************************************
#! /bin/sh
# /etc/init.d/autoconnectnet
### BEGIN INIT INFO
# Provides:
noip
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
016
# Short-Description: Simple script to start a program at boot
# Description:
A simple script from www.stuffaboutcode.com which will start / stop a program a boot / shutdown.
### END INIT INFO
case "$1" in
start)
sleep 10
echo "connecting via sakis3g"
# run application you want to start
/opt/sakis3g/sakis3g --sudo "connect"
;;
stop)
echo "dissconnecting via sakis3g"
# kill application you want to stop
/opt/sakis3g/sakis3g --sudo "disconnect"
;;
*)
echo "Usage: /etc/init.d/autoconnectnet {start|stop}"
exit 1
;;
esac
exit 0
#*********************************************************
sudo /etc/init.d/autoconnectnet start
Yowsup (Whatsapp):
sudo apt-get install python-dateutil
sudo apt-get install python-setuptools
sudo apt-get install python-dev
sudo apt-get install libevent-dev
sudo apt-get install ncurses-dev
git clone git://github.com/tgalal/yowsup.git
cd yowsup
sudo python setup.py install
#Ahora debemos registrar nuestro número
sudo python yowsup-cli registration --requestcode sms --phone 569xxxxxxxxx --cc 56 --mcc xxx -mnc xx
#Los códigos cc, mcc y mnc cambian según país e incluso por compañías de teléfonos celulares.
#El código resivido por mensaje de texto lo utilizamos en register.
sudo python yowsup-cli registration --register xxx-xxx --phone 39xxxxxxxxxx --cc 39
Bibliografia
Sensor ultrasonido:
http://www.modmypi.com/blog/hc-sr04-ultrasonic-range-sensor-on-the-raspberry-pi
http://i1.wp.com/cdn.makezine.com/uploads/2014/02/gpio-descriptions.png
https://www.youtube.com/watch?v=iNXfADw0M9Ysr04-ultrasonic-range-sensor-on-theraspberry-pi
Ublox Neo 6n GPS:
http://fpaez.com/tracker-gps-con-raspberry-pi/
Whatsapp:
http://www.emmeshop.eu/blog/node/40
Banda Ancha:
https://lawrencematthew.wordpress.com/2013/08/07/connect-raspberry-pi-to-a-3g-networkautomatically-during-its-boot/
Proyecto similar:
http://engineering-diy.blogspot.cl/2013/08/car-pc-projectaugust-2013-update.html
Transmisor FM
https://m.youtube.com/watch?v=blvaYR6aYXA
http://www.icrobotics.co.uk/wiki/index.php/Turning_the_Raspberry_Pi_Into_an_FM_Transmitter
Descargar