Arduino utetermometer med display. Arduino termometer med LM35 temperatursensor. Lage et hus for sensoren

I denne opplæringen skal vi bruke en DS18B20 temperatursensor med Arduino UNOå lage et termometer. DS18B20 sensor er godt alternativ når du er i et prosjekt med høy presisjon det kreves en god reaksjon. Vi viser deg hvordan du kobler DS18B20 til din og viser temperaturdataene på en 16x2 LCD.

DS18B20-sensoren kommuniserer med Arduino via en 1-leder buss. Per definisjon kreves det bare én datalinje (og jording) for å kommunisere med Arduino.

Hver DS18B20 har en unik 64-bits seriell kode eller adresse som gjør at flere DS18B20-er kan operere på den samme enkeltlederbussen. Derfor gjør bruken av en mikroprosessor det enkelt å kontrollere flere DS18B20-er fordelt over et stort område. Applikasjoner for denne funksjonen inkluderer miljøkontroll, temperaturkontrollsystemer i bygninger og mekanisk utstyr.

DS18B20-funksjoner

  • Kun ett enkelt-leder grensesnitt er nødvendig for kommunikasjon mellom mikrokontrolleren og sensoren.
  • Det tar bare én ekstern komponent: 4,7K motstand.
  • Kan strømforsynes direkte fra datalinjen, krever en spenning på 3,0 til 5,5 V.
  • Hver enhet har en unik 64-bits seriell kode lagret på den innebygde ROM-en.
  • Kan måle temperaturer fra -55 ° C til + 125 ° C (-67 ° F til + 257 ° F).
  • Nøyaktighet ± 0,5 ° C fra -10 ° C til + 85 ° C.

Dette prosjektet bruker en DS18B20 som kommer i form av en temperatursonde som er vanntett. Bruk av vanntett sensor utvider mulighetene – temperatursensoren kan måle temperaturen på væsker som vann, kjemikalier, te og kaffe.

Komponentkrav

Utstyrskravene til termometeret ditt er ganske standard, vi trenger det:

  • LCD-skjerm 16x2
  • DS18B20 temperatursensor
  • Jumper ledninger
  • 1K motstand
  • Brødbord

Tilkoblingsskjema

Koble til i henhold til diagrammet nedenfor.

Vi kobler sammen sensoren og Arduino

  • VCC -> Arduino 5V, pluss 4,7K motstand som går fra VCC til Data
  • Data -> Pin 7 Arduino
  • GND -> GND Arduino

Tilkoblinger for LCD og Arduino UNO

  • Pinne 1 -> GND
  • Pin 2 -> VCC
  • Pin 3 -> Arduino Pin 3
  • Pin 4 -> Arduino Pin 33
  • Pinne 5 -> GND
  • Pin 6 -> Arduino Pin 31
  • Pinne 7-10 -> GND
  • Pinne 11 -> Arduino Pinne 22
  • Pinne 12 -> Arduino Pinne 24
  • Pinne 13 -> Arduino Pinne 26
  • Pinne 14 -> Arduino Pinne 28
  • Pin 15 -> VCC gjennom 220 ohm motstand
  • Pinne 16 -> GND

Koble et potensiometer som vist ovenfor til pinne 3 på LCD-skjermen for å kontrollere kontrasten.

Dette prosjektet opererer ved temperaturer opp til 125 ° C. Hvis det er noe dissonans i temperaturen som vises, dobbeltsjekk koblingene med motstanden koblet til DS18B20. Etter å ha koblet til alt som er beskrevet ovenfor, kan vi gå videre til programmering.

Kildekode for termometer

Før lasting kildekode du må sette opp to biblioteker som kreves for å kjøre denne koden i Arduino-miljøet.

  • Det første biblioteket heter OneWire ().
  • Det andre biblioteket heter DallasTemperature ().

Etter å ha lastet ned begge bibliotekene, flytt filene til mappen Arduino-biblioteker misligholde. Kopier deretter koden inn og last den opp etter å ha dobbeltsjekket at sensoren er riktig tilkoblet.

