piątek, 26 maja 2017

[30] Arduino - Sterowanie przekaźnikami za pomocą portu szeregowego

Ten dosyć krótki post chciałem poświęcić na opisanie sposobu sterowania przekaźnikami za pomocą portu szeregowego.

Podłączenie:


Wykorzystałem moduł dwóch przekaźników, bo akurat taki miałem, ale w ten sam sposób można obsłużyć dużo więcej urządzeń. Wystarczy dodawać kolejne definicje do programu.

  • GND - GND
  • IN1 - pin 7
  • IN2 - pin 8
  • VCC - 5V

Program:


Kod programu jest dosyć łatwy w zrozumieniu jak i w implementacji.

  1. /*
  2.  * Relay control test program
  3.  * Communication from UART to open or close
  4.  * two relays
  5.  * control HIGH state - turn off relay
  6.  * control LOW state - turn on relay
  7.  */
  8. #define RELAY1 7 /* Relay 1 connect to pin 7 */
  9. #define RELAY2 8 /* Relay 2 connect to pin 8 */
  10. String receiveData = "";
  11. bool relayState1 = true; /* */
  12. bool relayState2 = true;
  13. void comPortInit(void);
  14. void initPins(void);
  15. void relayControl(String msg);
  16. void setup() {
  17.   /* Set comPort */
  18.   comPortInit();
  19.   initPins();
  20. }
  21. void loop() {
  22.   if(Serial.available() > 0){
  23.     receiveData = Serial.readStringUntil('\n');     /* if data receive by uart */
  24.     relayControl(receiveData);
  25.     /* Clear data buffer */
  26.     receiveData = "";
  27.   }
  28. }
  29. void comPortInit(void){
  30.   Serial.begin(115200, SERIAL_8N1);
  31.   Serial.println("Com Port ON");
  32. }
  33. void initPins(void){
  34.   /* Set relay pins as output */
  35.   pinMode(RELAY1, OUTPUT);
  36.   pinMode(RELAY2, OUTPUT);
  37.   /* Set default state */
  38.   digitalWrite(RELAY1, HIGH);
  39.   digitalWrite(RELAY2, HIGH);
  40.   Serial.println("Set pins finish! You can enter data now");
  41. }
  42. void relayControl(String msg){
  43.       if(msg == "relay1")
  44.     {
  45.       /* Turn on/off relay 1*/
  46.        relayState1=!relayState1;
  47.        digitalWrite(RELAY1, relayState1);
  48.        if(relayState1 == true){
  49.           Serial.println("Realy 1 OFF");
  50.        }
  51.        else{
  52.           Serial.println("Realy 1 ON");
  53.        }
  54.     }
  55.     else if(msg == "relay2")
  56.     {
  57.         /* Turn on/off relay 2*/
  58.         relayState2=!relayState2;
  59.         digitalWrite(RELAY2, relayState2);
  60.         if(relayState2 == true){
  61.            Serial.println("Realy 2 OFF");
  62.         }
  63.         else{
  64.            Serial.println("Realy 2 ON");
  65.         }
  66.     }
  67.     else
  68.     {
  69.         Serial.println("Wrong message to Arduino!");
  70.     }
  71. }

Wykorzystałem tutaj tylko sterowanie poprzez UART, natomiast w dosyć łatwy sposób można np dołożyć czujniki odległości bądź temperaturowe i uruchamiać dany przekaźnik w przypadku wystąpienia odpowiednich stanów.

W dosyć łatwy sposób można także podłączyć ze sobą Ethernet bądź Bluetooth i wykonać sterowanie z poziomu strony internetowej bądź aplikacji na smartphonie (dosyć łatwo taką wykonać korzystając z App Inventor).