Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Het Home System 3000 is een apparaat dat een Arduino, een temperatuursensor, een piëzo-zoemer, een optische detector/fototransistor en een servo gebruikt om manieren weer te geven om de energie-efficiëntie van het huis te verbeteren.
Stap 1: Temperatuursensor
· Leid uw stroom- en aardingsdraden van
de microcontroller aan de zijkant van het breadboard
· Plaats de temperatuursensor in het breadboard en voer de bijbehorende stroom- en aardingsdraden dienovereenkomstig uit
· Merk op dat de temperatuursensor drie uitsteeksels heeft, en de middelste uitsteeksel heeft een draad die loopt van de poort "A0".
· Code voor temperatuursensor:
answer = questdlg('Voer arduino en servo startcode uit', 'response', 'Ok', 'Ok')
prompt = 'Druk op een willekeurige toets om te beginnen'
pauze
prompt1 = 'Minimumtemperatuur instellen'
x = invoer (prompt1)
prompt2 = 'Maximale temperatuur instellen'
y = invoer (prompt2)
prompt3 = 'druk op een willekeurige toets om te beginnen'
pauze
figuur
h = geanimeerde lijn;
bijl = gca;
ax. YGrid = 'aan';
ax. YLim = [65 85];
stoppen = onwaar;
startTime = datetime('nu');
terwijl ~stop
% Lees huidige spanningswaarde:
v = leesspanning (a, 'A0');
% Bereken temperatuur uit spanning (gebaseerd op gegevensblad)
TempC = (v - 0,5)*100;
TempF = 9/5*TempC + 32;
% Krijg huidige tijd
t = datetime('nu') - startTime;
% Punten toevoegen aan animatie
addpoints (h, datum (t), TempF)
% Update assen
ax. XLim = datum ([t-seconden (15) t]);
datetick('x', 'keeplimits')
getekend
% Controleer stopconditie
stop = readDigitalPin(a, 'D12');
Stap 2: Zoemer
· Draad in de zoemer die zal worden gebruikt om een extreem hoge of extreem lage temperatuurmeting te signaleren
· Er loopt geen draad van de positieve kolom naar de positieve kant van de zoemer
· In plaats daarvan loopt er een draad van de positieve kant van de zoemer naar een poort met het label "11"
Dit wordt later gebruikt om de locatie van de zoemer in de geschreven code te noemen.
· Code voor zoemer:
als TempF >= y
disp('sluit de deur, het is heet')
speeltoon(a, 'D11', 500, 1)
elseif TempF <= x
disp('sluit de deur, het is koud')
speeltoon(a, 'D11', 250, 1)
einde
einde
Stap 3: optische detector/fototransistor
· Deze sensor vereist weerstanden in tegenstelling tot de andere
· Zorg ervoor dat alle vier de uitsteeksels van de sensor in de lus zitten nadat u de draden hebt aangesloten
· De sensor detecteert een verandering in licht, die beweging voorstelt, en registreert deze als invoer
· Code voor optische detector/fototransistor:
duidelijk een
a = arduino('/dev/tty.usbserial-DN01DVI2', 'Uno', 'Bibliotheken', 'Servo');
prompt = 'Drempel voor lichtniveau instellen'
z = invoer (prompt)
lichtniveau = 0
terwijl lightLevel ~= -1
lightLevel = leesspanning (a, 'A1')
if lightLevel >= z
answer = questdlg('wil je AC wijzigen?', 'Ja', 'Nee')
wisselen van antwoord
geval 'Ja'
answer2 = questdlg('Zet AC hoger of lager?', 'respons', 'Down', 'Up', 'Up')
wisselen van antwoord
geval 'Omlaag'
s = servo(a, 'D10');
voor hoek = 0:.1:.5
schrijfPositie(s, hoek);
huidige_positie = leesPositie(s);
huidige_positie = huidige_positie * 180;
% print huidige positie van servomotor
fprintf('Huidige positie is %d\n', huidige_positie);
% kleine vertraging is vereist zodat servo kan worden gepositioneerd op de
% hoek die eraan wordt verteld.
pauze (2);
einde
% breng motor terug naar 0 hoekpositie
schrijfPositie(s, 0);
duidelijk s
prompt = 'Druk op een willekeurige toets om door te gaan'
questdlg('AC afgewezen', 'antwoord', 'Ok', 'Ok')
koffer 'Omhoog'
s = servo(a, 'D10');
voor hoek =.5:.1:1
schrijfPositie(s, hoek);
huidige_positie = leesPositie(s);
huidige_positie = huidige_positie * 180;
% print huidige positie van servomotor
fprintf('Huidige positie is %d\n', huidige_positie);
% kleine vertraging is vereist zodat servo kan worden gepositioneerd op de
% hoek die eraan wordt verteld.
pauze (2);
einde
Stap 4: servo
· De servo vertegenwoordigt
een airconditioner, en is een uitgang van de bewegingsdetectie-ingang
· Het vereist een positieve draad, aardedraad en een draad van poort "D9" naar de servo
· Code voor servo:
% breng motor terug naar 0 hoekpositie
schrijfPositie(s, 0);
duidelijk s
prompt = 'Druk op een willekeurige toets om door te gaan'
questdlg('AC verscheen', 'antwoord', 'Ok', 'Ok')
einde
einde
pauze
pauze
einde
einde
*Speciale opmerking: een deel van de code voor de servo is geïntegreerd met de code voor de optische detector/fototransistor.