E-latto’ terinspirasi dari mainan anak-anak, latto’-latto’ atau biasa disebut etek-etek yang terdiri dari 2 bandul yang dipantulkan ke atas dan ke bawah. Pada postingan ini dibuat sebuah alat yang cara memainkannya sama dengan latto’-latto’, tetapi dengan cara digital menggunakan mikrokontroler dan accelerometer

Komponen yang dibutuhkan

  • Arduino Uno R3
  • MPU6050 (Gyroscope & Accelerometer & Temperature Sensor)
  • LCD 20×4 I2C
  • Breadboard / Mini Breadboard
  • Buzzer Active Mini 3V-5V
  • Push Button 4 pin
  • Jumper secukupnya

Dapatkan komponen di atas melalui link di bawah ini :


Skema Rangkaian

Jalur Sambungan (Wiring Table)

Arduino UnoLCD 20×4 I2C
5VVCC
GNDGND
A4SDA
A5SCL
Arduino UnoMPU 6050
3V3VCC
GNDGND
A4SDA
A5SCL
Arduino UnoBuzzer 5V
11 (D11)(+) / Merah
GND(-) / Hitam
Arduino UnoTombol
7 (D7)Pin 1 Tombol 1
8 (D8)Pin 1 Tombol 2
GNDPin 2 Tombol 1 & 2

Source Code

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <Adafruit_MPU6050.h>

#define buzzerPin 11
#define btn1 7
#define btn2 8

LiquidCrystal_I2C lcd(0x27, 20, 4);

Adafruit_MPU6050 mpu;
Adafruit_Sensor *mpu_temp, *mpu_accel, *mpu_gyro;

int volume = 50;

void setup(void) {
  Serial.begin(115200);
  pinMode(btn1, INPUT_PULLUP);
  pinMode(btn2, INPUT_PULLUP);
  while (!Serial)
    delay(10); 

  Serial.println("Adafruit MPU6050 test!");

  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }

  Serial.println("MPU6050 Found!");
  mpu_temp = mpu.getTemperatureSensor();
  mpu_temp->printSensorDetails();

  mpu_accel = mpu.getAccelerometerSensor();
  mpu_accel->printSensorDetails();

  mpu_gyro = mpu.getGyroSensor();
  mpu_gyro->printSensorDetails();

  lcd.begin();
  lcd.backlight();
  lcd.print("-START-");
  pinMode(buzzerPin, OUTPUT);

}

float xNew, yNew, zNew = 0.0;
float xOld, yOld, zOld = 0.0;
float tresHold = 28.0;
float x, y, z = 0.0;
long count = 0;
int latto = 0;
void loop() {
  float topAccel = 0.0;

  if(digitalRead(btn1) == LOW){
    Serial.println("Up");
    volume += 5;
    delay(10);
  }
  if(digitalRead(btn2) == LOW){
    Serial.println("Down");
    volume -= 5;
    delay(10);
  }

  sensors_event_t accel;
  sensors_event_t gyro;
  sensors_event_t temp;
  mpu_temp->getEvent(&temp);
  mpu_accel->getEvent(&accel);
  mpu_gyro->getEvent(&gyro);

  Serial.print("\t\tTemperature ");
  Serial.print(temp.temperature);
  Serial.println(" deg C");

  xNew = accel.acceleration.x;
  yNew = accel.acceleration.y;
  zNew = accel.acceleration.z;

  x = xNew - xOld;
  y = yNew - yOld;
  z = zNew - zOld; 

  if(abs(x) > tresHold || abs(y) > tresHold || abs(z) > tresHold){
    latto++;
    beep(volume, 0.02);
  }

  if(abs(x) > topAccel){
    topAccel = abs(x);
  }
  if(abs(y) > topAccel){
    topAccel = abs(y);
  }
  if(abs(z) > topAccel){
    topAccel = abs(z);
  }
  /* Display the results (acceleration is measured in m/s^2) */
  Serial.print("\t\tAccel X: ");
  Serial.print(xNew);
  Serial.print(" \tY: ");
  Serial.print(yNew);
  Serial.print(" \tZ: ");
  Serial.print(zNew);
  Serial.println(" m/s^2 ");

 

  Serial.print("Latto : ");
  Serial.println(latto);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Latto Points : ");
  lcd.print(latto/2);
  lcd.setCursor(0, 1);
  lcd.print("Volume: ");
  lcd.print(volume);
  lcd.print(" %");
  lcd.setCursor(0, 2);
  lcd.print("Acc: ");
  lcd.print(topAccel);
  lcd.print(" m/s^2");
  lcd.setCursor(0,3);
  lcd.print("---LATTO TRACKER ---");

  xOld = xNew;
  yOld = yNew;
  zOld = zNew;

  delay(10);


}

void beep(int vol,  float detik){
  int sig = map(vol, 0, 100, 0, 255);
  analogWrite(buzzerPin, sig);
  delay(detik * 1000);
  digitalWrite(buzzerPin, LOW);

}

Library

Hasil

Leave a comment

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *