산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 산업기술

자동 철도 게이트 제어 시스템 - 회로 및 소스 코드

Arduino 및 초음파 센서를 사용한 고속 자동 철도 게이트 컨트롤러 회로

이 튜토리얼에서는 간단하고 효율적인 자동 고속 철도 게이트 컨트롤러 시스템을 설계하는 방법을 배웁니다. 이것은 이 프로젝트에 대한 비교적 간단한 접근 방식이지만 이를 기본 빌딩 블록으로 사용할 수 있으며 추가 수정을 통해 기차가 지나가는 속도 등을 추적할 수도 있습니다. 하지만 튜토리얼로 바로 넘어가기 전에 자동화가 무엇이고 자동화에서 정확히 무엇을 기대할 수 있는지에 대한 아이디어를 얻어야 합니다.

자동화는 기본적으로 인간의 노력/개입을 줄이거나 제거하는 방법을 고안하는 것을 의미합니다. 이 튜토리얼에서는 Proteus 소프트웨어와 함께 서보 모터를 사용하여 Arduino로 철도 게이트를 자동화하는 방법을 설명합니다.

자동화의 복잡성은 기본" 켜짐/꺼짐 제어에서 고도로 복잡한 다변수 알고리즘에 이르기까지 다양할 수 있습니다. 자동화 목적을 위한 제어 시스템은 개방 루프 또는 폐쇄 루프가 될 수 있습니다. 즉, 단일 입력 매개변수로 작동하거나 폐쇄 루프 시스템의 경우와 같이 입력으로 공급되는 출력에 응답하여 작동할 수 있습니다. 철도 산업의 자동화는 고도화 시대로 접어들면서 중요한 요구 사항이며 인적 오류로 인한 사고 위험을 줄이기 위해서는 이러한 작업을 이러한 스마트 기계로 처리하도록 하는 것이 매우 중요합니다.

모든 기술 자동화의 경우와 마찬가지로 장점과 단점이 있습니다.

장점

  1. 생산성 향상
  2. 예측 가능한 품질(품질 개선)
  3. 향상된 견고성
  4. 훌륭한 출력 일관성
  5. 인건비 절감
  6. 매우 정확함
  7. 단조로운 작업에서 인간의 노력 감소

단점

  1. 보안 위협에 취약함
  2. 개발 비용이 예측을 초과할 수 있음
  3. 높은 설치 비용
  4. 많은 부문에서 실업의 원인

위에서 언급한 장점이 단점을 훨씬 능가하기 때문에 전 세계가 자동화 시대로 들어서고 있습니다.

이 튜토리얼에서는 회로가 선로를 따라 기차를 감지할 때마다 열리고 닫히도록 철도 게이트를 자동화하려고 하며 속도를 나타내는 부저 또는 알람도 시작합니다. 기차의 속도가 특정 임계값보다 높으며 이를 달성하기 위해 Arduino와 서보 모터와 같이 매우 널리 사용되는 두 가지 전자 부품을 사용할 것입니다.

이 튜토리얼에서 사용할 센서는 초음파 센서이지만 이 센서를 반드시 사용해야 하는 것은 아닙니다. IR 센서를 사용하여 이 프로젝트의 다른 버전을 만들 수도 있습니다. 모듈이며 우리의 선택, 사용하려는 항목 및 쉽게 사용할 수 있는 항목에 따라 다릅니다.

철도 게이트 컨트롤러에 필요한 구성 요소

  1. 아두이노 UNO
  2. 부저
  3. 초음파 센서(HC-SR04)
  4. 서보 모터

필요한 소프트웨어:

  1. 아두이노 IDE
  2. 프로테우스

철도 게이트 컨트롤러의 회로도 

구성 요소 설명

아두이노 UNO

Arduino는 기본적으로 Microchip ATmega328P 마이크로컨트롤러를 사용하는 오픈 소스이며 Arduino.cc에서 제조한 개발 보드입니다. 이 보드에는 다양한 확장 보드 및 외부 회로에 인터페이스할 수 있는 디지털 및 아날로그로 구성된 입력/출력 핀 세트가 함께 제공됩니다.