// Koden begynner #inkludere #inkludere #inkludere #define ONE_WIRE_BUS 7 OneWire oneWire (ONE_WIRE_BUS); DallasTemperatursensorer (& oneWire); flytende tempC = 0; flytende tempF = 0; LiquidCrystal lcd (12,11,5,4,3,2); void oppsett () (sensors.begin (); lcd.begin (16,2); lcd.clear (); pinMode (3, OUTPUT); analogWrite (3, 0); Serial.begin (9600);) void loop () (sensors.requestTemperatures (); tempC = sensors.getTempCByIndex (0); tempF = sensors.toFahrenheit (tempC); forsinkelse (1000); Serial.println (tempC); lcd.setCursor (0,0); lcd. print ("C:"); lcd.print (tempC); lcd.print ("grader"); lcd.setCursor (0,1); lcd.print ("F:"); lcd.print (tempF); lcd.print ("grader");)

Det ser slik ut:

Vi var i stand til å måle temperaturer opp til 100 ° C med denne sensoren! Han er veldig lydhør.

Etter at du har opprettet et prosjekt, test enheten ved å senke sensoren i varmt og kaldt vann.

Nå vil du lære hvordan du forvandler et vanlig voltmeter (analogt) til et digitalt termometer ved hjelp av Arduino-plattformen og en ds18b20 temperatursensor. I prinsippet er denne teknologien egnet ikke bare for å vise temperatur - alle andre (fysiske og elektriske) mengder fra forskjellige sensorer kan vises digital metode på en pekerenhet i henhold til denne metoden.

DS18B20 modul

Den velkjente ferdiglagde modulen ds18b20 er et digitalt termometer som gir 9-bits temperaturmåling og har en ikke-flyktig programmerbar øvre og nedre driftspunktfunksjon. I tillegg kommuniserer ds18b20 over 1-Wire-bussen og krever kun én datalinje for å kommunisere med mikroprosessoren. I tillegg kan ds18b20 drives direkte fra datalinjen, noe som eliminerer behovet for ekstern kilde ernæring.

ds18b20 pinout

Faktisk har hver ds18b20 en unik 64-bits seriell kode som lar selv flere DS18B20-er fungere på samme 1-leder buss. Ved å bruke bare én mikroprosessor er det altså mulig å overvåke mange temperatursensorer fordelt over et stort område.

Termometermonteringsskjema


Koblingselementer til brettet

Selve kretsen er så enkel at det ikke er noen vits i å tegne den - alle koblinger er synlige på fotografiet. Først kobler du ds18b20 til pinne (-) for Arduino-jord, pinne (+) for 5V og signalutgang til digital pinne 2. For å kontrollere voltmeteret, koble dens positive ledning til pinne 9 (en av PWM) og koble til minus til GND. Etter det, for å endre skalaen på voltmeteret til et termometer, er det bare å skrive ut bildet som er festet til artikkelen. Voltmeteret er 5 V her, men du kan ta hvilken som helst annen indikator, inkludert et vanlig mikroamperemeter, ved å legge den nødvendige motstanden i serie til den (ca. 10-100 kOhm).


Pekertermometer og voltmeter

Liste over nødvendige deler

  • Arduino Uno
  • DS18b20 sensor
  • Peker voltmeter
  • Flere ledninger
  • Strømforsyning (kan være batteri)

Termometer deler

Driftsprinsipp

Pulse Width Modulation, eller PWM, er en teknikk for å oppnå analoge resultater ved hjelp av digitale medier.


Pul

Når du blinker mikrokontrolleren, må du legge til "DallasTemperature-biblioteket" til Arduino-utviklingsmiljøet ditt, siden dette er biblioteket som støtter ds18b20-temperatursensoren.

Koden har tre hoveddeler:

  1. Leser temperaturen fra sensoren
  2. Konvertering av temperatur til PWM
  3. Vise en verdi på en skala

Termometerinnstilling

I innstillingene vil vi lese temperaturen fra sensoren. Deretter konverterer vi denne verdien til en PWM-funksjon, fra 0 til 255. Dette kan gjøres i en programfunksjon. La oss deretter bruke et signal til pin 9, som er koblet til et oppringt voltmeter.

Ved innstilling temperaturspenn husk - jo mindre gapet mellom ekstremverdiene er, jo større er termometerets oppløsning. Du kan laste ned dataarket for sensoren og fastvarekoden.

Video av enhetens drift

