Buitenthermometer op arduino met display. Arduino thermometer met LM35 temperatuursensor. Een behuizing maken voor de sensor

In deze zelfstudie gebruiken we de DS18B20-temperatuursensor met: Arduino UNO om een ​​thermometer te maken. De DS18B20-sensor is: goede optie wanneer in een project met hoge precisie een goede reactie is vereist. We laten u zien hoe u de DS18B20 op de uwe aansluit en temperatuurgegevens op een 16x2 LCD-scherm weergeeft.

De DS18B20 sensor communiceert met de Arduino via een 1-draads bus. Per definitie is er maar één datalijn (en aarde) nodig om met de Arduino te communiceren.

Elke DS18B20 heeft een unieke 64-bit seriële code of een uniek adres waarmee meerdere DS18B20's op dezelfde enkele draadbus kunnen werken. Daarom maakt het gebruik van een microprocessor het gemakkelijker om meerdere DS18B20's te besturen die over een groot gebied zijn verdeeld. Toepassingen voor deze functie omvatten: milieu Beheer, temperatuurregelsystemen in gebouwen en mechanische apparatuur.

Functies DS18B20

  • Er is slechts één enkeldraads interface nodig voor de communicatie tussen de microcontroller en de sensor.
  • Slechts één vereist externe component: weerstand 4,7 kΩ.
  • Kan rechtstreeks vanaf de datalijn worden gevoed, waarvoor een spanning van 3,0 tot 5,5V nodig is.
  • Elk apparaat heeft een unieke 64-bits seriële code die is opgeslagen op het ingebouwde ROM.
  • Kan temperaturen meten van -55 ° C tot + 125 ° C (-67 ° F tot + 257 ° F).
  • Nauwkeurigheid ± 0,5° C van -10° C tot + 85° C.

Dit project maakt gebruik van de DS18B20, die wordt geleverd in de vorm van een temperatuursonde die waterdicht is. Het gebruik van een waterdichte sensor vergroot de mogelijkheden - de temperatuursensor kan de temperatuur van vloeistoffen zoals water, chemicaliën, thee en koffie meten.

Componentvereisten:

De apparatuurvereisten voor uw thermometer zijn vrij standaard, we hebben nodig:

  • LCD-scherm 16x2
  • Temperatuursensor DS18B20
  • Doorverbindingsdraden
  • Weerstand 1K
  • Broodplank

Verbindingsdiagram

Maak de aansluitingen volgens onderstaand schema.

We verbinden de sensor en Arduino

  • VCC -> Arduino 5V plus 4.7K weerstand van VCC naar Data
  • Gegevens -> Pin 7 Arduino
  • GND -> GND Arduino

Aansluitingen voor LCD en Arduino UNO

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

Sluit een potentiometer zoals hierboven weergegeven aan op pin 3 op het LCD-scherm om het contrast te regelen.

Dit project werkt bij temperaturen tot 125 ° C. Als er enige dissonantie is in de weergegeven temperatuur, controleer dan de aansluitingen op de weerstand die is aangesloten op de DS18B20. Nadat alles is aangesloten wat hierboven is beschreven, kunnen we doorgaan met programmeren.

Broncode voor thermometer

Voor downloaden broncode je moet de twee bibliotheken instellen die nodig zijn om deze code in de Arduino-omgeving uit te voeren.

  • De eerste bibliotheek heet - OneWire ().
  • De tweede bibliotheek heet - DallasTemperature ().

Verplaats na het downloaden van beide bibliotheken de bestanden naar de map Arduino-bibliotheken standaard. Kopieer vervolgens de code naar en upload deze nadat u nogmaals hebt gecontroleerd of uw sensor correct is aangesloten.

//Code begint #include #erbij betrekken #erbij betrekken #define ONE_WIRE_BUS 7 OneWire oneWire(ONE_WIRE_BUS); DallasTemperatuursensoren (&oneWire); vlottertempC = 0; vlottertempF = 0; LiquidCrystal lcd (12,11,5,4,3,2); void setup() ( 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); delay(1000); Serial.println(tempC); lcd.setCursor(0,0); lcd. print("C: "); lcd.print(tempC); lcd.print("graden"); lcd.setCursor(0,1); lcd.print("F: "); lcd.print(tempF); lcd.print("graden"); )

Het ziet er ongeveer zo uit:

Met deze sensor hebben we temperaturen tot 100°C kunnen meten! Hij is erg responsief.

