Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Control de persianas (o cualquier motor de corriente alterna)

Componentes y suministros

Arduino Nano R3
× 1
ControlEverything.com CONTROLADOR DE RELÉ DE 4 CANALES PARA I2C
× 1
Placa de 4 canales de estado sólido
× 1
Motor ciego
Se pueden controlar hasta 4 motores con un Arduino.
× 1
Condensador 100 nF 630 V
Cantidad por motor.
× 1
Resistencia de 100 ohmios (¡0,5 W mínimo!)
¡No use resistencias de precisión (las azules)! Cantidad por motor.
× 1
Varistor 275 VAC
Cantidad por motor.
× 1
Diodo genérico
Cualquier señal o diodo de potencia está bien. Cantidad por persiana.
× 3
Raspberry Pi 3 Modelo B
Opcional para control remoto
× 1
Módulo nRF24 (genérico)
Opcional para control remoto
× 2

Herramientas y máquinas necesarias

Soldador (genérico)

Aplicaciones y servicios en línea

Arduino IDE
Domoticz
Opcional, solo para control remoto. Se puede usar cualquier otro controlador de automatización o incluso ninguno, es solo para activar el comando de la consola.

Acerca de este proyecto

Introducción

Acabo de comprar una casa nueva y quería automatizar todo, empezando por las persianas. Lo que parecía ser un proyecto fácil resultó ser una pesadilla:los motores de potencia relativamente alta (150W) estaban destruyendo mis relés y triacs, qué comunicación inalámbrica y controlador usar y cómo hacerlo funcionar no era obvio, ruido en las líneas estaban causando la activación aleatoria de las persianas (bastante aterrador en medio de la noche) ... Finalmente logré resolver todos esos problemas con componentes muy baratos y espero poder ayudar a alguien más a evitar estos dolores de cabeza y muchos tiempo.

¿No le gusta programar, pero le encanta soldar? Lea de todos modos el tutorial y al final encontrará un circuito discreto, que hace lo mismo, pero sin inteligencia.

Explicación

A la hora de controlar motores, un tema importante es su inductancia, lo que provoca que al intentar abrir el circuito, la corriente insista en seguir fluyendo a través de su dispositivo de ruptura, provocando un voltaje muy alto. Si intentas romper el circuito sin precauciones con un relé pequeño, sus contactos se pegarán, y si usas un triac (relé de estado sólido) la sobretensión (en mi caso medí picos de más de 1600V) destruirá el semiconductor.

Al buscar en Google, me di cuenta de que otras personas tenían problemas con esto, pero tomaron el camino fácil, costoso y voluminoso, solo obtienen relés más grandes, todavía necesitan los relés baratos solo para activar los más grandes, mientras que los contactos aún sufrirán y pueden fallar eventualmente. Como ingeniero, no podía permitirme no obtener la solución más eficiente. :) En el esquema adjunto a continuación, tiene la solución para ahorrar estos grandes relés simplemente agregando una resistencia, un capacitor y un varistor.

El varistor protege el triac de una sobretensión. La resistencia más el condensador forma un circuito RC Snubber que absorbe la energía durante la conmutación de ruptura.

[ PD: Ya que escribí el tutorial directamente de mi cabeza mucho tiempo después de hacer el proyecto, el otro día al mirar más de cerca mi tablero me di cuenta de que en el circuito real coloqué la resistencia y el capacitor entre las líneas marrón y gris (según los colores esquemáticos) de cada motor en lugar de en los contactos del triac. Ambas soluciones funcionan en este caso, pero la ventaja de esta segunda opción es que el amortiguador no está conectado permanentemente a la red. ]

[ PS2: SebDominguez también hizo un buen esquema con la configuración real:

]

En lugar de usar un pin para el comando hacia arriba y otro para abajo para cada persiana, los interruptores comparten una línea común que indica si la persiana tiene que subir o bajar. Entonces usamos 5 entradas en lugar de 8. No se necesita ningún filtro, las entradas son antirrebote por software.

Primero el Arduino activa el módulo de relés para seleccionar la dirección del motor, luego de un pequeño retraso, por lo que el contacto del relé ya está en su lugar, activa el triac, alimentando el motor con los 230 VAC a través de los módulos de relés y triacs baratos sin problema. Para romper el circuito el proceso es el opuesto, primero triacs y luego relés, por lo que los relés nunca sufren una conmutación en vivo.

Puede usar de uno a cuatro motores, sin necesidad de modificar el código, no hará daño tener la lógica para los otros motores si no los usa, a menos que necesite los pines para otra cosa, obviamente.

En casa tenemos dos historias y, por tanto, dos circuitos. Dado que los comandos remotos deben ser únicos, he hecho que el código sea válido para cualquiera de ellos al comentar una línea en el momento de la carga. Si está montando solo un circuito, no necesita cambiar nada, pero si va a construir dos, ya tiene la solución gratis. De hecho, te acabo de mentir, tenemos tres circuitos, pero en total 8 persianas, en un circuito ocupamos los cuatro motores, pero las otras cuatro persianas se dividen en dos usando las primeras tres entradas en un Arduino y solo el número de entrada. cuatro en el segundo. Los circuitos duplicados reaccionan a los comandos remotos exactamente igual, pero donde no hay nada conectado, no hay nada que activar. :) Si está utilizando la versión MySensors del código, entonces puede conectar hasta 256 nodos con 4 persianas cada uno sin cambiar una sola línea en el código, lo suficientemente justo si vive en un palacio.

El sistema en conjunto se parece a esto:

Lo siento, que no es muy elegante y claro, pero es la instalación real, hecha hace tiempo, no solo un circuito preparado para este tutorial y no puedo mostrárselo surtido en una mesa. Como puede ver, cabe en una caja de pared de 22 x 15 x 5,2 cm, pero bastante ajustada. La forma en que lo hice fue poner todo en una caja de madera abierta con una pistola de pegamento caliente:práctico, rápido y fácil.

Si usa el IDE web para el boceto de Arduino, debería encontrar automáticamente todas las bibliotecas necesarias.

Control remoto (opcional)

El objetivo de este tutorial era resolver el problema de la inductancia, pero como extra, también existe la capacidad de control remoto.

El código provisto incluye dos formas de control remoto a través del módulo de radio nrf24l01 +:usando MySensors (recomendado), o enviando un número entero con el número de ciegas y comando 0 o 1 para arriba o abajo.

En ambos casos utilizo un RPi como maestro con un módulo nRF24L01 + directamente conectado y un controlador (Domoticz) instalado.

