Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

“¡Es para los pájaros!”

Componentes y suministros

Arduino 101
× 1
Intel Edison
× 1
Logitech c270 HD Webcam
× 1
Portadora Pololu con sensor de distancia digital Sharp GP2Y0D815Z0F de 15 cm
× 2
Resistencia cuadrada sensible a la fuerza (FSR) Adafruit - Interlink 406
× 1
Placa de conexión del sensor de temperatura y humedad Adafruit Si7021
× 1
Seeed Grove Start Kit Plus, Intel IoT Edition
× 1
Condensador 47 µF
× 2
Resistencia 1k ohm
× 1
Bloque de terminales Adafruit - 2 pines de 3,5 mm - paquete de 5 !
× 1
Fuente de alimentación conmutada compacta Adafruit - Salida seleccionable 3-12VDC
× 1
Placa de pruebas Adafruit Perma-Proto del tamaño de un cuarto - Individual
× 1
Cables de puente (genéricos)
× 1

Herramientas y máquinas necesarias

Impresora 3D (genérica)
Soldador (genérico)

Aplicaciones y servicios en línea

Intel XDK para IoT
Autodesk Fusion 360
PubNub Publish / Subscribe API
Cloudinary
noble.js

Acerca de este proyecto

"¡Es para los pájaros!" Reinventar el futuro del monitoreo ecológico con Arduino 101

Introducción y motivación:

Una forma de medir la salud de nuestro clima y el ecosistema en el que vivimos es midiendo el tamaño y la variedad de su fauna o población animal. Cada invierno, desde 1987, el Laboratorio de Ornitología de Cornell lleva a cabo un esfuerzo masivo de ciencia ciudadana llamado Proyecto FeederWatch:

“Project FeederWatch es un estudio de aves que visitan comederos en patios traseros, centros naturales, áreas comunitarias y otros lugares en América del Norte durante todo el invierno ... Los datos de FeederWatch muestran qué especies de aves visitan los comederos en miles de lugares en todo el continente cada invierno . Los datos también indican cuántos individuos de cada especie se ven. Esta información se puede utilizar para medir los cambios en los rangos invernales y la abundancia de especies de aves a lo largo del tiempo. "

Este es nuestro primer año participando y queríamos combinar nuestro interés en hacer y piratear, con nuestro interés en la naturaleza y nuestra participación en Project FeederWatch. ¡Así que decidimos reinventar nuestro futuro de observación de aves y monitoreo ambiental con Arduino 101!

El Arduino 101 es ideal para este proyecto porque combina la simplicidad del IDE de Arduino para facilitar nuestra programación integrada, capacidades integradas como Bluetooth LE con una gran cantidad de sensores y placas de conexión disponibles. Al incorporar un Arduino 101 en un comedero para pájaros hecho en casa, desarrollamos una plataforma experimental para medir los parámetros meteorológicos y monitorear la actividad de las aves en nuestro comedero. ¡Agregar algunas tecnologías de IoT interesantes de Cloudinary y PubNub nos ayudó a reinventar el futuro del monitoreo de la salud ambiental y de los ecosistemas!

Descripción general del proyecto:

El corazón de nuestro proyecto es un Arduino 101 integrado en un comedero para pájaros hecho en casa. Usamos 2 sensores de distancia infrarrojos Sharp para detectar pájaros posados ​​en una clavija de madera que atraviesa ambos lados del comedero. Se utiliza una resistencia sensible a la fuerza (FSR) para detectar la cantidad de semilla presente en el alimentador. Una placa adaptadora de sensor de temperatura y humedad Adafruit Si7021 se adjunta a los pines i2c y se utiliza para proporcionar nuestros datos meteorológicos físicos. El Arduino 101 está configurado para actuar como un dispositivo periférico BLE y enviar datos de estos sensores a través de BLE a una central BLE dispositivo. La energía es proporcionada por 4 pilas AA. Todos estos componentes están alojados en una carcasa impresa en 3D personalizada.

