Relé 8x - ovládání i2c
Relé 8x - ovládání i2c
Spojením těchto dvou komponent vznikne blok relé ovládaný přes I2C, čtyři dráty, které nezmenšuje počet IO pinů arduina.
Piny z modulu ovládání byly odstraněny. Deska modulu ovládání byla nasazena na piny relé a zapájena. Ještě je nutno propojit GND piny desky relé s deskou ovládání a GND relé.
Protože jsem nechtěl, aby deska ovládání přečuhovala přes obrys desky relé. Bohužel to přineslo opačné řazení relé, ale to lze obsloužit programově.
Piny z modulu ovládání byly odstraněny. Deska modulu ovládání byla nasazena na piny relé a zapájena. Ještě je nutno propojit GND piny desky relé s deskou ovládání a GND relé.
Protože jsem nechtěl, aby deska ovládání přečuhovala přes obrys desky relé. Bohužel to přineslo opačné řazení relé, ale to lze obsloužit programově.
Re: Relé 8x - ovládání i2c
Ahoj, prosimtě, chci se zeptat... Mam stejnou releovou desku, bez I2C.
Zjištuju, že deska má obracenou logiku. tzn, pokud je vystup arduina aktivní, tak mi relé odepne a obraceně....
Zkrátka aktivace relé se provádí hodnotou LOW.
Chci se zeptat, jak nejjednodušeji otočit logiku vystupů? Abych mohl psát program ve smyslu HIGH=sepnutí relé (popřípadě True). ??
Výstupy zatím nemám nadefinované, jde mi spiš o tu logiku aby seděla a nemusel bych celej program obracet.
Díky za pomoc
Zjištuju, že deska má obracenou logiku. tzn, pokud je vystup arduina aktivní, tak mi relé odepne a obraceně....
Zkrátka aktivace relé se provádí hodnotou LOW.
Chci se zeptat, jak nejjednodušeji otočit logiku vystupů? Abych mohl psát program ve smyslu HIGH=sepnutí relé (popřípadě True). ??
Výstupy zatím nemám nadefinované, jde mi spiš o tu logiku aby seděla a nemusel bych celej program obracet.
Díky za pomoc
Re: Relé 8x - ovládání i2c
Deska je tak konstruovaná. Buď připojit mezi desku a Arduino invertor, nebo to ošetřit programově. Prostě si vytvořit proměnné, kterým budeš přidělovat hodnotu výstupu a nakonec v nějaké funkci fyzicky zapneš/vypneš výstupy, ale s obrácenou logikou
Kód: Vybrat vše
bool Vystup1;
bool Vystup2;
void loop(){
Vystup1 = true;
Vystup2 = false;
Vystupy();
}
void Vystupy(){
digitalWrite(PIN, !Vystup1);
digitalWrite(PIN, !Vystup2);
}
Re: Relé 8x - ovládání i2c
Já jsem to řešil takto;
Jako první všechna relé vypnul, pak jsem jenom testoval funkci jednotlivých relé.
Ota
Kód: Vybrat vše
/**
* This demo code demonstrate all functionnalities of the PCF8574 library.
*
* PCF8574 pins map :
* 0: led
* 1: led
* 2: led
* 3: button + pull-up resistor
*/
/* Dependencies */
#include <Wire.h> // Required for I2C communication
#include "PCF8574.h" // Required for PCF8574
#define R1 7 //RELÉ 1
#define R2 6 //RELÉ 2
#define R3 5 //RELÉ 3
#define R4 4 //RELÉ 4
#define R5 3 //RELÉ 5
#define R6 2 //RELÉ 6
#define R7 1 //RELÉ 7
#define R8 0 //RELÉ 8
/** PCF8574 instance */
PCF8574 expander;
/** setup() */
void setup() {
/* Setup serial for debug */
Serial.begin(9600);
/* Start I2C bus and PCF8574 instance */
expander.begin(0x38); DESKA RELÉ 8x
/* Setup some PCF8574 pins for demo */
expander.pinMode(0, OUTPUT);
expander.pinMode(1, OUTPUT);
expander.pinMode(2, OUTPUT);
expander.pinMode(3, OUTPUT);
expander.pinMode(4, OUTPUT);
expander.pinMode(5, OUTPUT);
expander.pinMode(6, OUTPUT);
expander.pinMode(7, OUTPUT);
expander.set(); // All RELE OFF
delay(2000);
expander.digitalWrite(R1, LOW); // Turn off led 1 // toto je jenom pokus, abych věděl jestli reagují relé podle čísel.
delay(2000);
expander.digitalWrite(R2,LOW); // Turn off led 1
delay(2000);
expander.digitalWrite(R3, LOW); // Turn off led 1
delay(2000);
expander.digitalWrite(R4, LOW); // Turn off led 1
delay(2000);
expander.digitalWrite(R5, LOW); // Turn off led 1
delay(2000);
expander.digitalWrite(R6, LOW); // Turn off led 1
delay(2000);
expander.digitalWrite(R7, LOW); // Turn off led 1
delay(2000);
expander.digitalWrite(R8, LOW); // Turn off led 1
delay(2000);
}
Ota
Re: Relé 8x - ovládání i2c
Mohl bych toto:
digitalWrite(PIN, !Vystup1);
digitalWrite(PIN, !Vystup2);
dat přimo do setupu??
Asi ne, viď? protože proběhne jen jednou
digitalWrite(PIN, !Vystup1);
digitalWrite(PIN, !Vystup2);
dat přimo do setupu??
Asi ne, viď? protože proběhne jen jednou
Re: Relé 8x - ovládání i2c
ohruska píše: ↑11 bře 2018, 22:26Já jsem to řešil takto;Jako první všechna relé vypnul, pak jsem jenom testoval funkci jednotlivých relé.Kód: Vybrat vše
/** * This demo code demonstrate all functionnalities of the PCF8574 library. * * PCF8574 pins map : * 0: led * 1: led * 2: led * 3: button + pull-up resistor */ /* Dependencies */ #include <Wire.h> // Required for I2C communication #include "PCF8574.h" // Required for PCF8574 #define R1 7 //RELÉ 1 #define R2 6 //RELÉ 2 #define R3 5 //RELÉ 3 #define R4 4 //RELÉ 4 #define R5 3 //RELÉ 5 #define R6 2 //RELÉ 6 #define R7 1 //RELÉ 7 #define R8 0 //RELÉ 8 /** PCF8574 instance */ PCF8574 expander; /** setup() */ void setup() { /* Setup serial for debug */ Serial.begin(9600); /* Start I2C bus and PCF8574 instance */ expander.begin(0x38); DESKA RELÉ 8x /* Setup some PCF8574 pins for demo */ expander.pinMode(0, OUTPUT); expander.pinMode(1, OUTPUT); expander.pinMode(2, OUTPUT); expander.pinMode(3, OUTPUT); expander.pinMode(4, OUTPUT); expander.pinMode(5, OUTPUT); expander.pinMode(6, OUTPUT); expander.pinMode(7, OUTPUT); expander.set(); // All RELE OFF delay(2000); expander.digitalWrite(R1, LOW); // Turn off led 1 // toto je jenom pokus, abych věděl jestli reagují relé podle čísel. delay(2000); expander.digitalWrite(R2,LOW); // Turn off led 1 delay(2000); expander.digitalWrite(R3, LOW); // Turn off led 1 delay(2000); expander.digitalWrite(R4, LOW); // Turn off led 1 delay(2000); expander.digitalWrite(R5, LOW); // Turn off led 1 delay(2000); expander.digitalWrite(R6, LOW); // Turn off led 1 delay(2000); expander.digitalWrite(R7, LOW); // Turn off led 1 delay(2000); expander.digitalWrite(R8, LOW); // Turn off led 1 delay(2000); }
Ota
No tohle je na te I2C sběrnici.... Ale ja hlavně nikde nevidim že bys otačel tu logiku. Tzn.- to že signálem LOW se relé sepne (což nechci, chci spínat High). Takže jakto funguje? to nic neotáči ne?
Re: Relé 8x - ovládání i2c
Joo takhle, ty mysliš jako že otáčí to pořadí relé... to je OK. To zrovna nějak neřeším, spiš mi jde o tu logiku spínáníok1vkt píše: ↑11 bře 2018, 22:34ohruska píše: ↑11 bře 2018, 22:26Já jsem to řešil takto;Jako první všechna relé vypnul, pak jsem jenom testoval funkci jednotlivých relé.Kód: Vybrat vše
/** * This demo code demonstrate all functionnalities of the PCF8574 library. * * PCF8574 pins map : * 0: led * 1: led * 2: led * 3: button + pull-up resistor */ /* Dependencies */ #include <Wire.h> // Required for I2C communication #include "PCF8574.h" // Required for PCF8574 #define R1 7 //RELÉ 1 #define R2 6 //RELÉ 2 #define R3 5 //RELÉ 3 #define R4 4 //RELÉ 4 #define R5 3 //RELÉ 5 #define R6 2 //RELÉ 6 #define R7 1 //RELÉ 7 #define R8 0 //RELÉ 8 /** PCF8574 instance */ PCF8574 expander; /** setup() */ void setup() { /* Setup serial for debug */ Serial.begin(9600); /* Start I2C bus and PCF8574 instance */ expander.begin(0x38); DESKA RELÉ 8x /* Setup some PCF8574 pins for demo */ expander.pinMode(0, OUTPUT); expander.pinMode(1, OUTPUT); expander.pinMode(2, OUTPUT); expander.pinMode(3, OUTPUT); expander.pinMode(4, OUTPUT); expander.pinMode(5, OUTPUT); expander.pinMode(6, OUTPUT); expander.pinMode(7, OUTPUT); expander.set(); // All RELE OFF delay(2000); expander.digitalWrite(R1, LOW); // Turn off led 1 // toto je jenom pokus, abych věděl jestli reagují relé podle čísel. delay(2000); expander.digitalWrite(R2,LOW); // Turn off led 1 delay(2000); expander.digitalWrite(R3, LOW); // Turn off led 1 delay(2000); expander.digitalWrite(R4, LOW); // Turn off led 1 delay(2000); expander.digitalWrite(R5, LOW); // Turn off led 1 delay(2000); expander.digitalWrite(R6, LOW); // Turn off led 1 delay(2000); expander.digitalWrite(R7, LOW); // Turn off led 1 delay(2000); expander.digitalWrite(R8, LOW); // Turn off led 1 delay(2000); }
Ota
No tohle je na te I2C sběrnici.... Ale ja hlavně nikde nevidim že bys otačel tu logiku. Tzn.- to že signálem LOW se relé sepne (což nechci, chci spínat High). Takže jakto funguje? to nic neotáči ne?
Re: Relé 8x - ovládání i2c
Kód: Vybrat vše
expander.set(); // All RELE OFF
Kód: Vybrat vše
expander.clear(); // All RELE ON
Je to stále obrácená logika.
Mě tam jen vadilo, že po zapnutí byly všechna relé sepnutá. Tak jsem je hned v setup-u, po inicializaci vypnul.
Re: Relé 8x - ovládání i2c
Přesně jak říkáš.
Tímhle kódem fyzicky měníš stav výstupů (ten vykřičník před proměnnou jednoduše převrátí její stav). Je to tedy nutné volat při každém průchodu smyčkou loop. V setupu je vhodný všechny relé vypnout.
Možná nejlepší varianta je použít mezi Arduino a desku nějaký invertor. Něco jako CMOS 4049. Ten pak přímo otočí signály a nestane se ti že se všechny relé sepnou v případě že ti Arduino vzdechne (i když u elektroniky nikdy nevíš )
Re: Relé 8x - ovládání i2c
Přesně jak říkaš..... Ja sem do setupu ještě musel přidat definování pinů jako vystup samozřejmě. Bez toho mi to nemakalo coz je škoda, zase o další řádky navíc.petan píše: ↑11 bře 2018, 23:42Přesně jak říkáš.
Tímhle kódem fyzicky měníš stav výstupů (ten vykřičník před proměnnou jednoduše převrátí její stav). Je to tedy nutné volat při každém průchodu smyčkou loop. V setupu je vhodný všechny relé vypnout.
Možná nejlepší varianta je použít mezi Arduino a desku nějaký invertor. Něco jako CMOS 4049. Ten pak přímo otočí signály a nestane se ti že se všechny relé sepnou v případě že ti Arduino vzdechne (i když u elektroniky nikdy nevíš )
Jinak jak si rekl, v setupu zapisuju na piny uroveň HIGH, aby rele zustaly v klidu. Pokud sem tam tento zapis neměl, tak se mi rele tak na vteřinu aktivovala, než došlo na loop kde se to neguje.
Mockrat díky za pomoc, ted uz mi zbyvají ještě definovat vstupy a bude to
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 27 hostů