Управление на релета с Arduino платформа.
Цел на проекта
Запознаване с възможностите на [www.arduino.cc/ Arduino] платформа.
Формализация на задачата
Управление на група релета през сериен порт (емулиран от Ардуино USB контролера).
За целта ще бъде разработен алгоритъм следящ постъпващите данни на серийния порт на ардуино платформата. При съответна дума ще бъде променянно състоянието на релетата.
1. Разработване на програма
1.1. Инициализация
В началото предстои инициализация на пиновете на микроконтролера. Това се реализира, чрез кода от програмата:
int message = 0;
int relay_1 = 2;
int relay_2 = 3;
int relay_3 = 4;
int relay_4 = 5;
int relay_5 = 6;
int relay_6 = 7;
int relay_7 = 8;
int relay_8 = 9;
По този начин е направена инициализацията даден пин да отговаря на дадено име от нас за по лесно използване в програмата. Всеки пин може да заема стойности от 0 до 255. 1.1. 1.2. Алгоритъм Алгоритъма на работа на програмата е реализиран на базата на 0 и 255. Когато даден пин бъде зареден със стойност 255 той се изключва при стойност 0 пина се включва. За да може да се зареждат пиновете със стойности е използван серийния порт. Специален софтуер предава стойност по серийния порт, Arduino платформата я прочита и я сравнява с неговите заложени стойности и изпълнява даденото действие.
1. 1.1. 1.2. 1.3. Arduino Source code int message = 0; int message = 0; int relay_1 = 2; int relay_2 = 3; int relay_3 = 4; int relay_4 = 5; int relay_5 = 6; int relay_6 = 7; int relay_7 = 8; int relay_8 = 9; int a = 0; int b = 0; int c = 0; int d = 0; int e = 0; int f = 0; int g = 0; int h = 0;
void setup()
{
Serial.begin(9600);
pinMode(relay_1, OUTPUT);
pinMode(relay_2, OUTPUT);
pinMode(relay_3, OUTPUT);
pinMode(relay_4, OUTPUT);
pinMode(relay_5, OUTPUT);
pinMode(relay_6, OUTPUT);
pinMode(relay_7, OUTPUT);
pinMode(relay_8, OUTPUT);
analogWrite(relay_1, 255); analogWrite(relay_2, 255); analogWrite(relay_3, 255); analogWrite(relay_4, 255); analogWrite(relay_5, 255); analogWrite(relay_6, 255); analogWrite(relay_7, 255); analogWrite(relay_8, 255);
}
void loop() { if (Serial.available() > 0) { message = Serial.read();
switch (message) { case 'a': analogWrite(relay_1, 255); a = 0; break; case 'A': analogWrite(relay_1, 0); a = 1; break; case 'R': if (a == 0)Serial.println("0"); if (a == 1)Serial.println("1"); break; case 'b': analogWrite(relay_2, 255); b = 0; break; case 'B': analogWrite(relay_2, 0); b = 1; break; case 'S': if (b == 0)Serial.println("0"); if (b == 1)Serial.println("1"); break; case 'c': analogWrite(relay_3, 255); c = 0; break; case 'C': analogWrite(relay_3, 0); c = 1; break; case 'T': if (c == 0)Serial.println("0"); if (c == 1)Serial.println("1"); break; case 'd': analogWrite(relay_4, 255); d = 0; break; case 'D': analogWrite(relay_4, 0); d = 1; break; case 'U': if (d == 0)Serial.println("0"); if (d == 1)Serial.println("1"); break; case 'e': analogWrite(relay_5, 255); e = 0; break; case 'E': analogWrite(relay_5, 0); e = 1; break; case 'V': if (e == 0)Serial.println("0"); if (e == 1)Serial.println("1"); break; case 'f': analogWrite(relay_5, 255); f = 0; break; case 'F': analogWrite(relay_5, 0); f = 1; break; case 'X': if (d == 0)Serial.println("0"); if (d == 1)Serial.println("1"); break; case 'g': analogWrite(relay_7, 255); g = 0; break; case 'G': analogWrite(relay_7, 0); g = 1; break; case 'Y': if (g == 0)Serial.println("0"); if (g == 1)Serial.println("1"); break; case 'h': analogWrite(relay_8, 255); h = 0; break; case 'H': analogWrite(relay_8, 0); h = 1; break; case 'Z': if (h == 0)Serial.println("0"); if (h == 1)Serial.println("1"); break; }
} }