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

Arduino 기반 서비스 엘리베이터

구성품 및 소모품

Arduino Mega 2560
× 1
OpenBuilds 마이크로 리미트 스위치
× 4

이 프로젝트 정보

4개 층에서 작동하는 서비스 리프트의 제어 시스템을 설계하고 테스트합니다. 마이크로 컨트롤러(ATMega2560)는 리프트가 현재 있는 바닥을 확인하여 리프트 모터를 활성화하여 리프트를 위아래로 이동하기 위해 전원을 공급할 접촉기를 결정하는 데 사용됩니다. 제어 시스템은 또한 필요한 층에 도달했을 때 리프트에 대한 전원을 차단할 수 있어야 합니다. 승강기 도어를 위아래로 움직이기 전에 항상 닫도록 통합 안전 요소를 구현해야 합니다. 제어 시스템은 리프트를 원하는 층으로 이동하기 위해 전원을 공급해야 하는 컨택터를 성공적으로 결정할 수 있습니다. 시스템은 리프트가 이동해야 할 때 도어를 닫고 필요한 층에 도달하면 도어를 자동으로 열기 위해 안전 리프트 도어 모터를 제어할 수 있습니다.

데모 비디오:

1.1 3상 모터 배선

3상 모터는 무거운 부하를 처리할 수 있는 강력한 모터가 필요하기 때문에 이 애플리케이션에 사용됩니다. 3상 모터는 주 3상 전원을 통해 전원이 공급됩니다. 2개의 메인 접촉기를 통해 메인 런을 통해 전원을 공급합니다. 첫 번째 접촉기가 켜지고 두 번째 접촉기가 꺼지면 전원이 첫 번째 접촉기를 통해 모터를 순방향으로 움직이는 모터 권선으로 전달됩니다.

두 번째 접촉기가 켜지고 첫 번째 접촉기가 꺼지면 전원이 두 번째 접촉기를 통해 모터를 역방향으로 움직이는 모터 권선으로 흐릅니다. 역방향 배선이 다르니 주의하세요.

1.2 바닥 감지

리프트가 현재 있는 층을 감지하기 위해 리미트 스위치가 사용됩니다. 엘리베이터가 위아래로 움직이면 각 층의 리미트 스위치가 닫히고 열립니다. 리프트가 특정 층에 있을 때 해당 특정 층의 제한 층이 닫혀서 마이크로컨트롤러에 리프트가 있는 층을 표시합니다. 리프트가 움직이면 리미트 스위치가 열리고 마이크로컨트롤러에 리프트가 움직이고 있음을 나타냅니다.

리프트가 바닥을 통과할 때 리미트 스위치에 의해 생성되는 낮은 신호에서 높은 신호로의 전환은 1초 미만의 찰나의 순간에 발생하며 종종 마이크로컨트롤러가 감지하기에는 너무 빠릅니다. 리미트 스위치는 5V DC 전원에 연결되고 NO(Normally Open) 터미널의 출력은 마이크로컨트롤러의 IO 핀에 연결됩니다. 4개 층에 있는 4개의 제한 스위치는 데이터를 마이크로컨트롤러로 보냅니다. 이를 통해 마이크로컨트롤러는 어느 핀이 낮은 곳에서 높은 곳으로 갔는지 확인하여 리프트가 있는 바닥을 결정할 수 있습니다. 리미트 스위치 상태의 전환은 아래 다이어그램에 나와 있습니다.

까다로운 작업은 마이크로컨트롤러가 낮음에서 높음으로의 전환을 감지할 수 있도록 하는 것입니다. 이 문제에 접근하는 두 가지 방법이 있습니다. 첫 번째 방법은 if ​​조건을 사용하여 루프 기능 내에서 리미트 스위치 핀이 HIGH가 되는지 확인하는 것입니다. 본질적으로 다른 코드를 실행하는 동안 프로그램은 항상 핀이 HIGH인지 확인합니다. 이것은 프로그램이 지속적으로 리미트 스위치 핀에서 HIGH 신호를 찾기 때문에 많은 메모리를 차지합니다. 또 다른 문제는 전환이 발생하는 동안 루프 함수가 다른 코드를 실행하기 때문에 프로그램이 이 전환을 놓칠 수 있다는 것입니다. 이러한 문제를 피하기 위해 인터럽트가 사용됩니다. 인터럽트는 본질적으로 코드 실행을 일시 중지하고 특정 인터럽트 조건이 충족될 때 별도의 기능을 실행합니다. 이것은 리프트 작업에 이상적입니다. 리미트 스위치 핀이 Low에서 High가 되면 인터럽트 기능이 실행되어 현재 층에 리프트가 있는지 확인하여 리프트를 정지시키거나 더 멀리 이동하도록 합니다. 프로그램은 리미트 스위치가 전환될 때 인터럽트 기능을 강제로 실행하기 때문에 시스템은 프로그램이 의도적으로 플로어 감지를 건너뛰지 않도록 할 수 있습니다. 이 애플리케이션에 사용된 마이크로 컨트롤러는 4개 층에 사용하기에 이상적인 인터럽트에 사용할 수 있는 6개의 디지털 핀이 있는 Arduino Mega 2560입니다. attachInterrupt의 첫 번째 매개변수는 인터럽트 번호입니다. 일반적으로 실제 디지털 핀을 특정 인터럽트 번호로 변환하려면 digitalPinToInterrupt(pin)를 사용해야 합니다. 예를 들어, 핀 3에 연결하는 경우 attachInterrupt의 첫 번째 매개변수로 digitalPinToInterrupt(3)를 사용합니다. 또한 delay() 함수는 ISR(Interrupt Service Routine)에 의해 실행되는 함수 내에서 작동하지 않는다는 점에 유의하십시오.

