Vous êtes sur la page 1sur 9

Alat dan Bahan

 1 Arduino Uno
 1 Sensor Ultrasonic SR04
 2 Seven Segment katoda
 1 breadboard
 Kabel Jumper

Rangkaian
Gambar 1 Skema Rangkaian Arduino dengan Sensor Ultrasonik dan 7-Segment

Skema Rangkaian

Source Code
/*  * SevenSegmentMpx sketch

    * Shows numbers ranging from 0 through 99 on a four-digit display

    * This example displays the value of a sensor connected to an analog input */

// bits representing segments A through G (and decimal point) for numerals 0-9

const int trigPin = 12;


const int echoPin = 13;

const int numeral[10] = {

  //ABCDEFG /dp

  B11111100,  // 0

  B01100000,  // 1

  B11011010,  // 2

  B11110010,  // 3

  B01100110,  // 4

  B10110110,  // 5

  B00111110,  // 6

  B11100000,  // 7

  B11111110,  // 8

  B11100110,  // 9

};

// pins for decimal point and each segment

// dp,G,F,E,D,C,B,A

const int segmentPins[] = { 4,7,8,6,5,3,2,9};

const int nbrDigits= 2;  // the number of digits in the LED display

                         //dig  1  2

const int digitPins[nbrDigits] = {11,10};

void setup() {

  Serial.begin(9600);

  for(int i=0; i < 8; i++)

  pinMode(segmentPins[i], OUTPUT);

// set segment and DP pins to output

  for(int i=0; i < nbrDigits; i++)


  pinMode(digitPins[i], OUTPUT);

void loop() {

  // establish variables for duration of the ping,

  // and the distance result in inches and centimeters:

  long duration, inches, cm;

  // The sensor is triggered by a HIGH pulse of 10 or more microseconds.

  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:

  pinMode(trigPin, OUTPUT);

  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

  // Read the signal from the sensor: a HIGH pulse whose

  // duration is the time (in microseconds) from the sending

  // of the ping to the reception of its echo off of an object.

  pinMode(echoPin, INPUT);

  duration = pulseIn(echoPin, HIGH);

  // convert the time into a distance

  inches = microsecondsToInches(duration);

  cm = microsecondsToCentimeters(duration);

  cm = cm + 1;

//  Serial.print(inches);

//  Serial.print(“in, “);

  Serial.print(cm);
  Serial.print(“cm”);

  Serial.println();

//  delay(50);

  showNumber(cm);

//  showNumber(87);

void showNumber( int number) {

  if(number == 0)

    showDigit( 0, nbrDigits-1) ; // display 0 in the rightmost digit

  else  {    // display the value corresponding to each digit    // leftmost digit is 0, rightmost is one less than the number of places

  for( int digit = nbrDigits-1; digit >= 0; digit–)    {

    if(number > 0)      {

      showDigit( number % 10,digit)  ;

      number = number / 10;

    } else if (number == 0) {

      showDigit( number % 10,digit) ;

    }

    }

 }

// Displays given number on a 7-segment display at the given digit position

void showDigit( int number, int digit) {

  digitalWrite( digitPins[digit], HIGH );

  for(int segment = 1; segment < 8; segment++)  {

    boolean isBitSet = bitRead(numeral[number], segment);    // isBitSet will be true if given bit is 1

    //isBitSet = ! isBitSet; // remove this line if common cathode display


    digitalWrite( segmentPins[segment], isBitSet);

 }

  delay(10);

  digitalWrite( digitPins[digit], LOW );

long microsecondsToInches(long microseconds)

  // According to Parallax’s datasheet for the PING))), there are

  // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per

  // second).  This gives the distance travelled by the ping, outbound

  // and return, so we divide by 2 to get the distance of the obstacle.

  // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf

  return microseconds / 74 / 2;

long microsecondsToCentimeters(long microseconds)

  // The speed of sound is 340 m/s or 29 microseconds per centimeter.

  // The ping travels out and back, so to find the distance of the

  // object we take half of the distance travelled.

  return microseconds / 29 / 2;

Proses Pengerjaan
Pengerjaan tugas ini mulai dilaksanakan pada hari Rabu, 3 Februari 2016 sekitar
pukul 12.00 siang. Untuk mempermudah pengerjaan, kelompok kami memutuskan
untuk mencoba pembacaan jarak dengan sensor ultrasonik dan menampilkan nilai
tersebut pada dua seven-segment secara terpisah.

Pertama, kami mencoba membaca jarak dengan sensor ultrasonik dan


menampilkannya pada serial monitor untuk memastikan sensor berjalan dengan
baik. Kami menghubungkan sensor ultrasonik dengan arduino dan
menghubungkannya dengan komputer untuk meng-upload source code untuk
membaca nilai jarak.

Setelah percobaan pertama berhasil, kami melanjutkan ke percobaan berikutnya


yaitu menampilkan suatu nilai pada dua buah seven-segment. Seperti percobaan
pertama, kami menghubungkan seven-segment dengan arduino dan
menghubungkannya ke komputer. Kami menggunakan buku praktikum Sistem
Digital dan Mikroprosesor tahun 2014 sebagai referensi pengerjaan percobaan ini.

Pada percobaan ini kami mendapat satu masalah, yaitu angka yang ditampilkan
pada seven-segment tidak sesuai dan berkedip-kedip.  Kami menggunakan dua
buah resistor 1kΩ yang terhubung ke ground. Namun pada saat testing rangkaian,
hasil yang ditampilkan oleh seven segment tidak sesuai. Digit puluhan yang
seharusnya hanya ditampilkan pada seven segment puluhan juga menyala di seven
segment satuan. Begitu pula dengan digit satuan yang seharusnya hanya
ditampilkan pada seven segment satuan juga menyala di seven segment puluhan.
Hal tersebut mengakibatkan tampilan pada seven segment menjadi aneh.

Untuk menyelesaikan masalah ini kami mencabut kabel yang terhubung


pada ground dan mengubah rangkaian sehingga tidak menggunakan resistor sama
sekali.
Setelah percobaan pertama dan kedua berhasil, kami menggabungkan rangkaian
percobaan pertama (sensor ultrasonik) dengan rangkaian kedua (seven-segment)
menjadi seperti pada Skema Rangkaian yang ditampilkan di atas. Kami juga
menggabungkan source code kedua percobaan dengan beberapa penyesuaian.
Setelah merangkai dan meng-upload source code ke Arduino, kami
melakukan testing untuk melihat apakah rangkaian berjalan dengan benar. Saat
melakukan testing ini kami menemukan masalah kedua, yaitu beberapa angka
pada seven-segment tidak ditampilkan dengan sempurna atau tidak terlihat jelas.
Setelah hampir satu jam berusaha memecahkan masalah ini dan tidak berhasil,
kelompok kami memutuskan untuk menyudahi pertemuan di hari itu dan melanjutkan
percobaan di hari lain.

Pertemuan kedua untuk proyek ini dilaksanakan pada hari Rabu, 10 Februari 2016
di jam yang sama. Kami memulai percobaan dengan membuat rangkaian dan meng-
upload source code pada Arduino. Saat melakukan testing, rangkaian kami masih
menunjukkan masalah yang sama seperti minggu sebelumnya, yaitu angka yang
ditampilkan seven-segment tidak jelas. Seperti terlihat pada gambar dibawah, seven
segment menampilkan angka 12 (kiri) dan 15 (kanan). Namun, terlihat seakan ada
angka 1 juga di seven-segment satuan.
Menurut hasil analisis kelompok kami, hal tersebut terjadi karena delay antara
menyalakan seven-segment puluhan ke satuan terlalu kecil sehingga pada saat arus
berpindah dari seven-segmentpuluhan ke satuan masih terdapat sedikit arus
seharusnya mengalir pada puluhan namun mengalir pada seven-segment satuan.
Untuk menyelesaikan masalah ini, kami memperbesar delay antara
menyalakan seven-segment satuan dan puluhan. Namun, dengan
memperbesar delay, blink antara nyala seven-segment satuan dan puluhan semakin
terlihat.

Berikut adalah video hasil percobaan kami.