Kompjuterë dhe pajisje moderne

Le të ndërtojmë diçka të thjeshtë në Arduino së pari. NË kapitulli 12 ne kemi shpikur tashmë termostate duke përdorur komponentë thjesht analogë. Tani le të shohim se si mund ta përfshijmë teknologjinë dixhitale në këtë biznes të dobishëm.

Ne kemi përmendur tashmë (shih kapitulli 18), që kontrollorët AVR përfshijnë një ADC me shumë kanale 10-bit. Në bordet Arduino, kunjat e tij janë shënuar posaçërisht si hyrje analoge (me shkronjën A me numra nga zero në pesë). Ju lutemi vini re se ato mund të përdoren edhe si dixhitale të rregullta me numra nga 14 në 18 dhe ne do t'i përdorim në këtë kapacitet. Ne do të përdorim një nga këto hyrje për të matur temperaturën dhe do të kontrollojmë lidhjen e ngarkesës nga një prej daljeve dixhitale.

Në total do të na duhen:

□ Bordi Arduino Uno (do të bëjë ndonjë tjetër);

Kam një termistor si sensor të temperaturës. I përshtatshëm, për shembull, ekzistues

□ "Amperke" В57164‑К 103‑J me një rezistencë nominale prej 10 kOhm në 25 °C - karakteristikat e tij janë dhënë në kapitulli 13 si një ilustrim i vetive të termistorëve;

□ rezistencë e ndryshueshme 10 kOhm, rezistencë fikse 620 Ohm;

□ stafetë ekzekutive - elektromagnetike (domosdoshmërisht me një ndërprerës tranzistor përforcues, shih më poshtë) ose në gjendje të ngurtë.

Modulet e bazuara në reletë elektromagnetike 5 volt, të përshtatura posaçërisht për kontroll nga daljet Arduino, janë në dispozicion për shitje. Vetë reletë elektromagnetike kërkojnë një rrymë kontrolli mjaft të madhe (dhe sa më i fuqishëm të jetë rele, aq më i fuqishëm është; vetëm reletë e kallamishteve me fuqi më të ulët mund të funksionojnë drejtpërdrejt nga logjika), prandaj të gjitha modulet e tilla të stafetës duhet të kenë një ndërprerës përforcues tranzistor. Për shembull, Amperka shet një modul të tillë bazuar në stafetën HLS8L-DC5V-S-C. Nëse nuk jeni të kënaqur me një stafetë elektromagnetike dhe përpiqeni për thjeshtësi ekstreme të qarkut, atëherë mund të kërkoni reletë e gjendjes së ngurtë - për shembull, CX240D5R nga Crydom ose të ngjashme me një tension operativ 3-15 V janë të përshtatshme. Rryma e tyre e kontrollit është rreth 15 mA në 5 volt në hyrje, e cila është e pranueshme për AVR-të, sepse hyrja e tyre e kontrollit mund të lidhet drejtpërdrejt me daljen dixhitale Arduino. Vërtetë, me një tension prej 220 volt, CX240D5R nuk mund të ndërrojë një ngarkesë me fuqi më të madhe se një kilovat, por për këtë detyrë nuk na duhen më shumë.

Qarku i termostatit në Arduino Uno është paraqitur në Fig. 21.2.

Oriz. 21.2. Diagrami i termostatit është i ndezur Arduino Uno

Në diagram, mbështjellja e stafetës K1 (me kontakte normalisht të hapura) lidhet në mënyrë konvencionale drejtpërdrejt me daljen dixhitale të Arduino - supozohet se ky është ose stafeta e gjendjes së ngurtë të përmendur më parë me karakteristikat e kërkuara, ose thjesht hyrja e kontrollit të një bord i përfunduar i modulit të stafetës. Për të monitoruar gjendjen e qarkut, një LED aktivizohet njëkohësisht me ngrohësin. Programi i termostatit në përputhje me këtë skemë është jashtëzakonisht i thjeshtë:

Vlerat e rezistencës rregullohen në termistorin e specifikuar B57164‑K me një rezistencë nominale prej 10 kOhm në 25 °C (103‑J). Në përputhje me programin, stafeta do të funksionojë afër vlerës së daljes ADC prej 500. Kjo është afërsisht mesi i diapazonit 10-bit (e gjithë shkalla është 1024 gradime), d.m.th., kjo vlerë do të vendoset kur të jetë e sipërme dhe e poshtme rezistencat janë afërsisht të barabarta në lidhje me hyrjen AO (tensioni në këtë hyrje do të jetë afërsisht 2.5 volt).

Ju lutemi vini re se të dy funksionojnë nëse mos mbaroni me të zakonshmen tjetër. Për të parandaluar muhabetin, në program është futur histereza: stafeta ndizet kur vlera e kodit kalon 510 dhe fiket kur bie në 490. Ndërkohë, ai do të ruajë gjendjen e mëparshme. Njëzet njësi kodi (çfarë është në kapitulli 12 ne thirrëm zonë e vdekur) korrespondojnë me afërsisht 10 milivolt, d.m.th., histereza në një temperaturë në intervalin 30-40 gradë do të jetë pak më pak se një e dhjeta e shkallës (kontrollojeni vetë duke përdorur tabelën 13.1 nga kapitulli 13).

Vendosja e temperaturës së përgjigjes duke përdorur rezistencën R2 me këto parametra është e mundur në intervalin nga afërsisht 22 deri në 96 °C. Natyrisht, në praktikë një gamë kaq e gjerë rregullimi nuk kërkohet, kështu që këshillohet të zvogëlohet vlera R2. Vlera e R1 zgjidhet në mënyrë që R1 dhe vlera nominale e R2 të shtojnë rezistencën e termistorit në vlerën më të ulët të intervalit të dëshiruar të temperaturës (në përputhje me Tabelën 13.1). Për një përshtatje më të saktë, mund të kalibroni dhe ndryshoni vlerat e pragut në program duke matur temperaturën e vendosur me një termometër të rregullt.

Nëse përdorni sensorë të tjerë në këtë qark, mos harroni për shenjën e koeficientit të temperaturës. Një diodë ose tranzitor i zakonshëm në lidhje me diodë (si në qarqet nga kapitulli 13) gjithashtu kanë një pjerrësi negative të karakteristikës, prandaj për ta në program do t'ju duhet të ndryshoni vetëm vlerat numerike të pragut të përgjigjes. Por sensorë gjysmëpërçues si TMP35 (shih. kapitulli 13) ose thjesht termometra me rezistencë metalike (si në modelin e bërë nga kapitulli 17) kanë një koeficient pozitiv të temperaturës, kështu që kushtet e funksionimit do të duhet të ndryshohen. Dhe jo vetëm të ndryshoni "më shumë" në "më pak" dhe anasjelltas, por gjithashtu ndryshoni raportin e pragjeve për histerezë - në situatën e re, ngrohësi do të duhet të ndizet nëse vlera është më e vogël se pragu më i vogël dhe të kthehet fikur nëse është më shumë se më i madhi.

Një tifoz automatik Arduino që ndizet vetë kur temperatura e dhomës arrin një vlerë të caktuar.

Në këtë tutorial do të mësoni rreth tifozëve të kontrolluar me temperaturë Arduino duke përdorur një sensor dhe stafetë DHT22. Ne do të përdorim sensorin DHT22 për të marrë vlerën e temperaturës dhe për të shfaqur këtë vlerë të temperaturës në ekranin LCD. Pastaj do të kontrollojmë nëse vlera e temperaturës është më shumë se 35 apo jo, nëse temperatura është më shumë se 35, atëherë rele do të aktivizohet dhe ventilatori do të fillojë të rrotullohet.

Aksesorë

Për projektin tonë do të na duhen pjesët e mëposhtme:

Diagrami i qarkut të ventilatorit Arduino

Diagrami skematik i tifozit tonë duket si ky:

Le të kuptojmë se si t'i lidhim të gjitha pjesët. Para së gjithash, bëni lidhjen e ekranit LCD me Arduino si më poshtë:

  • Lidhni kutinë VSS në LCD me tokën Arduino.
  • Lidhni pinin VDD me 5V Arduino.
  • Lidhni kunjin V0 me kunjin qendror të potenciometrit 10K. Lidhni dy kunjat e tjera të potenciometrit në 5V dhe me tokëzimin.
  • Lidhni pinin RS me pinin 2 të Arduino.
  • Lidhni pinin R/W me tokën Arduino. Kjo do ta vendosë LCD-në në modalitetin e leximit.
  • Lidhni pinin E (Aktivizo) me pinin 3 të Arduino.
  • Lidhni kunjat D4-D7 me kunjat 4, 5, 6, 7 të Arduino.
  • Lidheni pinin 15, i cili është priza pozitive e dritës së prapme LED me kutinë me 5 pin përmes një rezistence 220 ohm.
  • Lidheni pinin 16, i cili është kunja negative e dritës së prapme LED, me tokën Arduino.

Pastaj lidhni modulin e stafetës me Arduino. Në anën hyrëse të modulit rele, bëni lidhjet si më poshtë:

  • Lidhni kunjin VCC të modulit të stafetës me pinin 5V të Arduino.
  • Lidhni pinin IN të modulit të stafetës me pinin 9 të Arduino.
  • Lidhni pinin GND të modulit rele me GND të Arduino.

Në anën e daljes së modulit të stafetës, lidhni negativin e baterisë 9V me të përbashkët (C) të modulit të stafetës dhe lidhni NC të modulit të stafetës me negativin e ventilatorit. Pastaj lidhni pozitivin e baterisë me pozitivin e ventilatorit.

Së fundi, bëni lidhje për sensorin e temperaturës dhe lagështisë DHT22.

  • Lidhni pinin 1 të DHT22, që është kunja VCC, me 5V të Arduino.
  • Lidhni pinin 2 të DHT22 që është pini i të dhënave me pinin 8 të Arduino.
  • Lidhni pinin 4 nga DHT22, që është kunja e tokëzimit, me tokën Arduino.

Skicë për Arduino

Më poshtë mund të kopjoni dhe shkarkoni kodin në Arduino Uno tuaj.

#include "DHT.h" #include "LiquidCrystal.h" LiquidCrystal LCD(7, 8, 9, 10, 11 ,12); #define DHTPIN 6 #define DHTTYPE DHT22 sensor DHT(DHTPIN, DHTTYPE); int rele_pin = 9; konfigurimi i zbrazët () ( lcd.begin(16,2); sensor.begin(); pinMode(pin_relay, OUTPUT); dixhitalWrite(relay_pin, LARTË); ) void loop() ( lcd.clear(); float t = sensor .readTemperature(); //leximi i temperaturës nga sensori // Kontrollimi nëse sensori po dërgon vlera ose jo nëse (isnan(t)) ( lcd.print ("Dështoi"); vonesë (1000); kthim; ) lcd.setCursor ( 0,0); lcd.print ("Temp: "); LCD është OFF "); ) vonesë (2000); )

Shpjegimi i kodit

Para së gjithash, ne kemi përfshirë biblioteka për sensorin DHT22 dhe për ekranin LCD. Bibliotekat mund t'ju ndihmojnë ta bëni kodin tuaj më të thjeshtë.

Ju mund të shkarkoni të gjitha bibliotekat e nevojshme për projektet tuaja në faqen tonë të internetit në seksionin -.

#include "DHT.h" #include "LiquidCrystal.h"

Më pas inicializuam kunjat me të cilat lidhëm sensorin LCD dhe DHT22. Pas kësaj, ne përcaktuam llojin e sensorit DHT që përdoret. Ka shumë lloje të tjera të sensorëve DHT, si DHT11, kështu që identifikimi i llojit është i rëndësishëm këtu.

LCD Crystal Liquid(2, 3, 4, 5, 6, 7); #define DHTPIN 8 #define DHTTYPE DHT22 sensor DHT(DHTPIN, DHTTYPE);

Në funksionin e konfigurimit, ne i kemi dhënë komandën DHT22 dhe LCD për të filluar komunikimin me Arduino. Më pas e shpallëm pinin e releut si pin dalje sepse do t'i japim tension nga Arduino releit për të aktivizuar rele. Rele punon në të kundërt (I lartë do të thotë i ulët për stafetën).