위의 다이어그램은 리미트 스위치가 MCU에 연결되는 방법을 보여줍니다. MCU의 핀은 풀다운 저항을 통해 연결됩니다. 이 저항은 MCU의 핀을 접지로 풀다운하여 리미트 스위치가 열려 있을 때 MCU에서 LOW 전압 판독값을 읽도록 합니다. 저항 구성은 아래 그림과 같습니다.

1.3 모터 상하 제어

2개의 12V DC 릴레이는 방향(위 또는 아래)을 제어하는 ​​모터의 접촉기로 AC 전원을 전환하는 데 사용됩니다. Multisim을 사용하여 설계된 회로는 아래 다이어그램에 나와 있습니다.

두 릴레이의 코일 접촉기의 한쪽 끝은 PNP 트랜지스터를 통해 12V DC 전원에 연결됩니다. 이렇게 하는 주된 이유는 리프트 도어가 닫힐 때까지 모터에 전원이 공급되지 않도록 하기 위함입니다. 리프트 도어가 닫히면 PNP 트랜지스터의 게이트에 대한 DoorSwitch 출력 핀이 접지로 당겨져 PNP가 켜져 두 릴레이에 VCC 전원을 제공합니다. 따라서 MotorUp 또는 MotorDown 신호가 HIGH인 경우에도 릴레이가 켜지지 않습니다. 릴레이 코일의 다른 쪽 끝은 NPN 트랜지스터를 통해 접지로 당겨집니다. MotorUp 신호는 MCU에서 생성됩니다. MotorUp 신호가 HIGH일 때 첫 번째 NPN 트랜지스터가 활성화되고 다른 코일 접점을 접지로 당겨 회로를 완성하여 Up Relay의 코일에 전원을 공급하여 모터에 전원을 공급합니다. 동일한 방법으로 다운 릴레이를 활성화합니다. 트랜지스터를 사용하여 릴레이를 전환하는 이유는 다음과 같습니다.

<울>
  • 두 릴레이 모두 12VDC 코일을 가지고 있으므로 MCU가 릴레이 코일을 켜기에 충분하지 않은 5V만 생성할 수 있으므로 코일의 하이 사이드(12V) 부분을 전환하려면 PNP 트랜지스터를 사용해야 합니다.
  • <울>
  • 트랜지스터 베이스를 통한 적은 전류가 MCU를 활성화하므로 MCU에서 나오는 최소한의 전류를 사용하여 릴레이를 켜는 데 트랜지스터를 사용할 수 있습니다. 이것은 릴레이를 전환해야 할 때 MCU의 전력을 절약합니다.
  • <울>
  • 또한 MCU를 잠재적으로 손상시킬 수 있는 MCU의 핀으로 역류할 수 있는 역전류로부터 MCU를 분리합니다.
  • 1.3.1 추가 보호를 위한 플라이백 다이오드

    코일을 켜고 끌 때 역전류가 흐르도록 하기 위해 릴레이의 코일 접점에 플라이백 다이오드가 설치됩니다. 릴레이의 코일과 같은 유도성 부하는 공급 전류가 갑자기 중단될 때 갑작스러운 전압 스파이크를 생성합니다. 이것은 MCU에 추가적인 보호를 추가합니다. 아래 다이어그램은 릴레이의 코일 접촉기에 플라이백 다이오드를 연결하는 방법을 보여줍니다.

    1.3.2 사용자 입력 제어

    사용자는 바닥 버튼을 통해 리프트 작동을 제어합니다. 4개의 바닥 푸시 버튼이 있으며, 누를 때 마이크로컨트롤러에 리프트를 원하는 층으로 가져와야 함을 나타냅니다.

    누름 버튼을 잠시 누르면 HIGH 신호가 생성되고 사용자가 버튼에서 손을 떼면 LOW 신호가 생성됩니다. 마이크로컨트롤러의 임무는 사용자가 누른 바닥 버튼에서 HIGH 신호를 식별하는 것입니다. 이 특정 작업은 인터럽트를 통해 처리할 필요가 없습니다. 사용자가 충분한 시간 동안 버튼을 누르면 MCU는 버튼의 신호를 등록할 수 있습니다. 마이크로 컨트롤러의 다음 작업은 사용자 입력과 리프트의 현재 바닥에 따라 모터를 위 또는 아래로 돌릴지 여부를 평가하는 것입니다.

    마이크로컨트롤러를 통한 스마트 프로그래밍을 통해 시스템이 순수하게 로직과 아날로그를 통해 설계된 경우 필요했을 추가 하드웨어를 제거할 수 있습니다. 리프트에 대한 이전 시스템은 아래 다이어그램과 같이 추가 방향 스위치가 필요했는데 시스템이 리프트가 이동하는 방향(위 또는 아래)을 식별할 수 있도록 하는 데 사용되었습니다.

    그러나 리프트의 현재 층을 변수로 유지하는 알고리즘을 설계하고 이를 사용자의 입력과 비교함으로써 시스템은 방향 스위치를 완전히 제거하여 원하는 위치에 도달하기 위해 리프트가 이동해야 하는 방향을 결정할 수 있었습니다. 바닥. 예:위에 표시된 MCU에 대한 입력 및 바닥 감지 연결 다이어그램에서 리프트는 핀 3을 통해 MCU에 2층에 있음을 나타냅니다. 그런 다음 사용자는 4층 버튼을 눌러 입력합니다. MCU는 이 명령을 수신하고 두 입력을 비교합니다. 사용자의 입력 "4"가 리미트 스위치의 입력보다 크므로 "2" MCU는 MotorUp 핀을 통해 신호를 보내 트랜지스터를 활성화하여 Up 릴레이에 전원을 공급합니다.

    리프트가 위로 이동하면 프로그램의 현재 층 변수가 3층에 도달하면 업데이트됩니다. 리미트 스위치가 트리거되는 즉시 사용자의 입력 값(이 경우 "4")과 비교되고 이 값을 업데이트된 현재 층과 다시 비교하여 리프트가 원하는 층에 도달했는지 확인합니다. 4층 리미트 스위치가 트리거되면 MCU는 리프트가 4층에 접근했음을 식별하고 Motor Up 신호 핀을 통해 LOW 신호를 보내 모터의 전원을 차단하여 더 이상 이동하지 못하도록 합니다.

    1.3.3 입력에서 제어 분리

    또 다른 중요한 요소는 시스템 입력을 통해 MCU에 영향을 줄 수 있는 AC 간섭으로부터 마이크로컨트롤러의 DC 제어 측을 분리하는 것입니다. 초기에 아이솔레이션 하드웨어가 설치되어 있지 않아 발생했던 문제는 리프트의 금속 몸체에서 발생하는 AC 간섭이 리미트 스위치를 통해 MCU로 전달된다는 것입니다. 리미트 스위치가 별도의 DC 전원에서 작동하더라도 리미트 스위치의 입력이 마이크로 컨트롤러에 직접 공급되지만 리프트가 움직이기 시작할 때 간섭이 발생하고 이 AC 간섭으로 인해 MCU가 리프트를 올바르게 식별할 수 없습니다. 에 있습니다. 이 문제를 해결하기 위해 외부 간섭으로부터 MCU를 분리하기 위해 각 입력에 옵토커플러를 사용했습니다.

    옵토커플러의 목적은 플로어 리미트 스위치에서 생성된 입력 신호를 LED와 포토트랜지스터를 통해 MCU로 전달하는 것입니다. 리미트 스위치가 닫히면 LED가 켜지고 LED에서 들어오는 빛이 광트랜지스터의 게이트를 활성화한 다음 HIGH 신호를 MCU로 전송하여 외부와 MCU의 입력을 성공적으로 분리합니다.

    1.4 프로토타입


    제조공정

    1. 엘리베이터
    2. Arduino 스파이봇
    3. FlickMote
    4. 수제 TV B-Gone
    5. 마스터 시계
    6. 나를 찾기
    7. Arduino Power
    8. Tech-TicTacToe
    9. Arduino Quadruped
    10. Arduino 기반 날씨 풍선 데이터 로거