Prak uP&uC : M2 LA1




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 :





Diagram Blok:

                







3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :





Prinsip Kerja :

Pada eksperimen kelima ini, Arduino bertindak sebagai pengendali yang menerima masukan dari sensor infrared, dan hasilnya akan ditampilkan pada dipswitch. Pengaturan kondisi dilakukan melalui program Arduino yang kemudian diunggah ke komponen Arduino untuk menjalankan rangkaian. 

Dalam program ini, ketika sinyal infrared diterima, logika high akan diberikan. Jika nilai adc >= 256, motor akan berputar ke kanan; sedangkan jika nilai adc >= 768, motor akan berputar ke kiri. Ketika motor berputar ke kanan, dipswitch akan menampilkan panah ke kanan, dan ketika motor berputar ke kiri, dipswitch akan menampilkan panah ke kiri. Apabila motor tidak berputar, dipswitch akan menampilkan tampilan X.

4. Flowchart dan Listing Program [Kembali]

Flowchart :







Listing Program :

#include <LedControl.h> 
// Inisialisasi modul MAX7219 
LedControl lc = LedControl(5,6,7,1); // Pin DIN, CLK, LOAD (CS) dihubungkan ke Arduino 
byte patterns[8] = {0, 0, 0, 0, 0, 0, 0, 0}; // Pola LED untuk ditampilkan 
// Pengaturan pin untuk dipswitch dan motor 
const int potensio = A0; 
const int infrared = 8; 
const int enable = 4; 
const int motor1Pin1 = 2; 
const int motor1Pin2 = 3; 
void setup() { 
// Set up dot matrix module 
lc.shutdown(0, false);   // Mengaktifkan modul 
 lc.setIntensity(0, 8);  // Mengatur kecerahan (0-15) 
  lc.clearDisplay(0);     // Membersihkan tampilan 
  // Mengatur pin-pin sebagai output untuk motor 
  pinMode(enable, OUTPUT); 
  pinMode(infrared, INPUT); 
  pinMode(motor1Pin1, OUTPUT); 
  pinMode(motor1Pin2, OUTPUT); 
  Serial.begin(9600); 
 
void loop() { 
  // Membaca nilai dari lm35 
  float adc = analogRead(potensio); 
  Serial.println(adc); 
  // Membaca nilai dari infrared 
  int infrarednya = digitalRead(infrared); 
  // Mengendalikan arah motor berdasarkan nilai dipswitch 
  if(infrarednya == HIGH){ 
    digitalWrite(enable, HIGH); 
    if (adc <= 256) { 
    // Maju 
    digitalWrite(motor1Pin1, HIGH); 
    digitalWrite(motor1Pin2, LOW); 
    displayArrowRight(); 
    }  
    else if (adc >= 768) { 
    // Mundur 
    digitalWrite(motor1Pin1, LOW); 
    digitalWrite(motor1Pin2, HIGH); 
    displayArrowLeft(); 
    }  
    else { 
    // Berhenti 
    digitalWrite(motor1Pin1, LOW); 
    digitalWrite(motor1Pin2, LOW); 
    displayLetterX(); 
    } 
  } 
  else{ 
    digitalWrite(enable, LOW);  
  } 
// Fungsi untuk menampilkan panah pada dot matrix 
void displayArrow(byte pattern) { 
  for (int row = 0; row < 8; row++) { 
    lc.setRow(0, row, pattern); 
  } 
  delay(500); // Mengatur kecepatan animasi
  lc.clearDisplay(0); 
  delay(500); // Jeda sebelum membaca input lagi 
// Menampilkan panah ke kanan 
void displayArrowRight() { 
  byte arrowRight[8] = { 
    B00011000, 
    B00001100, 
    B00000110, 
    B11111111, 
    B00000110, 
    B00001100, 
    B00011000, 
    B00000000 
  }; 
 
  for (int row = 0; row < 8; row++) { 
    lc.setRow(0, row, arrowRight[row]); 
  } 
 
// Menampilkan panah ke kiri 
void displayArrowLeft() { 
  byte arrowLeft[8] = { 
    B00011000, 
    B00110000, 
    B01100000, 
    B11111111, 
    B01100000, 
    B00110000, 
    B00011000, 
    B00000000 
  }; 
 
  for (int row = 0; row < 8; row++) { 
    lc.setRow(0, row, arrowLeft[row]); 
  } 
 
// Menampilkan huruf "X" 
void displayLetterX() { 
  byte letterX[8] = { 
    B10000001, 
    B01000010, 
    B00100100, 
    B00011000, 
    B00011000, 
    B00100100,
B01000010, 
B10000001 
}; 
for (int row = 0; row < 8; row++) { 
lc.setRow(0, row, letterX[row]); 
}

5. Kondisi [Kembali]

Percobaan 5 : Kontrol putaran motor DC

6. Video Demo [Kembali]




 









7. Soal Analisa [Kembali]

1. Jelaskan pada pemakaian sensor infrared, sebutkan dan jelaskan kegunaan trimpotensiometer pada sensor IR, serta jelaskan cara kerja dari sensor IR itu sendiri

Jawab:
Sebelumnya trimpotensiometer sendiri adalah komponen yang diatur nilainya secara manual. Dan dalam konteks ini kegunaan trimpotensiometer pada sensor infrared adalah untuk mengatur ambang batas atau treshold dari pembacaan sensor infrared. Nilai yang diatur oleh potensiometer akan mempengaruhi sensitivitas sensor, yaitu jarak maksimum dimana sensor akan memberikan sinyal high atau low.
    Adapun  prinsip kerjanya:
  • Sensor infrared digunakan untuk mendeteksi objek di depannya. Sinyal yang diberikan oleh sensor dipresentasikan dalam kode untuk menggerakan motor.
  • Trimpotensiometer digunakan untuk mengatur ambang batas dari pembacaan sensor. Dengan mengatur trimpotensiometer, kita dapat mengatur sensitivitas sensor yaitu jarak maksimum dimana sensor  akan memberikan sinyal yang sesuai.
Dengan kombinasi antara sensor infrared dan trimpotensiometer ini, kita dapat mengatur dan mengontrol putaran motor berdasarkan kondisi yang dideteksi sensor.

Cara kerja sensor IR sendiri adalah dengan cara mengirimkan sinar inframerah yang tidak terlihat oleh mata manusia ke  sekitar lingkungan. Ketika sinar inframerah bertemu dengan objek sebagian dari sinar tersebut akan dipantulkan kembali ke sensor, sensor kemudian mengubahnya menjadi sinyal listrik.

2. Pada interrupt kenapa ketika dipasang delay 100.000 ms program langsung berpindah ke kondisi utama tanpa menunggu 100.000 detik

Jawab:

Ketika interrupt diberikan pada program atau sistem fungsi tombol ditekan akan dijalankan dengan delai juga akan dijalankan, nah untuk delai diberikan 100 detik agar sistem tidak terganggu dibuat kondisi terakhir setelah interrupt diberikan, pada kondisi ini sebenarnya bukan program langsung berpndah ke kondisi utama tanpa menunggu 100 detik, sebenarnya dalam kondisi interrupt ada dipertahankan beberapa saat, namun tidak sampai 100 detik, karena interrupt sendiri memiliki waktu delay maksimumnya, jadi waktu diberi delay 100 detik, interrupt hanya mampu mempertahankan kondisinya hingga delay maksimum dari interrupt itu sendiri. Jadi, sebenarnya jika langsung dideklarasikan dengan delay maka tidak bisa berfungsi sesuai delay yang diminta, karena itu variabelnya harus dideklarasikan menggunakan volatile, baru bisa nantinya dimasukan ke fungsi interrupt.

3. Sebutkan dan jelaskan pemakaian potensiometer serta bagaimana bisa mendeteksi nilai adc pada arduino uno

Jawab:


Pada rangkaian potensiometer sederhana, disambungkan secara seri vcc, potensiometer dan ground. Pembacaan adc pada arduino sendiri adalah nilai tegangan yang diterima arduino, untuk mendapatkan hal tersebut dan bisa divariasikan, digunakan lah rangkaian seri potensiometer yang telah disebutkan sebelumnya, dimana kaki tengah dari potensiometer yang bisa diubah, itu bertujuan untuk mengambil sedikit dari resistansi pada potensiometer, anggaplah jika diambil setengah dari potensiometer maka tegangan disana adalah setengah dari tegangan vcc, dikarenakan tegangan yang diambil adalah hanya setengah dari potensiometer nya mengakibatkan tegangan terbagi setengah dan nilai tersebut sebagai inputan pada arduino, perubahan posisi kaki tengah pada potensiometer tersebut akan dapat memvariasikan hambatannya sehingga nilai tegangan pun dapat divariasikan. Perubahan nilai" tegangan tersebut akan mempengaruhi juga nilai adc pada arduino karena nilai adc itu didapatkan dari konversi nilai tegangan.

Tugas khusus:

1. Apa maksud tegangan rripple dan kaitannya dengan quart criystal ocillator pada arduino pada saat menghasilkan PWM

Jawab:

Tegangan ripple adalah fluktuasi tegangan AC yang terjadi pada sinyal DC. Ini biasanya muncul sebagai variasi kecil di atas atau di bawah tegangan DC yang diinginkan. Tegangan ripple dapat disebabkan oleh berbagai faktor, termasuk sumber daya yang tidak stabil, komponen filter yang tidak sempurna, atau perubahan beban.

Quartz crystal oscillator adalah rangkaian osilator elektronik yang menggunakan kristal kuarsa untuk menghasilkan sinyal osilasi dengan frekuensi yang sangat stabil. Kristal kuarsa memiliki sifat piezoelektrik, yang berarti ketika tekanan mekanis diterapkan pada permukaannya, tegangan yang sebanding muncul di kristal. Ini menyebabkan distorsi pada kristal dan menghasilkan osilasi pada frekuensi alami kristal.

Kaitannya dengan Arduino dan PWM (Pulse Width Modulation) adalah sebagai berikut:

  • Arduino menggunakan quartz crystal oscillator sebagai referensi waktu untuk mengatur kecepatan pemrosesan dan waktu eksekusi program.
  • PWM adalah teknik modulasi yang mengubah lebar pulsa dengan nilai frekuensi dan amplitudo yang tetap. Arduino menggunakan quartz crystal oscillator untuk menghasilkan sinyal PWM yang digunakan, misalnya, untuk mengendalikan kecepatan motor, intensitas cahaya LED, atau servomotor.
Jadi, kaitannya adalah bahwa osillator kristal kuarsa pada arduino memastikan stabilitas frekuensi yang diperlukan untuk menghasilkan sinyal PWM  dengan presisi tinggi, terlepas dari fluktuasi tegangan ripple yang mungkin terjadi dalam sistem listrik.

8. Download File [Kembali]

File Rangkaian klik disini
Video Percobaan klik disini
Listing Program klik disini
Datasheet Arduino klik disini
Datasheet Dot matrikx klik disini
Datasheet Led klik disini
Datasheet Potensiometer  klik disini
Datasheet Motor DC  klik disini

Tidak ada komentar:

Posting Komentar

Among Us - Crewmates

  BAHAN PRESENTASI MATA KULIAH SISTEM DIGITAL 2023 OLEH : Raras Yulia Rosandi 2110951012 DOSEN PENGAMPU : Dr. Ir. Darwison, ST, MT JURUSAN T...