Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Controle de cortinas (ou qualquer motor CA)

Componentes e suprimentos

Arduino Nano R3
× 1
ControlEverything.com CONTROLADOR DE RELÉ DE 4 CANAIS PARA I2C
× 1
Placa de 4 canais de estado sólido
× 1
Motor cego
Até 4 motores podem ser controlados com um Arduino.
× 1
Capacitor 100 nF 630 V
Quantidade por motor.
× 1
Resistor 100 ohm (0,5 W min!)
Não use resistores de precisão (os azuis)! Quantidade por motor.
× 1
Varistor 275 VAC
Quantidade por motor.
× 1
Diodo genérico
Qualquer sinal ou diodo de alimentação está OK. Quantidade por persiana.
× 3
Raspberry Pi 3 Modelo B
Opcional para controle remoto
× 1
Módulo nRF24 (genérico)
Opcional para controle remoto
× 2

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)

Aplicativos e serviços online

Arduino IDE
Domoticz
Opcional, apenas para controle remoto. Qualquer outro controlador de automação pode ser usado ou mesmo nenhum, é apenas para acionar o comando do console.

Sobre este projeto





Introdução


Acabei de comprar uma casa nova e queria automatizar tudo, começando pelas persianas. O que parecia ser um projeto fácil acabou sendo um pesadelo:os motores de alta potência relativa (150W) estavam destruindo meus relés e triacs, qual comunicação sem fio e controlador usar e como fazê-lo funcionar não era óbvio, ruído nas filas estavam causando ativação aleatória das cortinas (bem assustador no meio da noite) ... Finalmente consegui resolver todos esses problemas com componentes muito baratos e espero poder ajudar alguém a poupar essas dores de cabeça e muitos Tempo.

Não gosta de programar, mas adora soldar? Leia de qualquer maneira o tutorial e no final você encontra um circuito discreto, que faz o mesmo, mas sem inteligência.





Explicação


No controle de motores, uma questão importante é a indutância deles, que faz com que ao tentar abrir o circuito, a corrente insista em continuar fluindo pelo seu disjuntor, causando uma tensão muito alta. Se você tentar interromper o circuito sem precauções com um pequeno relé, seus contatos ficarão juntos, e se você usar um triac (relé de estado sólido), a sobretensão (no meu caso, medi picos de mais de 1600V) irá destruir o semicondutor.

Percebi, pesquisando no Google, que outras pessoas tinham problemas com isso, mas eles pegaram o caminho fácil, caro e volumoso, eles só conseguem relés maiores, ainda precisando dos relés baratos apenas para ativar os maiores, enquanto os contatos ainda sofrerão e podem falhar eventualmente. Como engenheiro, não poderia deixar de obter a solução mais eficiente. :) No esquema anexo abaixo você tem a solução para poupar esses grandes relés apenas adicionando um resistor, um capacitor e um varistor.

O varistor protege o triac contra sobretensão. O resistor mais o capacitor formam um circuito RC Snubber que absorve a energia durante a comutação de interrupção.

[ PS: já que escrevi o tutorial direto da minha cabeça muito tempo depois de fazer o projeto, outro dia dando uma olhada mais de perto na minha placa percebi, que no circuito real coloquei o resistor e o capacitor entre as linhas marrom e cinza (de acordo com as cores esquemáticas) de cada motor em vez de nos contatos triac. Ambas as soluções funcionam neste caso, mas a vantagem desta segunda opção é que o Snubber não está permanentemente conectado à rede elétrica. ]

[ PS2: SebDominguez também fez um bom esquema com a configuração real:

]

Em vez de usar um pino para o comando para cima e outro para baixo para cada cortina, os interruptores compartilham uma linha comum que indica se a cortina deve subir ou descer. Portanto, usamos 5 entradas em vez de 8. Nenhum filtro é necessário, as entradas são depuradas por software.

Primeiro o Arduino ativa o módulo de relés para selecionar a direção do motor, após um pequeno retardo, de forma que o contato do relé já esteja no lugar, ele ativa o triac, alimentando o motor com o 230 VAC através dos relés baratos e módulos triacs sem problemas. Para interromper o circuito, o processo é o oposto, primeiro triacs e depois relés, para que os relés nunca sofram comutação ativa.

Você pode usar de um a quatro motores, sem necessidade de modificar o código, não faz mal ter a lógica para os outros motores se não os usar, a menos que precise dos pinos para outra coisa, obviamente.

Em casa temos duas histórias e, portanto, dois circuitos. Uma vez que os comandos remotos devem ser exclusivos, fiz o código para ser válido para qualquer um deles, comentando uma linha no momento do upload. Se você está montando apenas um circuito, não precisa alterar nada, mas se for construir dois, já tem a solução de graça. Na verdade, acabei de mentir para você, temos três circuitos, mas no total 8 cortinas, em um circuito ocupamos todos os quatro motores, mas as outras quatro cortinas são divididas em dois usando as três primeiras entradas em um Arduino e apenas o número de entrada quatro no segundo. Os circuitos duplicados reagem aos comandos remotos exatamente da mesma forma, mas onde não há nada conectado, não há nada para ativar. :) Se você estiver usando a versão MySensors do código, poderá conectar até 256 nodes com 4 blinds, cada um sem alterar uma única linha no código, o que é justo se você mora em um palácio.

O sistema parece mais ou menos assim:

Desculpe, isso não é muito extravagante e claro, mas é a instalação real, feita há muito tempo, não apenas um circuito preparado para este tutorial e não posso mostrar para vocês sortidos sobre uma mesa. Como você pode ver, cabe em uma caixa de parede de 22 x 15 x 5,2 cm, mas é bem apertada. A maneira como fiz foi colocar tudo em uma caixa de madeira aberta usando uma pistola de cola quente:prático, rápido e fácil.

Se você usar o IDE da web para o esboço do Arduino, ele deverá localizar automaticamente todas as bibliotecas necessárias.





Controle remoto (opcional)


O objetivo deste tutorial era resolver o problema da indutância, mas como um extra, existe também o recurso de controle remoto.

O código fornecido inclui duas formas de controle remoto através do módulo de rádio nrf24l01 +:usando MySensors (recomendado), ou enviando um inteiro com o número de cegos e comando 0 ou 1 para cima ou para baixo.

Em ambos os casos utilizo um RPi como mestre com um módulo nRF24L01 + diretamente conectado a ele e um controlador (Domoticz) instalado.

