Rabu, 27 Maret 2024

LAPORAN AKHIR 1 (PERCOBAAN 3)




1. Prosedur
[Kembali]

1. Rangkai rangkaian pada alat sesuai dengan modul.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan rangkaian.

2. Hardware dan Diagram Blok [Kembali]

Hardware :




1. Arduino




2. Seven Segment 2 Digit
3. Breadboard


4. Dipswitch

5. Resistor

6. Jumper






Diagram Blok:

                





3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Gambar rangkaian











Prinsip Kerja :

Pada percobaan ini, kita menggunakan dip switch sebagai inputan. Sedangkan yang berfungsi sebagai keluaran atau output adalah seven segment 2 digit. Dipswith yang berguna sebagai input dari Arduino yang dihubungkan ke kaki A0-A3 arduino, sedangkan untuk outputnya yaitu 7-segment 2 digit yang masing masing pinnya dihubungkan ke pin 4-13 Arduino. Beberapa tahapan prinsip kerjanya adalah sebagai berikut:

1. Inisialisasi: Pada awalnya, semua pin yang digunakan untuk menyalakan display tujuh segmen, digit, dan sakelar diposisikan sesuai kebutuhan dan diberi nilai awal.

2. Loop Utama: Program akan terus berjalan di dalam loop utama. Setiap iterasi dari loop, program akan memeriksa status sakelar dan melakukan tindakan sesuai dengan kondisi yang terpenuhi.

3. Pemeriksaan Sakelar:
   - Jika sakelar 1 ditekan, maka program akan melakukan penambahan pada variabel count dan menampilkan nilai count pada display tujuh segmen dalam satu digit. Pengubahan digit akan bergantian antara D1 dan D2.
   - Jika sakelar 2 ditekan, maka program akan menampilkan angka dari 9 hingga 0 secara berurutan pada display tujuh segmen dalam satu digit. Pengubahan digit akan bergantian antara D1 dan D2.
   - Jika sakelar 3 ditekan, maka program akan melakukan penambahan pada variabel count dan menampilkan nilai count pada display tujuh segmen dalam satu digit. Pengubahan digit akan bergantian antara D1 dan D2. Namun, sakelar 3 mempunyai waktu debouncing yang lebih panjang, yaitu 2 detik.
   - Jika sakelar 4 ditekan, maka program akan menampilkan angka dari 9 hingga 0 secara berurutan pada display tujuh segmen dalam satu digit. Pengubahan digit akan bergantian antara D1 dan D2. Namun, sakelar 4 mempunyai waktu debouncing yang lebih panjang, yaitu 2 detik.

4. Debouncing: Untuk mencegah efek bouncing pada sakelar, dilakukan pemeriksaan waktu terakhir pembacaan sakelar menggunakan fungsi millis() dan menetapkan waktu tertentu sebelum pembacaan sakelar berikutnya dapat dilakukan.

4. Flowchart dan Listing Program [Kembali]

Flowchart :



Listing Program :