Nadat u een project hebt gemaakt, test u het apparaat door de sensor onder te dompelen in warm en koud water.

Nu leer je hoe je een gewone aanwijzer (analoge) voltmeter in een digitale thermometer kunt veranderen met behulp van het Arduino-platform en een ds18b20-temperatuursensor. In principe is deze technologie niet alleen geschikt voor het weergeven van temperatuur - alle andere (fysieke en elektrische) waarden van verschillende sensoren kunnen worden weergegeven digitale methode op de aanwijzer volgens deze methode.

Module DS18B20

De bekende ds18b20 kant-en-klare module is een digitale thermometer die 9-bit temperatuurmeting biedt en beschikt over een niet-vluchtig programmeerbaar hoog en laag instelpunt. Bovendien communiceert de ds18b20 via een 1-draads bus en heeft hij slechts één datalijn nodig om met de microprocessor te communiceren. Bovendien kan de ds18b20 rechtstreeks vanaf de datalijn worden gevoed, waardoor er geen externe bron voeding.

ds18b20 pinout

In feite heeft elke ds18b20 een unieke 64-bit seriële code waarmee zelfs meerdere DS18B20's op dezelfde 1-draads bus kunnen werken. Zo is het met slechts één microprocessor mogelijk om vele temperatuursensoren, verdeeld over een groot oppervlak, aan te sturen.

Thermometer Montageschema


Elementen verbinden met het bord

Het circuit zelf is zo eenvoudig dat het geen zin heeft om het te tekenen - alle verbindingen zijn zichtbaar op de foto. Sluit eerst de ds18b20 aan op de (-) pin voor Arduino-aarde, de (+) pin voor 5V en de signaaluitgang op digitale pin 2. GND. Om daarna de schaal op de voltmeter in een thermometer te veranderen, drukt u eenvoudig de foto af die in de bijlage bij het artikel staat. De voltmeter is hier 5 V, maar je kunt elke andere indicator nemen, inclusief een conventionele microampèremeter, door er de vereiste weerstand (ongeveer 10-100 kOhm) in serie aan toe te voegen.


Wijzerthermometer en voltmeter

Lijst met benodigde onderdelen

  • Arduino Uno
  • Sensor ds18b20
  • Aanwijzer voltmeter
  • Meerdere draden
  • Voeding (kan batterij zijn)

Thermometer onderdelen

Werkingsprincipe

Pulsbreedtemodulatie, of PWM, is een techniek voor het verkrijgen van analoge resultaten met behulp van digitale media.


Pulsbreedtemodulatie Switchman-besturing

Wanneer u de microcontroller flasht, moet u de "DallasTemperature-bibliotheek" toevoegen aan uw Arduino-ontwikkelomgeving, omdat dit de bibliotheek is die de temperatuursensor op de ds18b20-chip ondersteunt.

De code bestaat uit drie hoofdonderdelen:

  1. De temperatuur van de sensor lezen
  2. Temperatuur naar PWM conversie
  3. De waarde op de schaal weergeven

Thermometerinstelling

In de instellingen lezen we de temperatuur van de sensor af. Vervolgens converteren we deze waarde naar een PWM-functie in het bereik van 0 tot 255. Dit kan worden gedaan binnen een programmafunctie. Vervolgens geven we een signaal aan pin 9, die is aangesloten op een pointer voltmeter.

Met instellingen temperatuurbereik onthoud - hoe kleiner de kloof tussen de extreme waarden, hoe groter de resolutie van de thermometer. U kunt de datasheet van de sensor en de firmwarecode downloaden.

Video van het apparaat

De temperatuursensor in Arduino is een van de meest voorkomende soorten sensoren. Er zijn veel opties beschikbaar voor de projectontwikkelaar van de Arduino-thermometer. verschillende opties, verschillend in het werkingsprincipe, nauwkeurigheid, ontwerp. De digitale sensor DS18B20 is een van de meest populaire temperatuursensoren, vaak gebruikt in waterdichte behuizing voor het meten van de temperatuur van water of andere vloeistoffen. In dit artikel vindt u een beschrijving van de ds18b20-sensor in het Russisch, samen zullen we de kenmerken van het verbinden met een Arduino, het werkingsprincipe van de sensor, een beschrijving van bibliotheken en schetsen beschouwen.

