.
Veámos otro ejemplo, esta vez una ALARMA. Para ello disponemos de 2 placas Arduino con sus respectivas tarjetas CAN, un sensor magnético para detectar si la puerta/ventana esta abierta y un altavoz.
El Arduino + Altavoz emula la estación BASE, la cual recibe la información del resto de dispostivos de la red con información como temperaturas, estado de luces, estado de puertas/ventanas, ...
El segundo Arduino con el sensor emula uno de los dispositivos que podría haber en cada habitación, el cual podría controlar luces, registrar temperatura, registrar estado puertas/ventanas de la habitación,....
El dispositivo que dispone del sensor de ventana/puerta abierta, manda el mensaje con ID=0x100 y usa el primer byte de los 8 disponibles en un mensaje CAN, para enviar el estado del sensor.
La estación BASE (Arduino con altavoz), monitoriza el bus, saca por puerto serie todos los mensajes leidos y activa la alarma. Para activar la alarma, la ID recibida deber ser 0x100 y en el primer byte (byte 0) se encuentra el estado del sensor ("1"=CERRADO "0"=ABIERTO).
La velocidad del bus es 1 Mbps !!!
El sensor funciona igual que un interruptor, cuando esta enfrentado a la parte magnética está "cerrado" y cuando esta fuera del alcance esta "abierto". Para facilitar el montaje, he usado uno de los pines como salida de alimentación (pin 7=GND), pero podría ir conectado directamente a masa.
Para el pin de entrada del sensor (pin 6), se activa la resistencia de PULL UP que dispone el micro, por lo que cuando esta "abierto" la entrada lee HIGH y cuando esta "cerrado" LOW.
El altavoz va conectado al pin 5 y a masa.
A continuación se expone el código, que se puede ver lo sencillo que se trata de disponer una red con varios dispositivos gracias al bus CAN con la librería desarrollada:
A continuación, el video funcionado:
Veámos otro ejemplo, esta vez una ALARMA. Para ello disponemos de 2 placas Arduino con sus respectivas tarjetas CAN, un sensor magnético para detectar si la puerta/ventana esta abierta y un altavoz.
(click para ampliar)
El Arduino + Altavoz emula la estación BASE, la cual recibe la información del resto de dispostivos de la red con información como temperaturas, estado de luces, estado de puertas/ventanas, ...
El segundo Arduino con el sensor emula uno de los dispositivos que podría haber en cada habitación, el cual podría controlar luces, registrar temperatura, registrar estado puertas/ventanas de la habitación,....
El dispositivo que dispone del sensor de ventana/puerta abierta, manda el mensaje con ID=0x100 y usa el primer byte de los 8 disponibles en un mensaje CAN, para enviar el estado del sensor.
La estación BASE (Arduino con altavoz), monitoriza el bus, saca por puerto serie todos los mensajes leidos y activa la alarma. Para activar la alarma, la ID recibida deber ser 0x100 y en el primer byte (byte 0) se encuentra el estado del sensor ("1"=CERRADO "0"=ABIERTO).
La velocidad del bus es 1 Mbps !!!
El sensor funciona igual que un interruptor, cuando esta enfrentado a la parte magnética está "cerrado" y cuando esta fuera del alcance esta "abierto". Para facilitar el montaje, he usado uno de los pines como salida de alimentación (pin 7=GND), pero podría ir conectado directamente a masa.
Para el pin de entrada del sensor (pin 6), se activa la resistencia de PULL UP que dispone el micro, por lo que cuando esta "abierto" la entrada lee HIGH y cuando esta "cerrado" LOW.
El altavoz va conectado al pin 5 y a masa.
A continuación se expone el código, que se puede ver lo sencillo que se trata de disponer una red con varios dispositivos gracias al bus CAN con la librería desarrollada:
// ---------------------------------------------- // SECUDUINO // http://secuduino.blogspot.com/ // By Igor Real // 26/Feb/2011 // ---------------------------------------------- #include <can.h> void setup() { Serial.begin(115200); Serial.println("Empezamos..."); CAN.begin(1); //Pin 7 OUTPUT (Sensor) pinMode(7,OUTPUT); digitalWrite(7,LOW); //Pin 6 INPUT and R pull up ON (Sensor) pinMode(6,INPUT); digitalWrite(6,HIGH); } void loop() { CAN_TxMsg.id=0x200; //Device with speaker sends ID=200, Device with sensor sends=ID=100 CAN_TxMsg.header.rtr=0; CAN_TxMsg.header.length=8; CAN_TxMsg.data[0]=digitalRead(6); CAN_TxMsg.data[1]=0x00; CAN_TxMsg.data[2]=0x00; CAN_TxMsg.data[3]=0x00; CAN_TxMsg.data[4]=0x00; CAN_TxMsg.data[5]=0x00; CAN_TxMsg.data[6]=0x00; CAN_TxMsg.data[7]=0x00; CAN.send(&CAN_TxMsg); if (CAN.CheckNew()) { CAN.ReadFromDevice(&CAN_RxMsg); //Print message via Serial Port Serial.print(CAN_RxMsg.id,HEX); Serial.print(" => "); Serial.print(CAN_RxMsg.data[0],HEX); Serial.print(" - "); Serial.print(CAN_RxMsg.data[1],HEX); Serial.print(" - "); Serial.print(CAN_RxMsg.data[2],HEX); Serial.print(" - "); Serial.print(CAN_RxMsg.data[3],HEX); Serial.print(" - "); Serial.print(CAN_RxMsg.data[4],HEX); Serial.print(" - "); Serial.print(CAN_RxMsg.data[5],HEX); Serial.print(" - "); Serial.print(CAN_RxMsg.data[6],HEX); Serial.print(" - "); Serial.println(CAN_RxMsg.data[7],HEX); //Byte 0 => Info from the other board with the sensor status if (CAN_RxMsg.id=0x100 && CAN_RxMsg.data[0]) { analogWrite(5,200); }else { analogWrite(5,0); } } delay(400); }
A continuación, el video funcionado:
No hay comentarios:
Publicar un comentario