Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Besturing van jaloezieën (of een willekeurige AC-motor)

Componenten en benodigdheden

Arduino Nano R3
× 1
ControlEverything.com 4-KANAALS RELAISCONTROLLER VOOR I2C
× 1
Solid state 4-kanaals bord
× 1
Blinde motor
Tot 4 motoren kunnen worden bestuurd met één Arduino.
× 1
Condensator 100 nF 630 V
Aantal per motor.
× 1
Weerstand 100 ohm (0,5 W min!)
Gebruik geen precisieweerstanden (de blauwe)! Aantal per motor.
× 1
Varistor 275 VAC
Aantal per motor.
× 1
Diode generieke
Elk signaal of voedingsdiode is in orde. Aantal per rolgordijn.
× 3
Raspberry Pi 3 Model B
Optioneel voor afstandsbediening
× 1
nRF24-module (algemeen)
Optioneel voor afstandsbediening
× 2

Benodigde gereedschappen en machines

Soldeerbout (algemeen)

Apps en online services

Arduino IDE
Domoticz
Optioneel, alleen voor afstandsbediening. Elke andere automatiseringscontroller kan worden gebruikt of zelfs geen, het is alleen om het console-commando te activeren.

Over dit project

Inleiding

Ik heb net een nieuw huis gekocht en wilde alles automatiseren, te beginnen met de zonwering. Wat een eenvoudig project leek, bleek een nachtmerrie te zijn:de relatief krachtige motoren (150W) vernietigden mijn relais en triacs, welke draadloze communicatie en controller ik moest gebruiken en hoe het te laten werken was niet duidelijk, ruis in de rijen veroorzaakten willekeurige activering van de jaloezieën (best eng in het holst van de nacht)... Eindelijk is het me gelukt om al die problemen op te lossen met zeer goedkope componenten en hopelijk kan ik iemand anders helpen om deze hoofdpijn en een hoop gedoe te besparen tijd.

Houd je niet van programmeren, maar wel van solderen? Lees hoe dan ook de tutorial en aan het einde vind je een discrete schakeling, die hetzelfde doet, maar zonder intelligentie.

Uitleg

Bij het aansturen van motoren is een belangrijk punt hun inductantie, wat ervoor zorgt dat wanneer je het circuit probeert te openen, de stroom erop staat te blijven stromen door je onderbrekingsapparaat, wat een zeer hoge spanning veroorzaakt. Als je het circuit zonder voorzorgsmaatregelen probeert te verbreken met een klein relais, zullen hun contacten aan elkaar blijven plakken, en als je een triac (solid-state relais) gebruikt, zal de overspanning (in mijn geval heb ik pieken van meer dan 1600V gemeten) vernietigen de halfgeleider.

Ik realiseerde me door te googelen dat andere mensen hier problemen mee hadden, maar ze namen de gemakkelijke, dure en omvangrijke manier, ze krijgen alleen grotere relais, en hebben nog steeds de goedkope relais nodig om de grotere te activeren, terwijl de contacten nog steeds lijden en mogelijk uiteindelijk mislukken. Als ingenieur kon ik het mezelf niet permitteren om niet de meest efficiënte oplossing te vinden. :) In het onderstaande schema heb je de oplossing om deze grote relais te sparen door gewoon een weerstand, een condensator en een varistor toe te voegen.

De varistor beschermt de triac tegen overspanning. De weerstand plus condensator vormt een RC Snubber-circuit dat de energie absorbeert tijdens de brekende commutatie.

[PS: aangezien ik de tutorial lang na het maken van het project rechtstreeks uit mijn hoofd had geschreven, realiseerde ik me onlangs toen ik mijn bord van dichterbij bekeek, dat ik in het echte circuit de weerstand en condensator tussen de bruine en grijze lijnen plaatste (volgens de schematische kleuren) van elke motor in plaats van in de triac-contacten. Beide oplossingen werken in dit geval, maar het voordeel van deze tweede optie is dat de Snubber niet permanent op het lichtnet is aangesloten. ]

[PS2: SebDominguez heeft ook een mooi schema gemaakt met de daadwerkelijke configuratie:

]

In plaats van één pin te gebruiken voor het op-commando en een andere voor neer voor elke jaloezie, delen de schakelaars een gemeenschappelijke lijn die aangeeft of de jaloezie omhoog of omlaag moet. We gebruiken dus 5 inputs in plaats van 8. Er is geen filter nodig, inputs zijn softwarematig gedebounced.

Eerst activeert de Arduino de relaismodule om de motorrichting te selecteren, na een kleine vertraging, dus het relaiscontact is al op zijn plaats, het activeert de triac en voedt de motor zonder probleem met de 230 VAC via de goedkope relais- en triacs-modules. Om het circuit te verbreken is het proces het tegenovergestelde, eerst triacs en dan relais, dus relais ondergaan nooit een live commutatie.

Je mag één tot vier motoren gebruiken, zonder dat je de code hoeft aan te passen, het kan geen kwaad om de logica voor de andere motoren te hebben als je ze niet gebruikt, tenzij je de pinnen natuurlijk voor iets anders nodig hebt.

Thuis hebben we twee verdiepingen en dus twee circuits. Omdat commando's op afstand uniek moeten zijn, heb ik de code geldig gemaakt voor elk van deze door één regel te becommentariëren tijdens het uploaden. Als je slechts één circuit monteert, hoef je niets te veranderen, maar als je er twee gaat bouwen, heb je de oplossing al gratis. In feite heb ik net tegen je gelogen, we hebben drie circuits, maar in totaal 8 jaloezieën, in één circuit bezetten we alle vier de motoren, maar de andere vier jaloezieën worden in tweeën gesplitst door de eerste drie ingangen in één Arduino te gebruiken en alleen het invoernummer vier in de tweede. De gedupliceerde circuits reageren precies hetzelfde op de afstandsbedieningscommando's, maar waar niets is aangesloten, is er niets om te activeren. :) Als je de MySensors-versie van de code gebruikt, kun je tot 256 nodes verbinden met elk 4 jaloezieën die geen enkele regel in de code veranderen, redelijk genoeg als je in een paleis woont.

Het systeem ziet er ongeveer zo uit:

Sorry, het is niet erg luxe en duidelijk, maar het is de echte installatie, lang geleden gemaakt, niet alleen een voorbereid circuit voor deze tutorial en ik kan het je niet gesorteerd op een tafel laten zien. Zoals je kunt zien past hij in een 22 x 15 x 5,2 cm wallbox, maar wel vrij krap. De manier waarop ik het maakte was om alles in een open houten kist te doen met een heet lijmpistool:praktisch, snel en gemakkelijk.

Als u de web-IDE voor de Arduino-schets gebruikt, zou deze automatisch alle benodigde bibliotheken moeten vinden.

Afstandsbediening (optioneel)

Het doel van deze tutorial was om het inductieprobleem op te lossen, maar als extraatje is er ook de mogelijkheid tot afstandsbediening.

De meegeleverde code omvat twee manieren van afstandsbediening via de radiomodule nrf24l01+:met behulp van MySensors (aanbevolen), of door een geheel getal met het aantal jaloezieën te sturen en het commando 0 of 1 voor omhoog of omlaag te sturen.

In beide gevallen gebruik ik een RPi als master met een nRF24L01+ module er direct op aangesloten, en een controller (Domoticz) geïnstalleerd.

Voor de eerste optie, het gebruik van MySensors, is het nodig om de MySensors MQTT-gateway te installeren. (https://www.mysensors.org/build/raspberry). In mijn implementatie configureren als Ethernet in de localhost. Volg de stappen in de link en hier heb je mijn configuratieparameters die je kunnen helpen (controleer of je dezelfde nodig hebt):

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

Eenmaal klaar is de integratie in Domoticz heel eenvoudig:voeg de HW MySensors MQTT-gateway toe, voed de node en in de installatie van uw nieuwe hardware vindt u deze direct.

Voor de tweede optie, waarbij rechtstreeks een aangepaste toepassing wordt gebruikt, niet MySensors, voert een virtuele schakelaar het console-commando uit:

 ./remote -m XY  

(X:blind #, Y:actie).

In de header van het Arduino-script vind je meer details.

De code voor deze externe opdracht wordt beschreven in http://hack.lenotta.com/arduino-raspberry-pi-switching-light-with-nrf24l01/ Vergeet de Node.js-sectie en de Arduino-schets, die hebben we niet nodig hen en die schets heeft eigenlijk een bug. Wat we hier nodig hebben, is alleen het gedeelte "De toepassing van de lampschakelaar". Het hardwaregedeelte kan ook handig zijn voor de radioverbindingen. Plaats trouwens altijd de 10 uF-condensator op de voedingspinnen van de radiomodule. Overweeg ook om de radiomodule met externe antenne te kopen als je de ruimte hebt. Binnen kan het bereik van de PCB-antenne zeer beperkt zijn (minder dan 10 m), vooral als modules in de muren zijn ingesloten, zoals voor dit project.

Houd er rekening mee dat deze code een beetje moet worden aangepast, zodat de radioparameters overeenkomen met die van Arduino en ook, zodat de code de opdracht slechts één keer verzendt in plaats van tot 5 keer opnieuw te proberen als er geen antwoord wordt ontvangen, anders in het geval van ontbrekende de Arduino-feedback ziet u uw jaloezieën acteren-stoppen-acteren-stoppen-acteren.

De uiteindelijke code voor de Raspberry ziet er als volgt uit:

#include #include #include #include #include #include #include met naamruimte std;//RF24 radio("/dev/spidev0.0",8000000 , 25); // RF24 radio (RPI_V2_GPIO_P1_15, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ) RF24 radio (RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ); // const int role_pin =7; const uint64_t leidingen [2] ={0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL} // const uint8_t pijpen [] [6] ={"1Node","2Node"};// hack om SEG FAULT te voorkomen, probleem #46 op RF24 github https://github.com/TMRh20/RF24.gitunsigned long got_message;void setup(void){ //Bereid de radiomodule printf("\nBezig met voorbereiden van interface\n"); radio.begin(); radio.setRetries( 15, 15); radio.setChannel (0x70); radio.setDataRate(RF24_250KBPS); radio.setPALevel(RF24_PA_MAX); radio.printDetails(); radio.openWritingPipe(pijpen[0]); radio.openReadingPipe(1,pipes[1]); // radio.startListening ();} bool sendMessage (int action) { // Deze functie stuurt een bericht, de 'action', naar de Arduino en wacht op antwoord // Retourneert waar als ACK-pakket is ontvangen // Stop met luisteren naar radio .stopListening(); niet-ondertekend lang bericht =actie; printf("Bezig met het verzenden van %lu...", bericht); //Stuur het bericht bool ok =radio.write(&message, sizeof(unsigned long)); if (!ok){ printf("mislukt...\n\r"); }else{ printf("ok!\n\r"); } //Luister naar ACK radio.startListening(); //Laten we de tijd nemen terwijl we ongetekend luisteren lang gestart_waiting_at =millis(); bool time-out =false; while (! radio.available() &&! timeout) { //printf("%d", !radio.available()); if (millis() - starts_waiting_at> 1000 ){ time-out =waar; } } if(time-out){ //Als we te lang hebben gewacht, is de verzending mislukt printf("Puta mierda, no me responde nadie...\n\r"); onwaar retourneren; }else{ //Als we het bericht op tijd hebben ontvangen, laten we het dan lezen en printen radio.read( &got_message, sizeof(unsigned long) ); printf("Ja, ik reageer op>
 %lu.\n\r",got_message); retourneer waar; }} int main( int argc, char ** argv){ char keuze; opstelling(); bool geschakeld =false; int-teller =0; //Definieer de opties while(( choice =getopt( argc, argv, "m:")) !=-1){ if (choice =='m'){ printf("\n Praten met mijn NRF24l01+ vrienden die er zijn ....\N"); while(switched ==false &&counter <1){ //Aantal pogingen om het bericht te verzenden Switched =sendMessage(atoi(optarg)); teller ++; slaap(1); } }else{ // Een beetje hulp:printf("\n\rHet is tijd om wat keuzes te maken...\n"); printf("\n\rTIP:Gebruik -m idAction om het bericht te verzenden. "); printf("\n\rVoorbeeld (id-nummer 12, actienummer 1):"); printf("\nsudo ./remote -m 121\n"); } //retour 0 als alles goed is gegaan, 2 anders als (teller <5) retourneert 0; anders retour 2; }}  

Omdat compileren enzovoorts vereist is, heb ik het je gemakkelijk gemaakt en alles wat je nodig hebt (alleen voor de Raspberry-kant, de Arduino-schets hieronder) in een zipbestand met de gewijzigde broncode, bibliotheken en de gecompileerde code voor de Raspberry Pi 3:

https://goo.gl/ocCwk3

Als je dit in je RPi uitpakt, zou je gewoon de opdracht op afstand moeten kunnen uitvoeren.

Het resultaat

Hier kun je zien hoe ik alles heb geïmplementeerd.

De drie paar schakelaars in de wand bedienen drie jaloezieën. De tablet aan de muur toont de Domoticz-interface met virtuele schakelaars. Achter de tablet zit de Raspberry, waar onder andere de controller in zit. De Arduino is er niet, hij bevindt zich dicht bij de jaloezieën op de eerder getoonde afbeelding; RPi en Arduino zijn draadloos met elkaar verbonden via de radiomodule.

Hier kun je ook de Google Home zien, die me door IFTTT met Webhooks-service en Domoticz te gebruiken helpt om elk spraakcommando mogelijk te maken, zoals "Hey Google, blinds down". Als je dit punt hebt bereikt, zul je zeker geen probleem hebben om de spraakopdrachten te laten werken.

Hier heb je een heel snel gemaakte video die het resultaat laat zien.

Laat me weten of deze tutorial je heeft geholpen!

Met vriendelijke groet,

gomecin

PS Als extraatje voor de nieuwsgierigheid, of omdat je echt een hekel hebt aan computers, programmeren of wat dan ook, heb ik eerst geprobeerd de oplossing discreet te maken zonder enige intelligentie. Dit is het resultaat:

Ik heb het zelfs gebouwd, en het circuit doet het werk, maar ik deed het voordat ik bekend was met het Arduino-platform, dat flexibeler en volledig betrouwbaarder is, daarom ga ik het niet uitleggen. Als je er iets aan hebt, prima, maar het is niet het doel van deze tutorial en ik zou het afraden om het te gebruiken.

Code

Arduino schets

Schema's

Arduino die 4 blinde motoren bestuurt

Productieproces

  1. Toelatende en interlockcircuits
  2. Motorbesturingscircuits
  3. Vermogensberekeningen
  4. Bulldozer
  5. Algoritmen en hardwarematige toename van stembesturing
  6. Softwaresuite vereenvoudigt ontwerpen voor motorbesturing
  7. Infineon lanceert TLE985x embedded power-serie voor automobieltoepassingen
  8. Kwaliteitscontrole is de eerste stap naar motorbetrouwbaarheid
  9. De basisprincipes van elektrische bedieningspanelen
  10. Power en HVAC/Klimaatregeling
  11. Hoe regel je de snelheid van een hydraulische motor?