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