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

블라인드(또는 AC 전원 모터) 제어

구성품 및 소모품

Arduino Nano R3
× 1
ControlEverything.com I2C용 4채널 릴레이 컨트롤러
× 1
솔리드 스테이트 4 채널 보드
× 1
맹인 운동
하나의 Arduino로 최대 4개의 모터를 제어할 수 있습니다.
× 1
커패시터 100nF 630V
모터당 수량.
× 1
저항 100옴(최소 0.5W!)
정밀 저항기(파란색)를 사용하지 마십시오! 모터당 수량.
× 1
바리스터 275VAC
모터당 수량.
× 1
다이오드 일반
모든 신호 또는 전원 다이오드는 정상입니다. 블라인드 당 수량.
× 3
라즈베리 파이 3 모델 B
리모컨용 옵션
× 1
nRF24 모듈(일반)
리모컨용 옵션
× 2

필요한 도구 및 기계

납땜 인두(일반)

앱 및 온라인 서비스

Arduino IDE
Domoticz
선택 사항, 원격 제어 전용. 다른 자동화 컨트롤러를 사용하거나 아예 사용하지 않을 수도 있습니다. 이는 단지 콘솔 명령을 트리거하기 위한 것입니다.

이 프로젝트 정보

소개

새 집을 구입하고 블라인드부터 시작하여 모든 것을 자동화하고 싶었습니다. 쉬울 것 같았던 프로젝트가 다소 악몽으로 밝혀졌습니다. 상대적으로 높은 전력의 모터(150W)가 제 릴레이와 트라이액을 파괴하고, 어떤 무선 통신과 컨트롤러를 사용할지, 어떻게 작동하게 만드는지 명확하지 않았고 소음이 발생했습니다. 라인에서 블라인드가 무작위로 활성화되고 있었습니다(한밤중에 꽤 무섭습니다)... 마침내 저는 매우 저렴한 구성 요소로 이러한 모든 문제를 해결할 수 있었고 희망적으로 다른 사람이 이러한 두통과 많은 문제를 해결하도록 도울 수 있기를 바랍니다. 시간.

프로그래밍은 좋아하지 않지만 납땜을 좋아합니까? 어쨌든 튜토리얼을 읽고 마지막에 동일한 작업을 수행하지만 지능이 없는 개별 회로를 찾을 수 있습니다.

설명

모터를 제어할 때 중요한 문제는 인덕턴스로, 회로를 열려고 할 때 전류가 차단 장치를 통해 계속 흐르도록 하여 매우 높은 전압을 유발합니다. 작은 릴레이로 아무런 대책 없이 회로를 끊으려 하면 접점이 서로 달라붙어 트라이악(무접점 릴레이)을 사용하면 과전압(저의 경우 1600V 이상 피크를 측정)이 파손됩니다. 반도체.

인터넷 검색을 통해 다른 사람들이 이것에 문제가 있다는 것을 깨달았습니다. 하지만 그들은 쉽고 비싸고 방대한 방식을 택했습니다. 그들은 더 큰 릴레이를 얻었고 더 큰 릴레이를 활성화하기 위해 여전히 저렴한 릴레이가 필요했습니다. 결국 실패. 엔지니어로서 가장 효율적인 솔루션을 얻을 수 없었습니다. :) 아래에 첨부된 회로도에는 하나의 저항, 하나의 커패시터 및 하나의 배리스터를 추가하기만 하면 이 큰 릴레이를 절약할 수 있는 솔루션이 있습니다.

배리스터는 과전압으로부터 트라이액을 보호합니다. 저항과 커패시터는 차단 정류 동안 에너지를 흡수하는 RC 스너버 회로를 형성합니다.

[추신: 프로젝트를 만든 후 오랜 시간 동안 머리에서 직접 튜토리얼을 작성했기 때문에 다른 날 내 보드를 자세히 살펴보면 실제 회로에서 저항과 커패시터를 갈색과 회색 선 사이에 배치했음을 깨달았습니다. 트라이액 접점 대신 각 모터의 회로도 색상). 이 경우 두 솔루션 모두 작동하지만 이 두 번째 옵션의 장점은 Snubber가 주전원에 영구적으로 연결되지 않는다는 것입니다. ]

