Inhoudsopgave:

Arduino airconditioningmodel - Ajarnpa
Arduino airconditioningmodel - Ajarnpa

Video: Arduino airconditioningmodel - Ajarnpa

Video: Arduino airconditioningmodel - Ajarnpa
Video: RobotDyn Control AC bulb with Arduino AC Dimmer 2024, Juli-
Anonim
Arduino airconditioningmodel
Arduino airconditioningmodel

Als onderdeel van een demonstratie van het vermogen van ons team om een model van een slim treinapparaat te maken voor marketingdoeleinden, was het doel om een systeem te creëren waarin een temperatuursensor gegevens van het circuit leest en de informatie omzet in een temperatuurwaarde die zowel weergegeven op een verlicht scherm en gericht op het feit of een ventilator in- of uitgeschakeld wordt. Het doel is om de rijomstandigheden van passagiers aan te passen met behulp van een geautomatiseerd systeem dat ook de temperatuur in de directe omgeving weergeeft.

Door een Arduino-microcontrollerkit en MATLAB-versies 2016b en 2017b te gebruiken, konden we deze resultaten met relatief succes demonstreren.

Stap 1: Apparatuur

Apparatuur
Apparatuur

Microcontrollerkit met het volgende:

-Sparkfun Rood Bord

-Sparkfun Breadboard

-LCD-bord

-Potentiometer

-Temperatuursensor

-Servo

-USB/Arduino-adapter

-Jumperdraden (25, minimum)

Laptop (Windows 10) met USB-ingang

3D-geprint object (optioneel)

Stap 2: Microcontroller instellen

Microcontroller instellen
Microcontroller instellen
Microcontroller instellen
Microcontroller instellen
Microcontroller instellen
Microcontroller instellen
Microcontroller instellen
Microcontroller instellen

Overweeg dit: het hele systeem is samengesteld uit afzonderlijke eenheden die elk een significante factor zijn voor het uiteindelijke resultaat. Om deze reden wordt het ten zeerste aanbevolen om een afbeelding van het circuit in te stellen voordat u draden in een ingewikkelde puinhoop bevestigt.

Afbeeldingen van elk afzonderlijk model zijn te vinden in de handleiding van de Microcontroller-toolkit of op de website op

Begin met het bevestigen van de temperatuursensor, potentiometer, servoconnectoren en LCD op het bord. Het wordt aanbevolen dat vanwege de grootte van het LCD-scherm en het vereiste aantal draden ervoor, het op zijn eigen helft van het breadboard moet worden geplaatst met de andere stukken op de andere helft en dat de potentiometer zich in een gebied bevindt waar iemand kan gemakkelijk aan de knop draaien.

Als referentie:

LCD: c1-16

Servo: i1-3 (GND + -)

Temperatuursensor: i13-15 (- GND +)

Potentiometer: g24-26 (- GND +)

Begin vervolgens met het aansluiten van jumperdraden op elke pin van de microcontroller-eenheden; hoewel willekeurig in het algehele grote schema, is het ontwerp gemaakt met deze belangrijke verbindingen:

Potentiometer aansluiten op LCD: f25 -- e3

Servo GND-draad: j1 -- Digitale ingang 9

Temp Sensor GND: j14 -- Analoge ingang 0

LCD-ingangen: e11-e15 -- Digitale ingang 2-5

e4 -- Digitale ingang 7

e6 -- Digitale ingang 6

(Opmerking: als dit lukt, moeten beide lampjes aan de rand van het LCD-scherm gaan branden en kan de potentiometer helpen de helderheid aan te passen zodra de adapter stroom krijgt.)

Optioneel: Een 3D-geprint object werd gebruikt als onderdeel van een vereiste. Om mogelijke schade aan de meer fragiele onderdelen te voorkomen, werd een verlengde behuizing als een hoes rond het LCD-scherm geplaatst. De afmetingen van het LCD-scherm bleken ongeveer 2-13/16" x 1-1/16" x 1/4" te zijn, en dus was alleen de hoogte significant veranderd. Als een 3D-printer direct beschikbaar is, overweeg dan om een persoonlijk object toe te voegen, hoewel onnodig. Houd er ook rekening mee dat metingen kunnen verschillen.

