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 Uno LCD 20×4 I2C 5V VCC GND GND A4 SDA A5 SCL
Arduino Uno MPU 6050 3V3 VCC GND GND A4 SDA A5 SCL
Arduino Uno Buzzer 5V 11 (D11) (+) / Merah GND (-) / Hitam
Arduino Uno Tombol 7 (D7) Pin 1 Tombol 1 8 (D8) Pin 1 Tombol 2 GND Pin 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