Arduino:Примеры/Calibration: различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Нет описания правки |
||
(не показано 6 промежуточных версий 1 участника) | |||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
= Калибровка <ref>[http://www.arduino.cc/en/Tutorial/Calibration Arduino - Calibration]</ref>= | |||
В данном примере демонстрируется один из методов для калибровки входных сенсорных данных. В течение первых пяти секунд с момента запуска [[Arduino]] считывает данные, поступающие от сенсора, отслеживая самые высокие и низкие значения – они будут определены как максимум и минимум этого 5-секундного цикла. | В данном примере демонстрируется один из методов для калибровки входных сенсорных данных. В течение первых пяти секунд с момента запуска [[Arduino]] считывает данные, поступающие от сенсора, отслеживая самые высокие и низкие значения – они будут определены как максимум и минимум этого 5-секундного цикла. | ||
Строка 11: | Строка 11: | ||
* [[Плата Arduino]] - 1 шт.; | * [[Плата Arduino]] - 1 шт.; | ||
* [[Светодиод]] - 1 шт.; | * [[Светодиод]] - 1 шт.; | ||
* Аналоговый сенсор (к примеру, [[фотоэлемент]] или [[потенциометр]]) | * Аналоговый сенсор (к примеру, [[фотоэлемент]] или [[потенциометр]]) - 1 шт.; | ||
* [[Резистор]] на [[10 кОм]] - 1 шт.; | * [[Резистор]] на [[10 кОм]] - 1 шт.; | ||
* [[Резистор]] на [[220 Ом]] - 1 шт.; | * [[Резистор]] на [[220 Ом]] - 1 шт.; | ||
Строка 19: | Строка 19: | ||
== Цепь == | == Цепь == | ||
[[File:calibration_Circuit.png|frame|center|'''Рис. 1.''' | [[File:calibration_Circuit.png|frame|center|'''Рис. 1.''' Плата Arduino с подключенным светодиодом и фоторезистором.|alt=Рис. 1. Плата Arduino с подключенным светодиодом и фоторезистором.]] | ||
[[Светодиод]] подсоедините к 9-ому цифровому контакту и к «земле» (через 220-омовый [[резистор]]). Одну ногу [[фотоэлемент]]а подсоедините к 5-вольтовому контакту, а другую – к 0-ому аналоговому контакту и к «земле» (через 10 кОм [[резистор]]). | [[Светодиод]] подсоедините к 9-ому цифровому контакту и к «земле» (через 220-омовый [[резистор]]). Одну ногу [[фотоэлемент]]а подсоедините к 5-вольтовому контакту, а другую – к 0-ому аналоговому контакту и к «земле» (через 10 кОм [[резистор]]). | ||
== Схема == | == Схема == | ||
[[File:calibration_sch.png]] | [[File:calibration_sch.png|frame|center|'''Рис. 2.''' Схема подключения светодиода и фоторезистора к плате Arduino.|alt=Рис. 2. Схема подключения светодиода и фоторезистора к плате Arduino.]] | ||
== Код == | == Код == | ||
Строка 31: | Строка 31: | ||
Перед секцией [[Arduino:Справочник языка Arduino/setup()|setup()]] задаем начальные значения для минимума и максимума. | Перед секцией [[Arduino:Справочник языка Arduino/setup()|setup()]] задаем начальные значения для минимума и максимума. | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
int sensorMin = 1023; // минимальное значение от сенсора | int sensorMin = 1023; // минимальное значение от сенсора | ||
int sensorMax = 0; // максимальное значение от сенсора | int sensorMax = 0; // максимальное значение от сенсора | ||
Строка 42: | Строка 42: | ||
Делается это при помощи следующего фрагмента: | Делается это при помощи следующего фрагмента: | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
// считываем данные в течение первых пяти секунд: | // считываем данные в течение первых пяти секунд: | ||
while (millis() < 5000) { | while (millis() < 5000) { | ||
Строка 61: | Строка 61: | ||
Таким образом, полученные максимум и минимум можно подогнать под диапазон между 0 и 255: | Таким образом, полученные максимум и минимум можно подогнать под диапазон между 0 и 255: | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
// калибруем данные от сенсора: | // калибруем данные от сенсора: | ||
sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255); | sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255); | ||
Строка 68: | Строка 68: | ||
Вся программа будет выглядеть следующим образом: | Вся программа будет выглядеть следующим образом: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
Калибровка | Калибровка | ||
Строка 138: | Строка 138: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=См.также= | |||
# [[Arduino:Справочник языка Arduino/Управляющие операторы/while|while]] | # [[Arduino:Справочник языка Arduino/Управляющие операторы/while|while]] | ||
Строка 150: | Строка 150: | ||
# [[Arduino:Примеры/Smoothing|Smoothing]] | # [[Arduino:Примеры/Smoothing|Smoothing]] | ||
=Внешние ссылки= | |||
<references /> | <references /> | ||
{{Навигационная таблица/ | {{Навигационная таблица/Портал/Arduino}} | ||
[[Категория:Пример]] | [[Категория:Пример]] |
Текущая версия от 18:18, 14 мая 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Калибровка [1]
В данном примере демонстрируется один из методов для калибровки входных сенсорных данных. В течение первых пяти секунд с момента запуска Arduino считывает данные, поступающие от сенсора, отслеживая самые высокие и низкие значения – они будут определены как максимум и минимум этого 5-секундного цикла.
Необходимое оборудование
- Плата Arduino - 1 шт.;
- Светодиод - 1 шт.;
- Аналоговый сенсор (к примеру, фотоэлемент или потенциометр) - 1 шт.;
- Резистор на 10 кОм - 1 шт.;
- Резистор на 220 Ом - 1 шт.;
- Макетная плата - 1 шт.;
- Провода-перемычки;
Цепь
Светодиод подсоедините к 9-ому цифровому контакту и к «земле» (через 220-омовый резистор). Одну ногу фотоэлемента подсоедините к 5-вольтовому контакту, а другую – к 0-ому аналоговому контакту и к «земле» (через 10 кОм резистор).
Схема
Код
Перед секцией setup() задаем начальные значения для минимума и максимума.
int sensorMin = 1023; // минимальное значение от сенсора
int sensorMax = 0; // максимальное значение от сенсора
Может показаться, что тут нет никакой логики – максимум обозначен как 0, а минимум как 1023. Но дело в том, что это лишь исходные значения, от которых программа будет отталкиваться, определяя реальные максимум и минимум.
То есть в переменной sensorMin изначально задается самый высокий минимум (1023), и самое маленькое число, которое будет ниже этого минимума, будет определено как новый минимум. В то же время в переменной sensorMax изначально задается самый низкий максимум (0), и самое большое число, которое будет выше этого максимума, будет определено как новый максимум.
Делается это при помощи следующего фрагмента:
// считываем данные в течение первых пяти секунд:
while (millis() < 5000) {
sensorValue = analogRead(sensorPin);
// записываем максимальное значение, считанное от сенсора:
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}
// записываем минимальное значение, считанное от сенсора:
if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
}
Таким образом, полученные максимум и минимум можно подогнать под диапазон между 0 и 255:
// калибруем данные от сенсора:
sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);
Вся программа будет выглядеть следующим образом:
/*
Калибровка
Демонстрирует один из методов для калибровки входных данных от сенсора. В течение первых 5 секунд программа определяет максимальное и минимальное значение этих данных.
Может показаться, что в исходных минимуме (1023) и максимуме (0) нет никакой логики. Но дело в том, что это лишь исходные значения, от которых программа будет отталкиваться, определяя реальные максимум и минимум.
То есть в переменной sensorMin изначально задается самый высокий минимум (1023), и самое маленькое число, которое будет ниже этого минимума, будет определено как новый минимум. В то же время в переменной sensorMax изначально задается самый низкий максимум (0), и самое большое число, которое будет выше этого максимума, будет определено как новый максимум.
Цепь:
* Аналоговый сенсор (например, потенциометр) подсоединен к 0-ому входному контакту, 5-вольтовому напряжению и «земле»
* Светодиод подсоединен к 9-ому цифровому контакту и «земле»
Создан 29 октября 2008 Дэвидом А. Меллисом (David A Mellis),
модифицирован 30 августа 2011 Томом Иго (Tom Igoe)
http://arduino.cc/en/Tutorial/Calibration
Этот код не защищен авторским правом.
*/
// это константы – значения, которые не изменятся:
const int sensorPin = A0; // контакт, к которому подсоединен сенсор
const int ledPin = 9; // контакт, к которому подсоединен светодиод
// переменные:
int sensorValue = 0; // значение, полученное от сенсора
int sensorMin = 1023; // минимальное значение от сенсора
int sensorMax = 0; // максимальное значение от сенсора
void setup() {
// включаем светодиод, чтобы оповестить о начале калибровочного периода:
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
// считываем данные в течение первых пяти секунд:
while (millis() < 5000) {
sensorValue = analogRead(sensorPin);
// записываем максимальное значение, считанное от сенсора:
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}
// записываем минимальное значение, считанное от сенсора:
if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
}
// выключаем светодиод, оповещая о конце калибровочного периода:
digitalWrite(13, LOW);
}
void loop() {
// считываем данные от сенсора:
sensorValue = analogRead(sensorPin);
// калибруем данные от сенсора:
sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);
// на тот случай, если данные от сенсора будут за пределами необходимого диапазона, делаем так:
sensorValue = constrain(sensorValue, 0, 255);
// задаем светодиоду уровень яркости, опираясь на откалиброванное значение:
analogWrite(ledPin, sensorValue);
}
См.также
Внешние ссылки
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