Simulasi Thermometer Seven Segmen

Back to Blog

Simulasi Thermometer Seven Segmen

Sebelum artikel saya ini, ada sebuah artikel saya yaitu thermometer belajar mikrokontroller yang menjelaskan bahwa dengan mudahnya kita dapat membuat sebuah thermometer digital dengan menggunakan kit melajah mikrokontroller dari duwiarsana.com. Dengan menggunakan kit melajah mikrokontroller tersebut dan contoh coding yang sudah saya upload juga kita dapat langsung menampilkan suhu dengan skala celcius.

Pada percobaan kali ini saya membuat sebuah simulasi dengan menggunakan software proteus yang menampilkan angka angka indikator suhu dengan menggunakan seven segmen. Disana saya menggunakan 4 buah seven segmen yang tergabung menjadi satu common anoda. Seven segmen tersebut saya drive dengan menggunakan sebuah IC 74595 (sift register) dengan ujuan untuk menghemat pin mikrokontroller.

Sensor yang saya gunakan pada simulasi ini adalah LM3 yang merupakan sensor dengan keluaran nilai ADC. nilai tersebut kemudian di kalkulasi dan nilainya dibagi dalam beberapa bagian, yaitu habis dibagi 1000, 100, 10 dan nilai sebenarnya sehingga didapat 4 digit angka pada segmen. nilai kalkulasi tersebut saya kalikan 100 agar nilai nya menjadi 4 digit selanjutnya saya sisipkan dot diantara dua pasang segmen tersebut.

bingung nih mau cerita apa, liat dan download aja yuuk langsung.

const int ledPin =  13;
const int latchPin = 5;
const int clockPin = 6;
const int dataPin = 7;
float suhu = 0;
int apa = 0;
const int digitPins[4] = {
  2,3,4,8}; 

const byte digit[10] = 
{
  B00111111, //0
  B00000110, //1
  B01011011, //2
  B01001111, //3
  B01100110, //4
  B01001111, //5
  B01111101, //6
  B00000111, //7
  B01111111, //8
  B01101111  //9
};

int digitBuffer[4] = {
  0};
int digitScan = 0;
int soft_scaler = 0;
float tempC, tempF;
int tmp;

void setup()   {                
  TCCR2A = 0;
  TCCR2B = (1<<CS21);
  TIMSK2 = (1<<TOIE2);
  TCNT2 = 0;
  pinMode(apa,INPUT);
  pinMode(ledPin, OUTPUT); 
  for(int i=0;i<4;i++)
  {
    pinMode(digitPins[ i ],OUTPUT);
  }
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  

}

ISR(TIMER2_OVF_vect) {
  soft_scaler++;
  if(soft_scaler==15)
  {
    refreshDisplay();
    soft_scaler = 0;
  }
};  

void refreshDisplay()
{
  for(byte k=0;k<4;k++)
  {
    digitalWrite(digitPins[k], LOW);
  }
  digitalWrite(latchPin, LOW);  
  shiftOut(dataPin, clockPin, MSBFIRST, B11111111);
  digitalWrite(latchPin, HIGH);
  delayMicroseconds(400);
  digitalWrite(digitPins[digitScan], HIGH); 

  digitalWrite(latchPin, LOW);  
  if(digitScan==2)
  {
    shiftOut(dataPin, clockPin, MSBFIRST, ~(digit[digitBuffer[digitScan]] |
B10000000)); 
  }
  else
  {
    shiftOut(dataPin, clockPin, MSBFIRST, ~digit[digitBuffer[digitScan]]);
  }
  digitalWrite(latchPin, HIGH);
  digitScan++;
  if(digitScan>3) digitScan=0;
}

void loop()                     
{ 
  digitalWrite(ledPin, HIGH);
  suhu=analogRead(apa);
  suhu*=100;
  tmp = (5.0*suhu*100.0)/1023.0;

  digitBuffer[3] = tmp/1000;
  digitBuffer[2] = (tmp%1000)/100;
  digitBuffer[1] = (tmp%100)/10;
  digitBuffer[0] = (tmp%100)%10;

  digitalWrite(ledPin, LOW);
  delay(50);
}

[wpdm_file id=14]

Baca juga  Turn On Lamp by Arduino, Bluetooth and Android Phone

Share this post

Comment (1)

Komentar anda

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Back to Blog