Temperatursensoren i Arduino er en av de vanligste sensortypene. For Arduino termometer prosjektutviklere er det mange ulike alternativer, forskjellig i prinsippet om handling, nøyaktighet, design. Den digitale sensoren DS18B20 er en av de mest populære temperatursensorene, ofte brukt i vanntett etui for å måle temperaturen på vann eller andre væsker. I denne artikkelen finner du en beskrivelse av ds18b20-sensoren på russisk, sammen vil vi vurdere funksjonene ved å koble til en arduino, prinsippet for drift av sensoren, en beskrivelse av biblioteker og skisser.

DS18B20 er en digital temperatursensor med flere nyttige funksjoner... Faktisk er DS18B20 en hel mikrokontroller som kan lagre måleverdien, signalisere når temperaturen går over de angitte grensene (vi kan stille inn og endre grensene selv), endre målenøyaktigheten, måten å samhandle med kontrolleren på, og mye mer. Alt dette i en veldig liten koffert, som også er tilgjengelig i vanntett design.

Temperatursensoren DS18B20 har en rekke hustyper. Det er tre valg - 8-Pin SO (150 mils), 8-Pin µSOP og 3-Pin TO-92. Sistnevnte er den vanligste og er laget i en spesiell vanntett koffert, slik at den trygt kan brukes under vann. Hver sensor har 3 pinner. For en TO-92-pakke, se på fargen på ledningene: svart for jord, rød for strøm og hvit/gul/blå for signal. Du kan kjøpe en ferdig DS18B20-modul i nettbutikker.

Hvor kan man kjøpe en sensor

Naturligvis er DS18B20 den billigste å kjøpe på Aliexpress, selv om den også selges i alle spesialiserte russiske nettbutikker med arduino. Her er noen linker for et eksempel:

Sensorminnet består av to typer: operativt og ikke-flyktig - SRAM og EEPROM. Sistnevnte lagrer konfigurasjonsregistrene og TH, TL-registrene, som kan brukes som registre generelt formål hvis den ikke brukes til å spesifisere et område akseptable verdier temperatur.

Hovedoppgaven til DS18B20 er å bestemme temperaturen og konvertere resultatet til digital visning... Vi kan spørre uavhengig nødvendig tillatelse ved å sette antall presisjonsbiter - 9, 10, 11 og 12. I disse tilfellene vil oppløsningen være henholdsvis 0,5C, 0,25C, 0,125C og 0,0625C.

De oppnådde temperaturmålingene lagres i sensorens SRAM. 1 og 2 byte lagrer den oppnådde temperaturverdien, 3 og 4 lagrer målegrensene, 5 og 6 er reservert, 7 og 8 brukes for høypresisjons temperaturbestemmelse, de siste 9 bytene lagrer en støybestandig CRC-kode.

Kobler DS18B20 til Arduino

DS18B20 er digital sensor... Digitale sensorer overfører verdien av den målte temperaturen i form av en viss binær kode som mates til de digitale eller analoge pinnene til arduinoen og deretter dekodes. Koder kan være svært forskjellige, ds18b20 fungerer på 1-Wire dataprotokollen. Vi vil ikke gå inn på detaljene i denne digitale protokollen, vi vil bare indikere nødvendig minimumå forstå prinsippene for samhandling.

Informasjonsutveksling i 1-Wire skjer på grunn av følgende operasjoner:

  • Initialisering - bestemmelse av sekvensen av signaler som måling og andre operasjoner begynner fra. Masteren sender en tilbakestillingspuls, hvoretter sensoren skal gi en tilstedeværelsespuls som indikerer at den er klar til å utføre en operasjon.
  • Dataregistrering - databyten overføres til sensoren.
  • Leser data - en byte mottas fra sensoren.

For å jobbe med sensoren trenger vi programvare:

  • Arduino IDE;
  • OneWire-bibliotek, hvis flere sensorer på bussen brukes, kan DallasTemperature-biblioteket brukes. Den vil kjøre på toppen av OneWire.

Utstyr du trenger:

  • En eller flere DS18B20-sensorer;
  • Arduino mikrokontroller;
  • Koblinger;
  • 4,7 kOhm motstand (i tilfelle av tilkobling av en sensor, vil en motstand på 4 til 10K gå);
  • Kretskort;
  • USB-kabel for tilkobling til datamaskin.

Sensoren kobles ganske enkelt til Arduino UNO-kortet: GND fra temperatursensoren er koblet til GND på Arduino, Vdd er koblet til 5V, Data kobles til en hvilken som helst digital pin.

Det enkleste diagrammet for tilkobling av en digital sensor DS18B20 er vist i figuren.

Algoritmen for å få informasjon om temperaturen i skissen består av følgende trinn:

  • Bestemme adressen til sensoren, sjekke tilkoblingen.
  • En kommando sendes til sensoren med krav om å lese av temperaturen og sette den målte verdien inn i registeret. Prosedyren tar lengre tid enn de andre, den tar ca 750 ms.
  • En kommando gis for å lese informasjon fra registeret og sende den resulterende verdien til "portmonitoren",
  • Om nødvendig konverteres den til Celsius / Fahrenheit.

Eksempel på en enkel skisse for DS18B20

Den enkleste skissen for å jobbe med en digital sensor ser slik ut. (i skissen bruker vi OneWire-biblioteket, som vi skal snakke mer om litt senere).

#inkludere / * * Beskrivelse av interaksjon med en digital sensor ds18b20 * Kobler ds18b20 til arduino via pin 8 * / OneWire ds (8); // Lag et OneWire-objekt for 1-Wire-bussen, som skal brukes til å jobbe med sensorens void-oppsett () (Serial.begin (9600);) void loop () (// Bestem temperaturen fra DS18b20-sensorbyten data; // Plassering for temperaturverdien ds.reset (); // Vi starter interaksjonen ved å tilbakestille alle tidligere kommandoer og parametere ds.write (0xCC); // Vi ber DS18b20-sensoren hoppe over adressesøket. I vårt tilfelle , bare én enhet ds.write (0x44) ; // Vi gir DS18b20-sensoren en kommando for å måle temperaturen Selve temperaturverdien er ikke mottatt ennå - sensoren vil sette den inn internt minne forsinkelse (1000); // Mikrokretsen måler temperaturen, og vi venter. ds.reset (); // Nå gjør vi oss klare til å få verdien av den målte temperaturen ds.write (0xCC); ds.write (0xBE); // Vennligst send oss ​​verdien til registrene med temperaturverdien // Hent og les svardataene = ds.read (); // Les den lave byten til temperaturverdidataene = ds.read (); // Og nå den senior // Form den endelige verdien: // - først "limer" vi verdien, // - så multipliserer vi den med faktoren som tilsvarer oppløsningen (for 12 biter er standardverdien 0,0625) float temperatur = ((data<< 8) | data) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); }

Skisse for arbeid med ds18b20 sensor uten forsinkelse

Det er mulig å komplisere programmet for ds18b20 litt for å bli kvitt den tregere utførelsen av skissen.

#inkludere OneWire ds (8); // OneWire objekt int temperatur = 0; // Global variabel for lagring av temperaturverdien fra DS18B20-sensoren long lastUpdateTime = 0; // Variabel for lagring av tidspunktet for siste avlesning fra sensoren const int TEMP_UPDATE_TIME = 1000; // Bestem frekvensen for kontroller void oppsett () (Serial.begin (9600);) void loop () (detectTemperature (); // Bestem temperaturen fra DS18b20-sensoren Serial.println (temperatur); // Skriv ut den oppnådde temperaturverdi // Т siden den variable temperaturen er av typen int, vil brøkdelen ganske enkelt bli forkastet) int detectTemperature () (bytedata; ds.reset (); ds.write (0xCC); ds.write (0x44); if (millis () - lastUpdateTime > TEMP_UPDATE_TIME) (lastUpdateTime = millis (); ds.reset (); ds.write (0xCC); ds.write (0xBE); data = ds.read (); data = ds.read (); // Form verdien temperatur = (data<< 8) + data; temperature = temperature >> 4; } }

DallasTemperature og DS18b20 bibliotek

I skissene våre kan vi bruke DallasTemperature-biblioteket, som forenkler noen aspekter ved å jobbe med en ds18b20-sensor via 1-Wire. Eksempel skisse:

