Advertise here

Rabu, 20 Maret 2019

Introducing
Saat ini banyak sekali perangkat alat ukur yang menggunakan sistem digital, karena alat ukur digital ini memiliki kinerja yang lebih presisi dengan tingkat keakuratan sampai 99%. Maka banyak orang beralih dari alat ukur konvensional ke alat ukur digital, contoh saja penggunaan alat ukur jarak atau disebut dengan meteran kini berubah mejadi alat ukur meteran digital yang pengoperasiannya tentu saja lebih mudah, cukup dengan meletakan alat ukur ke suatu objek, maka dengan waktu yang singkat kita sudah dapat mengetahui jarak yang diukur, cukup mudah bukan?

Pada proyek pengembangan selanjutnya saya mencoba menggunakan sensor ultra sonic HC-SR04 sebagai alat pendeteksi jarak, cara kerja sensor ini yaitu dengan mengirimkan sinyal ping pada frekuensi 40 KHz, kemudian sinyal ping ini akan dipantulkan oleh benda yang menjadi objek ukur dan kembali lagi ke sensor ultra sonic dengan membaca selisih waktu perbedaan antara sinyal ping yang dikirim dengan sinyal pantulan (echo) yang diterima, semakin lambat sinyal pantulan yang diterima maka objek yang diukur semakin jauh.




Sensor ini memiliki 4 pin yaitu VCC 5 Volt, GND, Trigger, Dan Echo dengan arus yang cukup rendah, anda dapat membaca spesifikasinya di https://www.electroschematics.com/8902/hc-sr04-datasheet/. Objek apa saja yang dapat diukur oleh sensor ini? Objeknya sudah pasti benda yang memiliki permukaan rata agar dapat memantulkan sinyal dengan baik, misalnya tembok, kardus, kaca, permukaan air, dll.

Untuk melihat hasil pengukurannya, saya masih menggunakan penampil 4 digit seven segment yang pernah di posting sebelumnya.

Bill Of Material
Bahan-bahan yang diperlukan dalam pengembangan proyek ini adalah:
  • Board STM32F103C Blue Pill
  • 4 Digit Seven Segment HS220561K Common Cathode
  • Bread Board 400 dot point
  • Ultra Sonic Ranger HC-SR04
  • Dan beberapa kabel Jumper Female to Male, dan Male to Male


Wiring

Pin Conection Table
Seven Segment
STM32
A
PA11
B
PA12
C
PB11
D
PB10
E
PB1
F
PB15
G
PB0
DP
PA7
COM1
PB15
COM2
PB14
COM3
PB13
COM4
PB12
VCC
5V
GND
G
Trigger
PA6
Echo
PA5

Program
#define trigPin PA6
#define echoPin PA5
#define dig1 PB15
#define dig2 PB14
#define dig3 PB13
#define dig4 PB12

#define segA PA11  //SEG A
#define segB PA12  //SEG B
#define segC PB11  //SEG C
#define segD PB10  //SEG D
#define segE PB1   //SEG E
#define segF PA15  //SEG F
#define segG PB0   //SEG G
#define segP PA7   //SEG DP

int sevSeg1;
int sevSeg2;
int sevSeg3;
int sevSeg4;
boolean commonHigh = false;
int number;
int dig[16] = {
 0b1111110, //0
 0b0110000, //1
 0b1101101, //2
 0b1111001, //3
 0b0110011, //4
 0b1011011, //5
 0b1011111, //6
 0b1110000, //7
 0b1111111, //8
 0b1111011, //9
 0b1110111, //a
 0b0011111, //b
 0b1001110, //c
 0b0111101, //d
 0b1001111, //e
 0b0000000, //f            
};

void setup() {
  // put your setup code here, to run once:
pinMode(dig1,OUTPUT);
pinMode(dig2,OUTPUT);
pinMode(dig3,OUTPUT);
pinMode(dig4,OUTPUT);
pinMode(segA,OUTPUT);
pinMode(segB,OUTPUT);
pinMode(segC,OUTPUT);
pinMode(segD,OUTPUT);
pinMode(segE,OUTPUT);
pinMode(segF,OUTPUT);
pinMode(segG,OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);

}