LCD.fillim(16,2); sensor.fillim(); pinMode (pin_rele, OUTPUT); digitalWrite (rele_pin, LARTË);

Në funksionin e ciklit, ne pastrojmë ekranin LCD dhe më pas lexojmë vlerën e temperaturës nga sensori.

LCD.qartë(); float t = sensor.lexoTemperature(); nëse (isnan(t)) ( lcd.print ("Dështoi"); vonesë (1000); kthim; )

Pastaj printojmë vlerën e temperaturës në LCD dhe nëse vlera e temperaturës është më shumë se 35, atëherë rele do të aktivizohet dhe ventilatori do të fillojë të rrotullohet.

LCD.setCursor(0,0); lcd.print("Temp: "); LCD.print(t); lcd.print("C"); if (t > 35) (Dixhital Shkrimi (pin_rele, I LOW); lcd.setCursor (0,1); lcd.print ("Tifozi është AKTIV"); vonesë (10); )

Kjo eshte e gjitha. Keni një projekt të madh!

Ai do të ndajë me ju përvojën e tij për krijimin e një kontrolluesi inteligjent të rrotullimit të tifozëve, duke përdorur një sensor termik, një ekran LCD dhe, natyrisht, Arduino.

Disa muaj më parë lexova një sërë artikujsh rreth Arduino dhe u interesova shumë për këtë pajisje dhe së shpejti vendosa ta blej atë. Duhet të theksohet se unë jam larg mikroelektronikës, kështu që më pëlqeu bordi kryesisht për shkak të lehtësisë relative të përdorimit. Duke u marrë me LED dhe sisteme "Hello world", doja të bëja diçka praktike dhe në të njëjtën kohë të njihesha më shumë me aftësitë e Arduino. Duke pasur parasysh verën jashtëzakonisht të nxehtë të vitit 2010, lindi ideja për të montuar një kontrollues shpejtësie më të ftohtë në varësi të temperaturës me të gjitha karakteristikat përkatëse të shfaqura në LCD. Shpresoj që kjo skemë ose variacionet e saj të jenë të dobishme për dikë, kështu që vendosa të postoj skicat e mia.

Për këtë skemë do të na duhen:

  • Në fakt, vetë bordi Arduino ose të ngjashme;
  • Tabela e bukës për montimin e komponentëve të qarkut;
  • Ekrani WH1601A-NGG-CT me rezistorin e zbukurimit të ndezur 20 kOhm ose të ngjashme;
  • Rezistenca - 220 Ohm, 10 kOhm, 4.7 kOhm;
  • Tranzistor bipolar SS8050D ose të ngjashme;
  • Sensori dixhital i temperaturës DS18B20;
  • Diodë 1N4148 ose ekuivalente;
  • Tifoz aksial me tre tela (12V), për shembull - kompjuter;
  • Lidhës jakë të ushqyerit 2,1/5,5 mm.

Ftohësi i kompjuterit ka tre tela, dy prej të cilave - të kuqe (+12V) dhe të zeza (GND) përdoren për furnizim me energji elektrike, dhe e treta (e verdhë) është e lidhur me një tahometër të ndërtuar mbi një element Hall. Fatkeqësisht, 5 V nga bordi nuk na mjafton qartë, por 6 dalje dixhitale Arduino mund të funksionojnë në modalitetin PWM (ato janë shënuar në vetë tabelën me katrorë të bardhë ose shkronjat PWM), kështu që ne mund të rregullojmë furnizimin e sinjalit nga bordi në stafetë, e cila do të jetë përgjegjëse për ndryshimin e tensionit të furnizuar në tifoz.

Ne do të marrim informacione rreth rrotullimeve nga teli i tretë nga takometri, duke përdorur një metodë të modifikuar bazuar në zbatimin ndërpret, e cila për shumicën e Arduinos mund të vijë në kunjat dixhitale 2 (ndërprerje 0) dhe 3 (ndërprerje 1). Nga rruga, Arduino Mega ka 4 kunja shtesë me aftësinë për të marrë ndërprerje.