#inkludere // Arduino pin-nummer med den tilkoblede sensoren #define PIN_DS18B20 8 // Lag et OneWire OneWire oneWire-objekt (PIN_DS18B20); // Lag et DallasTemperature-objekt for å jobbe med sensorer, gi det en referanse til et objekt for arbeid med 1-Wire. DallasTemperature dallasSensorer (& oneWire); // Spesiell gjenstand for å lagre enhetsadressen DeviceAddress sensorAddress; void loop (void) (// Forespørsel om målinger med en temperatursensor Serial.print ("Måler temperatur ..."); dallasSensors.requestTemperatures (); // Vi ber ds18b20 samle inn data Serial.println ("Ferdig") ; // Forespørsel om å motta den lagrede temperaturverdien printTemperature (sensorAddress); // Forsinkelse slik at du kan analysere noe på skjermens forsinkelse (1000);) // Hjelpefunksjon for å skrive ut temperaturverdien for enheten void printTemperature (DeviceAddress deviceAddress ) (float tempC = dallasSensors.getTempC (deviceAddress); Serial.print ("Temp C:"); Serial.println (tempC);) // Hjelpefunksjon for å vise sensoradressen ds18b20 void printAddress (DeviceAddress deviceAddress) (for ( uint8_t i = 0; i< 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } }

OneWire Library for DS18B20

DS18B20 bruker 1-Wire-protokollen for å kommunisere med arduino, som det allerede er skrevet et utmerket bibliotek for. Du kan og bør bruke det for ikke å implementere alle funksjonene manuelt. ... For å installere biblioteket, last ned arkivet, pakk det ut til bibliotekmappen i Arduino-katalogen din. Biblioteket kobles til ved å bruke #include-kommandoen

Alle DS18B20-sensorer er koblet parallelt, for alle er én motstand tilstrekkelig. Ved å bruke OneWire-biblioteket kan alle data fra alle sensorer leses samtidig. Hvis antallet tilkoblede sensorer er mer enn 10, må du velge en motstand med en motstand på ikke mer enn 1,6 kOhm. For en mer nøyaktig temperaturmåling må du også sette en ekstra motstand på 100 ... 120 Ohm mellom datautgangen på Arduino-kortet og data på hver sensor. Du kan finne ut fra hvilken sensor en bestemt verdi ble mottatt ved å bruke en unik 64-biters seriekode som vil bli utstedt som et resultat av programkjøringen.

For å koble til temperatursensorer i normal modus, bruk kretsen vist på figuren.

konklusjoner

Dallas DS18B20-brikken er veldig interessant apparat... Temperatursensorer og termometre laget på grunnlag av det har egenskaper som er akseptable for de fleste oppgaver, utviklet funksjonalitet og er relativt rimelige. DS18B20-sensoren er spesielt populær som en vanntett enhet for å måle temperaturen på væsker.

Per tilleggsfunksjoner må betale relativ kompleksitet arbeid med sensoren. For å koble til DS18B20 vil vi definitivt trenge en motstand med en verdi på omtrent 5K. For å jobbe med sensoren i arduino-skisser, må du installere ekstra bibliotek og få visse ferdigheter til å jobbe med det - alt er ikke helt trivielt der. Du kan imidlertid kjøpe en ferdig modul, men i de fleste tilfeller vil det være nok for en skisse enkle eksempler gitt i denne artikkelen.

Når du lager ulike tekniske prosjekter ofte er det behov for å utstyre temperaturindikatorer. Disse komponentene lar deg bedre overvåke driften av enheter. I denne anmeldelsen vil vi lære hvordan du konverterer et analogt voltmeter til et nøyaktig termometer. For å fungere trenger vi et Arduino-brett ( spesiell krets utstyrt med eget minne, prosessor, samt et par dusin funksjonelle kontakter) og en temperatursensor modell DS18B20.

Egenskaper for temperaturmodulen DS18B20

Det er umulig å ikke nevne en annen fordel med DS18B20-modulene. Hver sensor av denne typen bruker en unik sekvensiell 64-biters kode for arbeid. Dette betyr at alle slike komponenter kan operere på én 1-tråds buss, som, som nevnt ovenfor, all informasjon overføres gjennom. For å kontrollere flere moduler er det derfor kun nødvendig med én mikroprosessor, og selve temperatursensorene kan spres over et fast område.

