from machine import I2C, Pin
from mpu6050 import MPU6050
import time
# Initialize I2C interface for MPU6050
i2c = I2C(0, scl=Pin(20), sda=Pin(21))
# Initialize MPU6050 sensor
mpu = MPU6050(i2c)
def read_vibration():
accel_data = mpu.get_accel()
return accel_data
def main():
while True:
vibration_data = read_vibration()
print("Acceleration data: ", vibration_data)
time.sleep(0.1) # Delay to avoid flooding output
if __name__ == '__main__':
main()
import serial
import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft
# Serial port configuration
SERIAL_PORT = '/dev/ttyUSB0' # Update with your serial port
BAUD_RATE = 115200
def read_serial_data(serial_port, num_samples=1024):
data = []
while len(data) < num_samples:
try:
line = serial_port.readline().decode('utf-8').strip()
if line.startswith("Acceleration data:"):
accel_data = line.split(": ")[1]
accel_values = eval(accel_data) # Convert string to tuple
data.append(accel_values)
except Exception as e:
print(f"Error reading data: {e}")
return np.array(data)
def analyze_vibration(data):
x, y, z = data[:, 0], data[:, 1], data[:, 2]
# Simple analysis: RMS and FFT
rms_x = np.sqrt(np.mean(x**2))
rms_y = np.sqrt(np.mean(y**2))
rms_z = np.sqrt(np.mean(z**2))
print(f"RMS X: {rms_x:.3f}, RMS Y: {rms_y:.3f}, RMS Z: {rms_z:.3f}")
# FFT Analysis
N = len(x)
T = 1.0 / 100.0 # Assuming a sampling rate of 100 Hz
xf = np.linspace(0.0, 1.0/(2.0*T), N//2)
yf = fft(x)
plt.plot(xf, 2.0/N * np.abs(yf[:N//2]))
plt.grid()
plt.title('FFT of X-axis vibration data')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.show()
def main():
with serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1) as ser:
print("Connected to serial port.")
while True:
data = read_serial_data(ser)
analyze_vibration(data)
if __name__ == '__main__':
main()