1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Передача в среду Scratch данных от акселерометра через Arduino

Содержание

Подключаем гироскоп-акселерометр (MPU-6050) к плате Arduino

Технический рынок наполнен тысячами модулями датчиков, которые стоят недорого и используются в проектном конструировании. Перед этим модули связывают с программируемым микроконтроллером. Акселерометр – инструмент, использующийся для расчета разности между настоящим и гравитационным ускорением предмета. Датчик состоит из платы со встроенной микросхемой.

Прибор применяют везде. Статья ниже – вспомогательная инструкция по подключению акселерометра к Ардуино.

Шаг 1. Компоненты для подключения акселерометра к Arduino

Для проекта понадобятся несколько компонентов:

Микроконтроллер Arduino UNO R3

МК создан с использованием материалов контроллера ATmega328:

  1. цифровые входы и выходы в количестве 14 штук, причем половина приходится на ШИМ-выходы;
  2. аналогичные входы, количество – 6 штук;
  3. резонатор на основе кварца, мощностью 16 МГц;
  4. встроен usb-вход;
  5. контакт для подключения питания;
  6. на МК располагается кнопка, с помощью которой возможен сброс данных и кода;
  7. контакт для программирования данных, находящихся внутри схемы, именуемый ICSP.

Старт работы начинается с подачи электрического питания в плату. Пользователь подключает к плате со схемой блок питания или зарядное устройство. Также процедура осуществляется с помощью usb-кабеля, который подключен к компьютеру и микроконтроллеру. Для разработки программы понадобится бесплатная среда программирования – Arduino IDE.

Пользователь создает в бесплатной среде код, затем его компилирует и загружает проработанную программу в пространство памяти в Ардуино. Язык, на котором программируется код, Wiring максимально приближен к популярному среди программистов языку – C++. Кроме того МК поддерживает версии для осей Виндовс, Мак ОС и Линукс.

Модуль датчика для гироскопа акселерометра на Аrduino с 3 осями – GY-521 (MPU-6050)

В основе компонента лежит микросхема MPU-6050. В комплект входят 2 предмета – гироскоп и акселерометр. Данные устройства перед конструированием обрабатываются и затем переносятся прямиком в микроконтроллер через интерфейс

Модуль датчика помогает определять место и перемещение инструмента в пространстве. Измеряются дифферент и углы крена посредством вектора силы тяжести и скорости в процессе вращения. Также включена функция измерения температурного режима. Перемещение определяется линейным ускорением и угловой скоростью. Полная картина рисуется по 3 осям.

Компонент нередко сравнивают с человеческим вестибулярным аппаратом, который помогает людям чувствовать силу тяготения и удерживать равновесие.

Макетная плата, предназначенная для прототипирования

Отладка – неотъемлемая часть построения электронных схем. Макетная плата незаменима для конструкции электронной аппаратуры. Ранее в изобретательстве использовали традиционные макетные платы, но сейчас широко распространены макетные платы, которые удобны тем, что не требуют дополнительных спаек.

Таким образом, процесс сборки и отладки электронной схемы в разы ускоряется: не приходится часто использовать паяльник, чтобы поменять сломанные радиодетали.

Материал для изготовления беспаечных макетных плат – пластик. Кроме того, все контакты надежно скреплены к плате, поэтому частые переключения не испортят элемент.

Соединительные провода папа-папа

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

Шаг 2. Схема подключения акселерометра к микроконтроллеру Arduino

Порядок и схема подключения довольно просты:

Ардуино: акселерометр MPU6050

Акселерометр — это прибор, позволяющий измерять ускорение тела под действием внешних сил. Подробно об устройстве этого датчика мы уже рассказывали на одном из уроков: Акселерометр: что это такое и как им определять наклон тела

На этот раз мы перейдем от теории к практике: подключим датчик к Ардуино, и напишем пару программ для работы с ним. Подключать будем модуль MPU6050 от RobotClass.

В основе этого модуля лежит микросхема MPU6050, в которой размещаются сразу два датчика: акселерометр и гироскоп. На плате уже имеется вся необходимая обвязка, а также преобразователь напряжения.

Читать еще:  Автоматическая кормушка для птиц со сменными кассетами

Характеристики модуля MPU6050 ROC:

  • напряжение питания: от 3,5 до 6 В;
  • потребляемый ток: 500 мкА;
  • ток в режиме пониженного потребления: 10 мкА при 1,25 Гц, 20 мкА при 5 Гц, 60 мкА при 20 Гц, 110 мкА при 40 Гц;
  • диапазон: ± 2, 4, 8, 16g;
  • разрядность АЦП: 16;
  • интерфейс: I2C (до 400 кГц).

На плате имеется 8 контактов:

  • VCC — положительный контакт питания;
  • GND — земля;
  • SDA — линия данных I2C;
  • SCL — линия синхроимпульсов I2C;
  • INT — настраиваемое прерывание;
  • AD0 — I2C адрес; по-умолчанию AD0 подтянут к земле, поэтому адрес устройства — 0x68; если соединить AD0 к контактом питания, то адрес изменится на 0x69;
  • XCL, XDA — дополнительный I2C интерфейс для подключения внешнего магнитометра.

Подключение MPU6050 к Ардуино

Соединим контакты датчика с Ардуино Уно согласно стандартной схеме для интерфейса I2C:

Принципиальная схема

Внешний вид макета

Программа для получения сырых данных с акселерометра MPU6050

Составим программу, которая будет каждые 20 миллисекунд получать данные из MPU6050 и выводить их в последовательный порт.

Для работы программы потребуются библиотеки: MPU6050 и I2Cdev, ссылки на которые можно найти в конце урока.

Загружаем программу на Ардуино и открываем окно графика. Поворачиваем датчик вокруг оси X на 90 градусов в одну сторону, потом на 90 в другую. Получится примерно такая картина.

На графике хорошо видно, что при наклоне оси Y вертикально, акселерометр выдает значения близкие к четырём тысячам. Откуда берется это число?

Точность измерения ускорения в MPU6050

Дело в том, что датчик MPU6050 позволяет настраивать точность измерений. Можно выбрать один из четырех классов точности: ±2G, 4G, 8G и 16G, где 1G — это одна земная гравитация. Используемая нами библиотека по-умолчанию настраивает датчик на диапазон ±8G (прим. по ссылке внизу статьи библиотека по-умолчанию устанавливает ±2G).

С другой стороны, MPU6050 имеет 16 разрядный АЦП. 2 в степени 16 даст нам число 65 536. Поскольку датчик может измерять и отрицательное и положительное ускорение, то он будет выдавать нам числа от -32768 до +32768.

Сложив эти два факта вместе получаем, что при таких настройках 1G будет равен числу 4096 (ну а -1G равен числу -4096). Это вполне совпадает с наблюдаемыми на графике значениями!

Следующий шаг — преобразование этих странных чисел в привычные нам углы, измеряемые в градусах.

Программа для вычисления угла наклона акселерометра MPU6050

Добавим в предыдущую программу вычисление угла поворота датчика вокруг оси X:

Загружаем программу в Ардуино и снова пробуем вращать датчик. Теперь на графике отображается угол наклона в градусах!

Ну вот, мы получили уже что-то пригодное для дальнейшего использования. Видно, что датчик поворачивался сначала на 30 с лишним градусов в одну сторону, потом примерно на 60 в другую. Работает!

Заключение

На этом уроке мы получили с датчика MPU6050 сначала сырые данные, а потом и угол его наклона в градусах. Это большое достижение. Но впереди еще немного математики и еще более крутые результаты! Будем делать комплементарный фильтр, который позволит работать с датчиком даже в условиях вибрации и тряски.

Как работает акселерометр? Взаимодействие ADXL335 с Arduino

Вы когда-нибудь задумывались, как ваш смартфон отличает верх от низа? Это одна из самых классных функций современных смартфонов. У всех из них есть встроенное в схему крошечное устройство под названием акселерометр, которое может понимать, когда вы наклоняете его с одной стороны на другую. Таким образом, ваш смартфон автоматически определяет, когда нужно переключить положение экрана с портретного на альбомное.

Как работает акселерометр? Взаимодействие ADXL335 с Arduino

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

Давайте внимательнее посмотрим, что это, что они делают, и как работают.

Что такое ускорение?