Detaljer for arbeid med et termometer med en DS18B20 basert på Arduino

For å sette sammen et analogt termometer av høy kvalitet, må du forberede:

  • en elektrisk krets av typen Arduino (helst ny);
  • temperatursensor modell DS18B20;
  • analog voltmeter;
  • 5 ledninger - to ledninger trengs for å lage en kjede mellom Arduino-brett og et voltmeter, 3 ledninger er nødvendig for å koble temperatursensoren til den elektriske kretsen;
  • eksternt batteri.

Lage en elektrisk krets for et Arduino-basert DS18B20 termometer

Her er operasjonsalgoritmen ganske enkel, så selv en nybegynner kan koble alle komponentene til en enkelt krets. Først må du finne en negativ kontakt på DS18B20-modulen (hvis du ser på sensoren ovenfra, denne kontakten vil være til venstre). Den negative pinnen skal kobles til det nedre jordingspunktet ved Arduino-brett(det vil bli forkortet til GND). Den positivt ladede pinnen (høyre) må kobles til 5 V-forsyningspinnen (også plassert nederst på brettet). Deretter lages en signalutgang til digital pinne 2 (plassert på toppen av brettet) for å gjøre det mulig å måle temperaturen (i dette tilfellet brukes den sentrale pinnen til sensoren).

For å sikre kontroll over voltmeteret under drift, må du koble dens positive kontakt med digital utgang under nummer 9. Voltmeterets negative terminal er koblet til det øvre jordingspunktet på brettet (det er også betegnet med forkortelsen GND). For å endre den digitale skalaen til voltmeteret, trenger du bare å skrive ut et tidligere forberedt bilde med grader Celsius. Dette bildet er enten limt på toppen av den gamle skalaen, eller satt inn i stedet for det.

Beskrivelse av pulsbreddemodulasjon

Kort fortalt er pulsbreddemodulasjon en metode for å oppnå analoge resultater (som temperatur) ved bruk av digitale midler. Det er bra ved at selv svært høye eller svært lave verdier overføres gjennom kommunikasjonskanaler med en enkelt puls. Hele prosessen pulsbreddemodulasjon går slik: sensoren sender en signalpuls til prosessoren, og prosessoren selv behandler den allerede, hvoretter den gir verdien til termometeret. For å kunne motta informasjon på denne måten, må du bruke spesialpinnene på Arduino-brettet. Det er veldig enkelt å gjenkjenne disse kontaktene - ved siden av dem er det et slikt "~"-ikon. Forresten, dette ikonet er også til stede nær kontaktnummeret 9, som vi kobler den positive pinnen til voltmeteret med. Pin 9 ble kun brukt som et eksempel; hvis du vil, kan du bruke en hvilken som helst annen kontakt ved siden av som det er et "~"-ikon.

Skrive koden for termometerdrift med DS18B20 basert på Arduino

Først og fremst må et bibliotek kalt DallasTemperature legges til utviklingsprogrammet. Det er verdt å gi preferanse til det, fordi det inneholder de høyeste temperaturverdiene (og dette er viktig når du bruker DS18B20-modulen).

Når du oppretter koden, må du registrere tre hovedkommandoer:

  1. Leser temperaturverdier fra sensoren.
  2. Temperaturkonvertering ved bruk av pulsbreddemodulasjon.
  3. Utgang av verdier til et termometer.
Basert på dette, helt i begynnelsen, konfigureres temperaturavlesningen fra sensoren. Etter det justeres prosessen med pulsbreddemodulasjon. Hvis det spesifiserte biblioteket er tilgjengelig, vil brukeren kunne motta verdier i området fra 0 til 255. Innstillingen av pulsbreddemodulering utføres i utviklingsprogrammet (for dette er det et menyelement kalt " kart" der). Koden setter minimum og Maksimal temperatur som termometeret vil ta hensyn til. Å skaffe programkommunikasjon mellom voltmeteret og Arduino-kortet, må du registrere den niende digitale pinnen i en bestemt del av koden (det ble indikert ovenfor at selve voltmeteret er koblet til det).

