-->

  • Arduino UNO ve LM335 Sıcaklık Sensörü ile 7 Segment Displayli Uygulama Devresi ve Program Kodu


    Yukarıdaki devredeArduino UNO ve LM335 Sıcaklık Sensörü ile 7 Segment Displayli Uygulama Devresi görülmektedir.

    Bu devrede LM335 sıcaklık sensörü ile yapılan ölçüm 7 segment displayde görülmektedir.

    LM335 sıcaklık sensörü 10 mV/°K. 10 mV çıkışı 1 Kelvi derecesini göstermektedir. Örneğin LM335 çıkış gerilimi 3.03 V (3030 mV) olduğunda sıcaklık 303 Kelvin = 30 °Celsius (30 derece) olur.

    Kullanılan Devre Elemanları :

    Arduino UNO board
    3-digit veya 4-digit ortak anotlu 7 segment display
    LM335 sıcaklık sensörü
    3 x PNP transistor (2SA1015, 2S9015, 2N3906 …)
    7 x 100 ohm direnç
    3 x 4.7k ohm direnç
    2.2k ohm direnç
    Breadboard

    Arduino Kodu

    /*
    * Interfacing Arduino with LM335 temperature sensor and 7-segment display.
    * Common anode 7-segment display is used.
    * This is a free software with NO WARRANTY.
    * http://elektrikelektronikegitimi.blogspot.com
    */

    // define LM335 data pin connection
    #define LM335_pin A0

    // segment pins definitions
    #define SegA 12
    #define SegB 11
    #define SegC 10
    #define SegD 9
    #define SegE 8
    #define SegF 7
    #define SegG 6
    // common pins of the three digits definitions
    #define Dig1 4
    #define Dig2 3
    #define Dig3 2

    // variable declarations
    byte current_digit;
    int temp;

    void setup()
    {
    pinMode(SegA, OUTPUT);
    pinMode(SegB, OUTPUT);
    pinMode(SegC, OUTPUT);
    pinMode(SegD, OUTPUT);
    pinMode(SegE, OUTPUT);
    pinMode(SegF, OUTPUT);
    pinMode(SegG, OUTPUT);
    pinMode(Dig1, OUTPUT);
    pinMode(Dig2, OUTPUT);
    pinMode(Dig3, OUTPUT);

    disp_off(); // turn off the display

    // Timer1 module overflow interrupt configuration
    TCCR1A = 0;
    TCCR1B = 1; // enable Timer1 with prescaler = 1 ( 16 ticks each 1 µs)
    TCNT1 = 0; // set Timer1 preload value to 0 (reset)
    TIMSK1 = 1; // enable Timer1 overflow interrupt
    }

    ISR(TIMER1_OVF_vect) // Timer1 interrupt service routine (ISR)
    {
    disp_off(); // turn off the display

    byte abs_temp = abs(temp); // abs: absolute value

    switch (current_digit)
    {
    case 1:
    if(temp < 0 || temp >= 100){
    if(temp < 0)
    disp(10); // print minus sign (-)
    else
    disp(1); // print 1
    digitalWrite(Dig1, LOW); // turn on digit 1
    }
    break;

    case 2:
    disp( (abs_temp / 10) % 10); // prepare to display digit 2
    digitalWrite(Dig2, LOW); // turn on digit 2
    break;

    case 3:
    disp(abs_temp % 10); // prepare to display digit 3
    digitalWrite(Dig3, LOW); // turn on digit 3
    }

    current_digit = (current_digit % 3) + 1;
    }

    // main loop
    void loop()
    {
    int kelvin = analogRead(LM335_pin) * 0.489; // get temperature in degree Kelvin
    temp = kelvin - 273; // convert to degree Celsius

    delay(1000); // wait 1 second
    }

    void disp(byte number)
    {
    switch (number)
    {
    case 0: // print 0
    digitalWrite(SegA, LOW);
    digitalWrite(SegB, LOW);
    digitalWrite(SegC, LOW);
    digitalWrite(SegD, LOW);
    digitalWrite(SegE, LOW);
    digitalWrite(SegF, LOW);
    digitalWrite(SegG, HIGH);
    break;

    case 1: // print 1
    digitalWrite(SegA, HIGH);
    digitalWrite(SegB, LOW);
    digitalWrite(SegC, LOW);
    digitalWrite(SegD, HIGH);
    digitalWrite(SegE, HIGH);
    digitalWrite(SegF, HIGH);
    digitalWrite(SegG, HIGH);
    break;

    case 2: // print 2
    digitalWrite(SegA, LOW);
    digitalWrite(SegB, LOW);
    digitalWrite(SegC, HIGH);
    digitalWrite(SegD, LOW);
    digitalWrite(SegE, LOW);
    digitalWrite(SegF, HIGH);
    digitalWrite(SegG, LOW);
    break;

    case 3: // print 3
    digitalWrite(SegA, LOW);
    digitalWrite(SegB, LOW);
    digitalWrite(SegC, LOW);
    digitalWrite(SegD, LOW);
    digitalWrite(SegE, HIGH);
    digitalWrite(SegF, HIGH);
    digitalWrite(SegG, LOW);
    break;

    case 4: // print 4
    digitalWrite(SegA, HIGH);
    digitalWrite(SegB, LOW);
    digitalWrite(SegC, LOW);
    digitalWrite(SegD, HIGH);
    digitalWrite(SegE, HIGH);
    digitalWrite(SegF, LOW);
    digitalWrite(SegG, LOW);
    break;

    case 5: // print 5
    digitalWrite(SegA, LOW);
    digitalWrite(SegB, HIGH);
    digitalWrite(SegC, LOW);
    digitalWrite(SegD, LOW);
    digitalWrite(SegE, HIGH);
    digitalWrite(SegF, LOW);
    digitalWrite(SegG, LOW);
    break;

    case 6: // print 6
    digitalWrite(SegA, LOW);
    digitalWrite(SegB, HIGH);
    digitalWrite(SegC, LOW);
    digitalWrite(SegD, LOW);
    digitalWrite(SegE, LOW);
    digitalWrite(SegF, LOW);
    digitalWrite(SegG, LOW);
    break;

    case 7: // print 7
    digitalWrite(SegA, LOW);
    digitalWrite(SegB, LOW);
    digitalWrite(SegC, LOW);
    digitalWrite(SegD, HIGH);
    digitalWrite(SegE, HIGH);
    digitalWrite(SegF, HIGH);
    digitalWrite(SegG, HIGH);
    break;

    case 8: // print 8
    digitalWrite(SegA, LOW);
    digitalWrite(SegB, LOW);
    digitalWrite(SegC, LOW);
    digitalWrite(SegD, LOW);
    digitalWrite(SegE, LOW);
    digitalWrite(SegF, LOW);
    digitalWrite(SegG, LOW);
    break;

    case 9: // print 9
    digitalWrite(SegA, LOW);
    digitalWrite(SegB, LOW);
    digitalWrite(SegC, LOW);
    digitalWrite(SegD, LOW);
    digitalWrite(SegE, HIGH);
    digitalWrite(SegF, LOW);
    digitalWrite(SegG, LOW);
    break;

    case 10: // print -
    digitalWrite(SegA, HIGH);
    digitalWrite(SegB, HIGH);
    digitalWrite(SegC, HIGH);
    digitalWrite(SegD, HIGH);
    digitalWrite(SegE, HIGH);
    digitalWrite(SegF, HIGH);
    digitalWrite(SegG, LOW);
    }
    }

    void disp_off()
    {
    digitalWrite(Dig1, HIGH);
    digitalWrite(Dig2, HIGH);
    digitalWrite(Dig3, HIGH);
    }

    // end of code. 
     
  • YOUTUBE KANALIMI ZİYARET EDİN

    Youtube'da seslendirdiğim şiirleri paylaşıyorum. Youtube kanalıma da abone olursanız sevirim.

    Video Of Day

    ADRES

    Kağıthane/İstanbul

    EMAIL

    omersalihgul@gmail.com
    omersalihgul@hotmail.com