Монк - Программируем Arduino. Профессиональная работа со скетчами.

Тут можно читать онлайн Монк - Программируем Arduino. Профессиональная работа со скетчами. - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Издательский дом Питер, год 2017. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Программируем Arduino. Профессиональная работа со скетчами.
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом Питер
  • Год:
    2017
  • Город:
    СПб.
  • ISBN:
    978-5-496-02385-6
  • Рейтинг:
    5/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Монк - Программируем Arduino. Профессиональная работа со скетчами. краткое содержание

Программируем Arduino. Профессиональная работа со скетчами. - описание и краткое содержание, автор Монк, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Arduino — стандартный микроконтроллер, получивший широкое признание у инженеров, мастеров и преподавателей благодаря своей простоте, невысокой стоимости и большому разнообразию плат расширения. Платы расширения, подключаемые к основной плате Arduino, позволяют выходить в Интернет, управлять роботами и домашней автоматикой.
Простые проекты на основе Arduino не вызывают сложностей в реализации. Но, вступив на территорию, не охваченную вводными руководствами, и увеличивая сложность проектов, вы быстро столкнетесь с проблемой нехватки знаний — врагом всех программистов.
Эта книга задумана как продолжение бестселлера «Programming Arduino: Getting Started with Sketches». Несмотря на то что эта книга включает краткое повторение основ из книги «Programming Arduino», она познакомит читателя с более продвинутыми аспектами программирования плат Arduino.

Программируем Arduino. Профессиональная работа со скетчами. - читать онлайн бесплатно полную версию (весь текст целиком)

Программируем Arduino. Профессиональная работа со скетчами. - читать книгу онлайн бесплатно, автор Монк
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Простой низкочастотный фильтр

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

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

Сглаженное значениеn = (Коэффициент х Сглаженное значениеn–1) + ((1 – Коэффициент) х Замерn).

Коэффициент — это константа между 0 и 1. Чем выше значение коэффициента, тем сильнее эффект сглаживания.

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

// sketch_13_02_simple_smoothing

const int samplePin = A1;

const float alpha = 0.9;

void setup()

{

Serial.begin(9600);

}

void loop()

{

static float smoothedValue = 0.0;

float newReading = (float)analogRead(samplePin);

smoothedValue = (alpha * smoothedValue) +

((1 — alpha) * newReading);

Serial.print(newReading); Serial.print(",");

Serial.println(smoothedValue);

delay(1000);

}

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

Рис 133График изменения сглаженных значений Как видите для выхода на - фото 85

Рис. 13.3.График изменения сглаженных значений

Как видите, для выхода на нормальный уровень сглаживания требуется некоторое время. Если увеличить значение коэффициента , например, до 0,95, сглаживание получится еще более сильным. Построение графиков на основе данных, скопированных из окна монитора последовательного порта, — отличный способ проверить, насколько результат сглаживания соответствует вашим потребностям.

Цифровая обработка сигналов в Arduino Uno

На рис. 13.4 изображена схема подключения источника сигнала звуковой частоты к контакту A0 на плате Arduino и приемника выходного ШИМ-сигнала (10 кГц), генерируемого платой. В качестве генератора сигнала я использовал приложение на смартфоне и подключил выход для наушников на телефоне к плате Arduino.

Рис 134Использование Arduino Uno для цифровой обработки сигнала ВНИМАНИЕ - фото 86

Рис. 13.4.Использование Arduino Uno для цифровой обработки сигнала

ВНИМАНИЕ

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

Входной сигнал с генератора смещается с помощью C 1, R 1 и R 2 так, чтобы он колебался относительно средней точки 2,5 В и АЦП мог читать любые уровни сигнала. Если убрать эти элементы, сигнал будет колебаться относительно 0 В.

На выходе я добавил простой RC -фильтр на элементах R 3 и C 2, чтобы устранить несущую частоту ШИМ. Несущая частота ШИМ, равная 10 кГц, к сожалению, слишком близка к частоте основного сигнала, чтобы ее можно было подавить полностью.

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

Следующий скетч использует библиотеку TimerOne, чтобы сгенерировать ШИМ-сигнал и выполнять замеры с частотой 10 кГц:

// sketch_13_03_null_filter_uno

#include

const int analogInPin = A0;

const int analogOutPin = 9;

void setup()

{

Timer1.attachInterrupt(sample);

Timer1.pwm(analogOutPin, 0, 100);

}

void loop()

{

}

void sample()

{

int raw = analogRead(analogInPin);

Timer1.setPwmDuty(analogOutPin, raw);

}

На рис. 13.5 изображен сигнал, подаваемый на вход Arduino (верхний график), и выходной сигнал, генерируемый платой Arduino (нижний график). Оба сигнала имеют частоту 1 кГц. Выходной сигнал имеет в целом неплохую форму до частоты 2–3 кГц, но на более высоких частотах начинает приобретать треугольную форму, что объясняется малым числом замеров, приходящихся на один цикл. На осциллограмме можно наблюдать остатки несущей гармоники, искажающие выходной сигнал, но в целом он имеет совсем неплохую форму. Этого вполне достаточно для обработки сигналов с речевой частотой.

Рис 135Воспроизведение сигнала с частотой 1 кГц платой Arduino Uno Цифровая - фото 87

Рис. 13.5.Воспроизведение сигнала с частотой 1 кГц платой Arduino Uno

Цифровая обработка сигналов в Arduino Due

Теперь проведем тот же эксперимент с платой Arduino Due, способной производить замеры с более высокой частотой. Код для модели Uno из предыдущего раздела нельзя использовать с платой Due, так как она имеет иную архитектуру, не позволяющую использовать библиотеку TimerOne.

Аналоговые входы в модели Due способны принимать сигнал с напряжением до 3,3 В, поэтому сопротивление R 1 следует подключить к контакту питания 3.3V, а не 5V. Так как Due имеет истинный аналоговый выход, можно убрать низкочастотный RC -фильтр на элементах R 3 и C 2 и подключить осциллограф непосредственно к контакту DAC0. На рис. 13.6 изображена схема подключения Due.

Рис 136Использование Arduino Due для цифровой обработки сигнала Следующий - фото 88

Рис. 13.6.Использование Arduino Due для цифровой обработки сигнала

Следующий скетч выполняет замеры с частотой 100 кГц!

// sketch_13_04_null_filter_due

const long samplePeriod = 10L; // микросекунды

const int analogInPin = A0;

const int analogOutPin = DAC0;

void setup()

{

// http://www.djerickson.com/arduino/

REG_ADC_MR = (REG_ADC_MR & 0xFFF0FFFF) | 0x00020000;

analogWriteResolution(8);

analogReadResolution(8);

}

void loop()

{

static long lastSampleTime = 0;

long timeNow = micros();

if (timeNow > lastSampleTime + samplePeriod)

{

int raw = analogRead(analogInPin);

analogWrite(analogOutPin, raw);

lastSampleTime = timeNow;

}

}

В отличие от других моделей, Arduino Due позволяет изменять разрешение АЦП и ЦАП. Для простоты и скорости оба настраиваются на разрешение 8 бит.

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

REG_ADC_MR = (REG_ADC_MR & 0xFFF0FFFF) | 0x00020000;

Для управления частотой замеров скетч использует функцию micros. То есть замеры выполняются только по прошествии довольно большого числа микросекунд.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Монк читать все книги автора по порядку

Монк - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Программируем Arduino. Профессиональная работа со скетчами. отзывы


Отзывы читателей о книге Программируем Arduino. Профессиональная работа со скетчами., автор: Монк. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x