martes, 21 de enero de 2014

Comunicaciones en Domótica

Arduino Mega 2560 Ethernet y Arduino Atmega 328.
Comunicación por Bluetood , Radiofrecuencia y Ethernet..











Planificación.




- Diseño y montaje (Arduino, Canbus, actuador, sensores),



Arduino Atmega 328.




Micro Atamega 328
Resistecias 10k y 330 ohm.
Cristal 16Mhz.
Condensadores 22pF.






CANBUS mco2551 y mcp2515



MCP 2551 y MCP2515
Resistencia bus 120 ohm
Resistencia led 330 ohm
Resistencia Reset 10k
 





Actuador IRF540





Mosfet de potencia IRF540 Vc 100Vmax - 30 Amax - 300Wmax
Resistencias 4k7.
Bipolares BD 547 NPN y BD 558 PNP
Diodo 4007



Sensores Ultrasonido y NTC.




Ultasonido HC-05
NTC 200k/10k.
Resistencia 72k.





El proyecto se compone por tres partes, modulo inalámbrico, módulo central de proceso de datos y entorno gráfico.

Módulo inalámbrico esta compuesto por un mricrocontrolador Atmega 328, modulo bluetooth HC-06, Kit radio Emisor 433Mhz  y acelerómetro analogico. Se puede configurar la comunicación por un conmutador. Las luces indican la configuración de la comunicacion y despues la orientación del acelerometro. El modulo Bluetooth envia los datos al PC.




















              Paca Arduino Atmega 328















Modulo Bluetooth HC-06














Acelerometo MMA7361


















 Kit Emisor 433Mhz











Modulo Central de control y proceso

Modulo de control de datos y envío de datos Ethernet y una pantalla Noki 3310, este modulo recibe los datos de la placa sensores, donde esta el modulo ultrasonido y el sensor de temperatura, estos datos son procesados por la unidad central y los envía vía Ethernet y a la pantalla. Los datos son interpretados en 4 actuadores, motor DC, motor PAP, motores micro servo.El motor PAP esta configurado para que de un angulo de jiro de 180 grados dependiendo de la distancia leida por el ultrasonido entre 0 y 50 cm.El motor Dc puede estar comprendido entre un máximo de 100V con un consumo de 30A max.Los motores micro servo actúan en medida de la inclinación x,y, leida por el acelerómetro, estos datos son recibidos en el kit receptor 433Mhz. 

Diagrama de estados

 

Proyecto terminado

















Esquema.

A )  Arduino mega 2560

 

B)  Arduino Ethernet Shield 

 -   Controladora de Ethernet, envía los datos.






C) Placa de sensores.

 - Sensor de distancia  Ultrasonico hc-sr04,  los datos son interpretados en el motor 

PAP.

                                                     

- Sensor de temperatura (NTC), los datos son interpretados en el motor DC.

                                                         

D) Placa Driver de Motor de DC controlada por PWM.

  

E) Tablón de madera

 -     45cm x 16cm x 2cm.

 -     Color negro  

F) Motor de CD

G) RF 315/433 MHz Transmitter. Transmite los datos a los servos.


H) Nokia LCD 3310, refleja los datos en pantalla. 

Se encarga de recibir los datos de los sensores y de recibir los datos de actuadores.

       -   Distancia


       -   Servo X


       -   Servo Y


       -   Potencia Motor DC.



 j) Placa Driver Controladora de motor PAP. 


K) Micro Servo 9g SG90 180 grados. 



****** PID ******

Justo debajo de la letra A se ha implantado un led testido del PID(PWM) aplicado sobre dicho led, el PID ayuda a controlar la potencia aplicada al led según la lectura del puerto analógino (A0), este da una valor entre 0 y 1023 lo cual hemos establecido un SetPoint a partir de 600, pudiendo controlar asi la potencia manteniendo la estable a partir de ese franco, es díficil aplicar y explicar el PID a un led, pero si tomamos como ejemplo el acelerador de un coche podriamos comparar que el motor es el led, el puerto analógico es el acelerador y SetPoint es la velocidad establecida.

P - El primer bloque de control (proporcional) consiste en el producto entre la señal de error y la constante proporcional.
I   - El segundo bloque de control (integral) tiene como propósito disminuir y eliminar el error en estado estacionario, provocado por el modo proporcional. El control integral actúa cuando hay una desviación entre la variable y el punto de consigna, integrando esta desviación en el tiempo y sumándola a la acción proporcional.
D - El tercer bloque de control (Derivativo) considera la tendencia del error y permite una repercusión rápida de la variable después de presentarse una perturbación en el proceso.

A continuacion expongo un tipico error del PID "Derivative Kick" que puede ocasionar algunos problemas.
Esta modificación que presento a continuación, cambiará levemente el
termino derivativo con el objetivo de eliminar el fenómeno “Derivative Kick”.
Este fenómeno, se produce por variaciones rápidas en la señal de referencia r(t),
que se magnifican por la acción derivativa y se transforman en componentes
transitorios de gran amplitud en la señal de control.
La imagen de arriba ilustra el problema. Siendo el error = setpoint - entrada, cualquier cambio en la onsigna, causa un cambio instantáneo en el error; la derivada de este cambio es infinito (en la práctica, dt no es cero, igualmente, el valor termina siendo muy grande). Esto produce un sobrepico muy alto en la
salida, que podemos corregir de una manera muy sencilla.

La solución:

Resulta que la derivada del error es igual a la derivada negativa de la entrada, salvo cuando el setpoint está cambiando, esto acaba siendo una solución perfecta. En lugar de añadir (Kd * error derivado), restamos (Kd * valor de entrada derivado). Esto se conoce como el uso de "Derivada de la medición".

A continuación expongo unas imágenes del comportamiento en el franco de subida y en el de bajada del PID sobre el led.




Grafica Procesing

La parte del entorno gráfico esta compuesta por el programa hecho en Procesing y con la ayuda de la tarjeta bluetooth integrada en PC, este programa podría ejecutarse en cualquier dispositivo android.Los datos leído por el puerto serie son representados de forma gráfica, también son presentados en pantalla como enteros de forma que podemos ver exactamente los grados que se están interpretando en la gráfica, posee de unas luces amarillas que se sitúan en la acción emprendida por el modulo inalambrico antes referido. Los datos pueden ser almacenados en un archivo de texto que el programa mismo genera al iniciarse, este archivo sera sobrescrito cada vez que se inicie el programa, antes de cerrar la aplicación de pulsarse la letra "g" de guardado, con el fin de que el archivo no de errores a la hora de ejecutarse. 



Los datos x,y son guardados en archivo de texto que sera sobrescrito cada vez que se inicie el programa, el programa creara un archivo llamado "acelerometro.txt" en el se guardaran los datos, este archivo estara situado en la misma carpeta dopnde se encuentre el programa **.ino




Control de eficiencia de Arduino Mega 2560 Placa de control y el módulo inalámbrico.

En el módulo inalámbrico se ha disminuido el consumo alimentando las placas auxiliares con pines digitales del Atmega, asi se pueden desactiva las placas cuando en el propio programas se necesite, y también se han aumentados los valores de las resistencias de los led de dirección. El Atmega consume de 40mA a 80 Am a 16Mhz por lo tanto se puede permitir alimentar algunas placas de poco consumo como las conectadas.
Por otro lado tengo un problema para hacer esto mismo  con el Arduino Mega 2560 ya que el consumo de todo bloque es de 700 mA.
El MC33269 es capaz de proporcionarnos hasta 800mA lo cual estaríamos rozando los limetes del consumo. Por ello se podria conectar las placas auxiliares a unos reguladores conmutados, controlados por unos transistores Mosfet SC-70 20 V 320 mA, estos estaran controlados por los pines digitales y se conectaran en solo cuando se necesiten. La pantalla se puede conectar a un detector de presencia. 

Se ha provisto de algunos controles de eficiencia en la programación, el Arduino bloqueara el programa cuando el motor este a la maxima potencia con el fin de minorar el concumo, esto se ha comprobado con una prueba con un motor
 DC 5V.3500mW consumo Placa sin bloqueo. 
700mA.4500mW cunsumo Placa con bloqueo. 900mA
El control PID puede controlar tambien la potencia aplicada al Mosfet IRF540 podiendo hacer un estabilizador de potencia, no entregando mas que tan solo la que se necesita, para ello hemos puesto el valor '10' en la desviacion y el valor 1 en el proporción, para asi hacerlo mas estable y minimizar el error.


Códigos utilizados en la programación de los microcontroladores y la interfaz gráfica.


-------------------------Código Arduino Mega 2560----------------------------


#include <SoftwareServo.h>
#include <SPI.h>
#include <Ethernet.h>
#include <VirtualWire.h>
#include <arduino.h>
#include <Ultrasonic.h>
#include <LCD5110_Basic.h>
#include <PID_v1.h>
#define pinM1 30
#define pinM2 32
#define pinM3 34
#define pinM4 36

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,6);
EthernetServer server(80);
EthernetClient client;
SoftwareServo servoX;
SoftwareServo servoY;
LCD5110 myGLCD(7,8,9,11,12);
extern uint8_t SmallFont[];
extern uint8_t foto_familia[];
extern uint8_t proyecto[];
extern uint8_t alarma[];
extern uint8_t arduino_logo[];
double Setpoint, Input, Output;
PID ledPID(&Input, &Output, &Setpoint,1,10,0.1, DIRECT);
int xser=90,yser=90,valor=0,dutty=0;
int distance=0, potencia=0;
int distan(void);
String s; 
char texto[4];
int ent[4];
const int trigger=22;
const int echo=24;
int Speed=1200;
int dis=0,dis2=0;
int angulo=0;
int pos[8]={B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};