Tani ju duhet të poziciononi sensori dixhital i temperaturës, të dhënat e të cilave do t'i përdorim për të rregulluar tensionin e furnizuar në daljen dixhitale me PWM, dhe për rrjedhojë për të "hapur" kanalin e tensionit të ventilatorit. Sensorët e Dallas kanë bibliotekën e tyre Arduino - DallasTemperature, të cilën do ta lidhim më vonë në skicë. Biblioteka duhet të zbërthehet në drejtorinë arduino-0018/libraries/.

Gjëja e fundit që ka mbetur është lidh LCD, ku do të shfaqim të gjithë informacionin aktual rreth temperaturës dhe shpejtësisë së ventilatorit. Meqenëse kam përdorur ekranin WH1601A për ndërtimin, mund të ketë probleme të njohura me shfaqjen e linjave. Për t'i eliminuar ato, ne do të përdorim bibliotekën LiquidCrystalRus, e cila gjithashtu duhet të shpaketohet në drejtorinë arduino-0018/libraries/.

//Lidhni bibliotekën për sensorin e temperaturës#përfshi //Lidhni bibliotekën për LCD#përfshi #define PowerPin 9 // pin për kontrollin e fuqisë së ventilatorit#define HallSensor 2 // pin për sensorin e shpejtësisë së ventilatorit (ndërprerje)#define TempPin 7 // pin për sensorin e temperaturës LiquidCrystalRus lcd (12, 11, 10, 6, 5, 4, 3); //Lidh LCD Dallas Temperature Sensor; int NbTopsFan, Calc, fadeValue; //ndryshoret me numra të plotë për llogaritjet temperament notues; //ndryshueshme reale për temperaturën e ruajtjes typedef struct( // Prezantoni një lloj të ri variablash për fansat char fantype; i panënshkruar int fandiv; )fanspec; //Rreth variablash të tipit të ri fanspec fanspace=((0,1),(1,2),(2,8)); //Ndryshorja përgjegjëse për zgjedhjen e llojit të sensorit të ventilatorit (1 – sensor unipolar Hall, 2 – sensor bipolar Hall) tifoz char = 2; //Ky funksion do të thirret sa herë që ndërpresim void rpm() (NbTopsFan++;) // Funksioni për llogaritjen e tensionit të aplikuar në një kunj dixhital me PWM void temp() ( fadeValue = min(int(temper*7),255); // Shumëzoni temperaturën me koeficientin, // merr një numër të plotë nga produkti } // Sepse vlera maksimale e PWM është 255, atëherë nuk ka kuptim të furnizoni më shumë - merrni minimumin dy i pavlefshëm konfigurimi() (tempSensor.begin(TempPin); //Ndizni sensorin e temperaturës lcd.begin(16, 2); //Vendosni karakteristikat LCD lcd.setDRAMModel(LCD_DRAM_WH1601); //Dhe llojin e ekranit pinMode (HallSensor, INPUT ); // Konfiguro pinin për të marrë ndërprerje bashkangjitInterrupt(0, rpm, RISING); //Ne lidhim numrin e ndërprerjes 0 me funksionin tonë dhe ai do të llogaritet sa herë që sinjali ndryshon) i pavlefshëm lak() ( temper = tempSensor.getTemperature(); // Merrni temperaturën temp(); // Llogaritni tensionin e furnizuar në PWM analogWrite (PowerPin, fadeValue); // Feed it NbTopsFan = 0; // Rivendos variablin që përmban rrotullimet në zero vonesë (1000); //Prit 1 sekondë Calc = ((NbTopsFan * 60)/fanspace.fandiv); //Llogaritni vlerën e RPM për 60 sekonda pjesëtuar me shumëzuesin e ventilatorit lcd.print (Calc, DEC); //Nxjerr vlerën e llogaritur në formë dhjetore lcd.print(" rpm - " ); lcd.print( temperament); //Temperatura e daljes LCD.home(); )

