|
다음은 본인이 사용하고 있는 Smart Controller의 Source Program입니다.
Program하는 기법상 보다 간편하고 간결하게 할 수는 있으나, 처음으로 Arduino를 접하는
믾은 분들의 이해를 돕기 위해 가능한 명령어 함수들을 수평적으로 넓게 펴서
이해를 쉽게 하도록 노력하였습니다.
여기에 사용하는 Arduino는 NANO로서 이 Sketch를 복사하여 바로
Aeduino IDE Windows 편집기에 넣어 그대로 Compile한 후 Upload하여 사용할 수 있습니다.
File을 Download 한 후 Compile과정에서 에러가 발생할 경우에는
Arduino IDE의 tool 메뉴에서 Board를 NANO로 선택하고 Com Port를 올바르게
선택해야 하며, 통신속도 역시 9600 Bps로 맞추어야 합니다.
이상과 같은 과정을 올바르게 밟았는데도 자꾸만 에러가 발생한다면
Arduino NANO와 Arduino IDE 간에 통신 Drive가 설치되어 있지 않았다고 볼 수 있는데,
정품 NANO를 이용했다면 별 문제가 없겠지만, 짝퉁 NANO를 이용했다면
CH340이라는 통신 Drive를 컴퓨터에 설치한 후 USB에 NANO를
연결하면 Compile과 Upload에 문제가 없을 것입니다.
그리고 아무리 Compile과 Upload에 성공을 해도 Hardware를 올바르게 결선하지 않으면
문제가 발생할 수 있으니, 무전기를 연결하기 전에 Arduino의 출력 Port에 Led를 연결하고 아날로그 입력단자에
우선 Dip Switch를 연결하여 무전기와 안테나를 연결했다는 가정하여 다양한 테스트를 거친 후
정상적으로 작동한다는 확인을 한 후 다음으로 무전기와 안테나를 연결해야 합니다.
현재 이 시스템에서는 무전기의 입출력이 하나의 동축 케이블로 연결되어
정교한 Control이 이루어 지지 않으면 한쪽 무전기에서의 송신 출력이 다른쪽 무전기의 수신 입력단에
유입되어 대형 사고가 발생할 수 있다는 점을 항상 염두에 두어야 합니다.
이와 같이 어떤 경우에서도 두대 이상의 무전기에 동시 전원이 가해지지 않도록
Program 과정에 Loop문을 제거하였는데, 이 Loop함수의 기능은 프로그램을 무한반복하여
NANO의 입력 스윗치 움직임을 변수 깂으로 받아들여 무전기 전원과 안테나를
연결하는 Relay를 동작하게 되는데 이 과정을 생략하여 안정화를 기했습니다.
따라서 처음 동작 초기에 NANO전원을 공급하면 한번만 NANO의 스윗치
동작 값을 읽어 들여 Relay를 작동시키고 그 이후에는 스윗치를 아무리 ON, OFF 해도
절대로 Relay가 동작하지 않는 안전장치가 있습니다.
그리고, 두개 이상의 스윗치를 동시에 ON시켰을때도
순서가 제일 빠른 Relay 하나만 동작하는 과정을 Program에서 확인할 수 있습니다.
/**************************************************************************************************************
## Controller for HAM Radio Station ## Version 0.2
무전기 4대와 안테나 4대를 선택하여 전원을 공급하는 Controller입니다.
아마추어무선국에서 편리하게 사용할 수 있는 제어장치로 Local에서의 조작은
물론, 휴대폰을 이용하여 Remote환경에서도 사용할 수 있으므로 유용하게
이용하시기 바랍니다.
그런데, 규정된 회로와 부품을 사용해야만 "에러"없이 잘 동작할 수 있으므로
컴파일과 업 로드를 문제없이 성공해도 Hardware가 정확하지 않으면 무전기에
돌이킬 수 없는 심각한 고장이 날 수도 있으니, 주의해야 하며, 이후 제작과정에
발생하는 모든 문제는 사용자에게 있음을 주지하시기 바랍니다.
2019. 6. 23 HL5LH 정 태 열...
************************************************************************************************************
*/
void setup()
{
#define TrcvRelay1 2 // 무전기 1-4 전원, RF 출력단자
#define TrcvRelay2 3 // 무전기 전원, RF 같이 연결 됨
#define TrcvRelay3 4
#define TrcvRelay4 5
#define LthRelay1 6 // 안테나 1-4 RF 출력 단자
#define LthRelay2 7
#define LthRelay3 8
#define LthRelay4 9
#define PowerRelay 10 // 전원공급 및 Start
#define ComputerRelay 11 // Remote 용 Computer Start & Stop
#define LightRelay 12 // 조명용 전등
#define AntSw1 A0 // A0 ~ A3 까지는 안테나 선택 스윗치 연결
#define AntSw2 A1
#define AntSw3 A2
#define AntSw4 A3
#define TrcvSw5 A4 // A4 ~ A7 까지는 무전기 선택 스윗치 연결
#define TrcvSw6 A5
#define TrcvSw7 A6
#define TrcvSw8 A7
pinMode(LthRelay1, OUTPUT); // 1-4 안테나 RF 릴레이 출력 설정
pinMode(LthRelay2, OUTPUT);
pinMode(LthRelay3, OUTPUT);
pinMode(LthRelay4, OUTPUT);
pinMode(TrcvRelay1, OUTPUT); // 1-4 무전기 전원, RF 출력 설정
pinMode(TrcvRelay2, OUTPUT);
pinMode(TrcvRelay3, OUTPUT);
pinMode(TrcvRelay4, OUTPUT);
pinMode(PowerRelay, OUTPUT); // 기타 제어
pinMode(ComputerRelay, OUTPUT);
pinMode(LightRelay, OUTPUT);
pinMode(AntSw1, INPUT); // 1-4 안테나 선택 입력 설정
pinMode(AntSw2, INPUT);
pinMode(AntSw3, INPUT);
pinMode(AntSw4, INPUT);
pinMode(TrcvSw5, INPUT); // 5-8 무전기 선택 입력 설정
pinMode(TrcvSw6, INPUT);
pinMode(TrcvSw7, INPUT);
pinMode(TrcvSw8, INPUT);
int valAnt1; // 안테나 선택 스윗치 변수
int valAnt2;
int valAnt3;
int valAnt4;
int valTrcv5; // 무전기 선택 스윗치 변수
int valTrcv6;
int valTrcv7;
int valTrcv8;
valAnt1 = digitalRead(AntSw1); // 안테나 스윗치1-4 신호를 감지 한 변수.
valAnt2 = digitalRead(AntSw2);
valAnt3 = digitalRead(AntSw3);
valAnt4 = digitalRead(AntSw4);
valTrcv5 = digitalRead(TrcvSw5); // 무전기 스윗치 5-8 신호를 감지한 변수
valTrcv6 = digitalRead(TrcvSw6);
valTrcv7 = analogRead(TrcvSw7);
valTrcv8 = analogRead(TrcvSw8);
digitalWrite(LthRelay1, HIGH); // 1-4 안테나 Latching Relay 초기화.
digitalWrite(LthRelay2, HIGH);
digitalWrite(LthRelay3, HIGH);
digitalWrite(LthRelay4, HIGH);
digitalWrite(TrcvRelay1, HIGH); // 1-4 무전기 전원, RF Relay 초기화
digitalWrite(TrcvRelay2, HIGH);
digitalWrite(TrcvRelay3, HIGH);
digitalWrite(TrcvRelay4, HIGH);
digitalWrite(PowerRelay, HIGH);
digitalWrite(ComputerRelay, HIGH);
digitalWrite(LightRelay, HIGH);
if(valAnt1 == HIGH) // 안테나 1 선택
{
// digitalWrite(LthRelay1, LOW); // 첫번째 안테나 래칭 릴레이 동작 신호출력
// delay(1000); // 1초동안 신호가 출력되도록 함
digitalWrite(LthRelay1, LOW);
delay (15);
valAnt2 = LOW;
valAnt3 = LOW;
valAnt4 = LOW;
}
if(valAnt2 == HIGH) // 안테나 2 선택
{
// digitalWrite(LthRelay2, LOW); // 두번째 안테나 래칭 릴레이 동착 신호출력
// delay(1000);
digitalWrite(LthRelay2, LOW);
delay(15);
valAnt3 = LOW;
valAnt4 = LOW;
}
if(valAnt3 == HIGH) // 안테나 3 선택
{
// digitalWrite(LthRelay3, LOW); // 세번째 안테나 래칭 릴레이 신호출력.
// delay(1000);
digitalWrite(LthRelay3, LOW); // 일반릴레이를 제어
delay(15);
valAnt4 = LOW;
}
if(valAnt4 == HIGH) // 안테나4 선택
{
// digitalWrite(LthRelay4, HIGH); //네번째 안테나 래칭 릴레이 신호출력
// delay(1000);
digitalWrite(LthRelay4, LOW);
delay(15);
}
if(valTrcv5 == HIGH) // 무전기 1 선택
{
digitalWrite(TrcvRelay1, LOW);
delay(15);
valTrcv6 = LOW;
valTrcv7 = LOW;
valTrcv8 = LOW;
}
if(valTrcv6 == HIGH) // 무전기 2 선택
{
digitalWrite(TrcvRelay2, LOW);
delay(15); // 무전기 2 동작 신호 출력
valTrcv7 = LOW;
valTrcv8 = LOW;
}
if(valTrcv7 >= 250) // 무전기 3 선택
{
digitalWrite(TrcvRelay3, LOW);
delay(20); // 무전기3 동작 신호 출력
valTrcv8 = LOW;
}
if(valTrcv8 >= 250) // 무전기 4 선택
{
digitalWrite(TrcvRelay4, LOW);
delay(20); // 무전기 4 동작 신호 출력
}
// #define PwrRelay 1 // AC Power Supply Relay Trigger
// pinMode(PwrRelay, OUTPUT); // 무전기 Power Supply SSR 출력 설정
// digitalWrite(PwrRelay, LOW);
}
void loop() { // 위 Relay 동작은 전원이 공급되면 1회 만 작동 함.
}
// *************************************************************************
Smart Controller Setch File Download : sketch_jun10a_snsupload.ino
첫댓글 본 Program은 동축케이블 절환 스윗치에 보통의 일반 고주파 릴레이를 사용하도록 되어 있습니다.
동축케이블 Latching Relay를 사용하고자 하면 위 스케치 1번 IF문에서 "//" 기호로 막아둔 것을 없애고
프로그램 일부분을 수정해야 합니다.
그리고 여기에 사용하는 일반 고주파 Relay Module은 Low Level Trigger를 사용해야 하며,
동축 Latching Relay는 High Level에서 작동하도록 했는데 그것도 프로그램으로 조정 가능합니다.
언젠가도 말씀드렸지만... 완전히 장님버젼입니다. ㅎㅎㅎ 코끼리 뒷다리는 만질 수나 있지만.. 이것은 도대체가 이해 부족이옵니다.
이것도 나이 탓이라고 치부해야 할지 모르지만.. 예전처럼 능동적이지 못하고... 동물처럼 그져 피동적으로 눈앞의 일만 처리하다가 보니 이젠 일상화가 되었네요.
아~~~! 옛날이여~~~! 어느 여가수의 노랫말이 새롭습니다.. ㅎㅎ
죄송합니다. 장님 버전을 올려서....
ㅎ ㅎ ㅎ
퇴임후에도 왕성하게 활동하시는 모습이 아름답습니다.아두니노에 대해서 잘 모르지만 조금씩 배워나가겠습니다.
리모트 교신에 대해서 부정적인 마인드가 있어서 관심이 매우 부족했었습니다.
많이 지도 해 주십시요.
HL5FEE
Smart Controller에 남 다른 관심을 가져 주시고 항상 용기를 북돋는 말씀에 감사드립니다.
아두이노는 매우 유용한 능동소자로서 지금까지 복잡한 전자회로를 동원하에 특정기능을 수행케 했다면 이 소자는 소프트웨어로 복잡한 전자부품 기능믈 대체할 수 있어 회로가 대폭 간소해 지고, 가격대비 성능이 매우 뛰어난 것은 물론 언제든지 인터넷으로 Up~Grade가 가능해져 확장성이 있다는 것입니다.