Блестящий ученый Исаак Ньютон в своем втором законе движения определил ускорение, связав его с массой и силой.

Если у вас есть определенная сила (скажем, сила в вашей ноге, когда вы пинаете ею), и вы применяете ее к массе (футбольный мяч), вы заставляете массу ускоряться (мяч отлетит в воздухе).

Сила = Масса х Ускорение

Ускорение = Сила / Масса

Другими словами, ускорение – это количество силы, которое нам нужно для перемещения каждой единицы массы.

Как работает акселерометр?

Чтобы узнать, как работают акселерометры, полезно представить шар внутри трехмерного куба.

Рисунок 1 – Невесомость

Предположим, что куб находится в космическом пространстве, где всё находится в невесомом состоянии, шар просто будет плавать в середине куба.

Теперь давайте представим, что каждая стена представляет определенную ось.

Если мы внезапно переместим куб влево с ускорением 1g (единичное усилие 1g эквивалентно гравитационному ускорению 9,8 м/с 2 ), без сомнения, мяч ударится в стену X. Если мы измерим силу, которую мяч применяет к стене X, мы можем получить выходное значение 1g по оси X.

Читать еще:  Вертикальный сад в пластиковых бутылках

Рисунок 2 – Внезапное движение

Давайте посмотрим, что произойдет, если мы перенесем этот куб на Землю. Мяч просто упадет на стенку Z и применит силу 1g, как показано на рисунке ниже:

Рисунок 3 – Сила тяжести

В этом случае куб не перемещается, но мы всё равно получаем значение 1g по оси Z. Это потому, что сила тяжести тянет шар вниз с силой 1g.

Акселерометр измеряет статическое ускорение силы тяжести в приложениях, чувствительных к наклону, а также динамическое ускорение, возникающее в результате движения, удара или вибрации.

Как работает MEMS акселерометр?

Акселерометр MEMS (Micro Electro Mechanical Systems) состоит из микромеханической структуры, построенной поверх кремниевой пластины.

Рисунок 4 – Внутренняя работа MEMS акселерометра ADXL335

Эта конструкция подвешена на поликремниевых пружинах. Это позволяет конструкции отклоняться, когда к определенной оси применяется ускорение.

Из-за прогиба емкость между неподвижными пластинами и пластинами, прикрепленными к подвешенной конструкции, изменяется. Это изменение емкости пропорционально ускорению по этой оси.

Датчик обрабатывает это изменение емкости и преобразует его в аналоговое выходное напряжение.

Обзор аппаратного обеспечения акселерометра ADXL335

Основой модуля является небольшой трехосный MEMS акселерометр с низким энергопотреблением и с чрезвычайно низким уровнем шума от Analog Devices – ADXL335. Датчик имеет полный диапазон чувствительности ±3g. Он может измерять статическое ускорение, вызванное силой тяжести в приложениях, чувствительных к наклону, а также динамическое ускорение, вызванное движением, ударом или вибрацией.

Рисунок 5 – Обзор аппаратного обеспечения модуля акселерометра ADXL335

Датчик работает при питании от 1,8 до 3,6 В (оптимально 3,3 В) и обычно потребляет ток всего 350 мкА. Однако встроенный стабилизатор 3,3 В делает его идеальным выбором для взаимодействия с микроконтроллерами 5 В, такими как Arduino.

Эта дружественная макетная плата разводит каждый вывод ADXL335 на 6-выводный разъем с шагом 0,1 дюйма. Сюда входят 3 аналоговых выхода для измерений по осям X, Y и Z, 2 вывода питания и вывод самотестирования, который позволяет проверить работу датчика в конечном приложении.

Аналоговые выходы являются относительными, что означает, что выходной сигнал 0g номинально равен половине напряжения питания 3,3 В (1,65 В), -3g соответствует выходному напряжению 0 В, и 3g соответствует 3,3 В с полным масштабированием между ними.

Ниже приведена таблица с основными характеристиками микросхемы акселерометра ADXL335.

Для более подробной информации обратитесь к техническому описанию по ссылке ниже.

Распиновка акселерометра ADXL335

Прежде чем погрузиться в подключения и примеры кода, давайте сначала взглянем на распиновку модуля акселерометра.