[PS2: SebDominguez도 실제 구성으로 멋진 스키마를 만들었습니다.

]

각 블라인드에 대해 하나의 핀을 업 명령에 사용하고 다른 핀을 다운에 사용하는 대신 스위치는 블라인드가 올라가야 하는지 내려가야 하는지를 나타내는 공통 라인을 공유합니다. 따라서 8개 대신 5개의 입력을 사용합니다. 필터가 필요하지 않고 입력이 소프트웨어 디바운스됩니다.

먼저 Arduino는 릴레이 모듈을 활성화하여 모터 방향을 선택합니다. 약간의 지연 후에 릴레이 접점이 이미 제자리에 있으므로 트라이액을 활성화하여 문제 없이 저렴한 릴레이 및 트라이액 모듈을 통해 모터에 230VAC를 공급합니다. 회로를 차단하는 프로세스는 반대입니다. 먼저 트라이액을 사용한 다음 릴레이를 수행하므로 릴레이는 라이브 정류를 겪지 않습니다.

코드를 수정할 필요 없이 1개에서 4개의 모터를 사용할 수 있습니다. 다른 모터에 대한 핀이 필요하지 않는 한, 분명히 다른 모터에 대한 논리를 사용하지 않으면 다른 모터에 대한 논리를 갖는 데 해가 되지 않습니다.

집에는 두 개의 이야기가 있으므로 두 개의 회로가 있습니다. 원격 명령은 고유해야 하므로 업로드 시 한 줄에 주석을 추가하여 모든 명령에 유효한 코드를 만들었습니다. 하나의 회로만 장착하는 경우 아무 것도 변경할 필요가 없지만 두 개를 구축하는 경우 이미 무료 솔루션이 있는 것입니다. 사실 내가 방금 거짓말을 했다, 우리는 3개의 회로를 가지고 있지만, 총 8개의 블라인드, 하나의 회로에서 우리는 4개의 모터를 모두 차지하지만, 다른 4개의 블라인드는 1개의 Arduino에서 처음 3개의 입력과 입력 번호만 사용하여 2개로 분할됩니다. 두 번째에 4개. 복제된 회로는 원격 명령에 정확히 동일하게 반응하지만 연결된 것이 없으면 활성화할 것이 없습니다. :) MySensors 버전의 코드를 사용하는 경우 코드에서 한 줄도 변경하지 않고 각각 4개의 블라인드가 있는 최대 256개의 노드를 연결할 수 있습니다. 궁전에 살고 있다면 충분히 공평합니다.

시스템은 전체적으로 다음과 같습니다.

너무 화려하고 명료하지 않은 것이 아쉽지만 이 튜토리얼을 위해 준비된 회로가 아니라 오래전에 만든 실제 설치이며 테이블에 모듬으로 보여 드릴 수는 없습니다. 보시다시피 22 x 15 x 5,2 cm 벽 상자에 맞지만 꽤 빡빡합니다. 제가 만든 방법은 뜨거운 글루건을 사용하여 모든 것을 열린 나무 상자에 넣는 것이었습니다. 실용적이고 빠르고 쉽습니다.

Arduino 스케치에 웹 IDE를 사용하는 경우 필요한 모든 라이브러리를 자동으로 찾아야 합니다.

원격 제어(선택 사항)

이 튜토리얼의 목적은 인덕턴스 문제를 해결하는 것이지만 추가로 원격 제어 기능도 있습니다.

제공된 코드에는 라디오 모듈 nrf24l01+를 통한 원격 제어의 두 가지 방법이 포함되어 있습니다. MySensors(권장)를 사용하거나 블라인드 숫자와 함께 정수를 전송하고 위 또는 아래에 대해 0 또는 1을 명령하는 방법입니다.

두 경우 모두 nRF24L01+ 모듈이 직접 부착되고 컨트롤러(Domoticz)가 설치된 RPi를 마스터로 사용합니다.

MySensors를 사용하는 첫 번째 옵션의 경우 MySensors MQTT 게이트웨이를 설치하는 데 필요합니다. (https://www.mysensors.org/build/raspberry). 내 구현에서는 로컬 호스트에서 이더넷으로 구성합니다. 링크의 단계를 따르십시오. 여기에 도움이 될 수 있는 구성 매개변수가 있습니다(필요한지 확인):

sudo ./configure --my-gateway=mqtt --my-controller-ip-address=127.0.0.1 --my-mqtt-publish-topic-prefix=domoticz/in/MyMQTT --my-mqtt-subscribe-topic -prefix=domoticz/out/MyMQTT --my-mqtt-client-id=mygateway1 --my-transport=rf24 --my-port=1883 --my-rf24-irq-pin=15

Domoticz에서 통합이 완료되면 HW MySensors MQTT 게이트웨이를 추가하고 노드에 전원을 공급하면 새 하드웨어 설정에서 바로 찾을 수 있습니다.

두 번째 옵션의 경우 MySensors가 아닌 사용자 지정 애플리케이션을 직접 사용하여 가상 스위치가 콘솔 명령을 실행합니다.

 ./remote -m XY  

(X:블라인드 #, Y:액션).

Arduino 스크립트의 헤더에서 자세한 내용을 찾을 수 있습니다.

이 원격 명령에 대한 코드는 http://hack.lenotta.com/arduino-raspberry-pi-switching-light-with-nrf24l01/에 설명되어 있습니다. Node.js 섹션과 Arduino 스케치는 잊어버리세요. 필요하지 않습니다. 그들과 그 스케치에는 실제로 버그가 있습니다. 여기서 필요한 것은 "램프 스위치 애플리케이션" 섹션뿐입니다. 하드웨어 섹션은 라디오 연결에도 유용할 수 있습니다. 그건 그렇고, 항상 10uF 커패시터를 라디오 모듈 전원 핀에 놓으십시오. 또한 공간이 있다면 외부 안테나가 있는 라디오 모듈을 구입하는 것도 고려하십시오. 실내에서 PCB 안테나의 범위는 매우 제한될 수 있습니다(10m 미만). 특히 이 프로젝트와 같이 모듈이 벽으로 둘러싸인 경우에는 더욱 그렇습니다.

이 코드는 무선 매개변수를 Arduino 매개변수와 일치시키고 응답이 수신되지 않으면 최대 5번 재시도하는 대신 한 번만 명령을 보내도록 코드를 수정해야 합니다. 그렇지 않으면 누락된 경우 Arduino 피드백을 보면 블라인드가 작동-중-중-중-작동하는 것을 볼 수 있습니다.

Raspberry의 최종 코드는 다음과 같습니다.

#include #include #include #include #include #include #include 사용 네임스페이스 std;//RF24 라디오("/dev/spidev0.0",8000000, 25); // RF24 라디오 (RPI_V2_GPIO_P1_15, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ) RF24 라디오 (RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ); // CONST INT role_pin =7; CONST uint64_t 파이프 [2] ={0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL} // CONST uint8_t 파이프 [] [6] ={"1Node","2Node"};// SEG FAULT를 피하기 위한 해킹, RF24 github에서 #46 문제 github https://github.com/TMRh20/RF24.gitunsigned long got_message;void setup(void){ //라디오 모듈 준비 printf("\n인터페이스 준비\n"); radio.begin(); radio.setRetries(15, 15); 라디오.setChannel(0x70); radio.setDataRate(RF24_250KBPS); radio.setPALevel(RF24_PA_MAX); radio.printDetails(); radio.openWritingPipe(파이프[0]); radio.openReadingPipe(1,파이프[1]); // radio.startListening();}bool sendMessage(int action){ // 이 함수는 'action'이라는 메시지를 arduino에 보내고 응답을 기다립니다. //ACK 패키지가 수신되면 true를 반환합니다. // 라디오 수신 중지 .stopListening(); 서명되지 않은 긴 메시지 =작업; printf("현재 %lu을(를) 전송 중입니다...", 메시지); //메시지 보내기 bool ok =radio.write( &message, sizeof(unsigned long) ); if (!ok){ printf("실패...\n\r"); }else{ printf("알았어!\n\r"); } //ACK 수신 radio.startListening(); // unsigned long started_waiting_at =millis(); 부울 시간 초과 =거짓; while ( ! radio.available() &&! timeout ) { //printf("%d", !radio.available()); if (millis() - started_waiting_at> 1000 ){ timeout =true; } } if( timeout ){ //너무 오래 기다리면 전송 실패 printf("Puta mierda, no me responde nadie...\n\r"); 거짓을 반환합니다. }else{ //제시간에 메시지를 수신했다면 읽고 출력합시다. radio.read( &got_message, sizeof(unsigned long) ); printf("예, 응답합니다.> %lu.\n\r",got_message); true를 반환합니다. }} int main( int argc, char ** argv){ 문자 선택; 설정(); 부울 전환 =거짓; 정수 카운터 =0; //옵션을 정의합니다. ....\N"); while(switched ==false &&counter <1){ //메시지 전송 시도 횟수 switch =sendMessage(atoi(optarg)); 카운터 ++; 수면(1); } }else{ // 약간의 도움:printf("\n\r선택을 할 시간입니다...\n"); printf("\n\r팁:보낼 메시지에 -m idAction을 사용하십시오. "); printf("\n\r예(id number 12, action number 1):"); printf("\nsudo ./원격 -m 121\n"); } // 모든 것이 정상이면 0을 반환하고, 그렇지 않으면 2를 반환합니다. if (counter <5) return 0; 그렇지 않으면 2를 반환합니다. }}  

컴파일 등에 필요하기 때문에 수정된 소스 코드, 라이브러리 및 라즈베리 파이 3:

https://goo.gl/ocCwk3

이것을 RPi로 추출하면 원격 명령을 실행할 수 있어야 합니다.

결과

여기에서 내가 모든 것을 구현한 방법을 볼 수 있습니다.

벽에 있는 세 쌍의 스위치는 세 개의 블라인드를 제어합니다. 벽면의 태블릿은 가상 스위치가 있는 Domoticz 인터페이스를 보여줍니다. 태블릿 뒤에는 무엇보다도 컨트롤러가 설치된 Raspberry가 있습니다. Arduino는 여기에 있지 않고 이전에 표시된 그림의 블라인드에 가깝습니다. RPi와 Arduino는 무선 모듈을 통해 무선으로 연결됩니다.

여기에서 Webhooks 서비스 및 Domoticz와 함께 IFTTT를 사용하여 "Hey Google, 블라인드 다운"과 같은 음성 명령을 가능하게 하는 Google Home도 볼 수 있습니다. 이 지점에 도달했다면 음성 명령이 작동하는 데 문제가 없을 것입니다.

여기에 결과를 보여주는 매우 빠른 동영상이 있습니다.

이 튜토리얼이 도움이 되었는지 알려주세요!

안부,

고메신

추신 호기심에 대한 추가로, 또는 컴퓨터, 프로그래밍 또는 무엇이든 정말 싫어하기 때문에 먼저 지능이 전혀 없는 이산적으로 솔루션을 만들려고했습니다. 결과는 다음과 같습니다.

직접 만들어보기도 했고 회로도 작동하지만 더 유연하고 완벽하게 안정적인 Arduino 플랫폼에 익숙해지기 전에 했기 때문에 설명하지 않겠습니다. 그것이 당신에게 유용하다면 훌륭하지만 이 튜토리얼의 범위가 아니므로 사용하지 않는 것이 좋습니다.

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

Arduino 스케치

회로도

4개의 블라인드 모터를 제어하는 ​​Arduino

제조공정

  1. 허용 및 인터록 회로
  2. 모터 제어 회로
  3. 전력 계산
  4. 불도저
  5. 음성 제어의 알고리즘 및 하드웨어 성능 향상
  6. Infineon, 자동차 애플리케이션용 TLE985x 임베디드 전원 시리즈 출시
  7. 품질 관리는 모터 신뢰성의 첫 번째 단계입니다
  8. 전기 제어반의 기초
  9. 전력 및 HVAC/기후 제어
  10. 유압 모터의 속도는 어떻게 제어합니까?