Arduino:Примеры/Smoothing: различия между версиями
Myagkij (обсуждение | вклад) (→Цепь) |
Нет описания правки |
||
(не показано 6 промежуточных версий 1 участника) | |||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=Сглаживание <ref>[http://www.arduino.cc/en/Tutorial/Smoothing Arduino - Smoothing]</ref>= | |||
Этот скетч постоянно считывает данные с входного аналогового контакта, вычисляет скользящее среднее значение и выводит результат на компьютер. Этот пример будет полезен при использовании | Этот [[скетч]] постоянно считывает данные с входного аналогового контакта, вычисляет скользящее среднее значение и выводит результат на [[компьютер]]. Этот пример будет полезен при использовании [[сенсор]]ов, дающих слишком неравномерные и ''«прыгающие»'' данные. Кроме того, он демонстрирует использование массивов для хранения данных. | ||
== Необходимое оборудование == | == Необходимое оборудование == | ||
* Плата | * [[Плата Arduino]] - 1 шт. | ||
* Потенциометр | * [[Потенциометр]] - 1 шт. | ||
== Цепь == | == Цепь == | ||
Строка 16: | Строка 16: | ||
[[File:Smoothing_graph-circuit3.png|center|frame|'''Рис. 1.''' [[Плата Arduino]] с подключенным [[потенциометр]]ом.|alt=Рис. 1. Плата Arduino с подключенным потенциометром.]] | [[File:Smoothing_graph-circuit3.png|center|frame|'''Рис. 1.''' [[Плата Arduino]] с подключенным [[потенциометр]]ом.|alt=Рис. 1. Плата Arduino с подключенным потенциометром.]] | ||
Подключите один из крайних контактов потенциометра к 5-вольтовму напряжению, второй крайний – к | Подключите один из крайних контактов потенциометра к 5-вольтовму напряжению, второй крайний – к ''«земле»'', а центральный – к 0-ому аналоговому контакту. | ||
== Схема == | == Схема == | ||
[[File:Smoothing_AnalogReadSerial_sch.png]] | [[File:Smoothing_AnalogReadSerial_sch.png|center|frame|'''Рис. 2.''' Схема подключения [[потенциометр]]а к [[плате Arduino]].|alt=Рис. 2. Схема подключения потенциометра к плате Arduino.]] | ||
== Код == | == Код == | ||
Эта программа последовательно сохраняет 10 последних значений, считанных с аналогового сенсора, в массив – один за одним. С появлением нового значения все 10 чисел складываются и делятся на 10, что позволяет найти среднее значение и тем самым сгладить внешние данные. Поскольку усреднение выполняется каждый раз, когда в массив добавляется одно новое значение (т.е. программа не ждет, когда в массив добавятся, например, 5 или 10 чисел), никакой задержки в вычислении этого скользящего среднего значения не происходит. | Эта программа последовательно сохраняет 10 последних значений, считанных с аналогового сенсора, в массив – один за одним. С появлением нового значения все 10 чисел складываются и делятся на 10, что позволяет найти среднее значение и тем самым сгладить внешние данные. Поскольку усреднение выполняется каждый раз, когда в массив добавляется одно новое значение (т.е. программа не ждет, когда в массив добавятся, например, 5 или 10 чисел), никакой задержки в вычислении этого скользящего среднего значения не происходит. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | Если изменить размер массива (поставив в константу numReadings не 10, а больше – 15, 20, 30 и т.д.), то данные от сенсора будут еще более сглаженными. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | |||
/* | /* | ||
Строка 91: | Строка 92: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=См.также= | |||
# [[Arduino:Справочник языка Arduino/Типы данных/array|array]] | # [[Arduino:Справочник языка Arduino/Типы данных/array|array]] | ||
Строка 102: | Строка 103: | ||
# [[Arduino:Примеры/Calibration|Calibration]] | # [[Arduino:Примеры/Calibration|Calibration]] | ||
=Внешние ссылки= | |||
<references /> | <references /> | ||
{{Навигационная таблица/ | {{Навигационная таблица/Портал/Arduino}} | ||
[[Категория:Пример]] | [[Категория:Пример]] | ||
Строка 115: | Строка 113: | ||
[[Категория:Пример программирования Arduino]] | [[Категория:Пример программирования Arduino]] | ||
[[Категория:Примеры программирования Arduino]] | [[Категория:Примеры программирования Arduino]] | ||
[[Категория:const]] | |||
[[Категория:int]] | |||
[[Категория:const int]] | |||
[[Категория:void]] | |||
[[Категория:setup()]] | |||
[[Категория:setup]] | |||
[[Категория:Serial.begin(9600)]] | |||
[[Категория:Serial.begin()]] | |||
[[Категория:Serial]] | |||
[[Категория:begin()]] | |||
[[Категория:begin]] | |||
[[Категория:for]] | |||
[[Категория:loop()]] | |||
[[Категория:loop]] | |||
[[Категория:if]] | |||
[[Категория:Serial.println()]] | |||
[[Категория:Serial.println]] | |||
[[Категория:Serial]] | |||
[[Категория:println]] | |||
[[Категория:println()]] | |||
[[Категория:delay(1)]] | |||
[[Категория:delay]] | |||
[[Категория:delay()]] | |||
[[Категория:Плата Arduino]] | |||
[[Категория:Потенциометр]] |
Текущая версия от 18:20, 14 мая 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Сглаживание [1]
Этот скетч постоянно считывает данные с входного аналогового контакта, вычисляет скользящее среднее значение и выводит результат на компьютер. Этот пример будет полезен при использовании сенсоров, дающих слишком неравномерные и «прыгающие» данные. Кроме того, он демонстрирует использование массивов для хранения данных.
Необходимое оборудование
- Плата Arduino - 1 шт.
- Потенциометр - 1 шт.
Цепь
Подключите один из крайних контактов потенциометра к 5-вольтовму напряжению, второй крайний – к «земле», а центральный – к 0-ому аналоговому контакту.
Схема
Код
Эта программа последовательно сохраняет 10 последних значений, считанных с аналогового сенсора, в массив – один за одним. С появлением нового значения все 10 чисел складываются и делятся на 10, что позволяет найти среднее значение и тем самым сгладить внешние данные. Поскольку усреднение выполняется каждый раз, когда в массив добавляется одно новое значение (т.е. программа не ждет, когда в массив добавятся, например, 5 или 10 чисел), никакой задержки в вычислении этого скользящего среднего значения не происходит.
Если изменить размер массива (поставив в константу numReadings не 10, а больше – 15, 20, 30 и т.д.), то данные от сенсора будут еще более сглаженными.
/*
Сглаживание
Постоянно считывает данные с входного аналогового контакта, высчитывает на их основе скользящее среднее, а затем выводит результат на компьютер. Сохраняет последние 10 считанных значений в массиве – на их основе и выполняется постоянное усреднение.
Цепь:
* аналоговый сенсор (к примеру, потенциометр), подключенный к 0-ому входному аналоговому контакту
Создан 22 апреля 2007 Дэвидом А. Меллисом (David A. Mellis, <dam@mellis.org>),
модифицирован 9 апреля 2012 Томом Иго (Tom Igoe)
http://www.arduino.cc/en/Tutorial/Smoothing
Этот пример не защищен авторским правом.
*/
// Определяем количество значений в массиве.
// Чем больше это количество, тем более сглаженным будет результат,
// и тем больше будет задержка между входными и выходными данными.
// Использование константы вместо переменной позволяет задать размер для массива.
const int numReadings = 10;
int readings[numReadings]; // данные, считанные с входного аналогового контакта
int index = 0; // индекс для значения, которое считывается в данный момент
int total = 0; // суммарное значение
int average = 0; // среднее значение
int inputPin = A0;
void setup()
{
// инициализируем последовательную передачу данных с компьютером:
Serial.begin(9600);
// выставляем все считываемые значения на ноль:
for (int thisReading = 0; thisReading < numReadings; thisReading++)
readings[thisReading] = 0;
}
void loop() {
// берем последнее значение...
total= total - readings[index];
// ...которое было считано от сенсора:
readings[index] = analogRead(inputPin);
// добавляем его к общей сумме:
total= total + readings[index];
// продвигаемся к следующему значению в массиве:
index = index + 1;
// если мы в конце массива...
if (index >= numReadings)
// ...возвращаемся к началу:
index = 0;
// вычисляем среднее значение:
average = total / numReadings;
// выводим его на компьютер цифрами в кодировке ASCII
Serial.println(average);
delay(1); // делаем задержку между считываниями – для стабильности программы
}
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino
- Const
- Int
- Const int
- Void
- Setup()
- Setup
- Serial.begin(9600)
- Serial.begin()
- Serial
- Begin()
- Begin
- For
- Loop()
- Loop
- If
- Serial.println()
- Serial.println
- Println
- Println()
- Delay(1)
- Delay
- Delay()
- Плата Arduino
- Потенциометр