• I






      
           

Научно-популярный образовательный ресурс для юных и начинающих радиолюбителей - Popular science educational resource for young and novice hams

Основы электричества, учебные материалы и опыт профессионалов - Basics of electricity, educational materials and professional experience

КОНКУРС
language
 
Поиск junradio

Радиодетали
ОК
Сервисы

Stock Images
Покупка - продажа
Фото и изображений


 
Выгодный обмен
электронных валют

Друзья JR



JUNIOR RADIO

 

Акселерометр Raspberry Pi
с использованием ADXL345

 

 

Руководство проведет вас через процесс подключения ADXL345 к Raspberry Pi. Здесь также описаны шаги по внедрению библиотеки Adafruit ADXL34x для взаимодействия с устройством. Оба являются относительно простыми процессами. ADXL345 - это маломощный трехосевой (отслеживает ускорения по осям X, Y и Z) МЭМС-акселерометр, использующий последовательные интерфейсы I2C и SPI. Для тех, кто не знает, MEMS расшифровывается как Micro Electro Mechanical System . В случае акселерометра это означает, что он имеет микроскопический компонент, который используется для расчета текущего ускорения, ощущаемого датчиком.

Поддержка последовательных протоколов I2C и SPI делает его невероятно простым в использовании с нашим Raspberry Pi, поскольку нам не требуется никакого дополнительного оборудования для интерпретации данных, поступающих от акселерометра.

Настройка акселерометра Raspberry Pi ADXL345

В этой части руководства мы покажем вам, как подключить цифровой акселерометр ADXL345 к Raspberry Pi.

 

 

Поскольку ADXL345 представляет собой цифровой датчик, вам не придется иметь дело с какими-либо дополнительными схемами, такими как аналого-цифровой преобразователь . Быть цифровым - значит. вы можете подключить датчик напрямую к Raspberry Pi.

Цепь акселерометра ADXL345

Ниже мы включили два способа показать вам, как подключить акселерометр к Raspberry Pi. Вы можете следовать схемам или использовать наши письменные инструкции по проводам и контактам GPIO, которые вам нужно использовать.

Подключите контакт GND акселерометра к физическому контакту 6 ( GND ) на Raspberry Pi.

Подключите вывод VCC акселерометра к физическому выводу 1 ( 3v3 ) на Raspberry Pi.

Подключите вывод SDA акселерометра к физическому выводу 3 ( SDA ) на Raspberry Pi.

Подключите контакт SCL акселерометра к физическому контакту 5 ( SCL ) на Raspberry Pi.

 


 

Подготовка Raspberry Pi к работе с акселерометром

1. Прежде чем мы сможем заставить наш Raspberry Pi получать данные с нашего акселерометра ADXL345, мы должны внести несколько изменений в конфигурацию Pi. Давайте сначала убедитесь, что все обновлено, выполнив следующие две команды.

sudo apt-get update

sudo apt-get upgrade

2.Как только Raspberry Pi завершит обновление, нам нужно будет запустить инструмент настройки Raspberry, чтобы мы могли включить I2C на Raspberry Pi. Выполните следующую команду, чтобы запустить инструмент настройки raspi .

sudo raspi-config

3.На этом экране вам нужно перейти в меню « 5 опций интерфейса ». Вы можете перемещаться по меню инструментов raspi-config с помощью клавиш со стрелками . Используйте клавишу ENTER для выбора определенных опций.

4.Теперь в меню опций интерфейса выберите « P5 I2C ». Когда вас спросят, хотите ли вы включить интерфейс ARM I2C , выберите « <ДА> ».

5. После включения интерфейса I2C вам необходимо перезапустить Raspberry Pi, выполнив следующую команду.

sudo reboot

6.Теперь, когда мы включили I2C и перезапустили Raspberry Pi, мы можем приступить к установке пакетов, на которые мы будем полагаться, чтобы общаться с нашим акселерометром. Выполните следующую команду для установки.

sudo apt-get install python3-dev python3-pip python3-smbus i2c-tools -y

6. Установив все необходимые пакеты, давайте теперь проверим, видит ли наш Raspberry Pi наш акселерометр ADXL345. Мы можем сделать это, выполнив следующую команду.

sudo i2cdetect -y 1

После выполнения этой команды вы должны увидеть, что в командной строке отображается неплохой бит. В этом результате вы должны увидеть как минимум такое число, как « 53 ». Если ничего не появляется, убедитесь, что вы правильно подключили акселерометр ADXL345 к Raspberry Pi и что все точки пайки на контактах датчика чистые. Если вы видите ошибку, попробуйте снова включить I2C.

 Написание сценария для работы с акселерометром ADXL345