void setup()
{
    pinMode(pinM1, OUTPUT);
    pinMode(pinM2, OUTPUT);
    pinMode(pinM3, OUTPUT);
    pinMode(pinM4, OUTPUT);
    Serial.begin(9600);
    Ethernet.begin(mac, ip);
    server.begin();
    myGLCD.InitLCD();
    myGLCD.setFont(SmallFont);
    START();
    pinMode(trigger,OUTPUT);
    pinMode(echo,INPUT);
    servoX.attach(5);
    servoX.setMaximumPulse(2300);
    servoY.attach(6);
    servoY.setMaximumPulse(2300);
    vw_set_rx_pin(3);
    vw_set_ptt_inverted(true);
    vw_setup(2000);  
    vw_rx_start();       
    Ethernet.begin(mac, ip);
    Setpoint = 600;
    ledPID.SetMode(AUTOMATIC);
    server.begin();
    delay(500);
}

void loop()
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
    if (vw_get_message(buf, &buflen))
    {         
            xser=map(int(buf[2]),129,255,0,180);
            yser=map(int(buf[0]),0,127,0,180);
            SoftwareServo::refresh();
            servoX.write(xser); 
            servoY.write(yser);  
  }   
    valor=analogRead(0);
    Input=valor;
    ledPID.Compute();
    analogWrite(4,Output);
    if(valor>800)valor=800;
    if(valor<450)valor=450;
    dutty=map(valor,450,800,0,254);
    potencia=map(valor,450,800,0,100);
    if(potencia<12)dutty=0;
    analogWrite(2,dutty);    
    distan();
    dis=map(distance,1,55,0,255); 
    if(angulo<255&&dis>angulo)delante();
    if(angulo>0&&dis<angulo)atras();
    LCDsensor();
    client = server.available();
    if(client)Web();
}


void delante()
{
  for(int i = 0; i < 8; i++)
  {
    posicion(i);
    delayMicroseconds(Speed);
  }
  angulo++;
}

void atras()
{
  for(int i = 7; i >= 0; i--)
  {
    posicion(i);
    delayMicroseconds(Speed);
  }
  angulo--;
}

void posicion(int out)
{
  digitalWrite(pinM1, bitRead(pos[out], 0));
  digitalWrite(pinM2, bitRead(pos[out], 1));
  digitalWrite(pinM3, bitRead(pos[out], 2));
  digitalWrite(pinM4, bitRead(pos[out], 3));
}

int distan(){
 digitalWrite(trigger,LOW);
 delayMicroseconds(5);
 digitalWrite(trigger,HIGH);
 delayMicroseconds(10);
 digitalWrite(trigger,LOW);
 distance=pulseIn(echo,HIGH);
 distance=distance*0.0001657*100;
}

void START(void){
  myGLCD.drawBitmap(0, 0, arduino_logo, 84, 48);
  delay(2000);
  myGLCD.drawBitmap(0, 0, foto_familia, 84, 48);
  delay(4000);
  myGLCD.clrScr();
  myGLCD.drawBitmap(0, 0, proyecto, 84, 48);
  delay(3000);
  myGLCD.clrScr();
  
  
}
void LCDsensor(){
    ent[0]=distance;
    ent[1]=xser;
    ent[2]=yser;
    ent[3]=potencia;
    ent[4]=int(Output);
    myGLCD.print("**************",LEFT, 0);
    myGLCD.print("Medida =    cm",LEFT, 9); 
    myGLCD.print("AnguloX=    º ",LEFT, 18);
    myGLCD.print("AnguloY=    º ",LEFT, 27);
    myGLCD.print("Motor  =     %",LEFT, 36);
    myGLCD.print("LedPID =      ",LEFT, 45);
      for(int i=0,y=9;i<=4;i++,y+=9){
    s=String(ent[i]);
    s.toCharArray(texto,6);
    myGLCD.print(texto,54,y);
      }
    if(potencia>99){
      myGLCD.drawBitmap( 0, 0, alarma, 84,48);
      while(potencia>99){
        valor=analogRead(0);
        if(valor>800)valor=800;
        if(valor<450)valor=450;
        potencia=map(valor,450,800,0,100);
         myGLCD.invert(true);
        delay(50);
        myGLCD.invert(false);
        delay(200);
      }
   }
}