보드에는 Arduino와 함께 제공되는 IDE(통합 개발 환경)의 도움으로 사용되거나 프로그래밍 가능한 6개의 아날로그 핀과 함께 14개의 디지털 핀이 제공됩니다. IDE. 프로그래밍된 것은 USB 케이블 유형 B를 통해 레코딩됩니다. 보드의 전원을 켜는 방법은 USB 케이블을 사용하거나 9볼트 DC 공급 장치를 연결하는 것입니다. 허용 전압 범위는 7~20V입니다. 설계 및 작동 관점에서 Arduino Nano 및 Arduino Leonardo와 같은 다른 제품군과 크게 다르지 않습니다.

STK500은 여전히 ​​Uno가 통신하는 원래 프로토콜입니다. 이전 제품과의 주요 차이점은 FTDI USB-직렬 드라이버 칩을 사용하지 않는다는 것입니다. 반대로 USB-to-serial 변환기처럼 프로그래밍된 ATmega 16U2(Atmega8U2 ~ 버전 R2)를 사용합니다.

초음파 센서(HC-SR04)

초음파 센서는 우리가 물체의 거리를 결정하는 데 사용하는 기본 센서입니다. 다른 방법으로 물체가 특정 기준점에서 얼마나 멀리 떨어져 있는지 측정하는 데 사용된다고 말할 수 있습니다. 기본적으로 4개의 핀이 있습니다.

초음파는 어떻게 작동합니까? 송신기(trig)는 고주파수 사운드 신호를 보낸 다음 물체에 의해 반사되고 반사된 신호는 수신기(에코)에서 수신됩니다. 따라서 공기 중에서의 음속은 우리에게 알려져 있으므로 거리를 계산할 수 있습니다. 이 센서는 매일 프로젝트에서 이것을 사용하는 Arduino 땜장이들 사이에서 매우 인기가 있으며 이 센서를 트리거하려면 10마이크로초 이상의 높은 펄스가 필요합니다.

초음파 센서의 특징:-

관련 게시물:자동 식물 급수 및 관개 시스템 – 회로, 코드 및 프로젝트 보고서

서보 모터

특정 각도에서 매우 특정한 움직임에 사용되는 특수한 종류의 모터입니다. 특정 각도 또는 선형 위치에서 정밀한 제어를 허용하는 회전식 또는 선형 액추에이터입니다. 서보 모터는 단일 개체가 아니라 모터의 현재 위치에 대한 피드백을 제공하는 센서와 함께 적합한 모터의 조합입니다.

이 서보 모터를 사용하기 위해서는 DC 모터의 사용 편의성 면에서 유사하지 않기 때문에 여러 고급 모듈을 사용해야 합니다. 이 모터는 기본적으로 로봇 및 대규모 제조 산업에 사용됩니다.

이 모터는 개방 루프 제어를 나타내는 스테퍼 모터와 약간 유사합니다. 스테퍼 모터에는 회전하는 단계가 내장되어 있지만 피드백 시스템이 없기 때문에 설계 및 제조된 특정 용도로 사용이 제한됩니다.

이러한 피드백 부족은 서보 모터를 이러한 스테퍼 모터와 차별화하고 동적이며 당면한 작업에 따라 사용자 정의할 수 있기 때문에 우위를 제공합니다. 프로그래밍에 약간의 변경. 전용 컨트롤러 모듈은 일반적으로 제조업체에서 서보 모터와 함께 제공합니다.

메커니즘 – 기본적으로 로터의 모션과 최종 위치를 업데이트하기 위해 피드백 시스템을 활용하는 폐쇄 루프 서보 메커니즘입니다. 모터 제어에 대한 입력은 아날로그 또는 디지털 입력일 수 있습니다.

