В этой статье мы свяжем 3-осевой акселерометр ADXL335 с платой Raspberry Pi Pico с помощью кода на MicroPython. Raspberry Pi Pico — это доступный, универсальный и мощный микроконтроллер, а ADXL335 — это компактный и маломощный акселерометр. В сочетании эти два компонента могут использоваться для создания самых разных захватывающих проектов, таких как системы управления жестами, датчики наклона или даже простые игровые контроллеры.
В этом руководстве мы предоставим вам пошаговые инструкции по подключению к Raspberry Pi Pico акселерометра ADXL335. Мы также проведем вас через написание необходимого кода для чтения и интерпретации данных акселерометра. К концу этого руководства вы будете иметь четкое представление о Raspberry Pi Pico и акселерометре ADXL335, а также знания, необходимые для создания собственных проектов с использованием этих компонентов.
Ранее акселерометр ADXL335 мы использовали в следующих проектах на нашем сайте:
- счетчик шагов (шагомер) на Arduino и акселерометре;
- робот на Arduino управляемый с помощью жестов рук и акселерометра;
- система предупреждения об авариях автомобилей с использованием Arduino, GPS и GSM.
Необходимые компоненты
- Плата Raspberry Pi Pico (купить на AliExpress).
- Акселерометр ADXL335 (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
3-осевой акселерометр ADXL335
ADXL335 — это небольшой, тонкий, маломощный трехосевой акселерометр производства компании Analog Devices. Он предназначен для измерения ускорения с полным диапазоном ±3 g, где g — ускорение силы тяжести (приблизительно 9,81 м/с²). ADXL335 измеряет ускорение по трем ортогональным осям: X, Y и Z, что позволяет ему определять движение и ориентацию в трехмерном пространстве.
ADXL335 выводит аналоговые сигналы напряжения, пропорциональные ускорению, испытываемому датчиком. Эти аналоговые сигналы могут быть считаны микроконтроллером или другим устройством с аналого-цифровым преобразователем (АЦП), таким как Arduino или Raspberry Pi Pico, для обработки и интерпретации данных.
Технические характеристики ADXL335
ADXL335 — это трехосевой акселерометр со следующими основными характеристиками:
- Диапазон измерения: ±3 g (где g — ускорение свободного падения, приблизительно 9,81 м/с²).
- Чувствительность: Обычно около 300 мВ/г (милливольт на г) при комнатной температуре, с небольшими колебаниями в зависимости от оси.
- Выход: аналоговое напряжение, пропорциональное ускорению, один выход для каждой оси (X, Y и Z).
- Напряжение питания: от 1,8 В до 3,6 В, типичное рабочее напряжение 3,3 В.
- Потребляемая мощность: низкая, обычно около 350 мкА в режиме измерения.
- Полоса пропускания: выбирается пользователем, до 1,6 кГц для осей X и Y и до 550 Гц для оси Z.
- Плотность шума: приблизительно 350 мкг/√Гц (микро-g на квадратный корень герц).
- Смещение при нулевой гравитации: 1,5 В (типичное) на выходе при отсутствии ускорения.
- Дрейф смещения в условиях невесомости: до 25 мкВ/°C (микровольт на градус Цельсия) в диапазоне рабочих температур.
- Диапазон рабочих температур: от -40°C до +85°C (от -40°F до +185°F).
Распиновка ADXL335
3-осевой акселерометр ADXL335 имеет 5 контактов.
- VCC: контакт питания (от 2,8 В до 3,6 В).
- X_OUT: аналоговый выход оси X.
- Y_OUT: Аналоговый выход оси Y.
- Z_OUT: Аналоговый выход оси Z.
- GND: Заземляющий контакт.
Взаимодействие акселерометра ADXL335 с Raspberry Pi Pico
Для сопряжения акселерометра ADXL335 с платой Raspberry Pi Pico с помощью MicroPython вам необходимо подключить ADXL335 к аналоговым контактам Pico и считать значения ускорения с датчика. Схема подключения акселерометра ADXL335 к плате Raspberry Pi Pico представлена на следующем рисунке.
Сделайте следующие соединения:
- Подключите контакт VCC ADXL335 к контакту 3,3 В Pico.
- Подключите контакт GND ADXL335 к контакту GND Pico.
- Подключите ADXL335 X-OUT к контакту GP26 Pico (ADC0).
- Подключите контакт Y-OUT ADXL335 к контакту GP27 Pico (ADC1).
- Подключите Z-OUT ADXL335 к контакту GP28 Pico (ADC2).
Для подключения можно использовать макетную плату и соединительные провода.
Код MicroPython для считывания значений ускорения
Ниже приведен пример кода MicroPython для считывания значений ускорения по осям x, y и z с помощью интерфейса ADXL335 и Raspberry by Pico.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import machine import utime # ADXL335 analog pins connected to Pico's ADC channels X_PIN = 26 Y_PIN = 27 Z_PIN = 28 # Create ADC objects for each axis adc_x = machine.ADC(machine.Pin(X_PIN)) adc_y = machine.ADC(machine.Pin(Y_PIN)) adc_z = machine.ADC(machine.Pin(Z_PIN)) def read_acceleration(adc): # Read the ADC value and convert it to voltage voltage = adc.read_u16() * 3.3 / 65535 # Convert the voltage to acceleration (assuming 3.3V supply) acceleration = (voltage - 1.65) / 0.330 return acceleration while True: # Read the acceleration values from the ADXL335 x = read_acceleration(adc_x) y = read_acceleration(adc_y) z = read_acceleration(adc_z) # Print the acceleration values print("X: {:.2f}g, Y: {:.2f}g, Z: {:.2f}g".format(x, y, z)) # Wait for a while before reading again utime.sleep(0.1) |
Загрузите этот код на свой Raspberry Pi Pico и значения ускорения будут выведены на экран.
Обратите внимание, что фактическая чувствительность ADXL335 может отличаться от теоретического значения, используемого в коде (0,330 В/г), поэтому для получения точных результатов может потребоваться калибровка датчика.
Код MicroPython для считывания значений угла поворота
Для расчета углов наклона (тангажа и крена) по значениям ускорения можно использовать следующие уравнения:
- pitch (тангаж) = atan(y / sqrt(x^2 + z^2))
- roll (крен) = atan(x / sqrt(y^2 + z^2))
Ниже представлен обновленный код MicroPython для ADXL335 и Raspberry Pi Pico для считывания значений ускорения X, Y, Z и расчета углов тангажа и крена.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import machine import utime import math # ADXL335 analog pins connected to Pico's ADC channels X_PIN = 26 Y_PIN = 27 Z_PIN = 28 # Create ADC objects for each axis adc_x = machine.ADC(machine.Pin(X_PIN)) adc_y = machine.ADC(machine.Pin(Y_PIN)) adc_z = machine.ADC(machine.Pin(Z_PIN)) def read_acceleration(adc): # Read the ADC value and convert it to voltage voltage = adc.read_u16() * 3.3 / 65535 # Convert the voltage to acceleration (assuming 3.3V supply) acceleration = (voltage - 1.65) / 0.330 return acceleration def calculate_tilt_angles(x, y, z): pitch = math.atan2(y, math.sqrt(x**2 + z**2)) roll = math.atan2(x, math.sqrt(y**2 + z**2)) # Convert the angles to degrees pitch = math.degrees(pitch) roll = math.degrees(roll) return pitch, roll while True: # Read the acceleration values from the ADXL335 x = read_acceleration(adc_x) y = read_acceleration(adc_y) z = read_acceleration(adc_z) # Calculate the tilt angles pitch, roll = calculate_tilt_angles(x, y, z) # Print the acceleration values and tilt angles print("X: {:.2f}g, Y: {:.2f}g, Z: {:.2f}g, Pitch: {:.2f}°, Roll: {:.2f}°".format(x, y, z, pitch, roll)) # Wait for a while before reading again utime.sleep(0.1) |
Загрузите этот код на свой Raspberry Pi Pico и значения ускорения, а также углы тангажа и крена будут выведены на экран.
Обратите внимание, что ADXL335 — это 3-осевой акселерометр, что означает, что он может измерять ускорение по осям X, Y и Z. Хотя он может предоставлять ценные данные для многих приложений, он не предназначен для непосредственного измерения значений рыскания.
Рыскание — это вращательное движение вокруг оси Z, которое обычно связано с изменениями направления или ориентации. Для измерения значений рыскания обычно используется гироскоп или комбинация датчиков, известная как инерциальный измерительный блок (Inertial Measurement Unit, IMU).
7 просмотров