void Web(void){
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<head>");
          client.println("<title>ARDUINO PAGINA WEB</title>");
          client.println("</head>");
          client.println("<body>");
          client.println("<font color=red><h1>CONTROL DE LA PLACA</h1></font>");
          client.println();
          client.println();
          client.print("<h3> - Distancia = ");
          client.print(distance);
          client.print(" Cm");
          client.println("</h3>");
          client.print("<h3> - Angulo (X) = ");
          client.print(xser);
          client.print(" grados");
          client.println("</h3>");
          client.print("<h3> - Angulo (Y) = ");
          client.print(yser);
          client.print(" grados");
          client.println("</h3>");
          client.print("<h3> - Motor(pwm)= ");
          client.print(potencia);
          client.print(" %");
          client.println("</h3>");
          client.print("<h3> - Led(PID)= ");
          client.print(int(Output));
          client.print(" PWM");
          client.println("</h3>");
          client.println("</body>"); 
          client.println("</html>");                
          client.stop();
}

    
////////////////////////////////////////////////////Declaraciónes de las variables tipo array unidimensionales necesarias para ////////////////////////////////////////////////////las imagenes cargadas en la pantalla nokia


Logo Arduino:
/ / Tamaño de la imagen: 84x48 píxeles 
/ / Uso de memoria : 504 bytes

# Include  <avr/pgmspace.h>

