• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
sterowanie przeaznikami
#1
Witam wszystkich mam problem z przerobieniem kodu do sterowania przekaźnikami , podany kod steruje przekaźnikami za pomocą pinów arduino mega 2560  czyli podaję masę na pin A1 arduino i np  załącza mi pierwszy przekaźnik kolejne podanie masy na ten pin wyłącza przekaźnik i taka sama funkcja dla kolejnych przekaźników przy większej ilości przekaźników braknie mi pinów i chcę to zrobić na ekspanderach PCF8574. Mam zrobione na początek dwie płytki na tych ekspanderach jedna będzie używana jako wejścia z przełączników a druga jako płytka z przekaźnikami , czy jest ktoś w stanie pomóc (może być odpłatnie) w napisaniu tego kodu na początek dla kilku przekaźników z dodaniem większej ilości przekaźników sobie poradzę

Kod:
// Enable debug prints to serial monitor
#define MY_DEBUG


// Enable and select radio type attached
//#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69

// Set LOW transmit power level as default, if you have an amplified NRF-module and
// power your radio separately with a good regulator you can turn up PA level.
//#define MY_RF24_PA_LEVEL RF24_PA_LOW

// Enable serial gateway
#define MY_GATEWAY_SERIAL

// Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender)
#if F_CPU == 8000000L
#define MY_BAUD_RATE 38400
#endif

// Flash leds on rx/tx/err
// #define MY_LEDS_BLINKING_FEATURE
// Set blinking period
// #define MY_DEFAULT_LED_BLINK_PERIOD 300

// Inverses the behavior of leds
// #define MY_WITH_LEDS_BLINKING_INVERSE

// Enable inclusion mode
#define MY_INCLUSION_MODE_FEATURE
// Enable Inclusion mode button on gateway
#define MY_INCLUSION_BUTTON_FEATURE

// Inverses behavior of inclusion button (if using external pullup)
//#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP

// Set inclusion mode duration (in seconds)
#define MY_INCLUSION_MODE_DURATION 60
// Digital pin used for inclusion mode button
#define MY_INCLUSION_MODE_BUTTON_PIN  3

// Uncomment to override default HW configurations
//#define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
//#define MY_DEFAULT_RX_LED_PIN  6  // Receive led pin
//#define MY_DEFAULT_TX_LED_PIN  5  // the PCB, on board LED

#include <SPI.h>
#include <MySensors.h>  
#include <Bounce2.h>

// Enable repeater functionality for this node
#define MY_REPEATER_FEATURE


#define RELAY_1  4  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
#define RELAY_2  5
#define RELAY_3  6
#define RELAY_4  7
#define NUMBER_OF_RELAYS 4 // Total number of attached relays
#define RELAY_ON 0  // GPIO value to write to turn on attached relay
#define RELAY_OFF 1 // GPIO value to write to turn off attached relay

#define BUTTON_PIN A1
#define BUTTON2_PIN A2
#define BUTTON3_PIN A3
#define BUTTON4_PIN A4

void before() {
 for (int sensor=1, pin=RELAY_1; 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);
 }
}
Bounce debouncer = Bounce();
Bounce debouncer2 = Bounce();
Bounce debouncer3 = Bounce();
Bounce debouncer4 = Bounce();

void setup() {
 // Setup locally attached sensors
 delay(10000);
  // Setup the button.
 pinMode(BUTTON_PIN, INPUT_PULLUP);
 pinMode(BUTTON2_PIN, INPUT_PULLUP);
 pinMode(BUTTON3_PIN, INPUT_PULLUP);
 pinMode(BUTTON4_PIN, INPUT_PULLUP);

 // After setting up the button, setup debouncer.
 debouncer.attach(BUTTON_PIN);
 debouncer.interval(5);
 debouncer2.attach(BUTTON2_PIN);
 debouncer2.interval(5);
 debouncer3.attach(BUTTON3_PIN);
 debouncer3.interval(5);
 debouncer4.attach(BUTTON4_PIN);
 debouncer4.interval(5);
 //presentation();
}
void presentation()  
{  
 // Send the sketch version information to the gateway and Controller
 sendSketchInfo("Relay", "1.0");

 for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
   // Register all sensors to gw (they will be created as child devices)
   present(sensor, S_LIGHT);
 }
}

MyMessage msg(1, V_LIGHT);
MyMessage msg2(2, V_LIGHT);
MyMessage msg3(3, V_LIGHT);
MyMessage msg4(4, V_LIGHT);

