Paso 3: codificación
Toda la codificación en este instructable fue hecho por mi colaborador en este proyecto: dennishore, entusiasta de python guru y electrónica. Voy a entregar cosas a él para este paso y paso 6: informe. Ha accedido a responder a preguntas y ha contabilizado todo el código al final de este paso y el paso 6.
Sensores y conexiones
Sensor de temperatura de Grove - AI0
Potenciómetro rotatorio Grove - AI1
Sensor de luz arboleda - AI2
Sensor de los sonidos Grove - AI3
Pantalla de Grove 16 x 2 LCD - I2C bus
Grove LED - digital 2
Botón de Grove - 3 digital
Zumbador de Grove - 4 digital
Grove GPS - UART
El GPS se comunica como un dispositivo serie. La Página GPS Grove (como la página equivalente para todos los sensores de Grove) tiene un Arduino y una sección de Raspberry Pi. Para los otros sensores, tuve una buena suposición en cuanto a cómo hacerlo en el Edison en la conectividad de la sección de Arduino, y los comandos python frambuesa Pi módulos. Pero esto diferenció el GPS. Para mayor claridad, es el módulo de SIM28 GPS actualizado. Al final, funciona conectado a la UART en el escudo de Arboleda y se inicializa con:
El estado de SIM28 especificaciones técnicas que el tiempo de arranque puede ser corta como un segundo (caliente y con ayuda de internet), o tan largo como 32 s (frío y sin internet). La parte más difícil (en curso) de este proyecto ha sido depurar lo que es un error GPS (1), (2) serial port Lee error, problema de análisis de datos (3) GPS. Análisis se realiza actualmente con el módulo pymnea2. La rutina de inicialización completa es
Esto incluye la definición de las categorías. Como estamos usando el potenciómetro rotatorio Grove (y no un codificador rotatorio), nos hemos limitado a resolución angular. Seis categorías son fácilmente seleccionables en la pantalla, gire la perilla, pero probablemente podríamos acomodar a ~ 15 sin que las selecciones sean demasiado juntos. El código entonces intenta una solución inicial de GPS:
El bucle infinito se rompe cuando se devuelven los datos de más de dos satélites. Éxito es calibrado por el análisis de los datos de latitud en un flotador. No hacerlo podría indicar varios tipos de errores GPS, incluyendo errores de comunicación serial. Una vez que se ha establecido una solución, la hora actual del sistema se utiliza para iniciar el archivo de registro:
El algoritmo de la base es entonces:
El retraso de medio segundo proporciona cierta estabilidad para el registro de los eventos de prensa botón, sin un medio más de lujo de rechazar varios eventos para la prensa. También sirve como el tiempo de base para la grabación de datos, actualmente puestos a 10 veces este intervalo (cada 5 segundos). Detalles de la selección, pantalla, getData y recordData las funciones pueden verse en el código completo que se adjunta al final de esta sección.
Por el momento, la gira de LED apagado parpadeando cuando pierde su fix GPS, o si el número de satélites cae por debajo de 2. En estos tiempos, es todavía posible datos de campos de registros utilizando todos los sensores excepto el GPS, es decir, no latitud, longitud y elevación de los puntos de datos. La tabla de Resumen producida a partir de la salida muestra los medios para los datos, teniendo en cuenta si elevación estaba disponible o no. Observando el estado del LED antes de registrar los datos, esto ofrece la opción de si esperar (a veces sólo unos pocos segundos) con el fin de disponer de datos GPS. Obviamente, los puntos de datos sin GPS no aparecen en el mapa.
El código completo está ligado abajo.
Inicie automáticamente en el arranque (sin cabeza)
Puesto que se requiere el programa de recolección de datos para comenzar tan pronto como la energía está conectada (y reiniciar si tenemos que cambiar las pilas en el campo), se requiere que el programa de python inicia en cuando el Edison termina su secuencia de arranque.