Duda con protocolo de comunicación Arduino - Raspberry

Hola, he estado leyendo un poco sobre los protocolos de comunicación ya que necesito definir uno para mi proyecto pero la verdad es que no se como hacerlo. Lo que tengo en mente hacer es lo siguiente: Tengo 2 sensores de movimiento, dos luces led y dos cámaras OV7670. La idea es que al detectar movimiento se encienda la luz y se tome una fotografía, que luego se envíe a la raspberry en algún formato y que luego la misma raspberry sea capaz de leer esos datos enviados desde el arduino a través de alguna trama o algo. La comunicación que tengo por ahora es serial entre el arduino y la raspberry. Lo que quiero hacer yo es crear un archivo donde se puedan preconfigurar los pines en un determinado grupo, lo que me permita saber cual fue específicamente el sensor que se activó, por ejemplo:

grupo_uno_sensor_uno = 13 (pin) grupo_uno_luz_uno = 3 (pin) grupo_uno_camara_uno = 4 (pin) grupo_dos_sensor_dos = 10 (pin) grupo_dos_luz_dos = 8 (pin) grupo_dos_camara_dos = 7 (pin)

y así sucesivamente.

Lo que quiero hacer es que luego de darle algún formato especial esta información se pueda enviar a la raspberry, que en este caso la estaría usando como motor de inferencia.

Espero haberme explicado de forma clara. Gracias

Saludos!

Arma una estructura entonces con todos los datos, y luego un vector definiendo una variable con esa estructura. Algo asi

struct sensores{ byte sensor; byte luz; byte camara; } datoCamara;

luego defines asi datoCamara dato[10]; // suponiedo 10 cámaras o defines sus pines asi, no olvides que el grupo es la direccion del vector corrido en 1. O sea sensor 1 es el 0, sensor 5 es el 4.

datoCamara[0].sensor = 13; datoCamara[0].luz = 3; datoCamara[0].Camara = 4; o datoCamara[0] = {13, 3, 4}; o puedes definir todos los sensores datoCamara = {{13,3,4}, {10,8,7}, ....};

Además como yo lo veo, deberías armar un sistema de comandos RasPI-Arduino para intercambiar comandos y tramas. Cuando tengas que enviar la imagen no puedes hacerlo usando memoria, sino simplemente tomandola de la SD donde quedo almacenada y enviandola al RasPI pero porque previamente se le pidió hacerlo o a peticion del RasPI.

No se que cosas debes intercambiar pero ya veo que el ARduino con un PIR (por ejemplo) detecta movimiento, y toma la foto, la guarda en la SD (supongo). Le envia una petición al RasPI, este responde, okay envia y acto seguido envia la foto. Será algo asi?

Muchas gracias por responder, me queda todo más claro. Una última duda, puedo conectar una camara IP al arduino pero que me envíe las fotos directo a la raspberry? Me explico: El sensor detecta movimiento, enciende la luz y saca la foto y luego envía la foto que tomó a la raspberry, en algún directorio de esta misma… es posible? Lo pregunto porque creo que sería mucho mas efectivo que una cámara conectada vía serial… Gracias

Saludos!

Hola buen día, una pregunta (perdon que no te pueda ayudar), como te estas comunicando con arduino desde raspberry??, lo que pasa es que mi equipo y yo estamos haciendo un proyecto para la uni, es de domótica utilizando arduino con raspberry y toda la comunicación hasta ahora es serial, tenemos el problema de que: enviamos ordenes a arduino a traves de una pagina web montada en un servidor de raspberry pero es comunicacion serial, al momento de hacerlo DEBE ESTAR ABIERTO EL MONITOR SERIAL porque si no esta no funciona nada y no sabemos porque pasa esto, le preguntamos al profesor y nos dijo que es que por el metodo de comunicación que no esta bien por que es con el cable que trae el arduino, dice que tenemos que hacer ahí algo para que sea correcta la comunicación, ahora adquirimos un ethernet shield para esto pero no sabemos como enviarle ordenes a arduino a traves del ethernet, alguien de aquí sabra como o que es lo estamos haciendo mal, dea antemano gracias.

por si algo se les ofrece o me pudieran ayudar mi correo es christianalatorre@outlook.es

gracias.

