def __init__(self, bus=None): if bus is None: bus = smbus.SMBus(i2c_raspberry_pi_bus_number()) #Default ADXL345 range +/- 2g is ideal for telescope use self.accel = ADXL345(bus, 0x53, name="accel") self.gyro = L3G4200D(bus, 0x69, name="gyro") self.compass = HMC5883L(bus, 0x1e, name="compass") self.barometer = BMP085(bus, 0x77, name="barometer") self._last_gyro_time = 0 #needed for interpreting gyro self.read_gyro_delta() #Discard first reading q_start = self.current_orientation_quaternion_mag_acc_only() self._q_start = q_start self._current_hybrid_orientation_q = q_start self._current_gyro_only_q = q_start
#!/usr/bin/env python import web import smbus import imu from i2cutils import i2c_raspberry_pi_bus_number import math urls = ( '/', 'index' ) bus = smbus.SMBus(i2c_raspberry_pi_bus_number()) imu_controller = imu.IMU(bus, 0x69, 0x53, 0x1e, "IMU") imu_controller.set_compass_offsets(9, -10, -140) app = web.application(urls, globals()) class index: def GET(self): (pitch, roll, yaw) = imu_controller.read_pitch_roll_yaw() #result = "%.2f %.2f %.2f" % (-1 * pitch, -1 * roll, yaw - math.pi / 2) result = str(-1 * pitch) + ' ' + str(-1 * roll) + ' ' + str(yaw - math.pi / 2) print(result) return result if __name__ == "__main__": app.run()
def read_scaled_accel_y(self): '''Return the SCALED Y accelerometer value''' return self.accel_scaled_y def read_scaled_accel_z(self): '''Return the SCALED Z accelerometer value''' return self.accel_scaled_z def read_pitch(self): '''Calculate the current pitch value in radians''' x = self.read_scaled_accel_x() y = self.read_scaled_accel_y() z = self.read_scaled_accel_z() return self.read_x_rotation(x, y, z) def read_roll(self): '''Calculate the current roll value in radians''' x = self.read_scaled_accel_x() y = self.read_scaled_accel_y() z = self.read_scaled_accel_z() return self.read_y_rotation(x, y, z) if __name__ == "__main__": bus = smbus.SMBus(I2CUtils.i2c_raspberry_pi_bus_number()) adxl345 = ADXL345(bus, 0x53, "accel") adxl345.read_raw_data() print(adxl345.read_scaled_accel_x()) print(adxl345.read_scaled_accel_y()) print(adxl345.read_scaled_accel_z())
b4 = ac4 * (x3 + 32768) >> 15 b7 = (pressure_raw - b3) * (50000 >> oss) if (b7 < 0x80000000): p = (b7 * 2) / b4 else: p = (b7 / b4) * 2 x1 = (p >> 8) * (p >> 8) x1 = (x1 * 3038) >> 16 x2 = (-7357 * p) >> 16 p = p + ((x1 + x2 + 3791) >> 4) return(t / 10., p / 100.) def read_pressure(self): (temperature, pressure) = self.calculate() return pressure def read_temperature(self): (temperature, pressure) = self.calculate() return temperature def read_temperature_and_pressure(self): return self.calculate() if __name__ == "__main__": bus = smbus.SMBus(I2CUtils.i2c_raspberry_pi_bus_number()) bmp085 = BMP085(bus, 0x77 , "BMP085") print bmp085.read_temperature_and_pressure()
import smbus import time import math # Local import from i2cutils import i2c_raspberry_pi_bus_number bus = smbus.SMBus(i2c_raspberry_pi_bus_number()) address = 0x5c def read_byte(adr): return bus.read_byte_data(address, adr) def read_word(adr): high = bus.read_byte_data(address, adr) low = bus.read_byte_data(address, adr + 1) val = (high << 8) + low return val def read_word_2c(adr): val = read_word(adr) if (val >= 0x8000): return -((65535 - val) + 1) else: return val def write_byte(adr, value):