Usamos un Intel Edison en la placa de ruptura Arduino como central BLE y como puerta de enlace a Internet. Una cámara web logitech c270 usb está conectada al puerto usb de la placa y se usa para tomar fotografías cuando se recibe una notificación BLE que indica actividad en una de las perchas. Estas imágenes se almacenan localmente en una tarjeta SD insertada en la ranura para tarjetas SD en la placa de conexiones.

Aprovechamos la capacidad WiFi de Intel Edison para usarla como puerta de enlace a Internet. Esto nos permite utilizar súper tecnologías como PubNub para la transmisión de datos en tiempo real y Cloudinary para el almacenamiento y la manipulación de imágenes en la nube.

El comedero para pájaros está hecho de una botella de refresco vacía y una clavija de madera y lo colgamos de un poste en nuestro jardín.

Construyendo el proyecto:

Arduino 101 el comedero para pájaros integrado.

La base de este proyecto es un Arduino 101 integrado en nuestro comedero para pájaros. El comedero para pájaros estará al aire libre y deberá poder soportar los rigores físicos de estar al aire libre. Necesitará una forma de transmitir datos en tiempo real y de forma inalámbrica. La distancia entre el Arduino 101 transmisor y el Edison receptor es de solo unos pocos pies y, dado que el Arduino 101 ya tiene BLE a bordo, usaremos BLE.

La mayor parte del circuito se puede construir siguiendo el diagrama de fritzing, pero hubo algunos desafíos con los que nos encontramos al hacer y probar este circuito. Son aquellos en los que nos concentraremos aquí:

  • El primer desafío:¡Detectar un pájaro en el comedero, al aire libre! Para este proyecto, necesitamos un sensor que pueda funcionar al aire libre, sellado contra los elementos. No queremos que perturbe o asuste al sujeto. Solo debería detectar lo que hay en la percha. Después de evaluar las características de varios sensores, decidimos utilizar el Pololu Carrier con el sensor de distancia digital Sharp GP2Y0D815Z0F. Estos sensores, a diferencia de los sensores PIR normales, tienen un rango de detección muy corto. Solo queremos saber si un pájaro está posado a unos centímetros del sensor. Los sensores PIR tienen un rango de detección muy largo y amplio. Esto es ideal para detectar cualquier tipo de movimiento en la entrada de su casa, pero no queremos que detecte ramas de árboles u otro "ruido" cada vez que el comedero para pájaros se balancea con la brisa. Además, una evaluación rápida de laboratorio mostró que los sensores de infrarrojos de Sharp funcionaban cuando se colocaban dentro de una botella de refresco de plástico. Esto es importante porque necesitamos proteger la electrónica de los elementos y poder "ver a través" de esta parte del gabinete.
  • El segundo desafío:después de conectar uno de los sensores y probarlo, ¡estábamos listos para comenzar! Así que conectamos un segundo sensor Sharp IR al Arduino 101 y. . .¡no funcionaron! Después de verificar el código, muchas veces. Después de verificar un par de placas y diferentes sensores, nada haría que estos dos sensores funcionen juntos. Así que nos enfrentamos a nuestro primer gran desafío. ¿Deberíamos probar con otro tipo de sensor? ¿Deberíamos hacer un comedero para pájaros de una sola percha (¡patético!), ¿Qué hacer? Desesperados, hicimos lo que deberíamos haber hecho la primera vez, consulte el sitio web y, en las preguntas frecuentes del producto, encontramos esto: Este sensor no se comporta como esperaba:obtengo mucha detección intermitente más allá del rango máximo del sensor y no detecta objetos dentro del rango de detección anunciado. ¿Qué pasa? Problemas como este pueden ser el resultado de problemas con la fuente de alimentación, especialmente porque este sensor consume energía en ráfagas cortas y grandes, así que asegúrese de que su fuente de alimentación sea capaz de suministrar la corriente necesaria. Si experimenta este problema, intente agregar un capacitor de aproximadamente 10 µF a través de la alimentación del sensor y la tierra cerca del sensor; esto compensa una fuente de alimentación inadecuada y normalmente restaura la funcionalidad normal. ¡Problema resuelto! Agregamos un capacitor electrolítico de 47uF a cada uno de los sensores y funcionaron, con solo una advertencia más, ambos necesitaban alimentarse directamente desde el pin + 5V en la placa. Verá esto en el diagrama de fritzing como un puente del Línea de + 5V de un sensor al suministro de + 5V al otro sensor. No somos EE, así que no puedo explicar esto, ¡es solo lo que encontramos para trabajar tanto en interiores como en exteriores!
  • El tercer desafío:en la sección Actividades relacionadas y aprendizaje del sitio web del Proyecto FeederWatch, una de las actividades recomendadas es pesar el alpiste en el comedero antes y después de cada conteo y calcular cuánta semilla se comió. Después de varios recuentos, calcule la tasa de consumo promedio. En lugar de realizar pesajes manuales, ¿por qué no capturar el consumo de semillas de forma automatizada? Nuestra solución fue utilizar una resistencia sensible a la fuerza (FSR). Esta es una resistencia con una resistencia que varía con la fuerza que se le aplica. Se puede conectar a un pin de entrada analógica. Pero, ¿sería lo suficientemente sensible como para detectar cambios en las cantidades de semillas? Nuestros primeros intentos de medir los niveles de semillas en un pequeño recipiente de plástico no tuvieron mucho éxito. El sensor respondió bien a la presión variable de los dedos, pero no a los niveles de semillas. Entonces hicimos dos cambios para resolver el problema. Primero, la señal analógica se envía al pin analógico Arduino 101 a través de un divisor de voltaje de 2 resistencias, siendo una la FSR y la segunda una resistencia convencional. Bajamos el valor de esta segunda resistencia y el sensor parecía ser más sensible al tacto, pero todavía no respondía a los cambios de semillas como nos gustaría. Así que se agregó un cambio de hardware a todo esto. Algo por analogía con el principio de Pascal, que si en lugar de aplicar el peso de las semillas sobre toda la superficie del FSR, creáramos una plataforma con un pequeño punto de contacto en su centro, aumentaríamos enormemente la fuerza de la semilla en el FSR. ¡Justo lo opuesto a una raqueta de nieve y funcionó!