Ahora creo que tienes un problema de lo que debe o no hacer un arduino. Primero el arduino no tiene tanta potencia para hacer lo que dices. Tal vez un Yun pueda Pero ya que tienes un pir que detecta movimiento porque no le envias la indicación via como gustes al RasPi y el Raspi dirá... ahh es el nodo 3 bueno accedo a X.Y.Z.W dirección ip de esa cámara y la leo. o bueno tu problema es que quieres la foto de lo que detectó. Si eso lo envias rápido tu crees que arduino va a leer mas rápido que lo que tardes en decirle via como sea a RasPi que hay movimiento? Y que lo haga Raspi?

christianalatorre: Hola buen día, una pregunta (perdon que no te pueda ayudar), como te estas comunicando con arduino desde raspberry??, lo que pasa es que mi equipo y yo estamos haciendo un proyecto para la uni, es de domótica utilizando arduino con raspberry y toda la comunicación hasta ahora es serial, tenemos el problema de que: enviamos ordenes a arduino a traves de una pagina web montada en un servidor de raspberry pero es comunicacion serial, al momento de hacerlo DEBE ESTAR ABIERTO EL MONITOR SERIAL porque si no esta no funciona nada y no sabemos porque pasa esto, le preguntamos al profesor y nos dijo que es que por el metodo de comunicación que no esta bien por que es con el cable que trae el arduino, dice que tenemos que hacer ahí algo para que sea correcta la comunicación, ahora adquirimos un ethernet shield para esto pero no sabemos como enviarle ordenes a arduino a traves del ethernet, alguien de aquí sabra como o que es lo estamos haciendo mal, dea antemano gracias.

por si algo se les ofrece o me pudieran ayudar mi correo es christianalatorre@outlook.es

gracias.

Hola, quizas este artículo te ayude un poco:

Tutorial

surbyte: Ahora creo que tienes un problema de lo que debe o no hacer un arduino. Primero el arduino no tiene tanta potencia para hacer lo que dices. Tal vez un Yun pueda Pero ya que tienes un pir que detecta movimiento porque no le envias la indicación via como gustes al RasPi y el Raspi dirá... ahh es el nodo 3 bueno accedo a X.Y.Z.W dirección ip de esa cámara y la leo. o bueno tu problema es que quieres la foto de lo que detectó. Si eso lo envias rápido tu crees que arduino va a leer mas rápido que lo que tardes en decirle via como sea a RasPi que hay movimiento? Y que lo haga Raspi?

Creo que sigo sin entender cual es la manera mas efectiva de enviar información desde arduino a la raspberry, estoy bastante enredado con el tema. Estaba pensando que en este caso no necesito enviar información análoga, solo 1 o 0 y la foto, por lo que a veces me cuestiono el hecho de usar un arduino. Lo estoy usando solo porque me recomendaron que lo usara por un tema de escalabilidad ya que la raspi tiene pocos gpios...Creo que me estoy complicando solo en este proyecto..

Saludos

No entiendo que es lo que no comprendes?

1ro yo no soy el dueño de la verdad. Asi que mi palabra no es la única alternativa. Yo leería siempre las cámaras con el Raspberry PI. Porque son cámaras IP (tu afirmas eso). Eso lo comprendes? Bien si yo puedo leer las cámaras con el RasPi, necesito saber cuando tomar una foto. Cuando el nodo Arduino me diga, toma la foto porque detectó movimiento, entonces lo hago. Asi cada cual hace lo que mejor puede hacer.

christianalatorre: Hola buen día, una pregunta (perdon que no te pueda ayudar), como te estas comunicando con arduino desde raspberry??, lo que pasa es que mi equipo y yo estamos haciendo un proyecto para la uni, es de domótica utilizando arduino con raspberry y toda la comunicación hasta ahora es serial, tenemos el problema de que: enviamos ordenes a arduino a traves de una pagina web montada en un servidor de raspberry pero es comunicacion serial, al momento de hacerlo DEBE ESTAR ABIERTO EL MONITOR SERIAL porque si no esta no funciona nada y no sabemos porque pasa esto, le preguntamos al profesor y nos dijo que es que por el metodo de comunicación que no esta bien por que es con el cable que trae el arduino, dice que tenemos que hacer ahí algo para que sea correcta la comunicación, ahora adquirimos un ethernet shield para esto pero no sabemos como enviarle ordenes a arduino a traves del ethernet, alguien de aquí sabra como o que es lo estamos haciendo mal, dea antemano gracias.

por si algo se les ofrece o me pudieran ayudar mi correo es christianalatorre@outlook.es

gracias.

http://forum.arduino.cc/index.php?topic=329502.0

surbyte: No entiendo que es lo que no comprendes?

1ro yo no soy el dueño de la verdad. Asi que mi palabra no es la única alternativa. Yo leería siempre las cámaras con el Raspberry PI. Porque son cámaras IP (tu afirmas eso). Eso lo comprendes? Bien si yo puedo leer las cámaras con el RasPi, necesito saber cuando tomar una foto. Cuando el nodo Arduino me diga, toma la foto porque detectó movimiento, entonces lo hago. Asi cada cual hace lo que mejor puede hacer.

Claro eso lo entiendo a la perfección, tengo las camaras (IP) leídas con la raspi y cuando el arduino mande el nodo la raspi tome la fotografía. Lo que aún sigo sin entender es como la raspi va a saber de que sensor esta tomando la foto si tengo mas de un sensor de movimiento y una luz. Te explico mas o menos como quiero que funcione esto a nivel global para que me puedas entender mejor...cuando se detecte movimiento se enciende la luz, la raspi toma la foto y la envía junto con un timestamp y el numero del sensor que se activó para guardarlo en una base de datos. ¿Porque es importante saber de donde viene la activación? porque pretendo enviar esa info a un dispositivo android indicando que sensor fue el que se activó (el numero)...mas que nada por eso. Además si necesito agregar mas sensores quiero poder hacerlo desde el mismo arduino, sin cambiar nada mas en el sistema...Gracias!

Saludos

Yo no usaría Arduino en los Nodos a menos que uses camaras OVXXXX lo que obliga a ponerles un caja… mucho trabajo.
Asi que para usar camaras Ip montaría RasPi en cada nodo, tomo los datos envio lo que tengo que enviar por TCP/IP y asunto arreglado. Prendo, apago luces, y todo lo demas
No veo como integrar Camara IP y arduino si no uso un PCduino2 por ejemplo o un YUN y los veo caros considerando un RasPi frente a estas opciones.
Un Uno no puede leer una camara IP. Supongamos que pudiera. Le debes agregar soporte LAN ya sea shield W5100 o ENC28J60 o ESP8266 empieza a sumar… luego que haces? Donde almacenas un fotograma. En una SD. Bien… cuanto tiempo te lleva, supongamos que no importe. y luego lo envias.
No se muy complicado.

Como digo ultimamente. Es mi visión. No quiere decir que sea palabra santa.
Justamente estoy haciendo un aplicación con un BBB (BeagleBone Black) que lee una camara IP y que prende apaga y controla un porton remoto.
Lo van a manejar unos empleados de una empresa que estan a 150 mts y no consideré arduino. Todo lo hago con el BBB. Lee la camara IP usando OpenCV en menos de 10 lineas, me lo envía via TCP/IP y yo lo veo usando streaming apuntando a la direccion del BBB. También controlo el porton (tu làmpara) de igual modo.
Fàcil, y simple y por menos dinero que arduino+LAN/WIFI.

Claro, el uso de arduino era mas que nada por un tema de escalabilidad, ya que podría conectarle más sensores en vez de conectarlo a la raspi que tiene muy pocos. Y si suponemos que dejamos de lado la cámara por ahora, me podrías dar una noción de como envío la información del sensor pir y la luz a través de una trama? Perdón pero tengo pocos conocimientos de programación en general y menos de redes de comunicación. Gracias

Saludos

Las camaras ip graban en sd, el problema mayor es saber como acceder a los datos. Salvo pocas son formatos propietarios y no te dan acceso a los datos si no es por su software. Y todo lo que pides lo hace el mismo soft, por analisisi de imagenes. En el soft de almacenamiento lo configuras para que al detectar movimiento, objeto extraño, objeto faltante y mas opciones dispare una salida, envie mail, y mil opciones mas.

Y te digo mas en la Raspi, puedes programar y leer pines i/o como arduino se tratara, tiene comunicacion spi e i2c para expandir (OJO!! todo a 3v3)

Las camaras de marcas como FOSCAN tienen un SDK Software Development Kit, cito esta porque estoy trabajando con esta puntualmente. Y viene con ejemplos en C++ y VBasic para comunicarse.

Eso es facilmente porteable a RasPi o BBB, como dije antes. OLvidé lo que dijo Maxid, pero ahi termina de cerrar todo. Si la Camara detecta el movimiento y guarda en la SD, tambien puedes configurarla para que te envie un email con la imagen del movimento que eso lo reciben con el RasPI y ya tienes la imagen. Conclusión no tienes que hacer nada mas que encender la lámpara controlada por el arduino. Un Nano con algun elemento WIFI o LAN mas un RELE y ya esta.

Muchas gracias por las respuestas, en especial a surbyte, se agradece.

Saludos