1.Теперь, когда все пакеты, которые нам нужны, установлены на Raspberry Pi, мы можем приступить к написанию небольшого скрипта Python. Этот скрипт предназначен для того, чтобы мы могли считывать информацию с акселерометра. Чтобы поговорить с ADXL345, мы будем использовать библиотеку Python ADXL34x от Adafruit . Чтобы установить эту библиотеку, чтобы мы могли ее использовать, вам необходимо выполнить следующую команду pip .

sudo pip3 install adafruit-circuitpython-ADXL34x

2. Установив библиотеку, мы можем приступить к написанию нашего небольшого скрипта Python. Начните писать этот файл, выполнив следующую команду.

nano ~/accelerometer.py

3. В нашем новом скрипте напишите следующие строки кода.

import time

Начнем с импорта библиотеки « время ». Мы используем библиотеку « time », чтобы на короткое время перевести скрипт в спящий режим.

import board

Здесь мы импортируем « доску » библиотеки Adafruit . Эта уникальная библиотека предназначена для того, чтобы быстро узнать, какие контакты доступны на устройстве. Поэтому вместо указания конкретного вывода мы можем использовать что-то вроде « board.scl », и это вернет правильный вывод для текущего микроконтроллера. В нашем случае это Raspberry Pi.

import busio

Затем мы импортируем модуль busio от Adafruit . Этот модуль содержит множество различных библиотек для обработки различных последовательных протоколов. Мы будем использовать эту библиотеку модулей для обработки последовательного протокола I2C.

import adafruit_adxl34x

Теперь мы импортируем библиотеку « adafruit_adxl34x ». Эта библиотека содержит весь код, необходимый для чтения информации с нашего акселерометра ADXL345, и делает этот процесс невероятно простым.

i2c = busio.I2C(board.SCL, board.SDA)

Здесь мы используем библиотеку « busio » для подготовки I2C-соединения для наших текущих плат SCL и контактов SDA. Мы сохраняем дескриптор в нашей переменной « i2c ».

accelerometer = adafruit_adxl34x.ADXL345(i2c)

Теперь мы создаем экземпляр библиотеки ADXL345 в нашем объекте « акселерометр ». Мы будем использовать этот объект для чтения и получения информации от нашего датчика. В конструктор библиотеки мы передаем наш дескриптор I2C.

while True:

    print("%f %f %f"%accelerometer.acceleration)

    time.sleep(0.5)

Здесь мы начинаем бесконечный цикл, используя « while True: ». В этом бесконечном цикле мы распечатываем значения ускорения X , Y и Z , которые были получены библиотекой из акселерометра. После того, как мы напечатали значения X, Y и Z, мы переводим скрипт в спящий режим на полсекунды. Мы засыпаем скрипт, чтобы он не переполнял командную строку значениями, предоставленными акселерометром.

4.Окончательная версия кода акселерометра должна выглядеть так, как показано ниже. Сравните свой окончательный код с этим.

import time

import board

import busio

import adafruit_adxl34x

 

i2c = busio.I2C(board.SCL, board.SDA)

accelerometer = adafruit_adxl34x.ADXL345(i2c)

 

while True:

    print("%f %f %f"%accelerometer.acceleration)

    time.sleep(1)

Если вы уверены, что весь код верен, вы можете сохранить его, нажав CTRL + X, затем Y, а затем ENTER .

5. Теперь, когда код готов, давайте продолжим и запустим сценарий, выполнив следующую команду.

python3 ~/accelerometer.py

6. Запустив этот код, вы должны начать видеть значения, считываемые с акселерометра.

0.117680 0.313813 8.355266

0.117680 0.313813 8.394492

0.117680 0.313813 8.355266

0.117680 0.353039 8.316039

0.117680 0.431493 8.316039

0.117680 0.313813 8.276813

7. Теперь, когда мы знаем, что акселерометр возвращает данные и что Raspberry Pi читает правильно, мы можем изучить некоторые другие функции библиотеки ADXL345.

 Изучение библиотеки акселерометра ADXL345

1. В этом разделе руководства по акселерометру Raspberry Pi мы рассмотрим некоторые другие функции, предоставляемые библиотекой акселерометра Adafruit ADXL345. В частности, мы рассмотрим « события », которые библиотека может автоматически обнаруживать при включении. Для начала давайте откроем наш сценарий « accelerometer.py » с помощью следующей команды.

nano ~/accelerometer.py

2.Найдите и добавьте в файл строки, показанные ниже. Мы объясним, для чего предназначен каждый новый раздел и для чего он нужен.