void loop() {
int temp;
int val = readHC_SR04();
temp = val;

// Write data to seven segment
sevSeg4 = temp % 10;
temp/= 10;
sevSeg3 = temp % 10;
temp/= 10;
sevSeg2 = temp % 10;
temp/= 10;
sevSeg1 = temp % 10;
temp/= 10;
// view display
viewDisp(sevSeg1,sevSeg2,sevSeg3,sevSeg4);
}


void writeDigitToDisplay(int digit) {
int currentBit;
int bitOn;
    //-----------------------------------
    currentBit = (1<<(6));
    bitOn = (currentBit & dig[digit])!=0;
    if(commonHigh) {
    bitOn = !bitOn;
    }
    digitalWrite(segA, bitOn);

    //-----------------------------------
    currentBit = (1<<(5));
    bitOn = (currentBit & dig[digit])!=0;
    if(commonHigh) {
    bitOn = !bitOn;
    }
    digitalWrite(segB, bitOn);

    //-----------------------------------
    currentBit = (1<<(4));
    bitOn = (currentBit & dig[digit])!=0;
    if(commonHigh) {
    bitOn = !bitOn;
    }
    digitalWrite(segC, bitOn);

    //-----------------------------------
    currentBit = (1<<(3));
    bitOn = (currentBit & dig[digit])!=0;
    if(commonHigh) {
    bitOn = !bitOn;
    }
    digitalWrite(segD, bitOn);

    //-----------------------------------
    currentBit = (1<<(2));
    bitOn = (currentBit & dig[digit])!=0;
    if(commonHigh) {
    bitOn = !bitOn;
    }
    digitalWrite(segE, bitOn);

    //-----------------------------------
    currentBit = (1<<(1));
    bitOn = (currentBit & dig[digit])!=0;
    if(commonHigh) {
    bitOn = !bitOn;
    }
    digitalWrite(segF, bitOn);

    //---------------------------------

    currentBit = (1<<(0));
    bitOn = (currentBit & dig[digit])!=0;
    if(commonHigh) {
    bitOn = !bitOn;
    }
    digitalWrite(segG, bitOn);
}

void viewDisp(int digit1,int digit2,int digit3,int digit4){
  //diplay 1 active
  digitalWrite(dig1,LOW);
  writeDigitToDisplay(digit1);
  delay(3);
  digitalWrite(dig1,HIGH);

  //diplay 2 active
  digitalWrite(dig2,LOW);
  writeDigitToDisplay(digit2);
  delay(3);
  digitalWrite(dig2,HIGH);
 
  //diplay 3 active
  digitalWrite(dig3,LOW);
  writeDigitToDisplay(digit3);
  delay(3);
  digitalWrite(dig3,HIGH);
 
  //diplay 4 active
  digitalWrite(dig4,LOW);
  writeDigitToDisplay(digit4);
  delay(3);
  digitalWrite(dig4,HIGH); 
}

// function read distance from HC-SR04
int readHC_SR04(){
  digitalWrite(trigPin,LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Get echo SRF04
  int distance=pulseIn(echoPin, HIGH);
  // Distance calibration to centimeter
  distance = distance / 58;
  return distance;
}

Test & Result

Hasil pengukuran yang pertama saya meletakan kardus kemasan tinta pada jarak 20cm, terlihat jelas oleh penggaris yang saya pakai pada titik 20cm. Ini menandakan bahwa hasil pengukuran sangat akurat menunjukan hasil 20cm karena sesuai antara jarak yang diukur dengan kalibarsi pada penggaris.


Test yang kedua, saya menjauhkan jarak ukur sekitar 5cm dari jarak pengukuran yang pertama, ternyata hasil pengukuran alat menunjukan jarak 25cm, yang sesuai dengan jarak ukur yang ada pada penggaris.






Comments 0

Advetise banner