Det bør tas i betraktning at minimum og maksimal terskel temperaturen kan være veldig forskjellig (her avhenger alt av brukerens preferanser). En ting å huske på er imidlertid at jo større gapet mellom nedre og øvre grense er, desto mindre vil tallene på skalaen være.

Slik ser all koden som trengs for å sette opp termometeret ut.

Det ser ut til, hva kan være interessant og nytt i å måle temperatur ved å bruke Arduino? Det er skrevet hundrevis av artikler, titalls megabyte store, kanskje litt mindre, og kanskje litt flere skisser ... Og her er artikkelen min. Til hva? For å være ærlig trodde jeg også at dette spørsmålet ble "tygget opp og ned" helt til jeg selv sto overfor målingen av temperatur. Og så reiste den seg. Noe fungerer ikke, noe fungerer ikke, mange spørsmål dukker opp, som svarene må "skrapes ut" ved å avbryte halvparten av Internett, og ikke bare den russisktalende. Denne artikkelen, i motsetning til mine tidligere artikler om denne ressursen mye mer praktisk, men la oss begynne på nytt. Hvorfor egentlig måle temperaturen med noe nytt, når termometre selges – for enhver smak og pengepung? Og faktum er at temperaturen ofte ikke bare må måles, men deretter, basert på dataene som er oppnådd, gjøre noe eller bare registrere for å spore endringer. Koble til, bruke , en termisk sensor med en reléenhet, vil vi få den enkleste termostaten, og hvis denne termostaten kan overvåke temperaturen på flere punkter (soner) og handle i henhold til en viss algoritme, vil vi få en ganske seriøs enhet, den industrielle analogen til som kan sammenlignes med prisen på en god bærbar PC. Men formålet med denne artikkelen er ikke å lage sofistikerte enheter. Målet er annerledes – å tilby nybegynneren en enkel, feltprøvet løsning for temperaturmåling. I likhet med de forrige artiklene vil også denne bestå av deler. Hver av dem vil vurdere sitt eget spørsmål. Delene vil gå i økende vanskelighetsgrad.

Del en. Den enkleste, men også nyttig

Altså, fra ord til handling! For gjennomføring av dette prosjektet i det første trinnet trenger vi en digital termisk sensor DS18B20, ARDUINO UNO, en 4,7 kΩ motstand (effekten spiller ingen rolle, fra 0,125 til 2 W er helt egnet, men nøyaktigheten er viktig, jo mer nøyaktig jo bedre), en stykke 3-kjernet ledning (og separat ledning på eksperimentets stadium vil også fungere), og også noen få pinner til brettet. Selv om det også er mulig uten dem, hvis forsiktig, selvfølgelig. Valget av denne sensoren er ikke tilfeldig. Faktum er at det kan overvåke temperaturen i området fra -55 ° C til + 125 ° C med en nøyaktighet i hoveddelen av området på 0,5 ° C, noe som er nok til å kontrollere både husholdningsoppvarming og diverse frysing og kjøleenheter, samt bad, badstuer, drivhus, inkubatorer, barnehager og andre. La meg minne deg på at ARDUINO UNO kan kjøpes fritt her: eller her: , termisk sensor DS18B20 - , men personlig for meg - dette: fordelen med min er dens lille størrelse, sammenlignbar med størrelsen på kabelen. Ulemper - fraværet av et brett, som under noen forhold negativt påvirker installasjonsvennligheten og sensorens levedyktighet. Også - ved sensoren en motstand er innebygd og det skal ikke loddes flere motstander, men muligheten til å koble sammen flere sensorer «i en kjede» forsvinner. Tilkoblingen av sensoren til Arduino kan sees på fig. 1 og angitt i tabell 1. Det er enkelt å identifisere kontaktene på termosensoren. Du må ta det slik at du ser på kuttet med tall, og bena var nederst. Det venstre benet vil være GND, den midterste DQ, og den lengst til høyre VDD.

Tabell 1.

Pin Arduino Uno

Merk

5V, det ene benet på 4,7 kOhm-motstanden er også loddet.




Figur 1. Koble til en termisk sensor.