DS18B20 is een digitale temperatuursensor met veel handige functies. In feite is de DS18B20 een hele microcontroller die de meetwaarde kan opslaan, de temperatuur buiten de ingestelde limieten kan signaleren (we kunnen de limieten instellen en wijzigen), de meetnauwkeurigheid, de manier van interactie met de controller en nog veel meer. Dit alles in een zeer kleine verpakking, die ook verkrijgbaar is in een waterdichte versie.

De DS18B20 temperatuursensor heeft verschillende behuizingstypes. U kunt kiezen uit drie - 8-pins SO (150 mils), 8-pins µSOP en 3-pins TO-92. Deze laatste is de meest voorkomende en is gemaakt in een speciale waterdichte behuizing, zodat deze veilig onder water gebruikt kan worden. Elke sensor heeft 3 pinnen. Voor de TO-92-behuizing moet je kijken naar de kleur van de draden: zwart - aarde, rood - voeding en wit / geel / blauw - signaal. In online winkels kunt u een kant-en-klare DS18B20-module kopen.

Waar een sensor kopen?

Natuurlijk is de DS18B20 de goedkoopste om te kopen op Aliexpress, hoewel hij ook wordt verkocht in gespecialiseerde Russische online winkels met arduino. Hier zijn enkele links voor voorbeelden:

Sensorgeheugen bestaat uit twee typen: operationeel en niet-vluchtig - SRAM en EEPROM. De laatste bevat configuratieregisters en registers TH, TL, die als registers kunnen worden gebruikt algemeen doel, tenzij gebruikt om een ​​bereik op te geven toegestane waarden temperatuur.

De belangrijkste taak van de DS18B20 is om de temperatuur te bepalen en het resultaat om te zetten in digitale weergave. We kunnen onszelf instellen vereiste toestemming, het aantal bits van precisie instellen - 9, 10, 11 en 12. In deze gevallen zijn de resoluties respectievelijk gelijk aan 0,5C, 0,25C, 0,125C en 0,0625C.

De ontvangen temperatuurmetingen worden opgeslagen in het SRAM van de sensor. Bytes 1 en 2 slaan de ontvangen temperatuurwaarde op, 3 en 4 slaan de meetlimieten op, 5 en 6 zijn gereserveerd, 7 en 8 worden gebruikt voor zeer nauwkeurige temperatuurdetectie, de laatste 9 bytes slaan de ruisbestendige CRC-code op.

DS18B20 aansluiten op Arduino

DS18B20 is digitale sensor. Digitale sensoren verzenden de waarde van de gemeten temperatuur in de vorm van een specifieke binaire code, die naar de digitale of analoge pinnen van de Arduino wordt gevoerd en vervolgens wordt gedecodeerd. De codes kunnen heel verschillend zijn, ds18b20 werkt op het 1-Wire dataprotocol. We gaan niet in op de details van dit digitale protocol, we geven alleen aan: noodzakelijke minimum om de principes van interactie te begrijpen.

De uitwisseling van informatie in 1-Wire vindt plaats door de volgende bewerkingen:

  • Initialisatie - definitie van de reeks signalen van waaruit de meting en andere bewerkingen beginnen. Het masterapparaat stuurt een resetpuls, waarna de sensor een aanwezigheidspuls moet geven om aan te geven dat hij klaar is om de handeling uit te voeren.
  • Gegevens schrijven - er wordt een gegevensbyte naar de sensor verzonden.
  • Gegevens lezen - er wordt een byte ontvangen van de sensor.

Om met de sensor te kunnen werken hebben we software nodig:

  • Arduino IDE
  • OneWire-bibliotheek, als u meerdere sensoren op de bus gebruikt, kunt u de DallasTemperature-bibliotheek gebruiken. Het zal bovenop OneWire draaien.

Van de apparatuur heb je nodig:

  • Een of meer DS18B20-sensoren;
  • Arduino-microcontroller;
  • connectoren;
  • weerstand van 4,7 kOhm (als één sensor is aangesloten, gaat een weerstand met een waarde van 4 tot 10K weg);
  • Printplaat;
  • USB-kabel voor aansluiting op een computer.

De sensor is eenvoudig verbonden met het Arduino UNO-bord: GND van de temperatuursensor is verbonden met Arduino GND, Vdd is verbonden met 5V, Data is verbonden met elke digitale pin.

Het eenvoudigste aansluitschema voor de digitale sensor DS18B20 wordt weergegeven in de afbeelding.

Het algoritme voor het verkrijgen van informatie over de temperatuur in de schets bestaat uit de volgende stappen:

  • Het adres van de sensor bepalen, de verbinding controleren.
  • Er wordt een commando naar de sensor gestuurd met de eis om de temperatuur uit te lezen en de gemeten waarde in het register in te voeren. De procedure duurt langer dan de rest, het duurt ongeveer 750 ms.
  • Er wordt een opdracht gegeven om informatie uit het register te lezen en de ontvangen waarde naar de "poortmonitor" te sturen,
  • Indien nodig wordt deze omgerekend naar Celsius/Fahrenheit.

Eenvoudig schetsvoorbeeld voor DS18B20

De eenvoudigste schets voor het werken met een digitale sensor is als volgt. (in de schets gebruiken we de OneWire-bibliotheek, waar we later meer in detail over zullen praten).

#erbij betrekken /* * Beschrijving van interactie met digitale sensor ds18b20 * Verbinden van ds18b20 met Arduino via pin 8 */ OneWire ds(8); // Maak een OneWire-object voor de 1-Wire-bus, die zal worden gebruikt om te werken met de sensor void setup()( Serial.begin(9600); ) void loop()( // Bepaal de temperatuur van de DS18b20 sensorbyte data; // Locatie voor de temperatuurwaarde ds.reset(); // Start de interactie door alle voorgaande commando's en parameters te resetten ds.write(0xCC); // Commandeer de DS18b20-sensor om het opzoeken van adressen over te slaan. In ons geval alleen één apparaat ds.write(0x44) ; // We geven de DS18b20-sensor een opdracht om de temperatuur te meten. We ontvangen de temperatuurwaarde zelf nog niet - de sensor zal deze in intern geheugen vertraging (1000); // Chip meet temperatuur terwijl we wachten. ds-reset(); // Nu klaar om de gemeten temperatuurwaarde ds.write (0xCC) te krijgen; ds.write(0xBE); // Stuur ons de waarde van de registers met de temperatuurwaarde // Ontvang en lees de responsgegevens = ds.read(); // Lees de lage byte van de temperatuurwaardegegevens = ds.read (); // En nu de oudere // Vorm de uiteindelijke waarde: // - "lijm" eerst de waarde, // - vermenigvuldig deze vervolgens met een factor die overeenkomt met de resolutie (voor 12 bits is de standaardwaarde 0,0625) floattemperatuur = ((gegevens<< 8) | data) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); }

Schets om zonder vertraging met de ds18b20-sensor te werken

Je kunt het programma voor ds18b20 iets ingewikkelder maken om de vertraging in de schets weg te werken.

#erbij betrekken OneWire ds(8); // OneWire-object int temperatuur = 0; // Globale variabele voor het opslaan van de temperatuurwaarde van de DS18B20-sensor long lastUpdateTime = 0; // Variabele om de tijd van de laatste meting van de sensor const int TEMP_UPDATE_TIME = 1000 op te slaan; // Bepaal de frequentie van controles void setup()(Serial.begin(9600);) void loop()(detectTemperature(); // Bepaal de temperatuur van de DS18b20-sensor Serial.println(temperatuur); // Druk de ontvangen temperatuurwaarde // T (omdat de temperatuurvariabele van het type int is, wordt het fractionele deel gewoon weggegooid) int detectTemperature()( byte data; 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(); // Genereer waarde temperatuur = (data<< 8) + data; temperature = temperature >> 4; } }

DallasTemperature Library en DS18b20

In onze schetsen kunnen we de DallasTemperature-bibliotheek gebruiken, die sommige aspecten van het werken met de ds18b20-sensor via 1-Wire vereenvoudigt. Schets voorbeeld:

#erbij betrekken // Arduino pincode met sensor aangesloten #define PIN_DS18B20 8 // Object maken OneWire OneWire oneWire(PIN_DS18B20); // Maak een DallasTemperature-object om met sensoren te werken en geef het een verwijzing door naar een object om met 1-Wire te werken. DallasTemperatuur dallasSensoren(&oneWire); // speciaal object om het apparaatadres DeviceAddress sensorAddress op te slaan; void loop(void)( // Verzoek om metingen van temperatuursensoren Serial.print("Measuring temperature..."); dallasSensors.requestTemperatures(); // ds18b20 vragen om gegevens te verzamelen Serial.println("Done"); // Verzoek om de opgeslagen temperatuurwaarde printTemperature (sensorAddress); // Vertraging zodat iets op het scherm kan worden geparseerd vertraging (1000); ) // Hulpfunctie voor het afdrukken van de temperatuurwaarde voor het apparaat void printTemperature (DeviceAddress deviceAddress) ( float tempC = dallasSensors.getTempC(deviceAddress); Serial.print("Temp C: "); Serial.println(tempC); ) // Helperfunctie om sensoradres ds18b20 void printAddress(DeviceAddress deviceAddress)( for (uint8_t i = 0 ; l< 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } }

OneWire-bibliotheek voor het werken met DS18B20

DS18B20 gebruikt het 1-Wire-protocol om informatie uit te wisselen met arduino, waarvoor al een uitstekende bibliotheek is geschreven. U kunt en moet het gebruiken om niet alle functies handmatig te implementeren. . Om de bibliotheek te installeren, downloadt u het archief, pakt u het uit in de bibliotheekmap van uw Arduino-map. De bibliotheek wordt opgenomen met de opdracht #include

Alle DS18B20-sensoren zijn parallel geschakeld, één weerstand is voldoende voor allemaal. Met behulp van de OneWire-bibliotheek kun je alle gegevens van alle sensoren tegelijk uitlezen. Als het aantal aangesloten sensoren meer dan 10 is, moet u een weerstand selecteren met een weerstand van niet meer dan 1,6 kOhm. Voor een nauwkeurigere temperatuurmeting moet u ook een extra weerstand van 100 ... 120 Ohm plaatsen tussen de gegevensuitgang op het Arduino-bord en de gegevens op elke sensor. U kunt achterhalen van welke sensor een bepaalde waarde is verkregen met behulp van een unieke 64-bits seriële code die wordt uitgegeven als resultaat van de uitvoering van het programma.

Om temperatuursensoren in de normale modus aan te sluiten, moet u het circuit gebruiken dat in de afbeelding wordt getoond.

conclusies

De Dallas DS18B20-chip is erg interessant apparaat. Temperatuursensoren en daarop gebaseerde thermometers hebben kenmerken die acceptabel zijn voor de meeste taken, geavanceerde functionaliteit en zijn relatief goedkoop. De DS18B20 is vooral populair geworden als waterdicht apparaat voor het meten van de temperatuur van vloeistoffen.

Achter extra functies moeten betalen relatieve complexiteit werken met de sensor. Om de DS18B20 aan te sluiten, hebben we zeker een weerstand nodig met een rating van ongeveer 5K. Om met de sensor in Arduino-schetsen te werken, moet je installeren extra bibliotheek en bepaalde vaardigheden verwerven om ermee te werken - alles is daar niet helemaal triviaal. U kunt echter een kant-en-klare module kopen en in de meeste gevallen is dit voldoende voor een schets eenvoudige voorbeelden gegeven in dit artikel.

Bij het maken van verschillende technische projecten vaak is er behoefte aan de opstelling van temperatuurindicatoren. Met deze componenten kunt u de werking van apparaten beter bewaken. In deze review leren we hoe je een analoge voltmeter kunt omzetten in een nauwkeurige thermometer. Om te werken, hebben we een Arduino-bord nodig ( speciale regeling, uitgerust met een eigen geheugen, processor, evenals een paar dozijn functionele contacten) en een temperatuursensor model DS18B20.

Kenmerken van de temperatuurmodule DS18B20

Het is onmogelijk om nog een voordeel van de DS18B20-modules niet te noemen. Elke sensor van dit type gebruikt een unieke seriële 64-bits code om te werken. Dit betekent dat al dergelijke componenten kunnen werken op een enkele 1-Wire-bus, waardoor, zoals hierboven vermeld, alle informatie wordt verzonden. Voor het aansturen van meerdere modules is dus slechts één microprocessor nodig en kunnen de temperatuursensoren zelf over een aanzienlijk gebied worden verspreid.

Details voor het werken aan een thermometer met DS18B20 op basis van Arduino

Om een ​​hoogwaardige analoge thermometer te monteren, moet u het volgende voorbereiden:

  • een elektrisch circuit van het Arduino-type (bij voorkeur een nieuwe);
  • temperatuursensor model DS18B20;
  • analoge voltmeter;
  • 5 koorden - er zijn twee koorden nodig om een ​​ketting tussen te maken Arduino-bord en Voltmeter, er zijn 3 draden nodig om aan te sluiten op het elektrische circuit van de temperatuursensor;
  • externe batterij.

Een elektrisch circuit maken voor een thermometer met DS18B20 op basis van Arduino

Hier is het werkalgoritme vrij eenvoudig, dus zelfs een beginner kan alle componenten in één circuit aansluiten. Eerst moet u op de DS18B20-module een negatief contact vinden (als u van bovenaf naar de sensor kijkt, dit contact zal aan de linkerkant zijn). De negatieve pin moet worden aangesloten op het laagste massapunt op de Arduino-bord(het wordt afgekort als GND). De pin met positieve lading (rechts) moet worden aangesloten op de 5 V-voedingspin (ook aan de onderkant van het bord). Vervolgens wordt een signaaluitgang gemaakt naar digitale pin 2 (bevindt zich aan de bovenkant van het bord) zodat temperatuurmeting mogelijk wordt (in dit geval wordt de middelste pin van de sensor gebruikt).

Om ervoor te zorgen dat de voltmeter tijdens bedrijf kan worden bestuurd, moet het positieve contact worden aangesloten op: digitale uitgang op nummer 9. De negatieve pool van de voltmeter is verbonden met het bovenste massapunt van het bord (deze wordt ook aangeduid met de afkorting GND). Om de digitale schaal van de voltmeter te wijzigen, hoeft u alleen maar een vooraf voorbereide afbeelding met graden Celsius af te drukken. Deze afbeelding is ofwel op de oude schaal gelijmd of op zijn plaats gestoken.

Beschrijving van pulsbreedtemodulatie:

Kort gezegd is Pulse Width Modulation een techniek om analoge resultaten (zoals temperatuur) digitaal te verkrijgen. Het is goed dat zelfs zeer hoge of zeer lage waarden in één puls over de communicatiekanalen worden verzonden. Het hele proces pulsbreedtemodulatie gaat als volgt: de sensor stuurt een signaalpuls naar de processor, en de processor is deze zelf al aan het verwerken, waarna hij een waarde naar de thermometer stuurt. Om op deze manier informatie te kunnen ontvangen, moet je speciale contactpinnen op het Arduino-bord gebruiken. Het herkennen van deze contacten is uiterst eenvoudig - ernaast staat zo'n teken "~". Trouwens, dit pictogram is ook aanwezig bij het contact op nummer 9, waarmee we de positieve pin van de voltmeter verbinden. Pin 9 werd alleen als voorbeeld gebruikt; indien gewenst kunt u een ander contact gebruiken, waar naast een "~" teken staat.

Code schrijven voor thermometerwerking met op Arduino gebaseerde DS18B20

Allereerst moeten we een bibliotheek met de naam DallasTemperature aan het ontwikkelingsprogramma toevoegen. Het is de moeite waard om er de voorkeur aan te geven, omdat het de hoogste temperatuurwaarden bevat (en dit is belangrijk bij gebruik van de DS18B20-module).

Bij het maken van de code moet u drie hoofdopdrachten schrijven:

  1. Uitlezen van de temperatuurwaarden afkomstig van de sensor.
  2. Temperatuuromzetting door pulsbreedtemodulatie.
  3. Uitvoer van waarden naar de thermometer.
Op basis hiervan wordt aan het begin de temperatuurmeting van de sensor geconfigureerd. Daarna wordt het proces van pulsbreedtemodulatie tot stand gebracht. Als de opgegeven bibliotheek beschikbaar is, kan de gebruiker waarden ontvangen in het bereik van 0 tot 255. Pulsbreedtemodulatie is geconfigureerd in het ontwikkelingsprogramma (hiervoor is er een menu-item genaamd "kaart"). De code stelt het minimum en Maximale temperatuur, waarmee de thermometer rekening zal houden. Voorzien software verbinding tussen de voltmeter en het Arduino-bord, moet je de 9e digitale pin in een specifiek deel van de code schrijven (hierboven werd aangegeven dat de voltmeter er zelf op is aangesloten).

Opgemerkt moet worden dat de minimum en maximale drempel temperaturen kunnen heel verschillend zijn (het hangt allemaal af van de voorkeuren van de gebruiker). Er moet echter één detail worden onthouden: hoe groter de kloof tussen de onder- en bovengrens, hoe kleiner de getallen op de schaal.

Zo ziet alle code die nodig is om de thermometer in te stellen eruit.