#define a 6
#define b 7
#define c 8
#define d 9
#define e 10
#define f 11
#define g 12
#define dp 13
#define D1 4
#define D2 5
#define Dsw1 A0
#define Dsw2 A1
#define Dsw3 A2
#define Dsw4 A3
bool sw1,sw2,sw3,sw4;
int segments[] = {a, b, c, d, e, f, g};
byte digitPatterns[10][7] = {
 {1, 1, 1, 1, 1, 1, 0}, // 0
 {0, 1, 1, 0, 0, 0, 0}, // 1
 {1, 1, 0, 1, 1, 0, 1}, // 2
 {1, 1, 1, 1, 0, 0, 1}, // 3
  {0, 1, 1, 0, 0, 1, 1}, // 4
 {1, 0, 1, 1, 0, 1, 1}, // 5
 {1, 0, 1, 1, 1, 1, 1}, // 6
 {1, 1, 1, 0, 0, 0, 0}, // 7
 {1, 1, 1, 1, 1, 1, 1}, // 8
 {1, 1, 1, 1, 0, 1, 1} // 9
};
void setup() {
 for (int i = 0; i < 7; i++) {
 pinMode(segments[i], OUTPUT);
 }
 pinMode(dp, OUTPUT);
 pinMode(D1, OUTPUT);
 pinMode(D2, OUTPUT);
 pinMode(Dsw1, INPUT_PULLUP);
 pinMode(Dsw2, INPUT_PULLUP);
 pinMode(Dsw3, INPUT_PULLUP);
 pinMode(Dsw4, INPUT_PULLUP);
 Serial.begin(9600);
}
void number(int display) {
 if (display >= 0 && display <= 9) {
 for (int i = 0; i < 7; i++) {
 digitalWrite(segments[i], digitPatterns[display][i]);
 }
 }
}
void loop() {
 int sw1 = digitalRead(Dsw1);
 int sw2 = digitalRead(Dsw2);
 int sw3 = digitalRead(Dsw3);
 int sw4 = digitalRead(Dsw4);
 static int digit = 1; // Digit yang sedang ditampilkan (1 atau 2)
 static int count = 0; // Counter untuk digit
 static unsigned long lastTime = 0; // Waktu terakhir pembacaan tombol
if (sw1 == LOW) {
 if (millis() - lastTime > 1000) { // Debouncing
 lastTime = millis();
 count++;
 if (count > 9) {
 count = 0;
 }
 if (digit == 1) {
 digitalWrite(D1, HIGH);
 digitalWrite(D2, LOW);
 number(count);
 digit = 2;
 } else {
 digitalWrite(D1, LOW);
 digitalWrite(D2, HIGH);
 number(count);
 digit = 1;
 }
 }
}
else if (sw2 == LOW) {
 if (millis() - lastTime > 1000) { // Debouncing
 lastTime = millis();
 digitalWrite(D1, HIGH);
 digitalWrite(D2, LOW);
 for (int i = 9; i >= 0; i--) {
 number(i);
 delay(1000); // Delay agar Anda bisa melihat perubahan digit
 }
 }
}
if (sw3 == LOW) {
 if (millis() - lastTime > 2000) { // Debouncing
 lastTime = millis();
 count++;
 if (count > 9) {
 count = 0;
 }
 if (digit == 1) {
 digitalWrite(D2, HIGH);
 digitalWrite(D1, LOW);
 number(count);
 digit = 2;
 } else {
 digitalWrite(D2, LOW);
 digitalWrite(D1, HIGH);
 number(count);
 digit = 1;
 }
 }
}
else if (sw4 == LOW) {
 if (millis() - lastTime > 2000) { // Debouncing
 lastTime = millis();
 digitalWrite(D2, HIGH);
 digitalWrite(D1, LOW);
 for (int i = 9; i >= 0; i--) {
 number(i);
 delay(200); // Delay agar Anda bisa melihat perubahan digit
 }
 }
}
}

5. Kondisi [Kembali]

Percobaan 3 : Timer Arduino

6. Video Demo [Kembali]





7. Soal Analisa [Kembali]

1. Apa itu timer arduino, apa itu millis dan delay, apa perbedaannya dan kenapa dibedakan
2. Analisa pengaruh penggunaan millis dan delay pada program yg di gunakan







8. Download File [Kembali]

HTML Download
File Rangkaian Download
Video Percobaan Download
Listing Program Download
Datasheet Arduino Download
Datahseet resistor Download
Datasheet seven segment Download
Datasheet Dipswitch Download










LAPORAN AKHIR 2 (PERCOBAAN 4)




1. Prosedur
[Kembali]

1. Rangkai rangkaian pada alat sesuai dengan modul.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan rangkaian.

2. Hardware dan Diagram Blok [Kembali]

Hardware :






1. Arduino




2. Motor Servo


3. Breadboard


4. Keypad




5. Jumper






Diagram Blok:

                






3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Gambar rangkaian













Prinsip Kerja :

Pada percobaan ini, kita menggunakan keypad sebagai inputan. Sedangkan yang berfungsi sebagai keluaran atau output adalah motor servo. Beberapa tahapan prinsip kerjanya adalah:

1. Inisialisasi: Pada awalnya, servo motor dihubungkan dan diberi posisi awal pada 90 derajat. Selain itu, keypad juga diinisialisasi dengan menentukan jumlah baris dan kolom, serta memetakan tombol-tombolnya.

2. Loop Utama: Program akan terus berjalan di dalam loop utama. Setiap iterasi dari loop, program akan memeriksa tombol mana yang ditekan pada keypad.

3. Pemeriksaan Tombol: Jika tombol pada keypad ditekan, karakter yang sesuai akan dibaca dari keypad.

4. Aksi Berdasarkan Tombol: Berdasarkan tombol yang ditekan, program akan melakukan aksi tertentu terhadap servo motor:
   - Tombol 1: Memindahkan servo ke posisi 0 derajat.
   - Tombol 2: Memindahkan servo ke posisi 45 derajat.
   - Tombol 3: Memindahkan servo ke posisi 90 derajat.
   - Tombol 4: Memindahkan servo ke posisi 135 derajat.
   - Tombol 5: Memindahkan servo ke posisi 180 derajat.
   - Tombol 6: Memindahkan servo ke posisi 135 derajat (sama dengan tombol 4).
   - Tombol 7: Memindahkan servo ke posisi 90 derajat (sama dengan tombol 3).
   - Tombol 8: Memindahkan servo ke posisi 45 derajat (sama dengan tombol 2).
   - Tombol 9: Memindahkan servo ke posisi 0 derajat (sama dengan tombol 1).

4. Flowchart dan Listing Program [Kembali]

Flowchart :





Listing Program :

#include <Servo.h>
#include <Keypad.h>
Servo servoMotor;
const int servoPin = 11; // PWM pin for servo
const int numRows = 4; // Number of rows in keypad
const int numCols = 3; // Number of columns in keypad
char keys[numRows][numCols] = {
 {'1', '2', '3'},
 {'4', '5', '6'},
 {'7', '8', '9'},
 {'*', '0', '#'}
};
byte rowPins[numRows] = {9, 8, 7, 6}; // Rows 0 to 3
byte colPins[numCols] = {5, 4, 3}; // Columns 0 to 2
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, numRows, numCols);
void setup() {
 servoMotor.attach(servoPin);
 servoMotor.write(90); // Initial position
 Serial.begin(9600);
}
void loop() {
 char key = keypad.getKey();

 if (key != NO_KEY) {
 Serial.println(key);

 // Perform actions based on the key pressed
 switch (key) {
 case '1':
 // Move servo to position 0 degrees
 servoMotor.write(0);
 break;
 case '2':
 // Move servo to position 45 degrees
 servoMotor.write(45);
 break;
 case '3':
 // Move servo to position 90 degrees
 servoMotor.write(90);
 break;
 case '4':
 // Move servo to position 135 degrees
 servoMotor.write(135);
 break;
 case '5':
 // Move servo to position 180 degrees
 servoMotor.write(180);
 break;
 case '6':
 // Move servo to position 135 degrees
 servoMotor.write(135);
 break;
 case '7':
 // Move servo to position 90 degrees
 servoMotor.write(90);
break;
 case '8':
 // Move servo to position 45 degrees
 servoMotor.write(45);
 break;
 case '9':
 // Move servo to position 0 degrees
 servoMotor.write(0);
 break;
 default:
 break;
 }
 }
}


5. Kondisi [Kembali]

Percobaan 4 :  Kontrol Motor Servo dengan PWM

6. Video Demo [Kembali]







7. Soal Analisa [Kembali]

1. Apakah motor servo dapat berfungsi tanpa PWM? Kenapa hal seperti itu bisa terjadi? 

2. Bagaimana cara motor servo bisa bergerak sesuai arah yang ditekan pada keypad nilai apa yang diberikan oleh keypad pada motor servo?







8. Download File [Kembali]

HTML Download
File Rangkaian Download
Video Percobaan Download
Listing Program Download
Datasheet Arduino Download
Datasheet Keypad Download
Datasheet motor servo Download



















Sabtu, 23 Maret 2024

TUGAS PENDAHULUAN 2




Tugas Pendahuluan 2 Modul 2
(Percobaan 3 Kondisi 4)

1. Prosedur
[Kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
5. Selesai.

2. Hardware dan Diagram Blok [Kembali]

Hardware :

1. Arduino Uno







2. Dip Switch









3. Resistor


4. Seven Segmen 2 digit




Diagram Blok  :






3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi Sebelum dirunning:







Rangkaian Simulasi Setelah dirunning:










Prinsip Kerja : 
Pada percobaan ini, kita menggunakan dip switch sebagai inputan. Sedangkan yang berfungsi sebagai keluaran atau output adalah seven segment 2 digit. Dipswith yang berguna sebagai input dari Arduino yang dihubungkan ke kaki A0-A3 arduino, sedangkan untuk outputnya yaitu 7-segment 2 digit yang masing masing pinnya dihubungkan ke pin 4-13 Arduino. Kode program untuk mengontrol dan menampilkan angka pada sebuah display tujuh segmen dengan menggunakan Arduino. Terdapat definisi pin untuk segmen-segmen yang akan dikontrol, serta penentuan pola digit untuk setiap angka dari 0 hingga 9. Pada fungsi setup(), dilakukan inisialisasi pin-pin yang digunakan, termasuk pengaturan pull-up resistor untuk tombol-tombol. Pada loop(), dilakukan pembacaan status tombol dan tampilan pada display akan berubah sesuai dengan tombol yang ditekan. Ada empat kondisi yang ditangani: pertama, jika tombol sw1, sw2, dan sw3 ditekan secara bersamaan, display akan mengubah angka secara berurutan setiap detik. Kedua, jika hanya tombol sw1 yang ditekan, angka akan berubah satu per satu setiap detik. Ketiga, jika hanya tombol sw2 yang ditekan, angka pada display akan mundur dari 9 hingga 0 dengan jeda satu detik setiap perubahan. Terakhir, jika hanya tombol sw3 yang ditekan, angka akan berubah satu per satu dengan jeda waktu yang lebih cepat. Selain itu, jika tombol sw4 ditekan, display akan menampilkan urutan angka 2, 0, 0, 3 dengan jeda waktu 0.2 detik setiap angka, dan setelah itu, akan muncul angka 3, 2, 1, dan 0 dengan jeda waktu 0.2 detik setiap angka. Dengan kondisi yang diberikan, ketika 1 switch aktif (switch 4), maka sevens egment akan menampilkan kombinasi 2, 0, 0, 3 setelah hitung mundur dari 3.


4. Flowchart dan Listing Program [Kembali]

Flowchart :

Flowchart di modul:

Flowchart sesuai kondisi:





Listing Program :

#define a 6
#define b 7
#define c 8
#define d 9
#define e 10
#define f 11
#define g 12
#define dp 13
#define D1 4
#define D2 5
#define Dsw1 A0
#define Dsw2 A1
#define Dsw3 A2
#define Dsw4 A3
bool sw1, sw2, sw3, sw4;
int segments[] = {a, b, c, d, e, f, g};
byte digitPatterns[10][7] = {
    {1, 1, 1, 1, 1, 1, 0}, // 0
    {0, 1, 1, 0, 0, 0, 0}, // 1
    {1, 1, 0, 1, 1, 0, 1}, // 2
    {1, 1, 1, 1, 0, 0, 1}, // 3
    {0, 1, 1, 0, 0, 1, 1}, // 4
    {1, 0, 1, 1, 0, 1, 1}, // 5
    {1, 0, 1, 1, 1, 1, 1}, // 6
    {1, 1, 1, 0, 0, 0, 0}, // 7
    {1, 1, 1, 1, 1, 1, 1}, // 8
    {1, 1, 1, 1, 0, 1, 1}  // 9
};
void setup()
{
    for (int i = 0; i < 7; i++)
    {
        pinMode(segments[i], OUTPUT);
    }
    pinMode(dp, OUTPUT);
    pinMode(D1, OUTPUT);
    pinMode(D2, OUTPUT);
    pinMode(Dsw1, INPUT_PULLUP);
    pinMode(Dsw2, INPUT_PULLUP);
    pinMode(Dsw3, INPUT_PULLUP);
    pinMode(Dsw4, INPUT_PULLUP);
    Serial.begin(9600);
}
void number(int display)
{
    if (display >= 0 && display <= 9)
    {
        for (int i = 0; i < 7; i++)
        {
            digitalWrite(segments[i], digitPatterns[display][i]);
        }
    }
}
void loop()
{
    int sw1 = digitalRead(Dsw1);
    int sw2 = digitalRead(Dsw2);
    int sw3 = digitalRead(Dsw3);
    int sw4 = digitalRead(Dsw4);
    static int digit = 1;    // Digit yang sedang ditampilkan (1 atau 2)
    static int count = 0;    // Counter untuk digit
    static unsigned long lastTime = 0; // Waktu terakhir pembacaan tombol
    if (sw1 == LOW && sw2 == LOW && sw3 == LOW) {
        if (millis() - lastTime > 1000) { // Debouncing
            lastTime = millis();
            count++;
            if (count > 9) {
                count = 0;
            }
            if (digit == 1) {
                digitalWrite(D1, HIGH);
                digitalWrite(D2, LOW);
                number(count);
                digit = 2;
            } else {
                digitalWrite(D1, LOW);
                digitalWrite(D2, HIGH);
                number(count);
                digit = 1;
            }
        }
    }else if (sw1 == LOW) {
     if (millis() - lastTime > 1000) { // Debouncing
     lastTime = millis();
     count++;
     if (count > 9) {
     count = 0;
     }
     if (digit == 1) {
     digitalWrite(D1, HIGH); 

     digitalWrite(D2, LOW);
     number(count);
     digit = 2;
     } else {
     digitalWrite(D1, LOW);
     digitalWrite(D2, HIGH);
     number(count);
     digit = 1;
     }
     }
    }
    else if (sw2 == LOW) {
     if (millis() - lastTime > 1000) { // Debouncing
     lastTime = millis();
     digitalWrite(D1, HIGH);
     digitalWrite(D2, LOW);
     for (int i = 9; i >= 0; i--) {
     number(i);
     delay(1000); // Delay agar Anda bisa melihat perubahan digit
     }
     }
    }
    if (sw3 == LOW) {
     if (millis() - lastTime > 500) { // Debouncing
     lastTime = millis();
     count++;
     if (count > 9) {
     count = 0;
     }
     if (digit == 1) {
     digitalWrite(D2, HIGH);
     digitalWrite(D1, LOW);
     number(count);
     digit = 2;
     } else {
     digitalWrite(D2, LOW);
     digitalWrite(D1, HIGH);
     number(count);
     digit = 1;
     }
     }
    }

    else if (sw4 == LOW) {
    if (millis() - lastTime > 500) { // Debouncing
        lastTime = millis();
        digitalWrite(D2, HIGH);
        digitalWrite(D1, LOW);
        for (int i = 3; i >= 0; i--) {
            number(i);
            delay(200); // Delay agar Anda bisa melihat perubahan digit
        }
        delay(1000); // Jeda 1 detik

        // Menampilkan angka 2, 0, 0, 3 dengan jeda masing-masing angka 0.2 detik
        int numbers[] = {2, 0, 0, 3};
        for (int i = 0; i < 4; i++) {
            number(numbers[i]);
            delay(200); // Jeda 0.2 detik setiap angka
        }
    }
}
}

5. Kondisi [Kembali]

Percobaan 3 Kondisi 4
Ketika 1 switch aktif 7-segment akan menampilkan kombinasi 2, 0, 0, 3 setelah hitung mundur dari 3.

6. Video Simulasi [Kembali]






7. Download File [Kembali]

HTML Download
File Rangkaian Download
Video Percobaan Download
Listing Program Download
Datasheet Arduino Download
Datahseet resistor Download
Datasheet Dipswitch Download
Datasheet seven segment Download










Entri yang Diunggulkan

TUGAS BESAR PRAKTIKUM UP & UC (MODUL 4)

  [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Pendahuluan 2. Tujuan 3. Alat dan Bahan 4. Dasar Teori 5. Percobaan Percob...