Figuren viser at det ble brukt to motstander. Dette skyldes at motstanden jeg fant med markeringen "4K7" faktisk hadde en ganske høy feil, som jeg måtte kompensere for med den andre motstanden. Total motstand denne monteringen var på 4.695 kOhm, som jeg synes er ganske akseptabelt. Du kan også se på figuren at sensoren ikke er loddet direkte til ledningene (et kutt av løkken), men settes inn i kontakten. Dette ble gjort av hensyn til utviklingen av eksperimentet. Det anbefales sterkt å lodde disse sensorene. Selve skissen er også ganske kompakt:


Kun 14 linjer med kode med kommentarer. Enhver nybegynner vil kunne finne ut av det. Som et resultat av arbeidet vil programmet gi noe slikt:



Figur 2. Resultat av arbeid med én sensor.



Del to. Litt komplisert.

Vi kompliserer denne delen ved å legge til en annen sensor. Anta at vi må måle temperaturen ute og inne. For å gjøre dette legger vi bare til en sensor "i en kjede". Veldig lik parallellkobling... Elektrokjennere vil forstå hva jeg mener. Men det er en forskjell: i i dette tilfellet ledningene fra senterledningen skal være så korte som mulig.



Figur 3. Tavle med to sensorer.



Skissen har vokst med kun 3 linjer. Nå har den 17 linjer:


Resultatene av denne skissen kan sees i figur 4.



Figur 4. Arbeid med to sensorer.



Del tre. Endelig.

La oss nå koble en LED til Arduino, som vil lyse når en viss temperatur er nådd. En slik "terskelsignalanordning". Dette krever en konvensjonell LED og en strømbegrensende motstand. Jeg fikk en hånd på 100 Ohm, og jeg brukte den ved å koble den til den syvende pinnen til Arduino. Vi lodder det lange benet på LED-en (anode) til motstanden, og kobler det korte benet (katoden) til GND-pinnen til Arduino. Du bør få noe sånt som figur 5.




Skissen vokste heller ikke mye i det hele tatt:


Driften av dette programmet på datamaskinen vises på nøyaktig samme måte som vist i figur 4. Naturligvis kan sensors.getTempCbyIndex-variabelen (1) betjenes innenfor et meget bredt område og LED-kontroll er bare det enkleste eksemplet av alle mulige .

Og som konklusjon av denne artikkelen, ett skritt til. Nå skal jeg fortelle deg hvordan du kobler flere "guirlander" av disse enhetene til en Arduinka. Faktum er at lengden på "kransen" ikke kan være uendelig, dessuten er den veldig begrenset. Under ideelle forhold er det 300 meter, men å skape "ideelle" forhold er en ganske dyr fornøyelse. Under reelle forhold anbefales det ikke å overstige 10 meter. For et vanlig "rom" termometer er dette mer enn nok, men hvis det kommer om noe mer seriøst utstyr - dette er for lite. Dessuten for stabilt arbeid det er nødvendig at sensorene er plassert så nær busslederne som mulig - en "daisy chain". Avvisning er selvfølgelig også mulig, men nøyaktigheten og støyimmuniteten vil i dette tilfellet være ekstremt lav. Så vi kobler sammen flere "guirlander" nettopp for å samle informasjon fra et stort antall poeng, samtidig som tilstrekkelig nøyaktighet og støyimmunitet opprettholdes. Legg til kontakter i henhold til tabell 2:

Pin Arduino Uno

Merk

5V, ett ben på 4,7 kOhm motstander er også loddet.

Digital inngang, den andre delen av 4,7 kOhm motstanden er også loddet.

Digital inngang, den andre delen av 4,7 kOhm motstanden er også loddet.



Som du kan se fra tabellen - det er ikke noe komplisert, nøyaktig samme buss, bare på et annet digitalt vann. Jeg loddet ikke til pinne 9 bare av hensyn til bekvemmelighet og loddehastighet.
Skisse:


Skissen trenger neppe noen unødvendige kommentarer.

Resultatet av skissen ser slik ut:



Figur 6. Samtidig drift av to sensorlinjer.



Og brettet med to linjer koblet til ser slik ut:



Figur 7. Tavle med to busser.



Det kan ses av figuren at 4,7 kOhm-motstanden også er laget sammensatt for å forbedre nøyaktigheten.

Bibliotekene som brukes til å skrive skissene som er omtalt i artikkelen, finner du her:



Anmeldelse utarbeidet av Pavel Sergeev