Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Home System 3000 është një pajisje që përdor një Arduino, një sensor të temperaturës, një zile piezo, një detektor optik/fototransistor dhe një servo për të shfaqur mënyra për të përmirësuar efikasitetin e energjisë në shtëpi.
Hapi 1: Sensori i temperaturës
· Drejtoni telat tuaj të energjisë dhe tokëzimit nga
mikrokontrolluesi në anën e bordit të bukës
· Vendoseni sensorin e temperaturës në tabelën e bukës dhe drejtojini në përputhje me rrethanat fuqinë përkatëse dhe telat e tokëzimit
· Vini re se sensori i temperaturës ka tre priza, dhe priza e mesme ka një tel që del nga porti "A0".
· Kodi për sensorin e temperaturës:
answer = questdlg ('Ju lutemi drejtoni kodin e fillimit arduino dhe servo', 'përgjigje', 'Ok', 'Ok')
shpejtë = 'Shtypni çdo çelës për të filluar'
pauzë
prompt1 = 'Cakto temperaturën minimale'
x = hyrje (kërkesë1)
prompt2 = 'Cakto temperaturën maksimale'
y = hyrje (kërkesa2)
prompt3 = 'shtyp ndonjë tast për të filluar'
pauzë
figura
h = vija e animuar;
ax = gca;
ax. YGrid = 'aktiv';
ax. YLim = [65 85];
stop = false;
startTime = koha e datës ('tani');
ndërsa ~ ndalet
% Lexoni vlerën e tensionit aktual
v = readVoltage (a, 'A0');
% Llogaritni temperaturën nga tensioni (bazuar në fletën e të dhënave)
TempC = (v - 0.5)*100;
TempF = 9/5*TempC + 32;
% Merr kohën aktuale
t = koha e datës ('tani') - startTime;
% Shtoni pikë animacionit
shtesa (h, dataenum (t), TempF)
% Akset e përditësimit
ax. XLim = datenum ([t-sekonda (15) t]);
datetick ('x', 'keeplimits')
tërheqje
% Kontrolloni gjendjen e ndalimit
stop = lexoDigitalPin (a, 'D12');
Hapi 2: Zile
· Tela në zile që do të përdoret për të sinjalizuar një lexim ekstrem të lartë ose ekstrem të ulët të temperaturës
· Asnjë tel nuk kalon nga kolona pozitive në anën pozitive të ziles
· Në vend të kësaj, një tel kalon nga ana pozitive e ziles në një port të etiketuar "11"
Kjo do të përdoret më vonë për të thirrur vendndodhjen e ziles në kodin e shkruar.
· Kodi për zile:
nëse TempF> = y
disp ("mbyll derën është nxehtë")
playTone (a, 'D11', 500, 1)
elseif TempF <= x
disp ('mbyll derën është ftohtë')
playTone (a, 'D11', 250, 1)
fund
fund
Hapi 3: Detektor optik/fototransistor
· Ky sensor kërkon rezistencë ndryshe nga të tjerët
· Sigurohuni që të katër kunjat e sensorit të përfshihen në lak pasi të keni lidhur telat
· Sensori zbulon një ndryshim në dritë, që përfaqëson lëvizjen dhe e regjistron atë si një hyrje
· Kodi për Detektor Optik/Fototransistor:
e qartë a
a = arduino ('/dev/tty.usbserial-DN01DVI2', 'Uno', 'Bibliotekat', 'Servo');
shpejtë = 'Vendos pragun e nivelit të dritës'
z = hyrje (kërkesë)
Niveli i dritës = 0
ndërsa lightLevel ~ = -1
lightLevel = readVoltage (a, 'A1')
nëse lightLevel> = z
answer = questdlg ('do të doje të ndryshoje AC?', 'Po', 'Jo')
ndërro përgjigjen
rasti 'po'
answer2 = questdlg ('Kthejeni AC lart ose poshtë?', 'Përgjigje', 'Poshtë', 'Lart', 'Lart')
ndërro përgjigjen2
rasti 'Poshte'
s = servo (a, 'D10');
për këndin = 0:.1:.5
shkruajPozicioni (et, këndi);
current_position = readPozicioni (et);
aktuale_pozita = pozicioni_ aktual * 180;
% printoni pozicionin aktual të servo motorit
fprintf ('Pozicioni aktual është %d / n', pozicioni aktual);
% vonesë e vogël kërkohet në mënyrë që servo të pozicionohet në
% kënd i thënë atij.
pauzë (2);
fund
% kthejeni motorin në pozicionin 0 kënd
writePosition (s, 0);
e qartë s
shpejtë = 'Shtypni çdo çelës për të vazhduar'
questdlg ('AC u refuzua', 'përgjigje', 'Ok', 'Ok')
rasti 'lart'
s = servo (a, 'D10');
për këndin =.5:.1: 1
shkruajPozicioni (et, këndi);
current_position = readPozicioni (et);
aktuale_pozita = pozicioni_ aktual * 180;
% printoni pozicionin aktual të servo motorit
fprintf ('Pozicioni aktual është %d / n', pozicioni aktual);
% vonesë e vogël kërkohet në mënyrë që servo të pozicionohet në
% kënd i thënë atij.
pauzë (2);
fund
Hapi 4: Servo
· Servo përfaqëson
një kondicioner, dhe është një dalje e hyrjes së zbulimit të lëvizjes
· Kërkon një tel pozitiv, tela tokëzimi dhe një tel nga porti "D9" në servo
· Kodi për servo:
% kthejeni motorin në pozicionin 0 kënd
writePosition (s, 0);
e qartë s
shpejtë = 'Shtypni çdo çelës për të vazhduar'
questdlg ('AC u shfaq', 'përgjigje', 'Ok', 'Ok')
fund
fund
pauzë
pushim
fund
fund
*Shënim special: disa nga kodi për servo është i integruar me kodin për detektorin/fototransistorin optik.