Å bygge ditt DIY Arduino-termometer er en morsom og praktisk måte å utvide fikseringsferdighetene dine på, men hvor bør du begynne? Bli med oss mens vi fordyper oss i kablingen og kodingen som brukes til å gjøre en Arduino, en DS18B20 temperatursonde, og en OLED-skjerm til et presist digitalt termometer som kan fungere godt i rom, akvarier og til og med utendørs.
Hva trenger du for å lage et DIY Arduino digitalt termometer?
Alle disse komponentene kan finnes på nettsteder som eBay og Amazon.
Et Arduino-brett
Du kan bruke omtrent hvilken som helst Arduino med en 5V-utgang for dette prosjektet. Vi bruker en Arduino Pro Micro slik at det ferdige termometeret vårt er kompakt, men du kan bruke et større brett som en Arduino Uno hvis du vil unngå lodding for dette prosjektet.
DS18B20 temperatursonde
DS18B20 temperatursensorer kan finnes som små frittstående sensorer, PCB med sensorer festet, eller som vanntette prober på lange ledninger. Vi valgte sistnevnte, da dette gjør oss i stand til å bruke termometeret vårt inne i en fisketank, men du kan velge hvilken som helst variant av DS18B20 temperatursensoren. I motsetning til andre typer temperatursensorer, gir DS18B20s et direkte-til-digitalt signal til din Arduino, i stedet for de analoge signalene som kommer fra alternativer som LM35 temperatursensorer.
En OLED/LCD-skjerm
Displayet du velger for termometeret ditt vil ha stor innvirkning på det ferdige produktet. Vi valgte en 1,3-tommers I2C-kompatibel monokrom hvit OLED-skjerm for termometeret vårt, men du kan velge hva du vil så lenge det støtter I2C.
Ytterligere små deler
- 4,7K (kiloohm) motstand
- 28 til 22 AWG silikon/PVC isolert ledning
- Et brødbrett (valgfritt for de som ikke ønsker å lodde)
Koble ditt DIY-termometer
Kablingen for dette prosjektet er langt enklere enn du kanskje forestiller deg. Ved å bruke kretsdiagrammet ovenfor kan du lage ditt eget DIY digitalt termometer med liten innsats, men vi har også brutt opp diagrammet nedenfor for å gjøre det lettere å følge.
Koble DS18B20-temperatursonden
Å koble DS18B20-temperatursonden på riktig måte er avgjørende for dette prosjektet, og du må sørge for at du bruker 4,7K-motstanden vi nevnte tidligere, ellers vil sonden ikke fungere ordentlig. Sonden kommer med tre ledninger: Jord (vanligvis svart), VCC (vanligvis rød) og Data.
- VCC kobles til en 5V pin på din Arduino
- Jord kobles til en GND-pinne på din Arduino
- Data kan kobles til hvilken som helst digital pin på din Arduino (vi valgte digital pin 15)
- Data- og VCC-ledningene må også kobles til hverandre med en 4,7K motstand
Koble til I2C OLED-skjermen
Siden vi bruker en I2C-forbindelse mellom OLED-skjermen vår og Arduino, trenger vi bare å koble til fire ledninger før vi kan begynne å bruke skjermen vår: VCC, Ground, SDA og SCL. Omtrent alle moderne Arduino har SDA- og SCL-pinner innebygd, som gir muligheten til å koble opptil 128 unike I2C-komponenter til et enkelt kort.
Vår Arduino Pro Micro har SDA på digital pin 2 og SCL på digital pin 3, men du må kanskje se etter et pinout-diagram av det spesifikke kortet du har valgt før du starter.
- VCC kobles til en 5V pin på din Arduino
- Jord kobles til en GND-pinne på din Arduino
- SDA kobles til SDA-pinnen på din Arduino
- SCL kobles til SCL-pinnen på din Arduino
Tester kretsen din
Det er avgjørende at du tester kretsen du har laget før du begynner å skrive den endelige koden for den, men du kan bruke eksempelprosjektene som følger med bibliotekene omtalt nedenfor for å teste kretsen du har laget.
Koding av temperatursensor og OLED-skjerm
Det er vanskeligere å kode det digitale DIY-termometeret ditt enn å koble det til, men Arduino IDE kan brukes til dette for å gjøre det enklere.
Velge de riktige bibliotekene
- OLED-skjermbibliotek: Vi bruker Adafruit_SH1106.h-biblioteket for skjermen vår, siden dette er biblioteket det ble designet for å fungere med. Andre OLED-skjermer kan bruke sine egne biblioteker, som Adafruit_SSD1306.h-biblioteket, og du kan vanligvis finne ut hvilket du trenger fra produktsiden du fikk skjermen fra.
- DS18B20 temperatursonde: Vi trenger to biblioteker for temperatursonden vår. DallasTemperature.h brukes til å samle inn temperaturdata, og OneWire.h for å gjøre vår entrådstilkobling mulig.
Når disse bibliotekene er installert og inkludert i prosjektet ditt, skal koden din se omtrent ut som kodebiten nedenfor. Merk at vi også har inkludert kode for å stille inn pinnene for komponentene våre.
#inkludere //Vis bibliotek
#inkludere
#inkludere //Tempoprobebibliotek
#define OLED_RESET -1
Adafruit_SH1106-skjerm (OLED_RESET);
#define ONE_WIRE_BUS 15 //Tap for datatråd for temperatursonde
OneWire oneWire (ONE_WIRE_BUS); //Fortell OneWire hvilken pinne vi bruker
DallasTemperatursensorer(&oneWire); //OneWire-referanse til Dallas Temperature
Bygge funksjonene
- ugyldig oppsett: Vi bruker standarden oppsett funksjon for å initialisere både displayet og temperatursonden vår.
- ugyldig sløyfe: Vår standard Løkke funksjonen vil kun bli brukt til å kalle vår Vise funksjon.
- ugyldig visning: Vi har lagt til en Vise funksjon som kaller vår Temp funksjon og gir informasjon til skjermen vår.
- int Temp: Vår Temp funksjonen brukes for å få en temperaturavlesning for vår Vise funksjon.
Når det er fullført, skal dette se ut som utdraget nedenfor.
void setup() {
}
void loop() {
}
void Display() {
}
int Temp() {
}
Koding av OLED-skjermen
Før vi kan legge til kode i vår Vise funksjon, må vi sørge for at OLED-panelet er initialisert i vår ugyldig oppsett funksjon. Først bruker vi en display.begin kommando for å starte visningen, etterfulgt av en display.clearDisplay kommando for å sørge for at skjermen er tydelig.
void setup() {
display.begin (SH1106_SWITCHCAPVCC, 0x3C); //Endre basert på visningsbiblioteket ditt
display.clearDisplay();
}
Herfra kan vi legge til kode i vår Vise funksjon. Dette starter med en annen display.clearDisplay kommando, før du erklærer en ny heltallsvariabel med en verdi som kaller Temp funksjon (vi vil dekke dette senere). Vi kan da bruke denne variabelen til å vise temperaturen på skjermen ved å bruke følgende kode.
void Display() {
display.clearDisplay();
int intTemp = Temp(); //Kaller vår Temp-funksjon
display.setTextSize (3); //Angi tekststørrelsen vår
display.setTextColor (HVIT); //Setter vår tekstfarge
display.setCursor (5, 5); //Setter vår tekstposisjon på skjermen
display.print (intTemp); //Skriver ut verdien gitt av Temp-funksjonen
display.drawCircle (44, 7, 3, WHITE); //Tegner et gradsymbol
display.setCursor (50, 5);
display.print("C"); //Legger til C for å indikere at temperaturen vår er i Celsius
}
Koding av DS18B20 temperatursonde
I likhet med skjermen vår trenger temperatursonden vår også oppsettkode for å initialisere komponenten.
void setup() {
display.begin (SH1106_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
sensorer.begin();
}
Deretter er det på tide å programmere selve sonden, og vi må legge til kode i vår Temp funksjon. Først vil vi be om temperaturen fra sonden vår, etterfulgt av å registrere resultatet som en flytevariabel og konvertere den til et heltall. Hvis denne prosessen er vellykket, returneres temperaturen til Vise funksjon.
int Temp() {
sensors.requestTemperatures(); // Send kommandoen for å få temperaturer
float tempC = sensors.getTempCbyIndex (0); //Dette ber om temperaturen i Celsius og tilordner den til en flyte
int intTemp = (int) tempC; //Dette konverterer flottøren til et heltall
if (tempC != DEVICE_DISCONNECTED_C) //Sjekk om lesingen vår fungerte
{
retur intTemp; //Returner temperaturverdien vår til Display-funksjonen
}
}
Avslutter
Til slutt trenger vi bare å fortelle vår viktigste Løkke funksjon for å ringe vår Vise funksjon med hver syklus av koden, og etterlater oss med et prosjekt som ser slik ut.
#inkludere //Vis bibliotek
#inkludere
#inkludere //Tempoprobebibliotek
#define OLED_RESET -1
Adafruit_SH1106-skjerm (OLED_RESET);
#define ONE_WIRE_BUS 15 //Tap for datatråd for temperatursonde
OneWire oneWire (ONE_WIRE_BUS); //Fortell OneWire hvilken pinne vi bruker
DallasTemperatursensorer(&oneWire); //OneWire-referanse til Dallas Temperature
void setup() {
display.begin (SH1106_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
sensorer.begin();
}
void loop() {
Vise(); //Kaller displayfunksjonen vår
}
void Display() {
display.clearDisplay();
int intTemp = Temp(); //Kaller vår Temp-funksjon
display.setTextSize (3); //Angi tekststørrelsen vår
display.setTextColor (HVIT); //Setter vår tekstfarge
display.setCursor (5, 5); //Setter vår tekstposisjon på skjermen
display.print (intTemp); //Skriver ut verdien gitt av Temp-funksjonen
display.drawCircle (44, 7, 3, WHITE); //Tegner et gradsymbol
display.setCursor (50, 5);
display.print("C"); //Legger til C for å indikere at temperaturen vår er i Celsius
}
int Temp() {
sensors.requestTemperatures(); // Send kommandoen for å få temperaturer
float tempC = sensors.getTempCbyIndex (0); //Dette ber om temperaturen i Celsius og tilordner den til en flyte
int intTemp = (int) tempC; //Dette konverterer flottøren til et heltall
if (tempC != DEVICE_DISCONNECTED_C) //Sjekk om lesingen vår fungerte
{
retur intTemp; //Returner temperaturverdien vår til Display-funksjonen
}
}
Bygge et DIY digitalt termometer
Dette prosjektet skal være morsomt og lærerikt, samtidig som det gir deg muligheten til å lage en praktisk gjenstand. Vi har designet denne koden for å være så enkel som mulig, men du kan bruke den som grunnlaget for et mer komplisert prosjekt etter hvert som du lærer.
Interessert i Arduino-prosjekter, men ikke sikker på hvor du skal begynne? Disse nybegynnerprosjektene vil lære deg hvordan du kommer i gang.
Les Neste
- DIY
- Arduino
- Elektronikk
Samuel er en britisk-basert teknologiskribent med en lidenskap for alt som er DIY. Etter å ha startet virksomheter innen webutvikling og 3D-printing, sammen med å ha jobbet som forfatter i mange år, tilbyr Samuel et unikt innblikk i teknologiens verden. Han fokuserer hovedsakelig på DIY-teknologiske prosjekter, og elsker ingenting mer enn å dele morsomme og spennende ideer som du kan prøve hjemme. Utenom jobben kan Samuel vanligvis bli funnet på sykkel, spiller PC-videospill eller desperat forsøk på å kommunisere med kjæledyrkrabben sin.
Abonner på vårt nyhetsbrev
Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!
Klikk her for å abonnere