Para la primera opción, utilizando MySensors, es necesario instalar la puerta de enlace MySensors MQTT. (https://www.mysensors.org/build/raspberry). En mi implementación configurándolo como Ethernet en el localhost. Sigue los pasos del enlace y aquí tienes mis parámetros de configuración que pueden ayudarte (verifica si necesitas lo mismo):

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

Una vez hecho, su integración en Domoticz es muy sencilla:agregue la puerta de enlace HW MySensors MQTT, encienda el nodo y en la configuración de su nuevo hardware lo encontrará directamente.

Para la segunda opción, usando directamente una aplicación personalizada, no MySensors, un conmutador virtual ejecuta el comando de la consola:

  ./remote -m XY  

(X:número ciego, Y:acción).

En el encabezado del script de Arduino puede encontrar más detalles.

El código para este comando remoto se describe en http://hack.lenotta.com/arduino-raspberry-pi-switching-light-with-nrf24l01/ Olvídese de la sección Node.js y el boceto de Arduino, no necesitamos ellos y ese boceto en realidad tiene un error. Lo que necesitamos de aquí es solo la sección "La aplicación del interruptor de lámpara". La sección de hardware también puede ser útil para las conexiones de radio. Por cierto, coloque siempre el condensador de 10 uF en los pines de alimentación del módulo de radio. También considere comprar el módulo de radio con antena externa si tiene espacio. En el interior, el alcance de la antena PCB puede ser muy limitado (menos de 10 m), especialmente si los módulos están encerrados en las paredes como en este proyecto.

Tenga en cuenta que este código tiene que ser modificado un poco, haciendo coincidir los parámetros de radio con los de Arduino y también, haciendo que el código envíe el comando solo una vez en lugar de reintentar hasta 5 veces si no se recibe respuesta, de lo contrario en caso de faltar. la retroalimentación de Arduino verá sus persianas actuando-deteniendo-actuando-deteniendo-actuando.

El código final para la Raspberry se vería así:

  #include  #include  #include  #include  #include  #include  #include  usando espacio de nombres std; // RF24 radio ("/ dev / spidev0.0", 8000000, 25); // de radio RF24 (RPI_V2_GPIO_P1_15, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ); de radio RF24 (RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ); // const int role_pin =7; tuberías uint64_t const [2] ={0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL}; // tuberías uint8_t const [] [6] ={"1Node", "2Node"}; // pirateo para evitar SEG FAULT, problema # 46 en RF24 github https://github.com/TMRh20/RF24.gitunsigned long got_message; void setup (void) { // Preparar el módulo de radio printf ("\ nPreparando interfaz \ n"); radio.begin (); radio.setRetries (15, 15); radio.setChannel (0x70); radio.setDataRate (RF24_250KBPS); radio.setPALevel (RF24_PA_MAX); radio.printDetails (); radio.openWritingPipe (tuberías [0]); radio.openReadingPipe (1, tubos [1]); // radio.startListening ();} bool sendMessage (int action) {// Esta función envía un mensaje, la 'acción', al arduino y espera la respuesta // Devuelve verdadero si se recibe el paquete ACK // Deja de escuchar la radio .deja de escuchar(); mensaje largo sin firmar =acción; printf ("Ahora enviando% lu ...", mensaje); // Envía el mensaje bool ok =radio.write (&message, sizeof (unsigned long)); if (! ok) {printf ("falló ... \ n \ r"); } else {printf ("ok! \ n \ r"); } // Escuche ACK radio.startListening (); // Tomemos un tiempo mientras escuchamos unsigned long started_waiting_at =millis (); bool timeout =falso; while (! radio.available () &&! timeout) {// printf ("% d",! radio.available ()); if (millis () - comenzó_espera_en> 1000) {tiempo de espera =verdadero; }} if (timeout) {// Si esperamos demasiado la transmisión falló printf ("Puta mierda, no me respondo nadie ... \ n \ r"); falso retorno; } else {// Si recibimos el mensaje a tiempo, vamos a leerlo e imprimirlo radio.read (&got_message, sizeof (unsigned long)); printf ("Sí, me han respondido>% lu. \ n \ r", got_message); devuelve verdadero; }} int main (int argc, char ** argv) {elección de char; configuración(); bool conmutado =falso; int contador =0; // Definir las opciones while ((choice =getopt (argc, argv, "m:"))! =-1) {if (choice =='m') {printf ("\ n Hablar con mis amigos NRF24l01 + ....\norte"); while (conmutado ==falso &&contador <1) {// Número de intentos para enviar el mensaje conmutado =sendMessage (atoi (optarg)); contador ++; dormir (1); }} else {// Un poco de ayuda:printf ("\ n \ rEs hora de tomar algunas decisiones ... \ n"); printf ("\ n \ rTIP:Use -m idAction para el mensaje a enviar."); printf ("\ n \ rEjemplo (número de identificación 12, número de acción 1):"); printf ("\ nsudo ./remote -m 121 \ n"); } // devuelve 0 si todo salió bien, 2 en caso contrario if (contador <5) return 0; de lo contrario, devuelve 2; }}  

Como se requiere compilar, etc., se lo facilité y puse todo lo que necesita (solo para el lado de Raspberry, el boceto de Arduino está debajo) en un archivo zip con el código fuente modificado, las bibliotecas y el código compilado para la Raspberry Pi 3:

https://goo.gl/ocCwk3

Si extrae esto en su RPi, debería poder ejecutar el comando remoto.

El resultado

Aquí puedes ver cómo he implementado todo.

Los tres pares de interruptores de la pared controlan tres persianas. La tableta en la pared muestra la interfaz de Domoticz con interruptores virtuales. Detrás de la tableta está la Raspberry, donde se instala el controlador, entre otras cosas. El Arduino no está aquí, está cerca de las persianas en la imagen que se muestra antes; RPi y Arduino están vinculados de forma inalámbrica a través del módulo de radio.

Aquí también puede ver Google Home, que al usar IFTTT con el servicio Webhooks y Domoticz me ayuda a hacer posible cualquier comando de voz, como "Hey Google, ciega las persianas". Si ha llegado a este punto, seguro que no tendrá problemas para hacer que los comandos de voz funcionen.

Aquí tienes un video muy rápido que muestra el resultado.

¡Déjame saber si este tutorial te ha ayudado!

Saludos cordiales,

gomecina

PD Como extra por curiosidad, o porque realmente odias las computadoras, la programación o lo que sea, primero intenté hacer la solución de manera discreta y sin inteligencia alguna. Este es el resultado:

Incluso lo construí y el circuito hace el trabajo, pero lo hice antes de familiarizarme con la plataforma Arduino, que es más flexible y completamente confiable, por lo tanto, no lo voy a explicar. Si es de alguna utilidad para usted, entonces genial, pero no es el alcance de este tutorial, y desaconsejaría usarlo.

Código

Boceto de Arduino

Esquemas

Arduino controlando 4 motores ciegos

Proceso de manufactura

  1. Circuitos permisivos y de enclavamiento
  2. Circuitos de control del motor
  3. Cálculos de potencia
  4. Excavadora
  5. Algoritmos y aumento de potencia del hardware del control por voz
  6. El paquete de software simplifica los diseños de control de motores
  7. Infineon lanza la serie de energía integrada TLE985x para aplicaciones automotrices
  8. El control de calidad es el primer paso para la confiabilidad del motor
  9. Conceptos básicos de los paneles de control eléctrico
  10. Energía y HVAC/Control de climatización
  11. ¿Cómo se controla la velocidad de un motor hidráulico?