8 канальная релейная нода на DIN рейку
Добавлено: 23 окт 2019, 17:00
Релейная нода на 8 каналов в корпусе на DIN рейку. Радио NRF24.
Реле подключены на выводы 0,2,3,4,5,6,7,8
Скетч почти стандартный (с сайта) Чтобы задействовать вывод TX0, отключен serial:
Некоторые компоненты:
Корпус К-06-09 / 105x60x86, на DIN-рейку
Реле электромагнитное HJR-3FF-5VDC-S-Z / 5В DC
Микрошлейф: FFCA-2.54-8-100
Разъем: FFC/FPC DS1020-08RT1D
Транзисторы: BC547 sot23
Разводка плат несколько сыровата, короче не заморачивался, хотелось поскорее сделать. Нижнюю плату лучше бы переразвести как двухстороннюю.
Реле подключены на выводы 0,2,3,4,5,6,7,8
Скетч почти стандартный (с сайта) Чтобы задействовать вывод TX0, отключен serial:
Код: Выделить всё
#define MY_DISABLED_SERIAL
// Enable and select radio type attached
#define MY_RADIO_RF24
//#define MY_RADIO_NRF5_ESB
//#define MY_RADIO_RFM69
//#define MY_RADIO_RFM95
// Enable repeater functionality for this node
#define MY_REPEATER_FEATURE
#include <MySensors.h>
#define RELAY_PIN 1 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
#define NUMBER_OF_RELAYS 8 // Total number of attached relays
#define RELAY_ON 1 // GPIO value to write to turn on attached relay
#define RELAY_OFF 0 // GPIO value to write to turn off attached relay
void before()
{
for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
// Then set relay pins in output mode
pinMode(pin, OUTPUT);
// Set relay to last known state (using eeprom storage)
digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
}
}
void setup()
{
}
void presentation()
{
// Send the sketch version information to the gateway and Controller
sendSketchInfo("Relay", "1.0");
for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
// Register all sensors to gw (they will be created as child devices)
present(sensor, S_BINARY);
}
}
void loop()
{
}
void receive(const MyMessage &message)
{
// We only expect one type of message from controller. But we better check anyway.
if (message.type==V_STATUS) {
// Change relay state
digitalWrite(message.sensor-1+RELAY_PIN, message.getBool()?RELAY_ON:RELAY_OFF);
// Store state in eeprom
saveState(message.sensor, message.getBool());
// Write some debug info
Serial.print("Incoming change for sensor:");
Serial.print(message.sensor);
Serial.print(", New status: ");
Serial.println(message.getBool());
}
}
Корпус К-06-09 / 105x60x86, на DIN-рейку
Реле электромагнитное HJR-3FF-5VDC-S-Z / 5В DC
Микрошлейф: FFCA-2.54-8-100
Разъем: FFC/FPC DS1020-08RT1D
Транзисторы: BC547 sot23
Разводка плат несколько сыровата, короче не заморачивался, хотелось поскорее сделать. Нижнюю плату лучше бы переразвести как двухстороннюю.