void loop() {
 // Send locally attached sensor data here
 if (debouncer.update()) {
   // Get the update value.
   int value = debouncer.read();
   // Send in the new value.
   if(value == LOW){
        saveState(1, !loadState(1));
        digitalWrite(RELAY_1, loadState(1)?RELAY_ON:RELAY_OFF);
        send(msg.set(loadState(1)));
        }
 }
 if (debouncer2.update()) {
     int value2 = debouncer2.read();
   if(value2 == LOW){
        saveState(2, !loadState(2));
        digitalWrite(RELAY_2, loadState(2)?RELAY_ON:RELAY_OFF);
        send(msg2.set(loadState(2)));
        }
 }
 if (debouncer3.update()) {
   int value3 = debouncer3.read();
   if(value3 == LOW){
        saveState(3, !loadState(3));
        digitalWrite(RELAY_3, loadState(3)?RELAY_ON:RELAY_OFF);
        send(msg3.set(loadState(3)));
        }
 }
 if (debouncer4.update()) {
   int value4 = debouncer4.read();
   if(value4 == LOW){
        saveState(4, !loadState(4));
        digitalWrite(RELAY_4, loadState(4)?RELAY_ON:RELAY_OFF);
        send(msg4.set(loadState(4)));
   }
 }
}

void receive(const MyMessage &message) {
 // We only expect one type of message from controller. But we better check anyway.
 if (message.type==V_LIGHT) {
    // Change relay state
    digitalWrite(message.sensor-1+RELAY_1, 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());
 }
}
 
Odpowiedź
#2
Kolego piszę z głowy zwykłe arduino ma 12 wyjść cyfrowych i 6 analogowych'
Wykorzystując 1 np A0 pod przyciski resztę czyli 17 masz na przekaźniki jak masz za mało to masz I2C
 
Odpowiedź
#3
(17-12-2017, 13:26)bob35 napisał(a): Kolego piszę z głowy zwykłe arduino ma 12 wyjść cyfrowych i 6 analogowych'
Wykorzystując 1 np A0 pod przyciski resztę czyli 17 masz na przekaźniki jak masz za mało to masz I2C
Kolega ma Arduino MEGA, wiec tam ma powyzej 50 wyjsc cyfrowych Smile
 
Odpowiedź
#4
Docelowo będzie do sterowania około 40 przekaźników i 25 przełączników i dlatego chcę to zrobić na ekspanderach PCF8574 bo mam już gotowe takie płytki tylko nie wiem jak zacząć pisać program , na początek chodzi mi o uruchomienie dwóch płytek jedna jako ekspander z ośmioma wejściami a druga z ośmioma przekaźnikami
 
Odpowiedź
#5
Kolego bullseye nie chciałem pisać że w tym przypadku Mega to wielkie G...o . Jak wyobrażasz sobie podłączyć tylko 50 przekaźników ? policz od arduino wychodzi 100 przewodów potem następne 100 zasilanie potem 100 lub 150 wyjścia ze styków . 50 Przekaźników obok siebie to 1m. Do tego projektu starczy kość jak attiny 13 tylko więcej pamięc lub arduino minii. No i projekt płytki.
 
Odpowiedź
#6
Dlatego chcę podłączyć to wszystko do arduino przez magistrale I2C , będę miał 4płytki z ekspanderami ustawione jako wejściowe sygnały z przełączników oraz 4 płytki z przekaźnikami po 8 sztuk na każdej, ma to działać w następujący sposób : płytka z ekspanderem na adresie 0x20 ustawiona jako wejściowe sygnały z przycisków oraz na adresie 0x21 płytka z przekaźnikami i podaję sygnał z przycisku na pin A0 płytki wejściowej a na płytce z przekaźnikami włącza mi przekaźnik przypisany do pinu A0 chcę aby to wszystko działało tak jak w kodzie podanym wyżej tylko po magistrali I2c bez korzystania z pinów arduino
 
Odpowiedź
#7
Jako wejścia wystarczą 32 oporniki 10k i 32 przyciski to wszystko podłączysz np do A0 a jako wyjścia do przekaźników jak napisałeś przez I2C. Tylko w tym przypadku można przyciskać jeden przycisk potem drugi itd. Jak chcesz kilka na raz to tak jak piszesz.
 
Odpowiedź
#8
Będą w pomieszczeniach podwójne włączniki i może tak być że ktoś włączy dwa na raz dlatego wszystko muszę zrobić na szynie I2C , czy temat jest do ogarnięcia?
 
Odpowiedź
#9
Tu masz podpowiedź https://starter-kit.nettigo.pl/2011/11/p...w-arduino/
 
Odpowiedź
#10
(18-12-2017, 19:32)bob35 napisał(a): Tu masz podpowiedź https://starter-kit.nettigo.pl/2011/11/p...w-arduino/


Witam w załączonym skeczu mam problem ze stanem przekaźnika w domoticzu jak go włączę to w domoticzu ikona jest że wyłączony i na odwrót ktoś coś poradzi?


Załączone pliki
.txt   przekazniki.txt (Rozmiar: 6.98 KB / Pobrań: 1)
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości