Arduino Sıcaklık Ölçümü | Kadran ve LCDEkranda Gösterimi | LM35DZ
Merhaba arkadaşlar bu projemizde basit ama etkili bir devre kurup, ölçüm yaptığımız sıcaklığı LCDekranımız ve Servo Motorumuz ile kullanıcıya göstereceğiz.
Gerekli Malzemeler:
- Arduino IDE yüklü kişisel bilgisayar
- Atmel AVR ATMega328P Mikrodenetleyici tabanlı Arduino Uno R3 geliştirme kartı ve bağlantı kablosu
- Breadboard
- Muhtelif uzunluklarda bağlantı kabloları.
- 1 ad. LM35DZ sıcaklık sensörü
- 1 ad. 16×2 LCD
- 1 ad. servo motor
Devre:
Kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
#include <LiquidCrystal.h> #include <Servo.h> int sicaklikC; int sicaklikF; float gerilim; char sicaklikCStr[5]; char sicaklikFStr[6]; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); #define lcdProcessingDelay 1 void SendCommand(unsigned char); void SendData(unsigned char); void SendString(const char*); void TransferByteIn4BitMode(unsigned char); void TransferHighNibble(unsigned char); Servo myservo; int val; void setup() { Serial.begin(9600); lcd.begin(16, 2); myservo.attach(9); } void loop() { gerilim = analogRead(A0); gerilim = (gerilim / 1023) * 5000; sicaklikC = (int)gerilim / 10.0; sicaklikF = sicaklikC * 1.8 + 32; sprintf(sicaklikCStr, "%d", sicaklikC); sprintf(sicaklikFStr, "%d", sicaklikF); SendCommand(0x80); SendString("Sicaklik: "); SendCommand(0x8A); SendString(sicaklikCStr); SendCommand(0x8D); SendString("C"); SendCommand(0xC0); SendString("Temp: "); SendCommand(0xC6); SendString(sicaklikFStr); SendCommand(0xC9); SendString("F"); val = sicaklikC; val = map(val, 20, 100, 0, 179); Serial.println(val); myservo.write(val); delay(1000); } void SendCommand(unsigned char cmd) { digitalWrite(12, LOW); TransferByteIn4BitMode(cmd); } void SendData(unsigned char dt) { digitalWrite(12, HIGH); TransferByteIn4BitMode(dt); } void SendString(const char *cmdPtr) { for (unsigned int i = 0; cmdPtr[i] != '\0'; i++) SendData(cmdPtr[i]); } void TransferByteIn4BitMode(unsigned char byt) { TransferHighNibble(byt); digitalWrite(11, HIGH); delay(lcdProcessingDelay); digitalWrite(11, LOW); TransferHighNibble(byt << 4); digitalWrite(11, HIGH); delay(lcdProcessingDelay); digitalWrite(11, LOW); } void TransferHighNibble(unsigned char byt) { unsigned char temp; temp = (byt >> 7) & 1; digitalWrite(2, temp); temp = (byt >> 6) & 1; digitalWrite(3, temp); temp = (byt >> 5) & 1; digitalWrite(4, temp); temp = (byt >> 4) & 1; digitalWrite(5, temp); } |
Bu projemizde uygun devre kurulup kod Arduino nuza yüklendiğinde, lm35dz sıcaklık sensörünün okuduğu bilgiler sıcaklık değerlerine dönüştürülür ve önce lcd ekranda sonra ise kadranda gösterilir. Sizlerde kendi belirleyeceğiniz aralıkta değerler göstermek istiyorsanız “val = map(val, 20, 100, 0, 179);” kodunda 20 ile 100 sayılarını değiştirip kullanabilirsiniz. Servo motorunuzun gösterdiği değeri daha iyi anlamak için kağıttan bir gösterge yapıp motorun uç kısmına yapıştırabilirsiniz.