Рисунок 6 – Распиновка модуля акселерометра ADXL335

Вывод VCC обеспечивает питание для акселерометра, который может быть подключен к 5 В на Arduino.

Вывод Выход X выводит аналоговое напряжение, пропорциональное ускорению, приложенному к оси X.

Вывод Выход Y выводит аналоговое напряжение, пропорциональное ускорению на оси Y.

Вывод Выход Z выводит аналоговое напряжение, пропорциональное ускорению на оси Z.

Вывод GND подключается к выводу GND на Arduino

Вывод ST (Self-Test) контролирует функцию самопроверки. Эта функция подробно обсуждается в конце.

Подключение акселерометра ADXL335 к Arduino UNO

Теперь, когда у нас есть полное представление о том, как работает акселерометр ADXL335, мы можем начать подключать его к нашей плате Arduino.

Подключение довольно простое. Начните с установки акселерометра на макетной плате. Подключите вывод VCC к выводу 5V на Arduino, а вывод GND – к выводу GND на Arduino. Также подключите выходы X, Y и Z к аналоговым выводам A0, A1 и A2 на Arduino.

Для получения точных результатов, нам нужно изменить опорное аналоговое напряжение (AREF) на Arduino. Это можно сделать, подключив вывод 3,3V на Arduino к выводу AREF.

Когда вы закончите, у вас должно получиться что-то похожее на показанное на рисунке ниже.

Рисунок 7 – Подключение модуля акселерометра ADXL335 к Arduino UNO

Итак, теперь, когда мы подключили наш акселерометр, пришло время написать код и протестировать его.

Код Arduino – чтение показаний акселерометра ADXL335

Скетч довольно прост. Он просто отображает калиброванное выходное напряжение датчика для каждой оси через последовательный интерфейс. Протестируйте скетч, прежде чем мы начнем его подробный разбор.

Скетч начинается с объявления аналоговых входных выводов Arduino, к которым подключены выходные выводы X, Y и Z датчика.

Далее мы определяем минимальные и максимальные значения, которые Arduino собирается предоставить. Поскольку плата Arduino содержит 10-разрядный аналого-цифровой преобразователь, она отобразит выходные напряжения датчика в диапазоне от 0 до 3,3 В в целочисленные значения в диапазоне от 0 до 1023. Именно поэтому для RawMin установлено значение 0, а для RawMax установлено значение 1023.

Переменная sampleSize указывает Arduino брать 10 отсчетов каждого преобразования, чтобы получить более точные результаты.

В функции setup() мы должны установить аналоговое опорное напряжение на EXTERNAL , так как мы подключили 3,3 В к выводу AREF на Arduino. Это делается путем вызова analogReference(EXTERNAL) .

Читать еще:  Домашняя беспроводная передача звука

Кроме этого, мы инициализируем здесь и последовательную связь с компьютером.

ПРЕДУПРЕЖДЕНИЕ

Если вы не вызовите analogReference(EXTERNAL) , вы закоротите вместе активный источник опорного напряжения (внутренний) и вывод AREF, что, возможно, приведет к повреждению микроконтроллера на плате Arduino..

В функции loop() мы считываем аналоговые выходы датчика каждые 200 мс. Вместо вызова функции analogRead() мы вызываем пользовательскую функцию ReadAxis() . Эта функция просто берет 10 выборок АЦП и возвращает среднее значение.

Преобразование показаний ADXL335 в ускорение (g)

Следующий фрагмент кода является наиболее важной частью программы. Он преобразует аналоговые выходные напряжения датчика в ускорение свободного падения (g).

Встроенная в IDE функция map() выполняет фактическое преобразование. Таким образом, когда мы вызываем map(xRaw, RawMin, RawMax, -3000, 3000) , значение RawMin будет преобразовываться в -3000 , значение RawMax – в 3000 , а значения между ними – в промежуточные значения.

