Relais op afstand

De i2c bus

Vanuit een ander project heb ik al wat ervaring opgedaan met het gebruiken van de i2c bus; deze bus kan gebruikt worden om extra I/O poorten en sensoren aan te sluiten, zelfs op een redelijke afstand. Volgens de specificaties zou een afstand van 1 meter het maximaal haalbare zijn, maar dit is redelijk flexibel: ik heb succesvol een afstand van ruim 2 meter gebruikt.

Ik heb deze bus gebruikt om vanuit een Arduino Mega een kastje aan te sluiten met daarin twee apparaten:
  • een MCP23017 IC (16-poorts I/O expander) met daarop aangesloten een 4-voudig relais.
  • een BMP280 sensorboard voor meting van luchtdruk en temperatuur.
Voor de aansluiting met de Arduino gebruik ik 4-voudige platte telefoonkabel en RJ-12 stekkers.

Op deze manier kan ik op eenvoudige wijze meer I/O aansluiten. In de Arduino code heb ik dit geregeld door de Adafruit mcp library te laden, mits er een compiler flag wordt gezet:
#if defined(MCP_present)
#include <Wire.h>
#include "Adafruit_MCP23017.h"  // define type of MCP expander
Adafruit_MCP23017 mcp;
#endif
Deze library zorgt ervoor dat je de poorten van de expander met normale 'DigitalRead' en 'DigitalWrite' commando's kan gebruiken:
readButton = mcp.digitalRead(ButtonPins[buttonId] - 100);
Ik gebruik hierbij de conventie dat alle poorten van de expander een nummer krijgen boven de 100, zodat ik simpelweg kan testen op het nummer, en de 'echte' poort kan extraheren door er 100 vanaf te trekken.
In de definitie van de relais staan de poorten dan ook gewoon naast de ingebouwde poorten van de Arduino:
const byte RelayPins[] = {5, 100, 23, 25, 101, 102, 103};
Dit zijn dus poort 0 tot en met 3 van de MCP23017 expander, aangesloten op poort 1 tot en met 4 van het relaisbordje.

Reacties

Populaire posts van deze blog

Automatisering in Home Assistant

Automatische gordijnen