Duke lexuar pjesën e parë të titullit, shumë prej jush me siguri menduan - një termostat tjetër në Arduino-n e shumëvuajtur. Dhe... Është e vërtetë - po, ky është një termostat tjetër për një kazan tjetër, një shtëpi tjetër, por kjo është vetëm pjesërisht e vërtetë - në artikullin që nuk dua të përqendrohem në vetë pajisjen - ka me të vërtetë shumë prej tyre (artikuj ). Sigurisht, unë do të përshkruaj termostatin, por do të doja të flisja më shumë se si e lidha vetë mikrokontrolluesin me bojlerin. Ndaj te interesuarit ju lutemi...

Si filloi gjithçka

Para së gjithash, dua të them që nuk jam fare programues dhe nuk jam marrë kurrë më parë me një mikrokontrollues të vërtetë. Njohja ime e parë me AVR MK (dhe me MK në përgjithësi) u kthye në shkollën e mesme, kur doja të dija se si funksionon në të vërtetë kjo gjë misterioze. Kam lexuar disa artikuj dhe që atëherë kam vetëm fragmente në kujtesën time që mund të përshkruhen vetëm me dy fjalë - DDR dhe PORT - dhe këtu përfundoi njohuria ime. Pastaj ishte universiteti, viti i 5-të - "Programimi i mikrokontrolluesve" ku të gjithë u njohëm me MSC51 në një mjedis virtual. Tashmë kishte ndërprerje, kohëmatës dhe gjithçka tjetër. Epo, me këtë sasi njohurish arrita te problemi. Le të përfundojmë me këtë shënim autobiografik dhe të kalojmë në pjesën më interesante.

Pra, në të vërtetë, ku filloi krijimi i termostatit - pasi instalova një sistem ngrohje autonome me një kazan me gaz, unë, si shumë, hasa në problemet e zakonshme - temperatura në shtëpi varej shumë nga moti jashtë - ngrica - është ftohtë në apartament, ju duhet të rrisni temperaturën e ftohësit në bateri, u ngroh - përkundrazi. Këllëzime të tilla me dajre nuk më përshtateshin shumë, sepse... rregullimi i bojlerit ishte i ndërlikuar nga fakti se ai ishte i instaluar pas një dere dhe dera mbështetej nga një furrë me mikrovalë, mbi të cilën shtriheshin një tufë mbeturinash. Epo, e kuptoni idenë - një gjilpërë në një vezë, një vezë në një rosë, etj.

Ky problem u zgjidh shumë thjesht - me një sensor OTC (Outside Temperature Compensation), i cili është i lidhur me bojlerin dhe i lejon atij të rregullojë automatikisht temperaturën e ftohësit në varësi të temperaturës së jashtme. Problemi dukej se ishte zgjidhur, por leximi i manualit të shërbimit për bojlerin (Ferolli Domiproject C24D) i shkeli shpejt shpresat e mia - lidhja e një sensori të jashtëm të temperaturës nuk parashikohet në këtë model. Të gjitha? Të gjitha. Dhe tani, me siguri, mund ta kishim përfunduar, por gjatë verës, gjatë një stuhie, bordi i kontrollit ende digjet në kazan në një mënyrë që është ende e paqartë për mua, dhe ndërsa flisja me shërbimin (bordi ishte riparuar më vonë), pyeta nëse ishte e mundur të lidhja OTC me bojlerin tim? Ai u përgjigj se ata lidhen duke përdorur termostate të jashtëm. Kjo ngeli në kujtesën time, por nuk u përqendrova në të derisa filloi moti i ftohtë dhe më pas ishte ende i njëjti problem.

Duke shfletuar të njëjtat udhëzime shërbimi, por me qëllimin për të parë se si është lidhur termostati, vura re se "rregullatori OpenTherm" është i lidhur me të njëjtat terminale. Atëherë kuptova - kjo është TI! Një kërkim në Google për "OpenTherm Arduino" më zhgënjeu përsëri - asgjë veçanërisht e ndjeshme. Kishte një monitor mesazhesh, por nuk është kjo - nuk kam çfarë të dëgjoj - më duhet vetëm një termostat.

Nëse vëreni një gabim, zgjidhni një pjesë të tekstit dhe shtypni Ctrl+Enter
SHPËRNDAJE:
Kompjuterë dhe pajisje moderne