Para a primeira opção, usando MySensors, é necessário instalar o gateway MQTT MySensors. (https://www.mysensors.org/build/raspberry). Na minha implementação configurando como Ethernet no localhost. Siga os passos do link e aqui você tem meus parâmetros de configuração que podem te ajudar (verifique se você precisa dos mesmos):

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

Uma vez feita sua integração no Domoticz é muito simples:adicione o gateway HW MySensors MQTT, ligue o nó e na configuração do seu novo hardware você o encontrará diretamente.

Para a segunda opção, usando diretamente um aplicativo personalizado, não MySensors, um switch virtual executa o comando do console:
  ./remote -m XY  

(X:cego #, Y:ação).

No cabeçalho do script do Arduino, você pode encontrar mais detalhes.

O código para este comando remoto é descrito em http://hack.lenotta.com/arduino-raspberry-pi-switching-light-with-nrf24l01/ Esqueça a seção Node.js e o esboço do Arduino, não precisamos eles e aquele esboço realmente tem um bug. O que precisamos a partir daqui é apenas a seção "O aplicativo do interruptor de lâmpada". A seção de hardware também pode ser útil para as conexões de rádio. A propósito, sempre coloque o capacitor de 10 uF nos pinos de alimentação do módulo de rádio. Considere também obter o módulo de rádio com antena externa se você tiver espaço. Em ambientes internos, o alcance da antena PCB pode ser muito limitado (menos de 10 m), especialmente se os módulos forem inseridos nas paredes como neste projeto.

Lembre-se que este código deve ser um pouco modificado, combinando os parâmetros do rádio com os do Arduino e também, fazendo com que o código envie o comando apenas uma vez ao invés de repetir até 5 vezes se nenhuma resposta for recebida, caso contrário em caso de falta Com o feedback do Arduino, você verá seus blinds agindo-parando-agindo-parando-agindo.

O código final para o Raspberry seria assim:
  #include  #include  #include  #include  #include  #include  #include  usando namespace std; // RF24 radio ("/ dev / spidev0.0", 8000000, 25); // rádio RF24 (RPI_V2_GPIO_P1_15, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ); rádio RF24 (RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ); // const int role_pin =7; tubos uint64_t const [2] ={0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL}; // tubos uint8_t const [] [6] ={"1Node", "2Node"}; // hackear para evitar SEG FAULT, problema # 46 no RF24 github https://github.com/TMRh20/RF24.gitunsigned long got_message; void setup (void) { // Prepare o módulo de rádio printf ("\ nPreparing interface \ n"); radio.begin (); radio.setRetries (15, 15); radio.setChannel (0x70); radio.setDataRate (RF24_250KBPS); radio.setPALevel (RF24_PA_MAX); radio.printDetails (); radio.openWritingPipe (tubos [0]); radio.openReadingPipe (1, tubos [1]); // radio.startListening ();} bool sendMessage (int action) {// Esta função envia uma mensagem, a 'ação', para o arduino e espera pela resposta // Retorna verdadeiro se o pacote ACK for recebido // Pare de ouvir o rádio .stopListening (); mensagem longa não assinada =ação; printf ("Enviando% lu ...", mensagem); // Envia a mensagem bool ok =radio.write (&message, sizeof (unsigned long)); if (! ok) {printf ("falhou ... \ n \ r"); } else {printf ("ok! \ n \ r"); } // Ouça ACK radio.startListening (); // Vamos esperar enquanto ouvimos unsigned long started_waiting_at =millis (); tempo limite do bool =falso; while (! radio.available () &&! timeout) {// printf ("% d",! radio.available ()); if (millis () - started_waiting_at> 1000) {timeout =true; }} if (timeout) {// Se esperamos muito tempo, a transmissão falhou printf ("Puta mierda, no me responde nadie ... \ n \ r"); retorna falso; } else {// Se recebemos a mensagem a tempo, vamos lê-la e imprimi-la radio.read (&got_message, sizeof (unsigned long)); printf ("Sim, me han respondido>% lu. \ n \ r", got_message); return true; }} int main (int argc, char ** argv) {char escolha; configurar(); bool comutado =falso; contador interno =0; // Defina as opções while ((choice =getopt (argc, argv, "m:"))! =-1) {if (choice =='m') {printf ("\ n Conversando com meus NRF24l01 + amigos lá fora .... \ n "); while (comutado ==false &&counter <1) {// Número de tentativas de envio da mensagem comutada =sendMessage (atoi (falarg)); contador ++; dormir (1); }} else {// Uma ajudinha:printf ("\ n \ rÉ hora de fazer algumas escolhas ... \ n"); printf ("\ n \ rTIP:Use -m idAction para a mensagem a ser enviada."); printf ("\ n \ rExemplo (número de id 12, número de ação 1):"); printf ("\ nsudo ./remote -m 121 \ n"); } // retorna 0 se tudo correu bem, 2 caso contrário, if (contador <5) retorna 0; senão retorne 2; }}  

Como é necessário compilar e assim por diante, facilitei para você e coloquei tudo que você precisa (apenas para o lado do Raspberry, o esboço do Arduino está abaixo) em um arquivo zip com o código-fonte modificado, bibliotecas e o código compilado para o Raspberry Pi 3:

https://goo.gl/ocCwk3

Se você extrair isso em seu RPi, você poderá apenas executar o comando remoto.





O resultado


Aqui você pode ver como implementei tudo.

Os três pares de interruptores na parede controlam três persianas. O tablet na parede mostra a interface Domoticz com interruptores virtuais. Atrás do tablet está o Raspberry, onde fica instalado o controlador, entre outras coisas. O Arduino não está aqui, está perto das cortinas na imagem mostrada antes; RPi e Arduino são conectados sem fio por meio do módulo de rádio.

Aqui você também pode ver o Google Home, que usando IFTTT com serviço Webhooks e Domoticz me ajuda a tornar qualquer comando de voz possível, como "Ei Google, feche as cortinas." Se você chegou a este ponto, com certeza não terá problemas para fazer os comandos de voz funcionarem.

Aqui você tem um vídeo bem rápido mostrando o resultado.

Deixe-me saber se este tutorial ajudou você!

Atenciosamente,

gomecin

P.S. Como um extra de curiosidade, ou porque você realmente odeia computadores, programação ou o que seja, primeiro tentei fazer a solução de forma discreta e sem nenhuma inteligência. Este é o resultado:

Até construí, e o circuito faz o trabalho, mas fiz antes de me familiarizar com a plataforma Arduino, que é mais flexível e totalmente confiável, por isso não vou explicar. Se for de alguma utilidade para você, ótimo, mas não é o escopo deste tutorial, e eu não gostaria de usá-lo.

Código

Esboço do Arduino

Esquemas

Arduino controlando 4 motores cegos

Processo de manufatura

  1. Circuitos permissivos e de bloqueio
  2. Circuitos de controle do motor
  3. Cálculos de potência
  4. Bulldozer
  5. Algoritmos e aumento de potência do hardware do controle de voz
  6. Infineon lança série de potência embarcada TLE985x para aplicações automotivas
  7. O controle de qualidade é a primeira etapa para a confiabilidade do motor
  8. Noções básicas de painéis de controle elétrico
  9. Energia e HVAC/Controle climático
  10. Como você controla a velocidade de um motor hidráulico?