Stap 3: MATLAB-configuratie

MATLAB-configuratie
MATLAB-configuratie
MATLAB-configuratie
MATLAB-configuratie

Installeer een meer bijgewerkte versie van MATLAB (2016a en later), beschikbaar op de MathWorks-website https://www.mathworks.com/products/matlab.html?s_tid=srchtitle. Eenmaal geopend, ga naar Add-Ons op het tabblad Home en download "MATLAB Support Package for Arduino Hardware" om de microcontroller-opdrachten toegankelijk te maken.

Eenmaal voltooid, kan een test worden gedaan om de connectiviteit van de microcontroller met de computer/laptop te vinden. Nadat u ze met de USB-adapter uit de toolkit hebt verbonden, voert u het commando "fopen(serial('nada'))" in.

Er verschijnt een foutmelding met de connector als "COM#", die nodig is om een Arduino-object te maken, zolang het maar dezelfde invoer is.

Omdat het LCD-scherm geen directe verbinding heeft met de Arduino-bibliotheek, moet een nieuwe bibliotheek worden gemaakt om berichten weer te geven. Een aanbeveling is om een LCDAddon.m-bestand te maken van het LCD-voorbeeld in het MATLAB-helpvenster na het zoeken naar "Arduino LCD" en het in de map +arduinoioaddons te plaatsen, of gebruik de bijgevoegde gecomprimeerde map en kopieer alle inhoud naar de bovengenoemde map.

Als dit lukt, is de code om een Arduino-object in MATLAB te maken zoals hieronder weergegeven.

a=arduino('com#', 'uno', 'Bibliotheken', 'ExampleLCD/LCDAddon');

Stap 4: Functies

Functies
Functies
Functies
Functies

Maak een MATLAB-functie. Voor de invoer gebruiken we variabelen "eff" en "T_min"; voor uitvoer, hoewel onnodig in het algehele ontwerp, gebruikten we variabele "B" als een manier om gegevens uit de resultaten te bevatten. De "eff"-ingang zorgt voor het beheer van de maximale snelheid van de servo, en de "T_min"-ingang regelt de gewenste minimumtemperatuur. De waarde "B" zou dus een matrix moeten opleveren die drie kolommen bevat voor de tijd, de temperatuur en het rendement van de ventilator. Als bonus voor detail heeft de onderstaande code ook een if-statement, zodat de ventilatorsnelheid met vijftig procent wordt verlaagd wanneer deze in de buurt komt van de gewenste minimumtemperatuur.

Als alle ingangen en jumperdraden exact zijn geplaatst en aangenomen dat de poort van de arduino-verbinding COM4 is en de functienaam "fanread" is, zou de volgende code voldoende moeten zijn:

functie [B] = fanread(Tmin, eff)

duidelijk een; clear lcd;a=arduino('com4', 'uno', 'Bibliotheken', 'ExampleLCD/LCDAddon');

t=0; t_max=15; % tijd in seconden

lcd=addon (a, 'VoorbeeldLCD/LCDAddon', {'D7', 'D6', 'D5', 'D4', 'D3', 'D2'});

initializeLCD(lcd, 'Rijen', 2, 'Kolommen', 2);

if eff>=1 || e<0

error('Ventilator wordt niet geactiveerd tenzij eff is ingesteld tussen 0 en 1.')

einde

voor t=1:10 % aantal lussen/intervallen

duidelijk c; % voorkomen herhalende fout

v=leesVoltage(a, 'A0');

TempC=(v-0,5)*100; % schatting voor spanningsbereiken 2,7-5,5 V

als TempC>Tmin als TempC

c=['Temp ', num2str(TempC, 3), 'C Aan'];

schrijfPWMDutyCycle(a, 'D9', eff/2); % zet servo aan op halve snelheid