Находим

accelerometer = adafruit_adxl34x.ADXL345(i2c)

Добавьте следующие строки под линией выше.

accelerometer.enable_freefall_detection(threshold=10, time=25)

Эта строка включает событие обнаружения свободного падения библиотек. Он принимает две переменные, одна из которых является порогом, а другая - временем. Пороговое значение представляет собой значение , что ускорение по всем осям должны находиться под для того , чтобы зарегистрировать в виде капли. Масштабный коэффициент равен 62,5 мг, поэтому в нашем примере 10 * 62,5 = 625 мг . Затем переменная времени - это количество времени, в течение которого ускорение по всем осям должно быть меньше порогового значения, чтобы они были зарегистрированы как сброшенные. Коэффициент масштабирования составляет 5 мс, поэтому в нашем примере 25 × 5 = 125 мс .

accelerometer.enable_motion_detection(threshold=18)

Эта строка включает событие обнаружения движения библиотек. Он принимает одну переменную - порог. Пороговое значение переменного значение , которое ускорение на все оси должно превышать для движения , чтобы быть обнаружено. Если вы обнаружите, что это слишком чувствительно или недостаточно, вы можете изменить это значение. Масштабный коэффициент равен 62,5 мг, поэтому в нашем примере 18 * 62,5 = 1125 мг .

accelerometer.enable_tap_detection(tap_count=1, threshold=20, duration=50, latency=20, window=255)

Эта строка включает событие обнаружения касания библиотек. Tap_count переменная, хотите ли вы , чтобы обнаружить один кран или двойное нажатие. Установите значение 1 для однократного нажатия или 2 для двойного нажатия. Далее идет пороговая переменная, и это зависит от того, насколько чувствительным должно быть нажатие. Чем выше значение, тем менее чувствительным будет код для обнаружения касания. Как и другие пороговые переменные, масштабный коэффициент составляет 62,5 мг. Продолжительность переменной является продолжительность времени в наносекундах , что должно произойти движение. Если продолжительность движения слишком велика, оно не будет обнаружено как постукивание. Это значение должно быть в мс. Теперь переменная задержки - это промежуток времени после первоначального импульса для начала поиска второго тапа. Значение задержки должно быть в мс.

Наконец, переменная окна - это промежуток времени, в течение которого код должен ожидать второго нажатия. Опять же, это значение должно быть в мс.

Находим

print("%f %f %f"%accelerometer.acceleration)

Добавьте следующие строки ниже

    print("Dropped: %s"%accelerometer.events["freefall"])

    print("Tapped: %s"%accelerometer.events['tap'])

    print("Motion detected: %s"%accelerometer.events['motion'])

Эти дополнительные строки распечатывают статус всех событий, которые мы активировали ранее в сценарии. Эти строки печати сообщат вам, запускается ли какое-либо из событий в данный момент. Обычно вы не будете проверять все эти события одновременно.

3. Со всеми изменениями, внесенными в код акселерометра, он должен выглядеть примерно так, как показано ниже.

import time

import board

import busio

import adafruit_adxl34x

 

i2c = busio.I2C(board.SCL, board.SDA)

accelerometer = adafruit_adxl34x.ADXL345(i2c)

accelerometer.enable_freefall_detection(threshold=10, time=25)

accelerometer.enable_motion_detection(threshold=18)

accelerometer.enable_tap_detection(tap_count=1, threshold=20, duration=50, latency=20, window=255)

 

while True:

    print("%f %f %f"%accelerometer.acceleration)

    print("Dropped: %s"%accelerometer.events["freefall"])

    print("Tapped: %s"%accelerometer.events['tap'])

    print("Motion detected: %s"%accelerometer.events['motion'])

    time.sleep(0.5)

Когда вы убедитесь, что весь код верен, вы можете сохранить его, нажав CTRL + X, затем Y, а затем ENTER .

4. Теперь, когда код готов, давайте продолжим и запустим сценарий, выполнив следующую команду.

python3 ~/accelerometer.py

5.Запустив этот код, вы должны начать видеть текст, который выводится в командную строку, показывая полученные позиции X ,  Y и Z, а также статус всех событий.

0.235360 0.353039 8.355266

Dropped: False

Tapped: False

Motion detected: False

После этого вы должны иметь некоторое представление о том, как использовать акселерометр ADXL345 с Raspberry Pi.

 




Необходимо добавить материалы...
Результат опроса Результаты Все опросы нашего сайта Архив опросов
Всего голосовало: 373



          

Радио для всех© 2024