Het lijkt erop dat wat interessant en nieuw zou kunnen zijn in temperatuurmeting met Arduino? Er zijn honderden artikelen geschreven, tientallen megabytes groot, misschien iets minder, misschien wat meer schetsen ... En hier is mijn artikel. Waarvoor? Eerlijk gezegd dacht ik ook dat deze vraag "op en neer werd gekauwd" totdat ik zelf temperatuurmeting tegenkwam. En toen werd het beter. Iets werkt niet, iets werkt niet goed, er rijzen veel vragen, waarop de antwoorden moeten worden "uitgekrast" door de helft van het internet te onderbreken, en niet alleen in het Russisch. Dit artikel, in tegenstelling tot mijn eerdere artikelen over deze bron veel praktischer, maar laten we bij het begin beginnen. Waarom eigenlijk de temperatuur meten met iets nieuws, wanneer thermometers worden verkocht - voor elke smaak en elk budget? Maar feit is dat de temperatuur vaak niet alleen gemeten moet worden, maar dat er dan, op basis van de verkregen gegevens, iets moet worden gedaan, of eenvoudigweg vastgelegd om veranderingen bij te houden. Door verbinding te maken met , een temperatuursensor met een relaiseenheid, we krijgen de eenvoudigste thermostaat, en als deze thermostaat de temperatuur op verschillende punten (zones) kan volgen en volgens een bepaald algoritme kan handelen, krijgen we een vrij serieus apparaat, waarvan de industriële analoog kost vergelijkbaar met de kosten van een goede laptop. Het doel van dit artikel is echter niet om ingewikkelde apparaten te maken. Het doel is om de beginner een eenvoudige, in de praktijk bewezen oplossing voor temperatuurmeting aan te bieden. Ook deze zal, net als de vorige artikelen, uit delen bestaan. Die zullen elk hun eigen probleem aanpakken. De onderdelen gaan in oplopende moeilijkheidsgraad.

Deel een. De eenvoudigste, maar ook nuttige

Dus van woorden naar daden! Voor implementatie dit project in de eerste fase hebben we een digitale temperatuursensor DS18B20, ARDUINO UNO, een weerstand van 4,7 kΩ nodig (vermogen maakt niet echt uit, van 0,125 tot 2 W is volledig geschikt, maar nauwkeurigheid is belangrijk, hoe nauwkeuriger hoe beter), een stuk 3-aderige draad (en individuele bedrading tijdens de experimentfase zal ook werken), en ook een paar pinnen voor het bord. Al kan het ook zonder, mits voorzichtig natuurlijk. De keuze voor deze sensor is niet toevallig. Het feit is dat het de temperatuur in het bereik van -55 ° C tot + 125 ° C kan bewaken met een nauwkeurigheid in het grootste deel van het bereik van 0,5 ° C, wat voldoende is om zowel huishoudelijke verwarming als verschillende invries- en koelunits, evenals baden, sauna's, kassen, incubators, kinderdagverblijven en anderen. Ik herinner u eraan dat ARDUINO UNO hier vrij kan worden gekocht: of hier: , temperatuursensor DS18B20 - , hoewel ik persoonlijk dit heb: voordeel van mij - de kleine afmetingen vergelijkbaar met de afmetingen van een kabel. Nadelen - de afwezigheid van een bord, dat in sommige omstandigheden het installatiegemak en de levensvatbaarheid van de sensor nadelig beïnvloedt. Ook de sensor er wordt een weerstand ingebouwd en er hoeven geen weerstanden meer te worden gesoldeerd, maar de mogelijkheid om meerdere sensoren in een "keten" te verbinden verdwijnt. De aansluiting van de sensor op de Arduino is te zien in Fig. 1 en is aangegeven in Tabel 1. De contacten op de temperatuursensor zijn eenvoudig te bepalen. Je moet het zo nemen dat je naar het plakje met cijfers kijkt, en de poten waren aan de onderkant. De meest linkse pin is GND, de middelste pin is DQ en de meest rechtse pin is VDD.

Tafel 1.

Pin Arduino Uno

Opmerking

5V, een been van de weerstand van 4,7 kΩ is ook gesoldeerd.




Figuur 1. Eén thermische sensor aansluiten.

De afbeelding laat zien dat er twee weerstanden zijn gebruikt. Dit komt door het feit dat de weerstand die ik vond gemarkeerd met "4K7" eigenlijk een vrij hoge fout had, die ik moest compenseren met een tweede weerstand. Totale weerstand deze assemblage was 4.695 kOhm, wat ik redelijk acceptabel vind. Ook in de figuur kun je zien dat de sensor niet direct aan de draden is gesoldeerd (kabeldoorsnede), maar in de connector wordt gestoken. Dit is gedaan om redenen van ontwikkeling van het experiment. Het solderen van deze sensoren wordt sterk aanbevolen. De schets zelf bleek ook vrij compact:


