Control rejillas motorizadas Aire acondicionado

Pues bueno, como estoy muy ilusionado con el proyecto, he empezado a trastear con una librería para arduino que implementa el protocolo MODBUS, la librería se llama ModbusMaster.

Como ya comenté existe una herramienta llamada ModScan32 que hace las veces de dispositivo master en una red modbus, puedes escribir y leer registros. Pues bien, el mismo desarrollador de esta herramienta tiene una aplicación llamada ModSim32, que hace las veces de dispositivo esclavo en una red modbus.

Pues con todo esto, partiendo de un ejemplo de uso de la librería ModbusMaster, y usando ModSim32, tengo un pequeño sketch que copia datos de un registro y los escribe en otro. Os pego el sketch, en el también he incluido algunas definiciones de algunos registros que a priori podrían ser los de mi A/C.

#include <ModbusMaster.h>

//COILS OUTPUTS
#define FAN-MODE 0
#define DEHUMM-MODE 1
#define HEAT-MODE 2
#define COOL-MODE 3
#define AUTO-MODE 4
#define MODE-LOCK 5
#define ON/OFF 7
#define HIGH-FAN 8
#define MEDIUM-FAN 9
#define LOW-FAN 10
#define BREEZE-FAN 11
#define AUTO-FAN 15
//DISCRETE INPUTS
//HOLDING REGISTER
//INPUT REGISTERS
#define TS 3
#define T1 4
#define T2 5
#define T2B 6
#define T3 7
#define POWER 12

ModbusMaster node;


void setup() {

  Serial.begin(9600);
  node.begin(2, Serial);

}

void loop() {
  static uint32_t i;
  uint8_t j, result;
  uint16_t data[6];

  i++;

  // set word 0 of TX buffer to least-significant word of counter (bits 15..0)
  node.setTransmitBuffer(0, lowWord(i));

  // set word 1 of TX buffer to most-significant word of counter (bits 31..16)
  node.setTransmitBuffer(1, highWord(i));

  // slave: write TX buffer to (2) 16-bit registers starting at register 0
  result = node.writeMultipleRegisters(0, 2);

  // slave: read (6) 16-bit registers starting at register 2 to RX buffer
  result = node.readHoldingRegisters(2, 6);

  // do something with data if read is successful
  if (result == node.ku8MBSuccess)
  {
    for (j = 0; j < 6; j++)
    {
      data[j] = node.getResponseBuffer(j);
    }
  }
  node.setTransmitBuffer(0, data[0]);
  node.writeMultipleRegisters(9, 1);
  node.writeSingleRegister(10, data[1]);
}

Espero que a alguien le pueda servir de ayuda, estoy deseando que me llegue el conversor USB a RS485 para meterselo al A/C, y espero que mi A/C hable modbus :smiley:

Había pensado grabar un pequeño vídeo, pero solo se vería como cambian los registros del programa ModSim32, algo poco impresionante :smiley: