Rabu, 27 Maret 2024

LA Modul 2 Percobaan 6





PERCOBAAN 6
Kontrol Putaran Motor Stepper


1. Prosedur
[Kembali]
  1. Rangkailah seperti rangkaian berikut
  2. Buka Arduino IDE dan masukan listing Program
  3. Upload program ke arduino
  4. Mencoba rangkaiannya dengan memvariasikan kondisi push button

2. Hardware dan Diagram Blok [Kembali]

A. Hardware

1. Motor Stepper



2. PushButton 


3. Arduino Uno

4. ULN2003A


B. Digram Blok

3. Rangkaian Simulasi dan Prinsip kerja [Kembali]




Prinsip Kerja 

    Pada percobaan 6, untuk mengendalikan putaran motor stepper menggunakan tombol sebagai input dan mengarahkan keluaran pada motor stepper, sementara menggunakan driver motor servo yang memiliki rotor dengan jumlah gigi lebih banyak daripada motor DC dan motor servo lainnya. Keberadaan rotor dengan jumlah gigi lebih banyak ini memberikan keunggulan dalam presisi putaran motor stepper. Rangkaian ini dioperasikan melalui program Arduino yang telah kami atur dan diatur sesuai kebutuhan eksperimen.

    Dengan memanfaatkan tombol sebagai input, kami dapat mengontrol pergerakan motor stepper secara tepat sesuai keinginan. Penggunaan driver motor servo dengan rotor yang memiliki lebih banyak gigi dari motor DC dan motor servo lainnya menjadi pilihan kritis dalam mencapai tingkat presisi yang diinginkan. Perbedaan ini memungkinkan motor stepper untuk beroperasi dengan akurasi yang lebih tinggi dalam melakukan putaran.

    Melalui pengaturan dan pemrograman yang tepat dalam Arduino, kami dapat mengendalikan motor stepper dengan presisi yang tinggi. Hal ini memungkinkan kami untuk menyesuaikan pergerakan motor stepper sesuai dengan kebutuhan spesifik dari eksperimen yang sedang kami lakukan. Dengan demikian, eksperimen ini tidak hanya memberikan pemahaman yang lebih dalam tentang penggunaan motor stepper, tetapi juga mengilustrasikan pentingnya memilih komponen yang sesuai untuk mencapai tingkat presisi yang diperlukan dalam aplikasi tertentu.
    

4. FlowChart [Kembali]

A. Listing Program 

 digitalWrite(LED,LOW); 
 digitalWrite(buzzer,HIGH); 
 count = 0; 
 delay(100000);
 }#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
#define PB1 2
#define PB2 3
#define PB3 4
#define PB4 5
int step = 100;
int delaytime=5; //makin kecil delay, makin cepat motor berputar

void setup(){
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(PB1, INPUT);
pinMode(PB2, INPUT);
pinMode(PB3, INPUT);
pinMode(PB4, INPUT);
}

void loop(){
int b4 = digitalRead(PB4);
int b3 = digitalRead(PB3);
int b2 = digitalRead(PB2);
int b1 = digitalRead(PB1);

if (b4 == HIGH){
  maju();
else if (b3 == HIGH){
  mundur();
}
else if (b2 == HIGH){
  for (int i = 0; i < 60; i ++){
    maju();
  }
  for (int i = 0; i < 60; i++){
    mundur();  
  }
}
else if (b1 == HIGH){
  for (int i = 0; i < 50; i++){
    maju();
  }
  delay(2000);
  for (int i = 0; i < 50; i++){
    mundur();
  }
}
}


void maju(){
//step 4
step1();
delay(delaytime);
//step 3
step2();
delay(delaytime);
//step 2
step3();
delay(delaytime);
//step 1
step4();
delay(delaytime);
}

void mundur(){
//step 4
step4();
delay(delaytime);
//step 3
step3();
delay(delaytime);
//step 2
step2();
delay(delaytime);
//step 1
step1();
delay(delaytime);
}

void step1(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,HIGH);
}
void step2(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
void step3(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}
void step4(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}        

B. Flowchart





5. Video Demo [Kembali]




6. Kondisi [Kembali]

        Percobaan 6 sesuai dengan modul.

7. Download File [Kembali]

Download HMTL Klik disini
Download Simulasi Rangkaian Klik disini
Download Video Demo Klik disini
Download Datasheet ARDUINO UNO klik disini
Download Datasheet TOUCH SENSOR  klik disini
Download Datasheet LCD 2X16 klik disini

LA Modul 2 Percobaan 2





PERCOBAAN 2
Interrupt Arduino


1. Prosedur
[Kembali]
  1. Rangkailah seperti rangkaian berikut
  2. Buka Arduino IDE dan masukan listing Program
  3. Upload program ke arduino
  4. Mencoba rangkaiannya dengan memvariasikan kondisi interupt (Falling, Rising, High dan Low)

2. Hardware dan Diagram Blok [Kembali]

A. Hardware

1. LCD



2. DipSwitch 


3. Arduino Uno


4. Buzzer dan LED

    
B. Digram Blok




3. Rangkaian Simulasi dan Prinsip kerja [Kembali]




Prinsip Kerja 

    Dalam percobaan 2 ini  merupakan implementasi kontrol sederhana menggunakan Arduino dengan berbagai komponen perangkat keras seperti LED, tombol sebagai input, dan buzzer sebagai output. Saat Arduino dijalankan, program akan terus menyalakan LED dan menampilkan nilai count yang terus bertambah setiap detiknya pada layar LCD. Ketika tombol ditekan, fungsi "tombol_ditekan()" dipanggil, yang mengakibatkan LED dimatikan, buzzer dinyalakan, dan nilai count direset kembali ke 0. Hal ini memberikan respons kepada pengguna bahwa tombol telah ditekan dan tindakan telah diambil. Perlu dicatat bahwa fungsi "tombol_ditekan()" menggunakan interrupt, yang memungkinkan respons yang cepat terhadap aksi pengguna. Dengan cara ini, program memberikan kontrol sederhana dengan feedback visual dan audio kepada pengguna, memungkinkan interaksi yang intuitif dengan perangkat berbasis Arduino.
    

4. FlowChart [Kembali]

A. Listing Program 

#include<LiquidCrystal_I2C.h>
#define LED 13 //pin 13 bernama LED
#define tombol 2 //pin 2 (pin interrupt) bernama tombol
#define buzzer 11

volatile byte led_nyala = LOW; //kondisi mula-mula LED mati
static int count = 0;
volatile byte buzzer_nyala = LOW;
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup() {
 lcd.init();
 lcd.backlight();
 pinMode(LED,OUTPUT);
 pinMode(tombol,INPUT);
 attachInterrupt(digitalPinToInterrupt(2),tombol_ditekan, FALLING); //pin 2 (interrupt 0) digunakan sebagai interrupt eksternal
}

void loop() { //Main Program
 digitalWrite(LED,HIGH);
 digitalWrite(buzzer,LOW);
 lcd.setCursor(0,0);
 lcd.print("Count:");
lcd.setCursor(0,1); lcd.print(count); count += 1; // menambahkan integer count dengan angka 1 delay(1000); } //membuat fungsi bernama tombol_ditekan, fungsi ini (ISR) dieksekusi secara otomatis setelah arduino memperoleh sinyal interrupt di pin 2 void tombol_ditekan() 
 digitalWrite(LED,LOW); 
 digitalWrite(buzzer,HIGH); 
 count = 0; 
 delay(100000);
 }        

B. Flowchart





5. Video Demo [Kembali]


6. Kondisi [Kembali]

        Percobaan 2 sesuai dengan modul.

7. Download File [Kembali]

Download HMTL Klik disini
Download Simulasi Rangkaian Klik disini
Download Video Demo Klik disini
Download Datasheet ARDUINO UNO klik disini
Download Datasheet TOUCH SENSOR  klik disini
Download Datasheet LCD 2X16 klik disini

Senin, 25 Maret 2024

TP Modul 2 Percobaan 6 Kondisi 7



PERCOBAAN 6 
Kontrol Putaran Motor Stepper

1. Prosedur [Kembali]

1. Rangkai semua komponen sesuai kondisi yang dipilih
2. Buat program di aplikasi arduino IDE
3. Setelah selesai masukkan program ke arduino di proteus
4. Jalankan program pada simulasi dan cobakan sesuai dengan modul dan kondisi
5. Selesai

2. Hardware dan diagram blok [Kembali]

A. Hardware

1. Button



2. Arduino Uno

3. Touch Sensor


4. ULN2003A


B. Digram Blok


3. Rangkaian Simulasi dan Prinsip kerja [Kembali]

Gambar Rangkaian Sebelum Disimulasikan


Gambar Rangkaian Setelah Disimulasikan


 Prinsip Kerja 

    Dalam simulasi menggunakan Proteus, prinsip kerja Rangkaian diatas ialah saat program dimulai, pin yang telah ditetapkan untuk mengendalikan motor (A, B, C, D), tombol (PB1, PB2, PB3, PB4), dan sensor Touch (TOUCH_SENSOR_PIN) akan diinisialisasi sesuai dengan mode yang dibutuhkan. Setelah inisialisasi, program akan memasuki loop utama. Di setiap iterasi loop, status tombol dan sensor Touch akan terus dipantau. Dengan menggunakan fungsi `digitalRead()`, program akan membaca kondisi tombol dan sensor Touch untuk mendapatkan nilai input yang dapat berupa HIGH atau LOW.

    Kontrol gerakan motor akan terjadi berdasarkan nilai input yang diberikan oleh sensor Touch dan tombol. Jika sensor Touch mendeteksi adanya objek (nilai HIGH), program akan mengecek status tombol. Jika tombol tertentu ditekan, fungsi yang sesuai untuk menggerakkan motor akan dipanggil sesuai dengan arah yang telah ditentukan. Namun, jika tidak ada tombol yang ditekan, motor akan diam. Sebaliknya, jika sensor Touch tidak mendeteksi adanya objek (nilai LOW), program akan melakukan pengecekan serupa, tetapi motor akan bergerak dalam arah yang berlawanan. Ketika tidak ada tombol yang ditekan, fungsi `nonpergerakan()` akan dipanggil untuk menghentikan gerakan motor. Dengan demikian, dalam simulasi Proteus, pengguna akan melihat bahwa gerakan motor akan dikendalikan secara adaptif sesuai dengan input yang diberikan oleh tombol dan sensor Touch, sesuai dengan logika program yang telah ditetapkan.
    
4. FlowChart [Kembali]

A. Listing Program 

#define A 8
#define B 9
#define C 10
#define D 11
#define PB1 2
#define PB2 3
#define PB3 4
#define PB4 5
#define TOUCH_SENSOR_PIN 6 // Pin yang terhubung ke sensor Touch

void setup() {
  Serial.begin(9600);
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(PB1, INPUT_PULLUP);
  pinMode(PB2, INPUT_PULLUP);
  pinMode(PB3, INPUT_PULLUP);
  pinMode(PB4, INPUT_PULLUP);
  pinMode(TOUCH_SENSOR_PIN, INPUT); // Inisialisasi pin sensor Touch sebagai input
}

void pergerakan_1() {
  digitalWrite(A, 0);
  digitalWrite(D, 1);
  digitalWrite(B, 0); 
  digitalWrite(C, 1);
}

void pergerakan_2() {
  digitalWrite(A, 1);
  digitalWrite(D, 1);
  digitalWrite(B, 0);
  digitalWrite(C, 0);
}

void pergerakan_3() {
  digitalWrite(A, 1);
  digitalWrite(D, 0);
  digitalWrite(B, 1);
  digitalWrite(C, 0);
}

void pergerakan_4() {
  digitalWrite(A, 0);
  digitalWrite(D, 0);
  digitalWrite(B, 1);
  digitalWrite(C, 1);
}

void nonpergerakan() {
  digitalWrite(A, 0);
  digitalWrite(D, 0);
  digitalWrite(B, 0);
  digitalWrite(C, 0);
}

void loop() {
  int b4 = digitalRead(PB4);
  int b3 = digitalRead(PB3);
  int b2 = digitalRead(PB2);
  int b1 = digitalRead(PB1);
  int touch_sensor = digitalRead(TOUCH_SENSOR_PIN); // Baca input dari sensor Touch
  
  if (touch_sensor == HIGH) { // Jika sensor Touch aktif
    if (b4 == LOW) {
      pergerakan_3(); // Motor bergerak berlawanan arah jarum jam
    } else if (b3 == LOW) {
      pergerakan_2();
    } else if (b2 == LOW) {
      pergerakan_1();
    } else if (b1 == LOW) {
      pergerakan_4();
    } else {
      nonpergerakan();
    }
  } else { // Jika sensor Touch tidak aktif
    if (b4 == LOW) {
      pergerakan_4(); // Motor bergerak sesuai arah jarum jam
    } else if (b3 == LOW) {
      pergerakan_3();
    } else if (b2 == LOW) {
      pergerakan_2();
    } else if (b1 == LOW) {
      pergerakan_1();
    } else {
      nonpergerakan();
    }
  }
}

B. Flowchart



5. Kondisi [Kembali]

Kondisi  →Percobaan 6 Kondisi 7

        Button 1 - 7 menampilkan “LEI” di kolom 1 ,button 8 membuat tulisan “LEI” dalam keadaan running text ke kanan.


6. Video Simulasi [Kembali]








7. Download File [Kembali]

Download HMTL Klik disini
Download Simulasi Rangkaian Klik disini
Download Video Simulasi Klik disini
Download Datasheet ARDUINO UNO klik disini
Download Datasheet TOUCH SENSOR  klik disini
Download Datasheet LCD 2X16 klik disini

TP Modul 2 Percobaan 4 Kondisi 4





PERCOBAAN 4 
Kontrol Motor Servo dengan PWM


1. Prosedur
[Kembali]

1. Rangkai semua komponen sesuai kondisi yang dipilih
2. Buat program di aplikasi arduino IDE
3. Setelah selesai masukkan program ke arduino di proteus
4. Jalankan program pada simulasi dan cobakan sesuai dengan modul dan kondisi
5. Selesai

2. Hardware dan diagram blok [Kembali]

A. Hardware
                                                   

1. Arduino Uno

2. Keypad 

3. Motor Servo



            B. Digram Blok




3. Rangkaian Simulasi dan Prinsip kerja [Kembali]

Gambar Rangkaian Sebelum Disimulasikan




Gambar Rangkaian Setelah Disimulasikan
                                        


Prinsip Kerja 

    Pada percobaan kali ini, kita akan menjalankan Kondisi 4, yang mana kita akan mengatur motor servo yang menjadi output dengan menggunakan keypad sebagai input. Keypad ini akan menghasilkan nilai PWM antara 255 hingga 0, dengan selisih 28 antara setiap nilai PWM. Motor servo, seperti yang diketahui, bergerak dengan presisi sesuai dengan sudut yang diberikan kepadanya melalui PWM. Dengan demikian, dalam percobaan ini, kami akan menggunakan keypad untuk mengontrol sudut motor servo secara tepat sesuai dengan nilai PWM yang ditentukan. Misalnya, jika kita memasukkan nilai PWM 255, maka motor servo akan bergerak ke posisi sudut yang sesuai dengan nilai tersebut, begitu juga dengan nilai-nilai PWM lainnya dari 255 hingga 0 dengan selisih 28 di antaranya.


4. FlowChart [Kembali]

A. 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}; 
byte colPins[numCols] = {5, 4, 3};     
 
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) { 
    Serial.println(key); 
     
    switch (key) { 
      case '1':  
        //nilai PWM 255
        servoMotor.write(180); 
        break; 
      case '2':
        //nilai PWM 227 
        servoMotor.write(160); 
        break; 
      case '3':
        //nilai PWM 199 
        servoMotor.write(140); 
        break; 
      case '4': 
        //nilai PWM 171
        servoMotor.write(120); 
        break; 
      case '5': 
        //nilai PWM 143
        servoMotor.write(100); 
        break; 
      case '6': 
        //nilai PWM 115
        servoMotor.write(80); 
        break; 
      case '7': 
        //nilai PWM 87
        servoMotor.write(60); 
        break; 
      case '8': 
        //nilai PWM 59
        servoMotor.write(40); 
        break; 
      case '9': 
      //nilai PWM 0
        servoMotor.write(0); 
        break; 
        default: 
        break; 
      } 
      } 
      }


B. Flowchart




5. Kondisi [Kembali]

Kondisi  →Percobaan 4 Kondisi 4

        Keypad 1 hingga 9 memberikan PWM 255-0 dengan jarak PWM antar Key 28.


6. Video Simulasi [Kembali]



7. Download File [Kembali]

Download HMTL Klik disini
Download Simulasi Rangkaian Klik disini
Download Video Simulasi Klik disini
Download Datasheet ARDUINO UNO klik disini
Download Datasheet TOUCH SENSOR  klik disini
Download Datasheet LCD 2X16 klik disini

Entri yang Diunggulkan

LA MODUL 3 PERCOBAAN 2

  PERCOBAAN 2 [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Jurnal 2. Alat dan Bahan 3. Rangkaian Simulasi 4. Prinsip Kerja Rangka...