원하는 출력에 도달하지 않을 때까지 오류 신호를 생성하는 제어 장치에 위치 및 속도 피드백을 제공하기 위해 일부 유형의 인코더가 모터에 쌍을 이룹니다. 그리고 이 오류 신호를 줄이기 위해 모터는 결국 오류 신호를 0으로 줄이기 위해 어느 방향으로든 움직일 수 있습니다. 이 조건이 달성되면 원하는 출력이 달성됩니다. 향상되고 정교한 서보 모터는 속도를 측정하기 위해 출력 샤프트에 광학 로터리 인코더가 있습니다.

부저

부저는 본질적으로 기계식, 전자식, 전기기계식 및 압전식일 수 있습니다. 일반적으로 우리는 오븐, 게임 쇼 및 가전 제품 등에 전자 장치를 사용합니다. 이러한 부저는 내부 회로가 있습니다. 생성되는 소리는 디스크의 움직임 때문입니다. 디스크는 본질적으로 강자성입니다. 전압 소스를 입력으로 갖는 전류 구동 장치입니다.

철도 자동 게이트 컨트롤러 작동

이 회로에서 우리는 철도 건널목의 작동을 복제하기 위해 초음파 센서와 서보 모터를 사용했습니다. 두 센서 모두 Arduino 보드에 부착된 트리거 핀의 도움으로 트리거되고 거리가 계산됩니다. 회로의 추가 작업은 측정된 거리에 따라 완전히 달라집니다.

선로가 깨끗하면 서보 모터는 아무 작업도 하지 않지만 열차가 선로의 양쪽에 도착하면 센서 중 하나에 의해 측정된 거리는 이전 거리와 달라집니다. 이런 식으로 우리는 기차의 도착에 대한 정보를 얻을 것이고 곧 Arduino는 디지털 핀 7과 8을 HIGH로 설정할 것입니다.

이 핀은 2개의 서보 모터와 연결되며 서보는 90°의 각도 거리를 커버합니다. o 따라서 차량의 경로를 차단하기 위해 문이 닫힙니다. 열차가 다른 센서에서 멀어지면 Arduino에 열차 출발 알림이 전송되고 서보 모터는 다시 이전 위치에 도달하여 게이트를 엽니다.

사람들의 안전을 고려하여 이 회로에 하나의 기능을 더 추가했으며 고속 열차의 경우 사람들에게 경고하는 것입니다. 이것은 한 사이클에서 두 센서의 전환 사이의 시간을 계산하여 달성됩니다. 시간이 특정 값 미만인 경우 부저가 울려 건널목 근처에 있는 사람들에게 경고합니다.

프로젝트 소스 코드 및 설명

이 스케치에서는 정수 유형의 5개 변수와 긴 유형의 4개 변수를 정의했습니다. 변수 tr1, tr2, eh1 및 eh2는 펄스를 보내고 마이크로초 단위의 시간 값을 수신하는 데 사용되는 반면 변수 val1, val2, dis1 및 dis2는 마이크로초 단위의 시간 값과 cm 단위의 거리 값을 저장하는 데 사용됩니다. Baud rate는 9600bits/sec로 설정되어 있으며 보드와 시리얼 모니터 사이의 통신을 담당합니다.

const int tr1 = 13, eh1 = 12, tr2 = 3, eh2 = 2;;
 int bz = 11;
unsigned long val1, dis1, val2, dis2;
#include 
Servo myservo1;
Servo myservo2;
int pos=-1;

void 설정()에 포함된 기능은 실행 중에 한 번만 실행되며 해당 작업은 입력 또는 출력으로 핀의 전송 속도와 모드를 정의하는 것입니다.

void setup() {
  // put your setup code here, to run once:
pinMode(tr1, OUTPUT);
pinMode(tr2, OUTPUT);
pinMode(bz, OUTPUT);
 
  pinMode(eh1, INPUT);
  pinMode(eh2, INPUT);
  myservo1.attach(8);
 myservo2.attach(7);

  Serial.begin(9600);
}

필요한 기능에 따라 초음파 센서를 작동시켜 지속적으로 거리를 측정하고 계산된 거리는 조건문의 매개변수로 설정됩니다. 조건이 참이면 "pos" 변수는 값을 증가시켜 서보 모터를 실행하고 조건이 올바르지 않으면 "pos" 변수는 값을 줄여 서보 모터를 이전 위치로 되돌립니다.

두 개의 센서가 물체를 빠르게 감지하는지 확인하는 조건문이 하나 더 있습니다. 그러면 사람들에게 경고하기 위해 부저에 전원을 공급하기 위해 핀 11을 높게 설정합니다. 이 모든 과정은 void 루프() 안에 포함되며 아두이노가 리셋되거나 전원이 차단될 때까지 반복됩니다.

void loop() {
  // put your main code here, to run repeatedly:
 
 digitalWrite(tr1, LOW);
 delayMicroseconds(2);
 digitalWrite(tr1, HIGH);
 delayMicroseconds(10);
 digitalWrite(tr1, LOW);
 val1 = pulseIn(eh1, HIGH);
 dis1 = (val1 * 0.0343) / 2;

 digitalWrite(tr2, LOW);
 delayMicroseconds(2);
 digitalWrite(tr2, HIGH);
 delayMicroseconds(10);
 digitalWrite(tr2, LOW);
 val2 = pulseIn(eh2, HIGH);
 dis2 = (val2 * 0.0343) / 2;
  
  Serial.println("distance is ");
 Serial.println(dis1);
  Serial.println(dis2);
  if(dis1 < 100 || dis2 < 100)
  {
    if(pos==-1){
    for (pos = 0; pos <= 90; pos += 1) { 
    myservo1.write(pos); 
    myservo2.write(pos);            
    delay(15);}
  }
     delay(1000);
    digitalWrite(tr1, LOW);
    delayMicroseconds(2);
    digitalWrite(tr1, HIGH);
    delayMicroseconds(10);
    digitalWrite(tr1, LOW);
    val1 = pulseIn(eh1, HIGH);
    dis1 = (val1 * 0.0343) / 2; 
    
    digitalWrite(tr2, LOW);
    delayMicroseconds(2);
    digitalWrite(tr2, HIGH);
    delayMicroseconds(10);
    digitalWrite(tr2, LOW);
    val2 = pulseIn(eh2, HIGH);
    dis2 = (val2 * 0.0343) / 2;
     
      if(dis1 < 100 || dis2 < 100) {digitalWrite(bz, HIGH); Serial.println("distance2 is "); Serial.println(dis1); Serial.println(dis2);} } else if(dis1 >= 100 && dis2 >= 100)
    { if(pos==91){
      for (pos = 90; pos >= 0; pos -= 1) {
    myservo1.write(pos);   
    myservo2.write(pos);           
    delay(15);  
      
    }                  
  }
  digitalWrite(bz, LOW); 
      delay(200);
      }
}

시뮬레이션을 위해 Hex 파일을 Proteus와 인터페이스: Arduino IDE에서 File>Preferences를 클릭한 다음 "Show verbose output"에서 옵션 컴파일과 업로드를 모두 확인합니다. 그리고 아래 창에서 코드를 컴파일하면 16진수 파일의 위치를 ​​선택하여 복사하고 Proteus에서 Arduino를 두 번 클릭하고 프로그램 파일 옵션에 파일 위치를 붙여넣고 확인을 클릭합니다. 이제 회로가 Proteus로 시뮬레이션할 준비가 됩니다.

관련 프로젝트:


산업기술

  1. NOR 게이트 S-R 래치
  2. 검증된 시스템에서 발생할 수 있는 오류
  3. TTL NOR 및 OR 게이트
  4. 모터 제어 회로
  5. 동작 감지 자동 도어 개방 시스템 회로 및 작동
  6. M-TECH CNC 제어 시스템
  7. 자동 열차 제어
  8. Arduino 알람 시스템:SERENA
  9. Arduino 제어 센터
  10. 클라우드 모니터링, 원격 제어 시스템