snelheid = 50;

anders

c=['Temp ', num2str(TempC, 3), 'C Aan'];

schrijfPWMDutyCycle(a, 'D9', eff); % zet servo aan op gegeven snelheid

snelheid = 100;

einde

anders

c=['Temp ', num2str(TempC, 3), 'C Uit'];

schrijfPWMDutyCycle(a, 'D9', 0); % uitgeschakeld indien al aan

spd=0;

einde

printLCD(lcd, c);

pauze (3); % drie seconden verstrijken per lus

tijd(t)=t.*3;

tempplot(t)=TempC;

act(t)=spd;

subplot(2, 1, 1)

plot(time, tempplot, 'b-o') % lijngrafiek

as([0 33 0 40])

xlabel('Tijd (seconden)')

ylabel('Temperatuur (C)')

vasthouden

plot([0 33], [Tmin Tmin], 'r-')

vasthouden

plot([0 33], [Tmin+2 Tmin+2], 'g-')

subplot(2, 1, 2)

bar(tijd, handeling) % staafdiagram

xlabel('Tijd (seconden)')

ylabel('Efficiëntie (%)')

einde

B=transponeren([tijd;tempplot;act]);

einde

Nu de functie is voltooid, is het tijd om te testen.

Stap 5: Testen

Testen
Testen
Testen
Testen

Test nu de functie in het opdrachtvenster door "function_name(input_value_1, input_value_2)" in te voegen en te kijken. Zorg ervoor dat er al geen Arduino-object bestaat; zo ja, gebruik dan het commando "clear a" om het te verwijderen. Als er fouten optreden, controleer dan of er connectoren op de verkeerde plaats zitten of dat de verkeerde digitale of analoge ingangen worden gebruikt. De resultaten zullen naar verwachting variëren, hoewel dit kan worden veroorzaakt door de plaatsing van bepaalde jumperdraden en de temperatuursensor.

De verwachtingen van de resultaten moeten leiden tot veranderingen in de prestaties van de servo en de gegevens op het LCD-scherm. Met elk interval van drie seconden moet een regel tekst de temperatuur in Celsius weergeven en aangeven of de ventilator al dan niet actief is terwijl de ventilator op volle snelheid, halve snelheid of geen snelheid draait. De gegevens zouden hoogstwaarschijnlijk niet consistent moeten zijn, maar als u meer verschillende resultaten wenst, plaatst u de "Tmin" -waarde dicht bij de gemiddelde temperatuur die door het circuit wordt geproduceerd.

Stap 6: Conclusie

Conclusie
Conclusie

Hoewel het een zware taak was om met vallen en opstaan te volbrengen, bleken de uiteindelijke resultaten nogal interessant en bevredigend te zijn. Een systeem als zodanig helpt om te illustreren hoeveel gecompliceerde machines, of zelfs sommige van hun onderdelen, kunnen worden gezien als een verzameling onafhankelijke onderdelen die bij elkaar zijn geplaatst om een specifiek doel te bereiken.

Vanwege het nogal simplistische ontwerp van het uiteindelijke project, kunnen degenen die geïnteresseerd zijn in het verbeteren van de prestaties ervan tweaks en wijzigingen aanbrengen in het eindproduct die het project beter en uitgebreider kunnen maken. Het onthult echter zwakke punten in het circuit, zoals de activering van de servo, wat resulteert in sporadische fluctuaties in de spanningsaflezing van het circuit, waardoor het systeem nooit identieke resultaten kan produceren. Er zijn ook problemen geweest met het zien van een verandering in servosnelheid wanneer "eff" is ingesteld op 0,4 en hoger. Als er een temperatuur- en vochtigheidssensor was gebruikt, zou het uiteindelijke model ingewikkelder zijn en toch consistentere waarden opleveren. Toch is dit een ervaring die aantoont dat een complexe machine kan functioneren als een combinatie van zijn eenvoudige onderdelen.

Aanbevolen: