Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Ik bestel een mooi relaisbord, maar er was geen ArduinoIDE-instructie, alleen Raspberry Pi e.o. Ik ontdek hoe ik het met Arduino kan gebruiken en wil het delen zodat u die tijd kunt besparen.
Origineel RaspberryPi-voorbeeld:
wiki.52pi.com/index.php/DockerPi_4_Channel_Relay_SKU:_EP-0099
Leuk is dat je tot 4 planken kunt stapelen. U kunt dus max. 4 x 4 = 16 relais op één I2C bus.
Er zijn ook enkele nadelen:
- kleine eindjes, passen niet op 1 mm2 draad
- u kunt de bedrading van de onderste connectoren niet wijzigen wanneer ze op elkaar zijn gestapeld
Maar nog steeds handige borden.
Stap 1: Bedrading
Op de foto's zie je de bedrading.
De 52Pi heeft zowel 5V (voor relais) als 3.3V (I2C chip) nodig.
Dus 5 draden nodig:
- GND naar GND
- 5 V tot 5 V
- 3,3 V tot 3,3 V
- SLA naar SLA
- SCL naar SCL
Als u een Arduino UNO of een andere 5 V gebruikt, let dan op de max 3, 6 V van de I2C-controller! Gebruik weerstanden of anders om de 5 V uit de Arduino PIN's te verlagen!
Stap 2: Eenvoudig codevoorbeeld:
/* Arduino IDE (ESP) voorbeeld voor I2C relaisboard.
* Door Laurens Korste www.boktorrobotica.nl * gratis te gebruiken. */ #include // for I2C communication void setup() { // deze regel niet voor UNO of boards met speciale I2C-pinnen Wire.begin (D1, D2); // sluit je aan bij de i2c-bus met SDA=D1 en SCL=D2 voor NodeMCU } void loop() { Wire.beginTransmission (0x10);/* begin met verzenden naar I2C-adres 10 (om ook te veranderen in 11, 12 of 13) */ Wire.schrijf (0x01); /* keuze relais 1 (van de 4) aan boord 10 (ook 0x02, 0x03, 0x04) */ Wire.write(0xFF); /* zet relais 1 op board 10 op ON. alle getallen > 0 doen dit */ Wire.endTransmission(); /* stop met zenden */ vertraging (3000); Wire.beginTransmission (0x10); /* */ Draad.schrijven (0x01); Draad.schrijven (0x00); /* zet relais 1 op board 10 op OFF */ Wire.endTransmission(); /* stop met zenden */ vertraging (3000); }
Stap 3: Testcode met vier relais
/* schets door Laurens Korste voor Arduino (ESP / NodeMCU)
* Maar andere boards doen het ook * www.boktorrobotica.nl * In deze skeych worden alle 4 relais geactiveerd en gedeactiveerd */ #include // for I2C communication void setup() { Serial.begin(115200); // begin serieel voor debug (9600 voor UNO) Wire.begin (D1, D2); // join i2c bus met SDA=D1 en SCL=D2 van NodeMCU geen noodzaak voor UNO} void loop() { for (int i=1; i<=4; i++){ Wire.beginTransmission (0x10); // begin met apparaatadres Wire.write(i); // kies het relais Wire.write (0xFF); // stuur de "aan" code FF (elke telling van 01 tot FF is voldoende) Wire.endTransmission(); // stop met het verzenden van Serial.write (i); Serial.println(" aan "); vertraging (1000); Wire.beginTransmission (0x10); // begin met apparaatadres Wire.write(i); Draad.schrijven (0x00); // Stuur de "off" code Wire.endTransmission(); // stop met het verzenden van Serial.write (i); Serieel.println(" uit "); vertraging (1000); } }
Stap 4: Mijn project
Ik heb een code geschreven om mijn 3 rolluiken te bedienen. Dit kan met schakelaars maar ook met de BLYNK app, zie afbeelding.
- Een korte druk op de knop zal een rolluik beginnen te bewegen (of stoppen wanneer het beweegt).
- Eén keer lang indrukken en alle drie de luiken openen (of sluiten of stoppen).
- Dubbele druk: de luiken gaan naar de stand "gaten".
Zoals op de foto te zien is, heb ik ook een temperatuur- en lichtsensor geïntegreerd.
Nu alles op een goede basisprint en netjes in een doos.
Stap 5: Bel een relais met één commando
Het is handig als u slechts één commando nodig heeft om een relais te activeren of deactiveren. Hieronder staat een functie die dit kan (met lowbyte en highbyte).
/* schets door Laurens Korste voor Arduino (ESP / NodeMCU) met I2C relaisbord * Maar andere borden zullen ook doen * href= https://www.boktorrobotica.nl; www.boktorrobotica.nl * https://wiki.52pi.com/index.php/DockerPi_4_Channel_Relay_SKU:_EP-0099; www.boktorrobotica.nl * In deze schets wordt het relais geactiveerd door één aanroep; *// #include // voor I2C communicatie // Relais declaratie. 4 PCB's Per PCB 4 relais mogelijk In deze schets zijn slechts twee PCB's // PCB's en relais samengevoegd zodat ze met één commando kunnen worden aangeroepen const byte PutOn=0xFF; //commando om const byte PutOff=0x00; //commando om uit te schakelen const woord Relay1bord1=0x1001; //u kunt de namen bijvoorbeeld wijzigen Relay1 const woord Relay2bord1=0x1002; //u kunt de namen bijvoorbeeld wijzigen Relay2 const woord Relay3bord1=0x1003; //u kunt de namen bijvoorbeeld wijzigen Relay3 const woord Relay4bord1=0x1004; //u kunt de namen bijvoorbeeld veranderen Relay4 const woord Relay1bord2=0x1101; //u kunt de namen bijvoorbeeld veranderen Relay5 const w ord Relay2bord2=0x1102; // je kunt de namen bijvoorbeeld veranderen Relay6 const word Relay3bord2=0x1103; // je kunt de namen bijvoorbeeld veranderen Relay7 const word Relay4bord2=0x1104; // je kunt de namen bijvoorbeeld veranderen Relay8 const word Relay1bord3=0x1201; // je kunt de namen bijvoorbeeld veranderen Relay9 const word Relay2bord4=0x1302; // je kunt de namen bijvoorbeeld veranderen Relay14 void setup () { Serial.begin (115200); // begin serieel voor debug (9600 voor UNO) Wire.begin (D1, D2); // sluit je aan bij de i2c-bus met SDA = D1 en SCL = D2 van NodeMCU, geen UNO nodig } void loop () {// om relais 4 op PCB 2 te schakelen op RelayActie (Relay4bord2, PutOn); vertraging (1000); // om relais 4 op PCB 2 uit te schakelen RelayActie (Relay4bord2, PutOff); vertraging (1000); } void RelayActie(word Relay, byte OnOrOff){ Wire.beginTransmission (highByte(Relay)); Wire.write (lowByte (Relay)); Wire.write (AanOfUit); Wire.endTransmission(); }