Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Hallo
Goede groeten..!!
Ik (Somanshu Choudhary) namens Dcube tech ventures die relais gaan besturen via het I2C-protocol met behulp van Arduino nano en MCP23008.
Stap 1: Overzicht
- Het MCP23X08-apparaat biedt 8-bits, algemene, parallelle I/O-uitbreiding voor I2C-bus- of SPI-toepassingen.
- De MCP23X08 bestaat uit meerdere 8-bit configuratieregisters voor invoer, uitvoer en polariteitselectie. De systeemmaster kan de I/O's als input of output activeren door de I/O-configuratiebits te schrijven. De gegevens voor elke in- of uitgang worden bijgehouden in het bijbehorende In- of Uitgangsregister. De polariteit van het Input Port register kan worden omgekeerd met het Polarity Inversion register. Alle registers kunnen worden gelezen door de systeemmaster.
- DATASHEET LINK:
Stap 2: Wat je nodig hebt / Links
1. Arduino Nano-LINK:
2. Shield voor Arduino Nano LINK:
3. USB-kabel Type A naar Micro Type B 6 voet lang
4. I²C-kabel LINK:
5. Acht SPDT I²C gestuurde relais
6. Adapter LINK:
Stap 3: Schakelschema
Stap 4: Programmeren - I
- In deze code gebruik ik het functieprogrammeerparadigma
- Ik heb verschillende tabbladen gebruikt voor het definiëren van functies en het aanroepen van functies
CODE ONDER TAB q:
// Eenvoudige functie aanroepcode
#include void setup()
{
// I2C-adres van de MCP23008
#define MCP_ADDR 0x20
// Word lid van I2C Bus als master
Draad.begin();
// Start seriële communicatie en stel baudrate in
Serieel.begin(9600);
// Begin de verzending met het gegeven apparaat op de I2C-bus
Wire.beginTransmission (MCP_ADDR);
// Selecteer IODIR – I/O DIRECTION REGISTER register
Draad.schrijven (0x00);
// Selecteer de gewenste bewerking (uitvoer)
Draad.schrijven (0x00);
// Selecteer CONFIGURATIE register
Draad.schrijven (0x05);
// Selecteer de gewenste bewerking
Draad.schrijven (0x0E);
// eind transmissie
Wire.endTransmission();
}
lege lus()
{
a1_on();
vertraging (1000);
a1_off();
vertraging (1000);
a2_on();
vertraging (1000);
a2_off();
vertraging (1000);
a3_on();
vertraging (1000);
a3_off();
vertraging (1000);
a4_on();
vertraging (1000);
a4_off();
vertraging (1000);
a5_on();
vertraging (1000);
a5_off();
vertraging (1000);
a6_on();
vertraging (1000);
a6_off();
vertraging (1000);
a7_on();
vertraging (1000);
a7_off();
vertraging (1000);
a8_on();
vertraging (1000);
a8_off();
}
CODE ONDER TAB q1:
// Deze code is om relais 1 aan boord aan en uit te zetten
ongeldig a1_on() {
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x01);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
ongeldig a1_off()
{
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x00);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
CODE ONDER TAB q2:
// Deze code is om relais 2 aan boord aan en uit te zetten
ongeldig a2_on() {
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x02);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
ongeldig a2_off()
{
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x00);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
CODE ONDER TAB q3:// Deze code is voor aan en uit relais 3 aan boord
ongeldig a3_on()
{
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Wire.write(0x04);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
ongeldig a3_off()
{
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x00);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
Stap 5: Programmeren - II
CODE ONDER TAB q4:
// Deze code is om relais 4 aan boord aan en uit te zetten
ongeldig a4_on()
{
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x08);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
ongeldig a4_off()
{
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x00);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
CODE ONDER TAB q5:
// Deze code is om relais 5 aan boord aan en uit te zetten
ongeldig a5_on()
{
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x10);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
ongeldig a5_off()
{
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x00);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
CODE ONDER TAB q6:// Deze code is voor aan en uit relais 6 aan boord
ongeldig a6_on()
{
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x20);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
ongeldig a6_off()
{
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x00);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
CODE ONDER TAB q7:// Deze code is voor aan en uit relais 7 aan boord
ongeldig a7_on() {
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x40);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
ongeldig a7_off()
{
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x00);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
CODE ONDER TAB q8:// Deze code is voor aan en uit relais 8 aan boord
ongeldig a8_on() {
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x80);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
ongeldig a8_off()
{
// Begin met verzenden
Wire.beginTransmission (MCP_ADDR);
Draad.schrijven (0x09);
Draad.schrijven (0x00);
vertraging (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Uitvoer naar het scherm
Serial.print("GPIO-waarde:");
Serial.println (GPIO, BIN);
}
Stap 6: Video
Voor verdere katernen Bezoek gerust onze site:
www.dcubetechnologies.com