Slechts 14 regels code met commentaar. Elke nieuweling zal het kunnen begrijpen. Als resultaat zal het programma zoiets als dit produceren:



Figuur 2. Het resultaat van het werken met één sensor.



Deel twee. Een beetje ingewikkeld.

We zullen dit onderdeel bemoeilijken door nog een sensor toe te voegen. Stel dat we de temperatuur buiten en binnen moeten meten. Om dit te doen, soldeert u gewoon één sensor "in een ketting". doet erg denken aan parallelle verbinding. Elektriciens zullen weten wat ik bedoel. Maar er is een verschil: in deze zaak de draden van de middelste draad moeten zo kort mogelijk zijn.



Figuur 3. Bord met twee sensoren.



De schets groeide met slechts 3 lijnen. Nu heeft het 17 regels:


De resultaten van deze schets zijn te zien in figuur 4.



Figuur 4. Werken met twee sensoren.



Deel drie. Laatste.

En nu gaan we een LED op de Arduino aansluiten, die gaat branden als een bepaalde temperatuur is bereikt. Zo'n "drempelsignaleringsinrichting". Hiervoor heeft u een conventionele LED en een stroombegrenzende weerstand nodig. Ik kwam een ​​arm van 100 ohm tegen en gebruikte deze door hem aan te sluiten op de 7e Arduino-pin. We solderen het lange been van de LED (anode) aan de weerstand, en verbinden het korte been (kathode) met de GND-pin van Arduino. Het zou er ongeveer uit moeten zien als afbeelding 5.




De schets groeide ook behoorlijk:


De werking van dit programma op een computer wordt precies weergegeven zoals weergegeven in figuur 4. Uiteraard kan de variabele sensors.getTempCByIndex(1) binnen een zeer groot bereik worden bediend, en het aansturen van een LED is slechts het eenvoudigste voorbeeld van alles.

En aan het einde van dit artikel nog een stap. Nu zal ik je vertellen hoe je verschillende "slingers" van deze apparaten op één Arduino kunt aansluiten. Feit is dat de lengte van de "slinger" niet oneindig kan zijn, bovendien is hij zeer beperkt. In ideale omstandigheden - 300 meter, maar het creëren van "ideale" omstandigheden is vrij duur. In reële omstandigheden - het wordt niet aanbevolen om 10 meter te overschrijden. Voor een gewone "kamer" thermometer is dit meer dan genoeg, maar als we zijn aan het praten over serieuzere apparatuur - dit is catastrofaal klein. Bovendien, voor stabiele werking het is noodzakelijk dat de sensoren zo dicht mogelijk bij de busgeleiders worden geplaatst - "slinger". Omleiden is natuurlijk ook mogelijk, maar de nauwkeurigheid en ruisimmuniteit zal in dit geval extreem laag zijn. We verbinden dus verschillende "slingers" precies om informatie te verzamelen van een groot aantal punten, met behoud van voldoende nauwkeurigheid en ruisimmuniteit. Voeg contacten toe volgens tabel 2:

Pin Arduino Uno

Opmerking

5V, een been van 4,7 kΩ-weerstanden is ook gesoldeerd.

Digitale ingang, het tweede been van de weerstand van 4,7 kΩ is ook gesoldeerd.

Digitale ingang, het tweede been van de weerstand van 4,7 kΩ is ook gesoldeerd.



Zoals uit de tabel blijkt is er niets ingewikkelds, precies dezelfde bus, alleen op een ander digitaal water. Ik soldeerde niet alleen aan het 9e contact om redenen van gemak en snelheid van solderen.
Schetsen:


Het is onwaarschijnlijk dat de schets onnodig commentaar behoeft.

Het resultaat van de schets ziet er als volgt uit:



Figuur 6. Gelijktijdige werking van twee sensorlijnen.



En het bord met twee verbonden lijnen ziet er als volgt uit:



Figuur 7. Bord met twee bussen.



In de figuur is te zien dat de weerstand van 4,7 kΩ ook van composiet is gemaakt om de nauwkeurigheid te verbeteren.

De bibliotheken die zijn gebruikt om de schetsen te schrijven die in het artikel worden besproken, zijn hier:



Review opgesteld door Pavel Sergeev