Skip to content

Argus Controller

Argus Controller

Argus Monitor supports Open Hardware circuits to use additional custom temperature sensors and fan control channels within the program.

We call these devices Argus Controller.

Introduction

We have made an example to demonstrate such a device with the help of the very common Arduino Nano or Arduino Uno platform. The example demonstrates the creation and set-up of temperature channels and fan control channels. We show here a hardware solution for the popular Dallas DS18B20 temperature sensors and for connecting 4-pin PWM controlled fans. With additional circuitry and software changes, you could control 3-pin voltage controlled fans also or use different temperature sensors.

You can adapt the hardware to your needs, built it around a completely different microcontroller, change the number of temperature and fan control channels and so on. Each hardware device can have up to 6 temperature channels and 6 fan control channels. Argus Monitor will detect and use any such device as long as the serial communication protocol (see below) is respected.

If the 'Argus Controller hardware support' option in Settings/Stability is enabled, Argus Monitor will probe the specified COM-Ports for Argus Controller devices. It will use the first 4 devices (if specified and available) as additional HW Monitor sources within the application.

Activating an Argus Controller
Activating an Argus Controller in Argus Monitor settings

Hardware example (Arduino)

The following pictures show the schematics and built-up for a 4 temperature and 2 fan control channels device using an Arduino Nano or Uno.

The temperature sensors are connected to Arduino pins A0..A3. Using these analog pins for the DS18B20 is not necessary, you can use any other digital pin like D6 as well. For each DS18B20 channel, one pull-up resistor (R5, 4,7k) is needed.

Fan control for the 4-pin PWM fan is done with resistor R1 (4,7k) and transistor T1 (BC547, any compatible NPN type will do). For safely reading the tachometer signal from the fan, the resistors R2..R4 (2x 10k, 1x 6,2k) are used. The first fan uses Arduino pins D2 and D9. If you need a second fan, double the parts and connect the second fan circuit to Arduino pins D3 and D10.

Argus Controller schematics example
Argus Controller, schematics example with Arduino Nano, 1 temperature channel, 1 fan control channel

Argus Controller Wiring example
Argus Controller, Wiring example with Arduino Nano, 1 temperature channel, 1 fan control channel

Argus Controller prototype 1
Argus Controller, prototype set-up with Arduino Nano

Argus Controller prototype 2
Argus Controller, prototype set-up with Arduino Nano

Motherboard header connector
Motherboard Fan 4-Pin header connector

Software example (Arduino)

You can download our example for the Arduino Nano or Uno here.

This sketch works out of the box without modifications for up to 4 temperature channels and up to 2 fan control channels.

In the following we will talk about the program as a sketch. A sketch is the name that Arduino uses for a program. It's the unit of code that is uploaded to and run on an Arduino board.

At the beginning of the sketch, there is a part where you can set up the number of temperature and fan control channels and change the pins for the temperature sensors if needed.

If you want to run more than one device, give them different device IDs. Argus Monitor can manage up to 4 different devices.

// start user configuration
//=========================================================
#define DEVICE_ID 1    // Argus Monitor can manage up to 4 different devices
#define TEMPSENSOR_COUNT 4
#define PIN_TEMPSENSOR_1 A0
#define PIN_TEMPSENSOR_2 A1
#define PIN_TEMPSENSOR_3 A2
#define PIN_TEMPSENSOR_4 A3
#define FAN_COUNT 2
// #define DEBUG_OUTPUT
//=========================================================
// end user configuration

Unzip the example and load the sketch ArgusController.ino into the Arduino IDE.

Compile it, make sure the Arduino board and the serial port for your Arduino Nano or Uno are setup correctly within the IDE, then press upload button to program the sketch into the hardware.

After that the device is usable in Argus Monitor (at least Argus Monitor version 5.0.4 is required for this).

ArgusController Arduino IDE
Arduino IDE with the compiled sketch

If you want to adapt the sketch for other usages or more channels, you should be familiar with the Arduino environment and have some C/C++ knowledge.

Note: If you want to change or extend the fan control pins, you need some knowledge of the AVR ATmega328 controller on the Arduino platform because only certain pins are available for PWM creation.

Communication Protocol

Here are the details about the protocol of the serial communication between Argus Monitor and the Argus Controller hardware.

As long as this protocol is respected, you can develop and use a completely different hardware than our Arduino example together with Argus Monitor.

Command Argus Monitor request Argus Controller answer
ProbeDevice1 AA 02 01 crc8 C5 <byteCnt> 01 <DEVICE_ID> <TEMP_COUNT> <FAN_COUNT> crc8
GetTemp AA 02 20 crc8 C5 <byteCnt> 20 <tempCount> temp0_H temp0_L temp1_H temp1_L temp2_H temp2_L temp3_H temp3_L crc8
GetFanRpm AA 02 30 crc8 C5 <byteCnt> 30 <fanCount> rpm0_H rpm0_L rpm1_H rpm1_L crc8
GetFanPwm AA 03 31 <channel> crc8 C5 <byteCnt> 31 <channel> <pwm> crc8
SetFanPwm AA 04 32 <channel> <pwm> crc8 C5 <byteCnt> 32/FF crc8 (answer byte2: 32 = ok, FF = error)
EEReadByte AA 04 40 <addrH> <addrL> crc8 C5 <byteCnt> 40 <VALUE_COUNT> <val> crc8
EEWriteByte AA 05 41 <addrH> <addrL> <value> crc8 C5 <byteCnt> 41/FF crc8 (answer byte2: 41 = ok, FF = error)

1 Only for the ProbeDevice command, Argus Monitor expects the answer from the device within 200 msec.

This has to do with internal initialization constraints during start-up within the HW monitoring modules of Argus Monitor.

If you write your own software for an Argus Controller device, please make sure you answer the ProbeDevice query fast enough.

The second byte is always the byte count of the remaining message bytes to come (the counting starts at the third byte).

Data formats

  • Temperature: int16_t, Celsius, scaled by 10
  • RPM: uint16_t
  • PWM: uint8_t [range 0..100 %]

Communication parameters

  • 57600 Baud, 8N1

CRC8 calculation

uint8_t crc8(uint8_t crc, uint8_t data)
{
    crc = crc ^ data;
    for (uint8_t i = 0; i < 8; i++) {
        if (crc & 0x01)
            crc = (crc >> 1) ^ 0x8C;
        else
            crc >>= 1;
    }
    return crc;
}

Arduino Nano Guide

Safe connection of a 4-pin 12V Fan to an Arduino