uint8_t arduino_logo [] PROGMEM ={ 
0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 , 
0x00 ,  0x80 ,  0xC0 ,  0xE0 ,  0xF0 ,  0xF8 ,  0xF8 , 
0xFC ,  0xFC , 0xFE ,  0xFE ,  0x7F ,  0x7F ,  0x7F ,
0x3F ,  0x3F ,  0x3F ,  0x3F ,  0x3F ,  0x7F ,  0x7F ,
0x7F ,  0xFE ,  0xFE ,  0xFE ,0xFC ,  0xFC ,  0xF8 ,
0xF0 ,  0xF0 ,  0xE0 ,  0xC0 ,  0x80 ,  0x00 ,  0x00 ,
0x00 ,  0x00 ,  0x00 ,  0x80 ,  0xC0 ,  0xE0 ,   
0xF0 ,  0xF0 ,  0xF8 ,  0xFC ,  0xFC ,  0xFE ,  0xFE ,
0xFE ,  0x7F ,  0x7F ,  0x7F ,  0x3F ,  0x3F ,  0x3F , 
0x3F ,  0x7F ,  0x7F ,  0x7F ,  0x7F ,  0xFE ,  0xFE ,
0xFC ,  0xFC ,0xF8 ,  0xF8 ,  0xF0 ,  0xE0 ,  0xC0 ,
0x86 ,  0x06 ,  0x06 ,  0x00 , 0x00 ,  0x00 ,  0x00 ,  
0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0xC0 ,  
0xFC ,  0xFF ,  0xFF ,  0xFF ,  0xFF ,  0xFF , 0x1F ,
0x07 ,  0x01 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x80 ,
0x80 ,  0x80 ,  0x80 ,  0x80 ,  0x80 ,  0x80 ,  0x80 ,
0x80 ,   0x80 ,  0x80 ,  0x00 ,  0x00 ,  0x01 ,  0x01 ,
0x03 ,  0x0F ,  0x1F ,  0x3F ,  0xFF ,  0xFF ,  0xFF , 
0xFE ,  0xFC ,  0xFE , 0xFF ,  0xFF ,  0xFF ,  0x3F , 
0x1F ,  0x0F ,  0x03 ,  0x01 ,  0x01 ,  0x00 ,  0x00 ,
0x80 ,  0x80 ,  0x80 ,  0x80 ,  0xF8 ,  0xF8 ,  0xF8 , 
0xF8 ,  0x80 ,  0x80 ,  0x80 ,  0x00 ,  0x00 ,  0x00 , 
0x00 ,  0x01 ,  0x07 ,  0x1F ,  0xFF ,  0xFF ,  0xFF , 
0xFF ,  0xFF ,  0xFC ,  0xE0 ,  0x00 ,  0x00 ,  0x00 ,
0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x0F , 
0x7F ,  0xFF , 0xFF ,  0xFF ,  0xFF ,  0xFF ,  0xF0 ,
0xC0 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x07 ,
0x07 ,  0x07 ,  0x07 ,  0x07 , 0x07 ,  0x07 ,  0x07 , 
0x07 ,  0x07 ,  0x03 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,
0x80 ,  0xC0 ,  0xF0 ,  0xF8 ,  0xFE ,  0xFF ,0xFF , 
0xFF ,  0xFF ,  0xFF ,  0xFF ,  0xFF ,  0xFE ,  0xF8 ,
0xF0 ,  0xC0 ,  0x80 ,  0x00 ,  0x00 ,  0x00 ,  0x00 , 
0x07 , 0x07 ,  0x07 ,  0x07 ,  0x3F ,  0x3F ,  0x3F , 
0x3F ,  0x07 ,  0x07 ,  0x07 ,  0x00 ,  0x00 ,  0x00 ,
0x00 ,  0x00 ,  0xC0 , 0xF0 ,  0xFF ,  0xFF ,  0xFF ,
0xFF ,  0xFF ,  0x7F ,  0x0F ,  0x00 ,  0x00 ,  0x00 ,
0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,0x00 ,  0x00 , 
0x00 ,  0x00 ,  0x03 ,  0x07 ,  0x0F ,  0x1F ,  0x3F , 
0x7F ,  0x7F ,  0xFF ,  0xFE ,  0xFE ,  0xFC ,  0xFC ,  
0xF8 ,  0xF8 ,  0xF8 ,  0xF8 ,  0xF8 ,  0xF8 ,  0xF8 , 
0xFC ,  0xFC ,  0xFC ,  0xFE ,  0xFF ,  0x7F ,  0x7F ,
0x3F ,  0x3F ,  0x1F ,  0x0F ,  0x07 ,  0x03 ,  0x01 ,
0x00 ,  0x00 ,  0x00 ,  0x01 ,  0x03 ,  0x07 ,  0x0F ,
0x1F ,  0x3F ,  0x3F ,  0x7F ,  0x7F ,  0xFF ,  0xFE , 
0xFC ,  0xFC ,  0xFC ,  0xF8 ,  0xF8 ,  0xF8 ,  0xF8 , 
0xF8 ,  0xF8 ,  0xF8 ,  0xFC ,  0xFC ,  0xFE ,  0xFE , 
0xFF ,  0x7F ,  0x7F ,  0x3F ,  0x1F ,  0x0F ,  0x07 , 
0x03 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 , 
0x00 , 0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,
0x00 ,  0x00 ,  0x00 ,  0x00 ,  0xC0 ,  0xC0 ,  0xC0 ,
0x80 ,  0x00 ,  0x00 , 0x00 ,  0x00 ,  0xC1 ,  0xC1 , 
0xC1 ,  0xC1 ,  0xC1 ,  0xC1 ,  0x81 ,  0x81 ,  0x01 ,
0x01 ,  0xC1 ,  0xC1 ,  0xC0 ,  0xC0 , 0xC0 ,  0xC0 ,
0x80 ,  0x00 ,  0x00 ,  0x00 ,  0x80 ,  0xC0 ,  0xC0 ,
0x00 ,  0x00 ,  0x00 ,  0xC0 ,  0xC0 ,  0x80 ,  0x00 , 
0x00 ,  0xC0 ,  0xC0 ,  0xC0 ,  0xC0 ,  0xC0 ,  0xC0 , 
0xC1 ,  0xC1 ,  0x01 ,  0x01 ,  0xC1 ,  0xC1 ,  0xC1 ,
0x01 ,  0x01 , 0x01 ,  0xC1 ,  0xC1 ,  0x01 ,  0x00 ,
0x00 ,  0x80 ,  0xC0 ,  0xC0 ,  0xC0 ,  0xC0 ,  0x80 ,
0x80 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 , 
0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,
0x00 ,  0xC0 ,  0xF8 ,  0xFF ,  0x3F ,  0x3B ,0x3F , 
0x7F ,  0xFE ,  0xF0 ,  0x00 ,  0x00 ,  0xFF ,  0xFF ,
0xFF ,  0x1C ,  0x3C ,  0xFF ,  0xFF ,  0xC7 ,  0x00 ,
0x00 ,  0xFF ,  0xFF ,  0xFF ,  0xE0 ,  0xE0 ,  0xF1 ,
0x7F ,  0x3F ,  0x1F ,  0x00 ,  0x3F ,  0x7F ,  0xFF ,
0xE0 ,  0xC0 ,  0xE0 , 0xFF ,  0x7F ,  0x3F ,  0x00 ,
0x00 ,  0xE0 ,  0xE0 ,  0xFF ,  0xFF ,  0xFF ,  0xE0 ,
0xE0 ,  0xC0 ,  0x00 ,  0x00 ,  0xFF ,0xFF ,  0x07 ,
0x0F ,  0x3E ,  0xFC ,  0xFF ,  0xFF ,  0x00 ,  0x00 , 
0x3F ,  0x7F ,  0xFF ,  0xE0 ,  0xC0 ,  0xE1 ,  0x7F ,
0x7F ,  0x0E ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 ,  0x00 , 
};


Logo fotografia:
//  84x48 pixels

#include <avr/pgmspace.h>

uint8_t foto_familia[] PROGMEM= {0x00, 0x00, 0x00, 0x00, 
0x00, 0xC0, 0xE0, 0xE0, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x3F,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF4, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0,
0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0, 0x00, 0x00, 0xC0,
0xF8, 0xFC, 0x3F, 0x1F, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x7F, 0x0F, 0x03, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0F,
0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x1F, 0x7F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x00, 0x10,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xFF, 0xFF, 0xFF,
0xFF, 0x83, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
0x00, 0x80, 0x40, 0x33, 0x37, 0x7F, 0x7F, 0xFF, 0xFC, 0xFC,
0x8C, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03,
0x01, 0x08, 0x3E, 0x3A, 0x3B, 0x07, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xC0,
0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF,
0x00, 0x01, 0x1C, 0x04, 0x1C, 0x1C, 0x04, 0x05, 0x00, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x61, 0x1D, 0x05,
0x39, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xE4, 0xC0, 0x18,
0xA0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07,
0x07, 0x07, 0x58, 0xE7, 0xFF, 0xFD, 0x7A, 0x7C, 0xFF, 0x7F,
0xDF, 0xFE, 0xC0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFE, 0xD0, 0x83, 0x0D, 0x1D, 0xD3, 0xC0, 0x80, 0x80,
0x00, 0x40, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xA3, 0x5F,
0x3F, 0x00, 0x00, 0x03, 0x0E, 0x3F, 0x73, 0xDF, 0xDE, 0xFC,
0xFC, 0xFC, 0xFC, 0x80, 0x90, 0xC0, 0xE0, 0xE0, 0x30, 0x10,
0x00, 0x02, 0x01, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
0xE0, 0xC0, 0xC1, 0x06, 0x2E, 0x3E, 0x66, 0x50, 0x40, 0x50,
0x40, 0x30, 0x98, 0xC8, 0xE0, 0xF0, 0xF8, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xF7, 0xF7, 0xD7, 0x07, 0x0F, 0x1F, 0x1E,
0x3E, 0x3F, 0x7F, 0x6F, 0x47, 0x07, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x1F,
0x3F, 0x3F, 0x7F, 0x7F, 0x41, 0x70, 0x60, 0x60, 0x60, 0xF8 };



Logo temperatura alarma:
//  84x48 pixels

#include <avr/pgmspace.h>

uint8_t alarma[] PROGMEM= {0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
0xB0, 0x00, 0x00, 0x30, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE0, 0x30, 0x30, 0xC0, 0x00, 0x00, 0x10, 0x10, 0xF0, 0xF0, 0x10,
0x00, 0xF0, 0x90, 0x90, 0x90, 0x10, 0x00, 0xF0, 0x70, 0xE0, 0x80,
0x00, 0x00, 0xF0, 0x00, 0x00, 0xE0, 0x30, 0x10, 0x10, 0x10, 0x00, 
0x00, 0xF0, 0x00, 0x00, 0xE0, 0x30, 0x10, 0x10, 0x30, 0xE0, 0x00,
0x00, 0xF0, 0x70, 0xE0, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x00, 0x00, 0x1B,
0x1F, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0F, 0x03, 0x02, 0x02, 0x03,
0x0E, 0x08, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x0C, 0x08,
0x08, 0x08, 0x00, 0x0F, 0x00, 0x00, 0x01, 0x07, 0x0E, 0x0F, 0x00,
0x00, 0x07, 0x0C, 0x08, 0x08, 0x08, 0x04, 0x00, 0x0F, 0x00, 0x00,
0x07, 0x0C, 0x08, 0x08, 0x0C, 0x07, 0x00, 0x00, 0x0F, 0x00, 0x00,
0x01, 0x07, 0x0E, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x04, 0x04, 0xFC, 0xFC, 0x04, 0x04, 0x00, 0xFC, 0x24, 0x24,
0x24, 0x04, 0x00, 0xFC, 0x1C, 0x3C, 0xE0, 0x80, 0xE0, 0x38, 0x0C,
0xFC, 0x00, 0x00, 0x44, 0x44, 0x44, 0x3C, 0x10, 0x00, 0xFC, 0x64,
0x24, 0x24, 0x04, 0x00, 0xFC, 0x34, 0x24, 0x64, 0xDC, 0x00, 0x00,
0xC0, 0xF8, 0x8C, 0x8C, 0xF0, 0x80, 0x00, 0x04, 0x04, 0xFC, 0x04,
0x04, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC,
0x2C, 0x24, 0xE4, 0xDC, 0x00, 0x00, 0xC0, 0xF8, 0x8C, 0x9C, 0xF0,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x03, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x02, 0x00, 0x03,
0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x02, 0x00,
0x03, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00,
0x00, 0x03, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x03,
0x02, 0x02, 0x03, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03,
0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x03, 0x0F, 0x78, 0xE0, 0x78, 0x0F, 0x03, 0xFF, 0x00, 0x80,
0xF0, 0x3E, 0x23, 0x23, 0x3C, 0xE0, 0x00, 0xC3, 0x7E, 0x1C, 0x7E,
0xE3, 0x81, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x0B, 0x0F, 0x78, 0xE0,
0x78, 0x0F, 0x03, 0xFF, 0x00, 0x80, 0xE0, 0x3C, 0x23, 0x27, 0x3C,
0xE0, 0x00, 0x00, 0x00, 0x00, 0x80, 0xDF, 0x00, 0x00, 0x80, 0xDF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};

