Hoe huishoudelijke apparaten bedienen met MATLAB?
De netwerktechnologie voor huisautomatisering werd ontwikkeld in de late jaren 90 en het communicatieprotocol dat toen werd gebruikt, was dat ook X10. Sindsdien wint het concept van automatisering aan populariteit en zijn de nieuwste protocollen uitgevonden die verantwoordelijk zijn voor de communicatie tussen elektronische apparaten. Met het oog op het concept van automatisering dacht ik: waarom zou ik niet alle huishoudelijke apparaten bedienen met de meest gerenommeerde software die bekend staat als MATLAB? In dit project zullen we een automatiseringssysteem ontwerpen en dit vervolgens besturen door een serieel commando te geven. Software die zal worden gebruikt om dit systeem te bedienen, heet MATLAB en na het voltooien van dit project kunnen we onze elektrische apparaten bedienen door gewoon op de bank te zitten of op bed te liggen.
Hoe automatiseert u uw huishoudelijke apparaten met MATLAB GUI?
Laten we nu de componenten verzamelen, ze samenvoegen om een circuit te maken, een MATLAB grafische gebruikersinterface (GUI) maken en de code in MATLAB schrijven om je huishoudelijke apparaten te automatiseren.
Stap 1: Benodigde componenten (hardware)
Het is altijd beter om de componenten in detail te kennen voordat u met het project begint, om eventuele overlast midden in het project te voorkomen. Hieronder staat de lijst met componenten die we gaan gebruiken:
Hier gebruiken we een 8-relaismodule omdat we slechts acht apparaten zullen aansturen. Als u een aantal toestellen die u heeft wilt automatiseren, kunt u een andere relaismodule gebruiken. Er zijn veel relaismodules op de markt verkrijgbaar, bijvoorbeeld enkelvoudig, 8 relais, 12 relais, etc.
Stap 2: Benodigde componenten (software)
Na het regelen van de hardwarecomponenten gaan we op zoek naar de software die in het project gebruikt gaat worden. We installeren de nieuwste versie van MATLAB op onze laptop of pc waarop we werken. De MATLAB 2019 is de nieuwste software, dus het is beter om MATLAB 2019 te downloaden. De link naar de officiële website van Mathworks is hieronder beschikbaar om de software te downloaden. De Hardware Support-pakketten zijn beschikbaar in MATLAB 2019 voor 32-bits, 64-bits Windows en 64-bits Linux.
Na het downloaden van de Proteus 8 Professional, ontwerp je het circuit erop. Ik heb hier softwaresimulaties bijgevoegd, zodat het voor beginners handig kan zijn om het circuit te ontwerpen en de juiste aansluitingen op de hardware te maken.
Stap 3: de componenten bestuderen
Nu we een lijst hebben gemaakt van alle componenten die we in dit project gaan gebruiken. Laten we een stap verder gaan en een korte studie van alle belangrijke hardwarecomponenten doornemen.
Arduino UNO:De Arduino UNO is een microcontrollerbord dat bestaat uit een microchip ATMega 328P en is ontwikkeld door Arduino.cc. Dit bord heeft een set digitale en analoge datapinnen die kunnen worden aangesloten op andere uitbreidingskaarten of circuits. Dit bord heeft 14 digitale pinnen, 6 analoge pinnen en is programmeerbaar met de Arduino IDE (Integrated Development Environment) via een type B USB-kabel. Het vereist 5V om van stroom te voorzien AAN en een C-codeopereren.
12V relaismodule:Een relaismodule is een schakelapparaat. Het ontvangt een signaal en schakelt elk elektronisch apparaat of apparaat volgens het ingangssignaal. Het werkt in twee modi, Normaal open (NO) en Normaal gesloten (NC).In de normaal open modus wordt het circuit aanvankelijk verbroken wanneer het ingangssignaal naar het relais LAAG is. In de normaal gesloten modus is het circuit aanvankelijk compleet als het ingangssignaal LAAG is.
RS232 naar TTL seriële poort convertermodule: Deze module wordt gebruikt voor seriële communicatie. Ons Arduino UNO-bord heeft één seriële communicatiepoort met de naam UART of USART. Er zijn twee pinnen op het Arduino-bord die verantwoordelijk zijn voor seriële communicatie TX en RX (pin 0 en pin 1). Deze twee pinnen zijn ook aanwezig op de RS232-module. Deze module wordt aangedreven door 5V van Arduino en converteert 5V naar 12V voor het bedienen van verschillende apparaten die op 12V werken. We gebruiken deze module omdat elektronische apparaten niet werken op 5V.
Stap 4: Het werkingsprincipe begrijpen
Na voltooiing van dit project kunnen we apparaten op afstand bedienen door de opdracht serieel te geven. Arduino board wordt gebruikt voor seriële communicatie met de RS232. Apparaten zijn verbonden met de relaismodule en de RS232 is verbonden met de TX- en RX-pinnen van de Arduino en wanneer een drukknop op MATLAB wordt ingedrukt, wordt een seriële opdracht gegenereerd en deze wordt naar de seriële poort van RS232 gestuurd, die op zijn beurt weer draait AAN of UIT van het apparaat. Eerst wordt MATLAB gekoppeld aan het Arduino-bord en vervolgens wordt het circuit op de hardware geïmplementeerd. Als iemand een probleem heeft met betrekking tot de interfacing van MATLAB met Arduino, kan hij / zij verwijzen naar mijn artikel met de naam HOE ARDUINO TE INTERFACE MET MATLAB? en dan zal hij/zij dit project op hardware kunnen implementeren. Na afronding van dit project installeert u deze op een geschikte plaats, de voorkeurslocatie is nabij het stopcontact waar de bedrading van de apparaten wordt geplaatst zodat de relaismodule daar gemakkelijk kan worden geïnstalleerd.
Stap 5: schakelschema
Het proteus-schakelschema van het project ziet er als volgt uit. Sluit later de hardwarecomponenten volgens deze schakeling aan.
Stap 6: Aan de slag met MATLAB
Na het ontwerpen van het circuit op Proteus Open MATLAB en typ “gids”In het opdrachtvenster. Er wordt een dialoogvenster geopend en selecteer in dat vak Lege GUI. Links verschijnt een componentenpalet met daarin de componenten die u in uw GUI wilt plaatsen.
Selecteer de drukknop en plaats 16 drukknoppen op het paneel. Plaats eerst de AAN-knop en vervolgens de UIT-knop parallel eraan. De kleuren en namen van de knoppen kunnen worden gewijzigd door te dubbelklikken op de drukknoppen. Nadat u op de drukknoppen hebt geklikt, wordt het inspectievenster geopend en kunnen enkele eigenschappen van de knop daar worden gewijzigd. Zoek naar om de naam van de knop te wijzigen draad optie schrijf er in.
Verander na het veranderen van de knoopnaam de achtergrondkleur. (Opmerking: Deze stap is optioneel en u kunt deze overslaan als u de achtergrondkleur niet wilt wijzigen)
Plaats 16 drukknoppen en breng de bovenstaande wijzigingen aan in het inspectievenster. Voor het benoemen van de relais de statische tekst optie in de linkerbalk wordt gebruikt. Het uiteindelijke uiterlijk van mijn GUI wordt hieronder weergegeven:
Na het maken van de GUI open GUI Code die aan de backend is gemaakt en enkele wijzigingen in de code aanbrengen die worden vermeld als onder.
Stap 7: MATLAB-code van GUI:
functie varargout = final (varargin)% FINAL MATLAB-code voor final.fig% FINAL maakt zelf een nieuwe FINAL aan of verhoogt de bestaande% singleton *. %% H = FINAL retourneert de handle naar een nieuwe FINAL of de handle naar% de bestaande singleton *. %% FINAL ('CALLBACK', hObject, eventData, handles, ...) roept de lokale% functie genaamd CALLBACK aan in FINAL.M met de gegeven invoerargumenten. %% FINAL ('Property', 'Value', ...) maakt een nieuwe FINAL aan of verhoogt het% bestaande singleton *. Beginnend van links, worden eigenschapswaardeparen% toegepast op de GUI voordat final_OpeningFcn wordt aangeroepen. Een% niet-herkende eigenschapnaam of ongeldige waarde zorgt ervoor dat eigenschap application% stopt. Alle invoer wordt via varargin doorgegeven aan final_OpeningFcn. %% * Zie GUI-opties in het menu Extra van GUIDE. Kies "GUI staat slechts één% instantie toe om te draaien (singleton)". %% Zie ook: GUIDE, GUIDATA, GUIHANDLES% Bewerk de bovenstaande tekst om het antwoord te wijzigen om definitief te helpen% Laatst gewijzigd door GUIDE v2.5 25-aug-2019 13:10:11% Begin initialisatiecode - NIET BEWERKEN gui_Singleton = 1; gui_State = struct ('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @final_OpeningFcn, ... 'gui_OutputFcn', @final_OutputFcn, ... 'gui_LayoutFcn'. .. 'gui_Callback', []); als nargin && ischar (varargin {1}) gui_State.gui_Callback = str2func (varargin {1}); end if nargout [varargout {1: nargout}] = gui_mainfcn (gui_State, varargin {:}); anders gui_mainfcn (gui_State, varargin {:}); end % End initialisatie code - NIET BEWERKEN % --- Wordt uitgevoerd net voordat final zichtbaar wordt gemaakt. function final_OpeningFcn (hObject, eventdata, handles, varargin)% Deze functie heeft geen uitvoerargs, zie OutputFcn. % hObject-handle voor het cijfer% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA)% varargin opdrachtregelargumenten voor final (zie VARARGIN)% Kies standaard opdrachtregeluitvoer voor laatste handvatten .output = hObject; % Update behandelt structuur guidata (hObject, handvatten); % UIWAIT wacht definitief op reactie van gebruiker (zie UIRESUME)% uiwait (handles.figure1); % --- Uitvoer van deze functie wordt teruggestuurd naar de opdrachtregel. functie varargout = final_OutputFcn (hObject, eventdata, handles)% varargout celarray voor het retourneren van uitvoerargs (zie VARARGOUT); % hObject handle om% eventdata gereserveerd te krijgen - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA)% Verkrijg standaard opdrachtregel uitvoer van handvatten structuur varargout {1} = handvatten.output; wis alles; globaal een; a = arduino; % --- Wordt uitgevoerd bij het indrukken van de knop 1. function pushbutton1_Callback (hObject, eventdata, handles)% hObject handle to pushbutton1 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D6', 0); % --- Wordt uitgevoerd bij het indrukken van de knop in pushbutton2. functie pushbutton2_Callback(hObject, eventdata, handles) % hObject-handle naar pushbutton2 (zie GCBO) % eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB % handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D6', 1); % --- Wordt uitgevoerd bij het indrukken van de knop in pushbutton3. function pushbutton3_Callback (hObject, eventdata, handles)% hObject handle to pushbutton3 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D7', 0); % --- Wordt uitgevoerd bij het indrukken van de knop in pushbutton4. function pushbutton4_Callback (hObject, eventdata, handles)% hObject handle to pushbutton4 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D7', 1); \% --- Wordt uitgevoerd bij het indrukken van de knop 5. function pushbutton5_Callback (hObject, eventdata, handles)% hObject handle to pushbutton5 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D8', 0); % --- Wordt uitgevoerd bij het indrukken van de knop 6. function pushbutton6_Callback (hObject, eventdata, handles)% hObject handle to pushbutton6 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D8', 1); % --- Wordt uitgevoerd bij het indrukken van een knop in drukknop7. function pushbutton7_Callback (hObject, eventdata, handles)% hObject handle to pushbutton7 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D9', 0); % --- Wordt uitgevoerd bij het indrukken van de knop 8. function pushbutton8_Callback (hObject, eventdata, handles)% hObject handle to pushbutton8 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D9', 1); % --- Wordt uitgevoerd bij het indrukken van de knop 9. function pushbutton9_Callback (hObject, eventdata, handles)% hObject handle to pushbutton9 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D10', 0); % --- Wordt uitgevoerd bij het indrukken van de knop 10. function pushbutton10_Callback (hObject, eventdata, handles)% hObject handle to pushbutton10 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin(a,'D10',1); % --- Wordt uitgevoerd bij het indrukken van een knop 11. function pushbutton11_Callback (hObject, eventdata, handles)% hObject handle to pushbutton11 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D11', 0); % --- Wordt uitgevoerd bij het indrukken van de knop 12. function pushbutton12_Callback (hObject, eventdata, handles)% hObject handle to pushbutton12 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D11', 1); % --- Wordt uitgevoerd bij het indrukken van een knop 13. functie pushbutton13_Callback(hObject, eventdata, handles) % hObject-handle naar pushbutton13 (zie GCBO) % eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB % handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D12', 0); % --- Wordt uitgevoerd bij het indrukken van de knop 14. function pushbutton14_Callback (hObject, eventdata, handles)% hObject handle to pushbutton14 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D12', 1); % --- Wordt uitgevoerd bij het indrukken van de knop 15. function pushbutton15_Callback (hObject, eventdata, handles)% hObject handle to pushbutton15 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D13', 0); % --- Wordt uitgevoerd bij het indrukken van de knop 16. function pushbutton16_Callback (hObject, eventdata, handles)% hObject handle to pushbutton16 (zie GCBO)% eventdata gereserveerd - te definiëren in een toekomstige versie van MATLAB% handvatten structuur met handvatten en gebruikersgegevens (zie GUIDATA) globaal a; writeDigitalPin (a, 'D13', 1);
Het m-bestand samen met de GUI-code kan vanaf hier worden gedownload.
Stap 8: Code-uitleg
Wanneer we de MATLAB GUI-code maken, wordt deze automatisch gegenereerd in de backend en hoeven we alleen enkele wijzigingen in de code aan te brengen. Er zijn in totaal 16 functies in de code. Acht zijn om te draaien AAN de relais en acht zijn om te draaien UIT daar ligt. Ten eerste hebben we een globale variabele gemaakt met de naam 'een'wordt gedeclareerd buiten de functies en vervolgens wordt het in elke conditie gebruikt omdat het handig is wanneer meerdere functies toegang hebben tot dezelfde gegevens. Toen schreven we een = arduinoin de code omdat we de Arduino met MATLAB verbinden. Alle 16 functies die zijn ontworpen voor drukknoppen in de code zijn gewijzigd en we hebben ‘0’ geschreven voor het uitschakelen van het relais en ‘1’ voor het inschakelen van het relais in die functies. U moet deze twee regels aan het einde van elke functie toevoegen en ze dienovereenkomstig aanpassen:
globaal een; writeDigitalPin (a, 'D13', 1);
Stap 9: De hardware monteren
Na het schrijven van de code gaan we aan de slag met het monteren van de hardwarecomponenten. Ten eerste moeten we de connectiviteit van de relaismodule kennen. Pak de positieve draad van het apparaat en knip deze door. sluit het ene uiteinde aan op de NEE poort en het andere uiteinde naar de COM poort van de relaismodule. Zie onderstaande afbeelding en sluit alle vier de toestellen aan op de relaismodule zoals afgebeeld. Zorg ervoor dat je de schroeven van de relaismodule goed aandraait zodat de verbinding later niet breekt.
Na het verbinden van de NO- en COM-pinnen van de acht relaismodules met acht apparaten zullen we de OUT-pinnen van de module verbinden. Pin 6-13 van Arduino worden gebruikt voor het aansluiten van de OUT pinnen van de relaismodule. Steek de OUT-pin van relais 1 in de pin 6 van Arduino en maak vervolgens alle verbindingen volgens de code. Gebruik breadboard om gemeenschappelijke verbindingen van Vcc en aarde te maken en plaats vervolgens de draden van deze twee pinnen van de relaismodule in die verbindingen. Sluit na het maken van relaisverbindingen de Vcc en aarde van de RS232 aan op respectievelijk de 5V en aarde van de Arduino. Verbind de Tx-pin van de RS232 met de RX-pin van de Arduino en verbind de Rx-pin van de RS232 met de Tx-pin van Arduino. Neem de mannelijke seriële DB9-adapter en sluit deze aan de ene kant aan op de seriële poort-convertermodule en de andere kant op de laptop of pc die u gebruikt.
Dat is het! We hebben ons automatiseringsproject afgerond en nu kunnen we onze apparaten bedienen met MATLAB. Het is niet nodig om op te staan en de apparaten AAN te zetten, we kunnen ze op afstand AAN en UIT zetten. Het kan zowel in woningen als kantoren etc. worden toegepast.