Otro desafío menor es conectar el FSR al Arduino 101 de una manera segura y confiable. Esto se resuelve fácilmente mediante el uso de bloques de terminales de 3,5 mm de 2 pines. Solo asegúrese de que el espacio entre el bloque de terminales coincida con el de su placa.

El resto del hardware de Arduino 101 es simple. Conectamos la placa de conexiones Adafruit Si702 a los pines del bus I2C () y usamos los + 3.3V vacíos para la alimentación. La alimentación de todo el paquete se proporciona a través de un paquete de baterías intercambiables 4XAA ubicado debajo del gabinete principal.

Soldamos los sensores IR y FSR a los PCB de placa de pruebas Adafruit Perma-Proto del tamaño de un cuarto y los unimos a la parte inferior del Arduino 101 con cinta de doble cara. El paquete completo se coloca dentro del comedero para pájaros de la botella de refresco y ha sobrevivido a temperaturas bajo cero, niebla, lluvia ligera y nieve (¡falsa ventisca "Stella"!).

Boceto de Arduino 101:

El trabajo principal del boceto es monitorear los sensores conectados e informar los valores de los sensores sobre BLE. Todos los datos en BLE se transmiten como un paquete de bytes. Ya sea que sus datos originales sean un flotador interno de una matriz de caracteres, tendrá que dividirlos en su representación de bytes para transmitirlos a través de BLE. La forma más fácil que conozco de hacer esto es crear una unión de tipos de datos. Una unión nos permite compartir la misma ubicación de memoria entre dos tipos de datos diferentes. En nuestro caso, el sensor de temperatura y humedad SI7021 proporciona datos como un número de punto flotante. El lenguaje C de Arduino representa un flotador de 4 bytes, por lo que creamos una unión entre nuestro flotador de temperatura y flotador de humedad y una matriz de 4 bytes.

  / ** * La directiva union permite que estas variables compartan la misma ubicación de memoria. Por favor, vea el tutorial * my tutorial Imu to You! (Https://www.hackster.io/gov/imu-to-you-ae53e1?team=18045) para obtener más * discusión sobre el uso de la directiva de unión en C. * / union {float t; bytes de caracteres sin firmar [4]; } tempData; union {float h; bytes de caracteres sin firmar [4]; } humedadData; union {int f; bytes de caracteres sin firmar [2]; } feedData;  

Cuando almacenamos el valor de punto flotante en la unión, la matriz de bytes también se completa. Para transmitir los datos, pasamos el arreglo de bytes a la función setValue () de estas características.

Para aplicaciones integradas, el uso de las funciones delay () puede causar problemas. Primero, mientras se llama a la función de retraso, toda la actividad del procesador se detiene durante el período de retraso. Esto no es ideal cuando las aves pueden posarse en cualquier momento. Un segundo problema es que la función delay () puede causar problemas con el mecanismo de notificación BLE. La forma de evitar esto es no usar delay () en nuestro boceto. Sin embargo, muchas veces se necesitará un retraso en el programa de código. Para superar esto, usaremos el método descrito en este conjunto de 3 súper tutoriales de Bill Earl de Adafruit.

En resumen, creamos un objeto que representa nuestro dispositivo integrado. Decidimos un intervalo o un conjunto de intervalos para sondear nuestros sensores conectados a este dispositivo. Luego creamos una función Update ().

  void Update () {// Serial.print ("Sensor de alimentación:"); Serial.println (analogRead (A0)); // Las actualizaciones / notificaciones de la actividad de la percha dependen del tiempo y de los sensores de proximidad currentPerchMillis =millis (); if ((currentPerchMillis - previousPerchMillis)> perchInterval) {previousPerchMillis =currentPerchMillis; currentLeftPerch =digitalRead (LEFT_PERCH); currentRightPerch =digitalRead (RIGHT_PERCH); if ((currentLeftPerch ==0) &&(previousLeftPerch ==1)) {// nueva actividad en la percha izquierda // BLE notifica perchCharacteristic.setValue (1); Serial.println ("ACTIVIDAD DE LA PERCA IZQUIERDA"); previousLeftPerch =0; } ...}  

Esta función sirve para comprobar si los intervalos de tiempo para nuestros sensores han pasado, si es así, actualizar los sensores, si no simplemente ignorarlos. La función Update () se llama repetidamente en la sección loop () de nuestro boceto.

  void loop () {// ponga su código principal aquí, para que se ejecute repetidamente:blePeripheral.poll (); birdFeeder.Update (); }  

De este modo emulamos un efecto multitarea en tiempo real con nuestros sensores.

Placa de conexión Intel Edison y Arduino:

La parte más desafiante de trabajar con Intel Edison es configurarlo. El mejor tutorial que he encontrado sobre esto es Intel Edison e Intel XDK IoT Edition 101 de Vincent Wong. ¡Puedo garantizarles que pasar por este proceso y probar algunos de los ejemplos de JavaScript vale la pena!

Trabajar con su Edison usando la edición Intel XDK IoT le permitirá interactuar y configurarlo en la línea de comandos. También podrá aprovechar los muchos programas y plantillas de ejemplo de JavaScript / Node. Aprender y usar JavaScript / Node para programar abrirá una gran cantidad de API potentes y fáciles de usar, como PubNub, Noble.js y Cloudinary.

Una vez que haya configurado Edison y haya confirmado una conexión activa a su red WiFi, puede instalar las bibliotecas necesarias para este proyecto:

npm install noble

npm install pubnub

npm instalar cloudinary

La cámara web USB

Una búsqueda en Google de "cámara web intel edison" producirá varios buenos ejemplos y tutoriales. Pero hay material confuso, que creo que se debe principalmente a algunos cambios en los módulos disponibles en Yocto OS. Yocto es una versión integrada de Linux que ejecuta Intel edison. Logitech c270 es una cámara web compatible con uvcvideo. Existen numerosos tutoriales para asegurarse de que su Edison tenga instalado el controlador / módulo uvcvideo. Sin esto, no podrá interactuar ni tomar fotografías con la cámara.

Utilicé los siguientes pasos desde la cámara web en Intel Edison con cargas a s3 para que la cámara web funcione en mi Edison. He publicado las instrucciones de esta publicación de blog a continuación, en caso de que alguna vez se vuelva obsoleta.

Con su Edison, las siguientes instrucciones se ejecutarán en la línea de comando en la pestaña del terminal serie XDK.

"Usaremos algunos paquetes adicionales, que se pueden instalar usando opkg gerente de empaquetación. Para la lista de edición inicial de repositorios con vi:

vi /etc/opkg/base-feeds.conf

y asegúrese de tener todas estas líneas en el archivo:

src / gz todos http://repo.opkg.net/edison/repo/all src / gz edison http://repo.opkg.net/edison/repo/edison src / gz core2–32 http:// repo. opkg.net/edison/repo/core2-32 src intel-iotdk http://iotdk.intel.com/repos/3.0/intelgalactic/opkg/i586

Ahora, actualice la caché del paquete:

actualización de opkg

E instale el módulo del kernel para admitir cámaras usb uvc.

opkg instalar kernel-module-uvcvideo

Ahora conecte su cámara web al puerto USB y ejecute este comando.

ls -l / dev / video *

Si su cámara se detectó correctamente, la salida será como:

crw-rw ---- 1 video raíz 81, 0 25 de julio 09:35 / dev / video0

Para trabajar con webcam y hacer fotos a tiempo, tenemos que instalar 2 paquetes adicionales:

opkg install fswebcam cronie

*** tenga en cuenta que no instalamos cronie para este proyecto, solo hicimos opkg instal fswebcam. cronie no es necesario, ya que llamamos fswebcam cuando los sensores de infrarrojos son activados por un pájaro en una percha, no en un horario programado ***

Trabajando con la cámara

Para probar su cámara, ejecute este comando:

fswebcam -r 1280x720 --jpeg 100 -D 3 -S 13 "test.jpg"

  • -r 1280 x 720 establecer la resolución de la imagen, es mejor utilizar el máximo disponible para su cámara (opcional)
  • - jpeg 100 establezca la calidad JPEG al máximo. Es útil si va a hacer algo con estas imágenes más adelante (opcional)
  • -D 3 -S 13 agrega 3 segundos de retraso y salta los primeros 13 fotogramas. Es necesario, porque algunas cámaras web necesitan tiempo para obtener las mejores fotos (recomendado)
  • test.jpg es el nombre del archivo de salida "

Puede encontrar información adicional sobre el uso de una cámara web con Edison y otros proyectos realmente interesantes en la página de github del Dr. Kim. ¡También publica proyectos interesantes en Hackster.io!

Además de confirmar que estaba presente el módulo adecuado, también necesitaba mover el interruptor entre los cables microusb y el puerto USB hacia la dirección del puerto USB y conectar el blindaje Arduino a una fuente de alimentación. Usé la fuente de alimentación conmutada compacta - Salida seleccionable 3-12VDC (Id. De producto Adafruit:1448).

Ahora coloque su tarjeta SD en la ranura para tarjetas SD. Uso de la terminal en serie en Intel XDK, use la línea de comando para verificar la tarjeta ingresando los siguientes comandos:

cd / media / sdcard

ls

Esto debería mostrar cualquier archivo presente en la tarjeta, o nada si no hay archivos presentes. No debería ver ningún mensaje de error. Si ve mensajes de error, le recomiendo reiniciar la placa Edison sin quitar la tarjeta SD ingresando este comando:

reiniciar

Luego, repita los comandos anteriores después de volver a iniciar sesión en su Edison.

Ahora, para permitir que nuestro Edison acceda a Bluetooth, ingrese el siguiente comando:

rfkill desbloquear bluetooth

Para confirmar que bluetooth está encendido y funcionando, ingrese:

bluetoothctl

Luego escriba

escanear en

Esto debería mostrar los dispositivos BLE cercanos como tales:

Ahora salga de bluetoothctl y haga clic en la pestaña Intel XDK IoT y luego conéctese a su placa. Seleccione un proyecto del menú del lado izquierdo, como BLESCAN. Elimine el contenido de index.js y elimine las dependencias del archivo package.json.

Reemplace el contenido de index.js con el programa de nuestro repositorio de github aquí. Sube este código a tu Edison. Asegúrese de que Arduino 101 esté encendido y ejecute el código Edison. Una vez que Edison haya detectado su Arduino 101, debería ver algo como esto:

El código:

El código que se ejecuta en Edison está escrito en JavaScript o, mejor dicho, en Node.js. Después de crear los objetos necesarios de nuestras bibliotecas importadas, crearemos variables para representar el servicio BLE que se ejecuta en Arduino 101.

noble.js

  // BLE Service and Characteristics for noble // Deben corresponder al servicio del periférico y los UUID característicos // (en Arduino 101 en este caso) var LOCAL_NAME ='bird'; var SERVICE_UUID ='917649a0d98e11e59eec0002a5d5c51b'; //¡¡¡¡Sin guiones!!!! var PERCH_UUID ='917649a1d98e11e59eec0002a5d5c51b'; var TEMPERATURE_UUID ='917649a2d98e11e59eec0002a5d5c51b'; var HUMIDITY_UUID ='917649a3d98e11e59eec0002a5d5c51b'; var FEED_UUID ='917649a4d98e11e59eec0002a5d5c51b';  

Noble.js utilizará estos UUID. Si cambia los UUID en su Arduino, también deben cambiarse aquí. Es importante asegurarse de no tener guiones para que noble.js funcione correctamente.

Para trabajar con noble.js tendremos que buscar dispositivos BLE periféricos y luego descubrirlos y luego conectarnos. Una vez conectado, recorreremos las características disponibles para usar, utilizando el UUID definido anteriormente. Todas las características son características de lectura / notificación.

  noble.on ('descubrir', función (periférico) {console.log ('Dispositivo BLE encontrado:[' + periférico.id + ']' + periférico.advertisement.localName); if (periférico. advertisement.localName ==LOCAL_NAME) {console.log ('Encontrado:' + periférico.advertisement.localName);} periférico.connect (función (error) {consola.log ('Conectado al periférico:' + periférico.uuid); noble.stopScanning (); // evitar que obtengamos servicios "extraviados". [0]; console.log ('¡Servicio de comedero para pájaros!'); FeederService.discoverCharacteristics ([], función (error, características) {características.forEach (función (característica) {consola.log ('UUID característica:' + característica .uuid); feature.on ('data', function (data, isNotification) {transformRawData (feature.uuid, data);}); feature.notify ('true', function (error) {if (error) throw e rror; }); }); }); }); }); });  

Hay 2 elementos clave para señalar en la sección de código anterior. Primero, hubo un cambio en la forma en que le dices a noble.js que esta es una característica de lectura / notificación. Desde la página de github de Sandeep Mistry:

Datos

Emitido cuando se ha completado la lectura de la característica, resultado de feature.read (...) o el valor de la característica ha sido actualizado por el periférico mediante notificación o indicación, después de haber sido habilitado con notificar (verdadero [, devolución de llamada (error)]) .

feature.on ('datos', devolución de llamada (datos, isNotification));

feature.once ('read', callback (data, isNotification)); // legado

El cambio es de 'leer' a 'datos'. Nos encontramos con algunos problemas aquí inadvertidamente al usar una versión anterior de noble y luego cambiar la versión más nueva. Nos tomó muchas horas averiguar qué sucedió, por lo que queríamos ayudarlo potencialmente a evitar esto

La otra clave aquí es la función transformRawData (feature.uuid, data). Esta función toma el uuid y los datos entregados de la lectura y los pasa a la función grande y difícil de manejar. Cada vez que se activa el mecanismo de notificación BLE por un cambio en una característica, se llama a esta función y maneja los datos recibidos. Aquí es donde ocurre toda la emoción.

tranformRawData comprueba qué característica se recibe.

En el caso de que Arduino nos diga que hay actividad en la percha, queremos tomar una foto. En este caso, usamos la biblioteca child_process para hacer una llamada al programa fswebcam que reside en nuestro sistema Yocto (linux). La biblioteca child_process nos permite ejecutar funciones de línea de comando desde nuestro código node.js. Esta es una característica muy poderosa.

  childProcess.execFile ('fswebcam', ['- r 1280x720', fileName], function (error, stdout, stderr) {console.log (stdout););  

PubNub y Cloudinary:

¡Esta función también es donde entran en juego PubNub y Cloudinary! PubNub proporciona una red de transmisión de datos en tiempo real a su aplicación. Lo que esto significa es que con una conexión a Internet, su aplicación puede transmitir datos en vivo en cualquier parte del mundo. Cualquier otra aplicación o programa que tenga la clave de suscripción a sus transmisiones publicadas tendrá acceso a una carga útil JSON que representa sus datos. En nuestro caso enviamos el nivel actual de semillas, la temperatura, la humedad y los recuentos de visitas a las percas. ¡Además, enviamos un enlace a las 3 imágenes más actuales del alimentador! Estos son jpegs que se han subido a Cloudinary con nuestro programa. ¡No es necesario ejecutar un servidor! ¡Un archivo HTML simple con JavaScript incrustado sirve como una interfaz en tiempo real para nuestro comedero para pájaros, cortesía de PubNub!

En la imagen de arriba, simplemente me envié por correo electrónico el archivo HTML que contiene el código para interactuar con el comedero para pájaros a través de PubNub y cargué cada uno desde un directorio local en un navegador Chrome. No es necesario que codifique un servidor para ofrecer esta página en su Edison.

Cloudinary es un servicio de carga, almacenamiento y transformación de imágenes. Tiene una api muy simple de usar. Al desarrollar este proyecto, no pude encontrar una API más fácil y sencilla de usar. No hay nada comparable por ahí. Su mesa de ayuda también es fantástica. ¡Definitivamente es algo que querrás revisar para tus proyectos!

En el siguiente código, usamos la API de cloudinary para cargar las 3 últimas imágenes de la tarjeta SD local. La URL devuelta por esta carga se guarda en una matriz. Estas URL se envían luego como parte de nuestra carga útil JSON a PubNub para que nuestra página HTML pueda acceder a ellas para mostrarlas. Belleza, ¿eh?

index.html

¿De qué se trata este archivo index.html? El archivo index.html es nuestra interfaz de usuario. Dado que estamos transmitiendo nuestros datos utilizando PubNub y colocando nuestras imágenes en una URL de acceso público con Cloudinary, podemos aprovechar el poderoso trío de Javascript / HTML / CSS para crear una interfaz de usuario portátil. Tanto PubNub como Cloudinary tienen muy fáciles de usar y potentes API de JavaScript. Simplemente los importamos a nuestro archivo html para usarlos:

      

Al crear el objeto PubNub, le damos la clave de suscripción a nuestro flujo de datos y puede acceder al flujo de datos en tiempo real siempre que estemos publicando este flujo.

  


Proceso de manufactura

  1. DHT Tiny Breakout para Raspberry Pi
  2. Sensor de rango ultrasónico HC-SR04 en Raspberry Pi
  3. Los mejores accesorios para tu Raspberry Pi
  4. VISTA:Para ciegos
  5. Intel recluta a Udacity para otorgar un título en IA en el perímetro
  6. Cómo elegir el sensor adecuado para aplicaciones de llenado
  7. Película de sensores para la industria aeroespacial
  8. Rastreador de sensor WiFi RSSI para la ISS
  9. Nueva herramienta matemática puede seleccionar los mejores sensores para el trabajo
  10. El reto del método 5S para la industria 4.0
  11. Intel Edison IoT:cómo elegir Intel Edison para su prototipo de IoT