Logo Proyecto:
// 84x48 pixels


#include <avr/pgmspace.h>

uint8_t proyecto[] PROGMEM= {0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80,
0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0x80, 0x00,
0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80,
0x80, 0x00, 0x00, 0x80, 0x80, 0xC0, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0x80, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x0C, 0x05, 0x07,
0x00, 0x1F, 0x1F, 0x04, 0x0C, 0x1F, 0x13, 0x0F, 0x1F, 0x10,
0x10, 0x10, 0x1F, 0x0F, 0x00, 0x01, 0x07, 0x1E, 0x0F, 0x01,
0x00, 0x1F, 0x14, 0x14, 0x14, 0x00, 0x0F, 0x1F, 0x10, 0x10,
0x10, 0x10, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x04, 0x1F, 0x11,
0x10, 0x10, 0x10, 0x1F, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0x10,
0x30, 0x60, 0xE0, 0x00, 0xF0, 0x90, 0x90, 0x90, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x07, 0x06, 0x06, 0x06, 0x03, 0x01, 0x00, 0x03, 0x06,
0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0x94, 0x94, 0x00, 0xFC, 0xFC, 0x80, 0x80,
0x80, 0xFC, 0xFC, 0x94, 0x94, 0x84, 0x00, 0x78, 0xFC, 0x86,
0x84, 0x00, 0x04, 0x04, 0xFC, 0xFC, 0x04, 0x04, 0x00, 0xFC,
0x14, 0x34, 0xFC, 0x00, 0x78, 0xFC, 0x84, 0x86, 0x86, 0xCC,
0x7C, 0x00, 0x00, 0xFC, 0x0C, 0x18, 0x70, 0xFC, 0x00, 0x00,
0xFC, 0x00, 0x10, 0x7C, 0xCC, 0x86, 0x86, 0x84, 0x00, 0xE0,
0x78, 0x2C, 0x78, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };


-----------------------Código Arduino Atmega 328-------------------------


#include <VirtualWire.h>
#include <SoftwareSerial.h>
#include<arduino.h>
#define RxD 10
#define TxD 11
#define VCblu 5
#define VCace 9
#define VCrad 13
#define KEY 4
#define Mode 12
#define N 8 
#define S 7
#define I 2
#define D 3
#define data 6
SoftwareSerial BTSerial(RxD, TxD);
int y=0,x=0,x1=0,y1=0,mode;
char y2,x2;

void setup()
{
  pinMode(VCrad,OUTPUT);
  pinMode(VCblu,OUTPUT);
  pinMode(VCace,OUTPUT);
  pinMode(KEY,OUTPUT);
  pinMode(N,OUTPUT); 
  pinMode(S,OUTPUT); 
  pinMode(I,OUTPUT); 
  pinMode(D,OUTPUT); 
  digitalWrite(VCrad,LOW);
  digitalWrite(VCblu,LOW);
  digitalWrite(VCace,HIGH);
  digitalWrite(KEY, LOW);   
  Modo();
  Serial.begin(9600);
}

void loop()
{
  x=analogRead(1);
  y=analogRead(2);
  if(y<=185)y=185;
  if(x<=150)x=150;
  if(y>=500)y=500;
  if(x>=470)x=470;
  y1=map(y,185,500,0,127);
  x1=map(x,150,470,129,255);
  led(); 
  if(mode==0)sendblu();
  y2=char(y1);
  x2=char(x1);
  if(mode==1)sendRad();
}
//////////////////////....funcion...
void sendblu(void){
  delay(100);
  BTSerial.write(y1);
  delay(10);  
  BTSerial.write(x1);  
}
void Modo(void){
  if(digitalRead(Mode)==HIGH){
    mode=1;
    digitalWrite(VCrad,HIGH);
    delay(300);
    vw_set_tx_pin(data);
    vw_set_ptt_inverted(true); 
    vw_setup(2000);
    onRad();
  }else {  
    mode=0;
    digitalWrite(VCblu,HIGH);
    delay(300);
    BTSerial.begin(9600);
    BTSerial.flush();
    onBlu();
  }
}

void sendRad(void){
  char radio[3]={char(y2),',',char(x2)};
  vw_send((uint8_t *)radio,3);
  vw_wait_tx(); 
}

void led(void){
    if(y1<40){
    digitalWrite(S,HIGH);
    }else digitalWrite(S,LOW);
  if(y1>85){
    digitalWrite(N,HIGH);
    }else digitalWrite(N,LOW);
  if(x1<175){
    digitalWrite(I,HIGH);
    }else digitalWrite(I,LOW);
  if(x1>215){
    digitalWrite(D,HIGH);
    }else digitalWrite(D,LOW);
}

void onBlu(void){
  int t1=10;
  for(int t=200;t>0;t-=t1){
    digitalWrite(N,HIGH);
    delay(t);
    digitalWrite(N,LOW);
    digitalWrite(I,HIGH);
    delay(t);
    digitalWrite(I,LOW);
    digitalWrite(S,HIGH);
    delay(t);
    digitalWrite(S,LOW);
    digitalWrite(D,HIGH);
    delay(t);
    digitalWrite(D,LOW);
    if(t==10)t1=1;
  }
}

void onRad(void){
  int t1=10;
  for(int t=200;t>0;t-=t1){
    digitalWrite(N,HIGH);
    delay(t);
    digitalWrite(N,LOW);
    digitalWrite(D,HIGH);
    delay(t);
    digitalWrite(D,LOW);
    digitalWrite(S,HIGH);
    delay(t);
    digitalWrite(S,LOW);
    digitalWrite(I,HIGH);
    delay(t);
    digitalWrite(I,LOW);
    if(t==10)t1=1;
  }
}


-------------------Código programa Procesing--------------------



import processing.serial.*;
import javax.swing.*;
Serial puerto;
PImage grafica,direccion,eje;
int x=136,y=136,car=128,x1=176,y1=176,y2=39,ycop=176,xcop=176,h=0,Xelli=85;
PrintWriter archivo;

void setup(){
size(900,550); 
println(Serial.list());
puerto = new Serial(this,"COM8",9600);
puerto.clear();
grafica = loadImage("grafic.png");
direccion = loadImage("direc.bmp");
eje = loadImage("ejes.bmp");
image(grafica,0,0);
image(direccion,460,0);
image(eje,460,205);
archivo = createWriter ("acelerometro.txt");
image(grafica,0,0);
}

void draw(){
   
  image(direccion,460,0);
  image(eje,460,205);
  stroke(#FF0307);
  strokeWeight(2);
  strokeCap(ROUND);
  line(y2,xcop,y2+1,x1);
  stroke(#2905FF);
  strokeWeight(2);
  strokeCap(ROUND);
  line(y2,ycop,y2+1,y1);
  if(y2>420){
  y2=39;
  image(grafica,0,0);
  }
  if(puerto.available()>0){
    xcop=x1;
    ycop=y1;
    car= puerto.readChar();
    println(car);
    if(car<128){
      x=car;
      x1=int(map(x,0,127,36,315));
    }
    if(car>128){
      y=car;
      y1=int(map(y,129,255,36,315));
    }
    y2+=2;
  }
  if(x1>207){fill(255,255,0);ellipse(640,Xelli,15,15);}
  if(x1<149){fill(255,255,0);ellipse(640,Xelli+25,15,15);}
  if(y1>207){fill(255,255,0);ellipse(640,Xelli+50,15,15);}
  if(y1<149){fill(255,255,0);ellipse(640,Xelli+75,15,15);} 
  textSize(20);                      
  fill(50);                          
  text(int(map(x1,315,36,0,180)),650,278);
  text(int(map(y1,315,36,0,180)),650,358);
  sendarchivo();
 }

 /////////////////funciones

void sendarchivo(){
  archivo.print(" servo X - ");
  archivo.print(int(map(x1,315,36,0,180)));
  archivo.print(",");
  archivo.print(" servo Y - ");
  archivo.println(int(map(y1,315,36,0,180)));
  archivo.flush (); 
}

void keyPressed(){
  if(key=='g')  
  archivo.flush (); 
  archivo.close (); 
}




3 comentarios:

  1. ¿Qué ventaja puede tener el canBus en esta instalación?

    ResponderEliminar
    Respuestas
    1. El canBus está ampliamente extendido como bus de comunicación en el sector industrial por su inmunidad a ruidos y su simplicidad de uso entre otras muchas ventajas.

      Eliminar
  2. Ventajas podría tener mucha, entre las mas importantes, sistema de comunicación mas rápido, desde 40K hasta 1M depende del cableado, seguro y auto corrección de errores y colisión de datos. En un futuro espero implementar el canBus en este proyecto, sería algo interesante, aunque la comunicación mas usual en la domótica es la inalàmbrica. Espero haber resuelto su duda. Estamos a vuestra entera disposición. Saludos. ;)

    ResponderEliminar