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]

Simulasi Thermometer Seven Segmen

Eksplorasi konten lain dari Duwi Arsana

Berlangganan untuk dapatkan pos terbaru lewat email.

Satu gagasan untuk “Simulasi Thermometer Seven Segmen

Komentar anda

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.