Значения -3000 и 3000 не являются произвольными. Они фактически представляют ускорение свободного падения (в милли-g, которое составляет 1/1000 g), измеренное датчиком, то есть ± 3g (от -3000 до 3000 милли-g).

  • Когда датчик выдает 0 вольт на оси x, то есть xRaw = 0, функция map() возвращает -3000, представляющие -3g.
  • Когда датчик выдает 3,3 вольта по оси x, то есть xRaw = 1023, функция map() вернет 3000, представляющие +3g.
  • Когда датчик выдает 1,65 В на оси x, т.е. xRaw = 511, функция map() вернет 0, представляющий 0g.

Термин относительный будет иметь больше смысла, когда выходное напряжение будет увеличиваться линейно с ростом ускорения в заданном диапазоне.

Наконец, выходной сигнал датчика уменьшается до дробного значения g с помощью деления на 1000 и выводится в монитор последовательного порта.

На следующих рисунках показан вывод данных акселерометра в монитор последовательного порта в разных положениях.

Рисунок 8 – Вывод акселерометра ADXL335 на оси X — Рисунок 9 – Вывод акселерометра ADXL335 на оси Y + Рисунок 10 – Вывод акселерометра ADXL335 на X + Рисунок 11 – Вывод акселерометра ADXL335 на оси Y — Рисунок 12 – Вывод акселерометра ADXL335 на оси Z + Рисунок 13 – Вывод акселерометра ADXL335 на оси Z —

Функция самотестирования ADXL335

Акселерометр ADXL335 имеет функцию самопроверки, которая позволяет проверить работу датчика в конечном приложении.

Рисунок 14 – Вывод ST (самопроверка) на модуле управляет этой функцией

Когда контакт ST подключен к 3,3 В, на пластину акселерометра внутри действует электростатическая сила. Результирующее движение пластины позволяет пользователю проверить работоспособность акселерометра.

Типичное изменение выходного сигнала:

  • -1,08 g (-325 мВ) по оси X
  • +1.08 g (+325 мВ) по оси Y
  • +1,83 g (+550 мВ) по оси Z

Этот вывод ST при нормальном использовании может быть подключен к земле или оставлен «висеть» в воздухе.

ПРЕДУПРЕЖДЕНИЕ

Подача на вывод ST напряжения выше 3,6 В может привести к повреждению акселерометра.

Среда программирования Arduino. Устанавливаем Scratch на Raspberry Pi

Не так давно я самостоятельно собрал и подключил цветомузыку на микроконтроллере Arduino и понял как это интересно и познавательно.

Решил заняться самообразованием, а именно заняться изучением программированием микроконтроллеров Arduino.

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

Сегодня хочу установить виртуальную среду программирования на Raspberry Pi . Почему на Raspberry, поэтому что установить на Windows, сможет каждый, а вот на Raspberry Pi, это ещё постараться надо.

Установка S4A на Raspberry Pi

Первое , что нужно сделать до установки скетча нужно установить на Raspberry программу Arduino IDE, подробно как это сделать я описывал здесь .

Если вы устанавливаете на Windows, вот ссылка:

Выполняем по-шагово все действия по установке.

Если выполнен первый шаг, переходим ко второму.

Второе , скачиваем программу Scratch с сайта на Raspberry.

Третье , переносим скаченный установочный файл в папку /home/pi

Теперь чтобы установить его введите команду:

sudo dpkg -i S4A15_RP.deb

После выполнения установки в терминале отобразиться:

Теперь откройте Пуск/Программирование в списке программ будет Scratch под названием S4A.

Но прежде запустить программу S4A необходимо выполнить ещё пару действий .

Зайти на сайт http://s4a.cat/ и скачать скетча для установки сопряжения платs Arduino с программой S4A.

На скаченный файл S4AFirmware16.ino нажмите правой кнопкой мыши, в контекстном меню нажмите Arduino IDE.

Подключите плату желательно Arduino Uno и загрузите открывшийся скетч нажав кнопку Загрузить. Так же как это описано здесь .

Если загрузка прошла успешно, откройте программу S4A не отключая плату Uno от Rasspberry Pi , увидите среду Scratch для Arduino для дальнейшего программирования.

Но об этом в следующем раз .

Спасибо, что дочитали статью до конца.

Читайте ещё статью про планшет:

Надеюсь статья была вам полезна и интересна.

Понравилась статья, ставьте палец вверх.

Ссылка на основную публикацию
Статьи c упоминанием слов:

Adblock
detector