Урок по arduino №2

Введение

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

АЦП может быть как отдельной микросхемой, например, как 5101НВ015, так и быть в составе микроконтроллера. МК1986ВЕ9х, 1986ВЕ1Т, 1986ВЕ3Т, 1986ВЕ4У содержат в себе интегрированный блок АЦП. Основные характеристики АЦП — это разрядность и время преобразования. Разрядность 12 бит, следовательно, АЦП может различать 212 = 4096 различных уровней подаваемого на вход напряжения. А время преобразования, в свою очередь, зависит от частоты, подаваемой на АЦП. По спецификации для осуществления преобразования требуется не менее 28 тактов синхронизации CLK, в качестве которой мы можем использовать как частоту процессора CPU_CLK, так и частоту ADC_CLK, формируемую в блоке «Сигналов тактовой частоты».

Стоит отметить, что согласно спецификации на микроконтроллеры серии 1986ВЕ9х, частота тактирования(частота следования тактовых импульсов) АЦП не может превышать 14 МГц.

АЦП имеет следующие основные режимы работы:

-режим одиночного преобразования по одному каналу (с возможностью опроса бита окончания преобразования или с прерыванием по окончанию преобразования);

-режим многократного преобразования (по одному каналу/с автоматическим переключением нескольких каналов и возможностью использования прямого доступа к памяти).

hakonbogen

Я новичок в использовании Arduino, и у меня есть Arduino Uno. Для проектов, которые я сделал, я использовал только цифровые контакты.

Я строю небольшой автомобиль, который использует шаговые двигатели. У меня закончились контакты для управления моторами для этого автомобиля. Для чего нужны аналоговые контакты? Могу ли я использовать аналоговые контакты для управления остальными шаговыми двигателями, которые я подключаю к Arduino, или мне нужно купить Arduino большего размера, чем Arduino Uno, чтобы управлять этой штуковиной?

Аниндо Гош

Да, аналоговые контакты Arduino можно использовать как цифровые выходы.

Это описано в документации по входным контактам Arduino в разделе Pin Mapping:

Manishearth

https://electronics.stackexchange.com/search?q=url%3Ahttp%3A%2F%2Farduino.stackexchange.com. Вы всегда можете использовать аналоговые выводы для цифровой записи.

  • работает на всех выводах. Он просто округлит полученное аналоговое значение и представит его вам. Если больше или равно 512, будет 1, иначе 0.
  • работает на всех выводах с допустимым параметром 0 или 1. такой же, как , а такой же, как
  • работает только на аналоговых выводах. Может принимать любое значение от 0 до 1023.
  • работает на всех аналоговых выводах и на всех цифровых выводах ШИМ . Вы можете указать любое значение от 0 до 255.

Аналоговые выводы позволяют вам читать / записывать аналоговые значения — в основном, вместо выдачи напряжения 0 или 5 (как с цифровым), они могут давать диапазон напряжений от 0 до 5 (как на входе, так и на выходе)

Обратите внимание, что напряжение на аналоговом выходе является только наблюдаемым напряжением с помощью мультиметра. В действительности аналоговые контакты посылают импульсы сигналов 0 В и 5 В, чтобы получить выход, который «выглядит» аналогом (это ШИМ)

Что касается количества выводов: имейте в виду, что выводы PWM могут использоваться для аналогового выхода. Если у вас закончились булавки, вы можете использовать мультиплексирование, чтобы заработать больше. Не нужно получать еще один Arduino.

asheeshr

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

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

Стив Кули

Если вы можете себе это позволить, и вы действительно хотите сделать работу со степпером очень простой, попробуйте Easy Stepper . Мне было очень приятно.

Из примера кодовой страницы

Также на той же странице приведен пример кода для запуска двух двигателей с двумя панелями easystepper с ускорением / замедлением: http://www.sc-fa.com/blog/wp-content/uploads/2013/04/20130414- 081018.jpg

Преобразование с контролем границ

Микроконтроллеры серии 1986ВЕ9х и 1901ВЦ1Т имеют в своём арсенале 2 независимых АЦП – ADC1, ADC2, которые входят в состав блока АЦП. Общая схема приведена на рисунке 1.

Основной идеей данного примера является использование контроля уровня входного сигнала. В начале примера зададим следующие переменные:

которые являются границами и за которыми МК будет следить. Изменять на входе напряжение будем с помощью подстроечного резистора, который согласно описанию платы, подключен к 7 каналу АЦП. Для этого необходимо установить перемычку на разъём XP6 в положение “TRIM” (рисунок 2).

Таким образом, в случае нарушения данных границ, то есть выхода за границы интервала от 0x800 до 0x900, МК возведёт флаг Flg REG AWOIFEN в регистре ADCx_STATUS.

Размеры Уно

Arduino Uno R3 – самая популярная плата, построенная на базе процессора ATmega328. В зависимости от конкретной модели платы этой линейки используются различные микроконтроллеры, на момент написания статьи самой распространённой является версия именно R3.

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

Плата Ардуино Уно

Размеры платы представлены на схеме ниже. Общие размеры Уно составляют 53,4 мм на 68,6 мм.

Платы расширения

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

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

Одним из самых популярных является Arduino Ethernet Shield. Он нужен для связи с Ардуино по обычному сетевому кабелю, витой паре. На нём расположен разъём rj45.

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

Элементы платы

Микроконтроллер ATmega328P

Сердцем платформы Arduino Uno является 8-битный микроконтроллер фирмы Microchip — ATmega328P на архитектуре AVR с тактовой частотой 16 МГц.
Контроллер обладает тремя видами памяти:

  • 32 КБ Flash-памяти, из которых 0,5 КБ используются загрузчиком, который позволяет прошивать Uno с обычного компьютера через USB. Flash-память постоянна и её предназначение — хранение программ и сопутствующих статичных ресурсов.
  • 2 КБ RAM-памяти, которые предназначены для хранения временных данных, например переменных программы. По сути, это оперативная память платформы. RAM-память энергозависимая, при выключении питания все данные сотрутся.
  • 1 КБ энергонезависимой EEPROM-памяти для долговременного хранения данных, которые не стираются при выключении контроллера. По своему назначению это аналог жёсткого диска для Uno.

Микроконтроллер ATmega16U2

Микроконтроллер не содержит USB интерфейса, поэтому для прошивки и коммуникации с ПК на плате присутствует дополнительный микроконтроллер ATmega16U2 с прошивкой USB-UART преобразователя. При подключении к ПК Arduino Uno определяется как виртуальный COM-порт.

общается с ПК через по интерфейсу UART используя сигналы и , которые параллельно выведены на контакты и платы Uno. Во время прошивки и отладки программы, не используйте эти пины в своём проекте.

Светодиодная индикация

Имя светодиода Назначение
ON Индикатор питания платформы.
L Пользовательский светодиод на пине микроконтроллера. Используйте определение для работы со светодиодом. При задании значения высокого уровня светодиод включается, при низком – выключается.
RX и TX Мигают при прошивке и обмене данными между Uno и компьютером. А также при использовании пинов и .

Порт USB Type-B

Разъём USB Type-B предназначен для прошивки и питания платформы Arduino. Для подключения к ПК понадобится кабель USB (A — B).

Понижающий регулятор 5V

Понижающий линейный преобразователь NCP1117ST50T3G обеспечивает питание микроконтроллера и другой логики платы при подключении питания через или пин Vin. Диапазон входного напряжения от 7 до 12 вольт. Выходное напряжение 5 В с максимальным выходным током 1 А.

Понижающий регулятор 3V3

Понижающий линейный преобразователь LP2985-33DBVR обеспечивает напряжение на пине . Регулятор принимает входное напряжение от линии 5 вольт и выдаёт напряжение 3,3 В с максимальным выходным током 150 мА.

ICSP-разъём ATmega328P

ICSP-разъём выполняет две полезные функции:

  1. Используется для передачи сигнальных пинов интерфейса SPI при подключении Arduino Shield’ов или других плат расширения. Линии ICSP-разъёма также продублированы на цифровых пинах , , и .
  2. Предназначен для загрузки прошивки в микроконтроллер через внешний программатор. Одна из таких прошивок — Bootloader для Arduino Uno, который позволяет .

А подробности распиновки .

Полный текст программы

C++

#include <avr/io.h>

unsigned int ADC_read(unsigned char chnl)
{
chnl= chnl & 0b00000111; // выбор канала АЦП от 0 до 7
ADMUX = 0x40; //выбран канал A0
ADCSRA|=(1<<ADSC); // старт преобразования
while(!(ADCSRA & (1<<ADIF))); // ждем окончания преобразования
ADCSRA|=(1<<ADIF); // очистим ADIF когда преобразование закончится
return (ADC); //возвращаем рассчитанное значение АЦП
}

int main(void)
{
PORTC = 0xFF; //устанавливаем на всех контактах PORTC логические «1»
ADMUX=(1<<REFS0); // выбор внутреннего опорного напряжения
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // разрешаем АЦП и устанавливаем коэффициент деления предделителя = 128

int i = 0; // определяем переменную типа integer чтобы хранить в ней значение АЦП

while (1)
{

i = ADC_read(0); // сохраняем рассчитанное значение АЦП в переменной i
PORTC = i; // передаем значение АЦП на контакты portc
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#include <avr/io.h>

unsignedintADC_read(unsignedcharchnl)

{

chnl=chnl&0b00000111;// выбор канала АЦП от 0 до 7  

ADMUX=0x40;//выбран канал A0

ADCSRA|=(1<<ADSC);// старт преобразования

while(!(ADCSRA&(1<<ADIF)));// ждем окончания преобразования

ADCSRA|=(1<<ADIF);// очистим ADIF когда преобразование закончится

return(ADC);//возвращаем рассчитанное значение АЦП

}

intmain(void)

{

PORTC=0xFF;//устанавливаем на всех контактах PORTC логические «1»

ADMUX=(1<<REFS0);// выбор внутреннего опорного напряжения

ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);// разрешаем АЦП и устанавливаем коэффициент деления предделителя = 128

inti=;// определяем переменную типа integer чтобы хранить в ней значение АЦП

while(1)

{

i=ADC_read();// сохраняем рассчитанное значение АЦП в переменной i

PORTC=i;// передаем значение АЦП на контакты portc

}

}

Что такое АЦП (аналого-цифровой преобразователь)

В электронике под АЦП (в переводе с англ. от ADC — analog-to-digital converter) понимают устройство которое конвертирует аналоговый сигнал (например, ток или напряжение) в цифровой код (двоичную форму). В реальном мире большинство сигналов являются аналоговыми, но все микроконтроллеры и микропроцессоры способны понимать только двоичные (бинарные) сигналы – 0 или 1. То есть чтобы заставить микроконтроллер понимать аналоговые сигналы необходимо конвертировать их в цифровую форму – это и делает АЦП. Существуют различные типы АЦП, каждый тип удобен для конкретных приложений. Наиболее популярные типы АЦП используют такие типы аппроксимаций как приближенная, последовательная и дельта-аппроксимацию. 

Самые дешевые АЦП – с последовательной аппроксимацией, их мы и будем рассматривать в данной статье. В данном случае для каждого фиксированного аналогового уровня последовательно формируется серия соответствующих им цифровых кодов. Внутренний счетчик используется для их сравнения с аналоговым сигналом после конверсии. Генерация цифровых кодов останавливается когда соответствующий им аналоговый уровень становится чуть-чуть больше чем аналоговый сигнал на входе АЦП. Этот цифровой код и будет представлять собой конвертированное значение аналогового сигнала.

Мы в данной статье будем использовать встроенный в микроконтроллер AVR ATmega16 аналого-цифровой преобразователь – практически все микроконтроллеры семейства AVR оснащаются встроенным АЦП. Но вместе с тем следует помнить о том, что существуют и другие типы микроконтроллеров, у которых нет собственных АЦП – в этом случае необходимо использовать внешний АЦП. Как правило, внешние АЦП сейчас выпускаются в виде одной микросхемы.

Arduino Uno

Arduino Uno – это открытая микроконтроллерная плата на базе микроконтроллера ATmega328p. Она имеет 14 цифровых выводов (из которых 6 выводов можно использовать в качестве выходов ШИМ), 6 аналоговых входов, встроенные стабилизаторы напряжения и так далее. Arduino Uno имеет 32 КБ флэш-памяти, 2 КБ SRAM и 1 КБ EEPROM. Она работает с тактовой частотой 16 МГц. Для связи с другими устройствами Arduino Uno поддерживает последовательный интерфейс, I2C, SPI. В таблице ниже приведены технические характеристики Arduino Uno (более подробное техническое описание можно посмотреть здесь).

Микроконтроллер ATmega328P
Рабочее напряжение 5 В
Входное напряжение (рекомендуемое) 7-12 В
Цифровые входные/выходные выводы 14
Аналоговые входные выводы 6
Флэш-память 32 Кбайт, из которых 0,5 Кбайт используются загрузчиком
Оперативная память SRAM 2 Кбайт
Энергонезависимая память EEPROM 1 Кбайт
Тактовая частота 16 МГц

Чем отличается аналоговый сигнал от цифрового

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

Цифровой сигнал передается в виде единиц и нулей, для компьютеров и цифровой техники это проще реализовать (есть сигнал или нет сигнала). Для оперативной памяти в компьютерах используют конденсаторы, один заряженный конденсатор — 1 бит. На флеш-памяти используют транзисторы с плавающим затвором.

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

Квантование — разбиение непрерывной величины на интервалы

Arduino Due

Arduino Due – одна из самых популярных плат.

Работает на 32-битном процессоре с частотой 84мГц.

На борту установлен AT91SAM3X8E контроллер, во многом превосходящий все вышеперечисленные платы. 512 кб постоянной памяти, 96 кб оперативной. Имеются 54 цифровых пина, 12 из которых могут использовать ШИМ. Также есть пара 12-битных цифро-аналоговых преобразователей: они позволяют микропроцессору выдавать звук без дополнительных расширений.

Кстати, распиновку всех плат Ардуино вы можете найти на нашем сайте в этом разделе.

Arduino Due и Arduino Mega 2560 очень похожи друг на друга, поэтому может показаться, что и шилды для этих плат взаимозаменяемые, но на самом деле это не так. Логические уровни на Mega 5-вольтовые, тогда как на Due – 3,3 вольта. Будьте осторожны с расширениями плат, в противном случае Due безвозвратно сгорит.

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

LCD дисплей 16×2

LCD дисплей 16×2 – это широко используемый во встраиваемых приложениях дисплей. Ниже приведено краткое описание выводов и работы LCD дисплея. В нем используется два важных регистра. Это регистр данных и регистр команд. Регистр команд используется для отправки таких команд как очистка дисплея, перемещение курсора и так далее. Регистр данных используется для отправки данных, которые должны быть отображены на LCD дисплее. Ниже приведена таблица описания выводов символьного LCD дисплея 16×2.

Назначение выводов LCD дисплея на HD44780
Номер вывода Обозначение Вход/выход Назначение вывода
1 Vss Земля
2 Vdd Питание +5В
3 Vee Средний вывод потенциометра (для регулировки контрастности)
4 RS вход Выбор регистра (RS=0 для регистра команд, RS=1 для регистра данных)
5 RW вход Чтение/Запись (RW=0 для записи, RW=1 для чтения)
6 E вход/выход Включение
7 D0 вход/выход 8-разрядная шина данных (младший значащий бит)
8 D1 вход/выход 8-разрядная шина данных
9 D2 вход/выход 8-разрядная шина данных
10 D3 вход/выход 8-разрядная шина данных
11 D4 вход/выход 8-разрядная шина данных
12 D5 вход/выход 8-разрядная шина данных
13 D6 вход/выход 8-разрядная шина данных
14 D7 вход/выход 8-разрядная шина данных (старший значащий бит)
15 A +4.2–5 В для подсветки
16 K земля

Типовая транзакция

Устройства, связанные через I2C, должны поддерживать определенную последовательность событий. Каждое событие соответствует определенному способу управления линиями тактовой синхронизации (SCK) и данных (SDA); как обсуждалось в статьях, приведенных в списке «Вспомогательная информация», эти два сигнала являются единственным средством, с помощью которого устройства на шине могут обмениваться информацией. Мы будем рассматривать одну информационную последовательность как «транзакцию»; это слово более уместно, чем «передача», поскольку каждая транзакция включает в себя как переданные данные, так и полученные данные, хотя в некоторых случаях единственными полученными данными являются бит подтверждения (ACK) или не-подтверждения (NACK), детектируемые ведущим устройством. Следующая временная диаграмма показывает типовую транзакцию I2C.

Временная диаграмма типовой транзакции I2C

Обратите внимание на следующее:

  • Пунктирная линия, соответствующая длительности логической единицы в тактовом сигнале, напоминает нам, что логическая единица (и для SCL, и для SDA) является «рецессивным» состоянием – другими словам, сигнал доходит до высокого логического уровня с помощью подтягивающего резистора. «Доминантное» состояние – это логический ноль, потому что сигнал будет на низком логическом уровне только тогда, когда устройство действительно приводит его к состоянию логического нуля.
  • Транзакция начинается со «стартового бита». Каждая I2C транзакция должна начинаться со стартового бита, который определятся как спадающий фронт на линии SDA, в то время как линия SCL находится в состоянии логической единицы.
  • Транзакция заканчивается «стоповым битом», определяемым как нарастающий фронт на линии SDA, в то время как линия SCL находится в состоянии логической единицы. Транзакции I2C должны заканчиваться стоповым битом; однако, как будет рассказано позже, на шине могут появиться несколько стартовых битов до того, как будет сгенерирован стоповый бит.
  • Данные действительны, когда на линии синхронизации установлена логическая единица, и изменяют состояние, когда на линии синхронизации установлен логический ноль; цифровые системы связи обычно ориентируются на изменения состояния на линиях, поэтому на практике данные считываются по нарастающему фрону на линии синхронизации и обновляются по спадающему фронту на линии синхронизации.
  • Обмен информацией происходит по одному байту за раз, начиная со старшего значащего бита; и за каждым байтом следует ACK или NACK.
  • Вы можете ожидать, что ACK будет обозначаться логической единицей, а NACK – логическим нулем, но в данном случае это не так. ACK соответствует логическому нулю, а NACK – логической единице. Это необходимо, потому что логическая единица является рецессивным состоянием – если ведомое устройство не работает, то сигнал, соответственно, будет поднят до NACK. Аналогично, ACK (указывается доминантным логическим нулем) может быть передан только в том случае, если устройство работает и готово продолжить транзакцию.

Следующий список описывает последовательность событий в вышеуказанной транзакции:

  1. Ведущее устройство генерирует стартовый бит, чтобы начать транзакцию.
  2. Ведущее устройство передает 7-битный адрес, соответствующий ведомому устройству, с которым оно хочет установить соединение.
  3. Последним битом в первом однобайтовом сегменте является индикатор чтения/записи. Мастер устанавливает этот бит в логическую единицу, если он хочет считывать данные с ведомого устройства, или в логический ноль, если хочет записать данные в ведомое устройство.
  4. Следующий байт – это первый байт данных. Он приходит либо от ведущего, либо от ведомого устройства, в зависимости от состояния бита чтения/записи. Как обычно, у нас есть 8 бит данных, начинающихся со старшего значащего бита.
  5. За байтом данных следует ACK или NACK, сгенерированный ведущим устройством, если это транзакция чтения, или ведомым устройством, если это транзакция записи. ACK и NACK могут означать разные вещи в зависимости от прошивки или низкоуровневой аппаратной схемы взаимодействующих устройств. Например, мастер может использовать NACK, чтобы сказать: «это последний байт данных», или если ведомое устройство знает, сколько данных должно быть отправлено, оно может использовать ACK для подтверждения того, что данные были успешно получены.
  6. Транзакция завершается стоповым битом, сгенерированным ведущим устройством.

Светильник с управляемой яркостью Ардуино

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • потенциометр;
  • 1 светодиод и резистор 220 Ом;
  • провода «папа-папа».

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


Схема сборки светильника с управляемой яркостью

Соберите электрическую цепь, как на рисунке. Средняя ножка переменного резистора подключается к аналоговому порту A0, чтобы снимать показания напряжения. Какую из крайних ножек подключить к портам 5V и GND значения не имеет, изменится лишь направление вращения ручки потенциометра для увеличения яркости светодиода. После сборки схемы, подключите Arduino к компьютеру и загрузите скетч.

Скетч для Ардуино и потенциометра

// Присваиваем имя для пина со светодиодом (англ. «led»)
#define LED_PIN 9

// Присваиваем имя для пина с потенциометром (англ. «potentiometer»)
#define POT_PIN A0

void setup()
{
  // пин со светодиодом будет выходом (англ. «output»)
  pinMode(LED_PIN, OUTPUT);

  // пин с потенциометром будет входом (англ. «input»)
  pinMode(POT_PIN, INPUT);
  
  // Запускаем монитор последовательного порта
  // снимите комментарий // Serial.begin(9600);
}

void loop()
{
  // заявляем, что будем использовать 2 переменные - rotation и brightness
  // хранить в переменных будем только целые числа (англ. «integer»)
  int rotation, brightness;  

  // rotation равна значениям с потенциометра в интервале от 0 до 1023
  rotation = analogRead(POT_PIN);

  // переменная brightness будет равна rotation делённое на 4
  // brightness может быть только целым числом, дробная часть будет отброшена
  // в итоге переменная brightness будет находится в пределах от 0 до 255
  brightness = rotation / 4;

  // выдаём напряжение, рассчитанное по формуле brightness = rotation / 4
  analogWrite(LED_PIN, brightness);
  
  // Выдаем значение rotation на монитор последовательного порта
  // снимите комментарий // Serial.println(rotation);
  // снимите комментарий // delay(1000);
}

Пояснения к коду:

  1. с помощью директивы мы заменили номер пина 9 на имя , аналоговому входу мы задали имя ;
  2. локальная переменная пропорциональна напряжению и находится в интервале от 0 до 1023 (минимальное и максимальное значение АЦП);
  3. переменная равна делённое на 4 и находится в пределах от 0 до 255 (минимальное и максимальное значение аналогового входа).

Итог

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

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

На нашем портале можно найти несколько уроков, выполнение которых зависит от понимания темы АЦП: датчик температуры, ёмкостный датчик, фоторезистор, потенциометр и аналоговый джойстик

А в совокупности с еще одной важной темой — ШИМ, применение АЦП позволит создать диммер светодиодной лампы и регулятор хода двигателя. Успехов!

+1

Аналоговый ввод/вывод

Функция analogRead()

Описание

Считывает значение из указанного аналогового пина.

На большинстве плат содержится многоканальный 10-битный аналого-цифровой преобразователь, поэтому результатом будет значение в приделах от 0 до 1023. На платах Arduino Due и Arduino Zero преобразователь 12-битный, но результат по-умолчанию все равно отдается в 10 битах для совместимости с другими платами. Чтобы использовать 12 бит, нужно явно указать это через вызов analogReadResolution(), тогда результат будет в пределах 0-4095.

Синтаксис

analogRead(pin)

Параметры

pin — номера аналогового пина. Для большинства плат — значение от A0 до A5, для Arduino Mini и Nano — от A0 до A7, для arduino mega — от A0 до A15

Возвращаемое значение

Целое значение в приделах от 0 до 1023 или от 0 до 4095 для плат Arduino Duo и Arduino Zero (нужна настройка)

Пример
Примечания

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

Функция analogReference()

Описание

Функция задает опорное напряжение, относительно которого происходят изменения значений аналоговых пинов. Те значения, которые возвращает функция analogRead(), как раз зависят от опорного напряжение, а также пропорционально входному напряжению.

Синтаксис

analogReference(type)

Параметры

type — используемое опорное напряжение (DEFAULT, INTERNAL, EXTERNAL)

Возвращаемое значение

нет

Пример
Примечания

Значения параметра для Arduino AVR плат (Uno, Mega и др.):

  • DEFAULT — стандартное опорное напряжение 5 В (на платформах с напряжением 5 В) или 3.3 В (на платформах с напряжением 3.3 В);
  • INTERNAL — встроенное опорное напряжение 1.1 В на микроконтроллерах ATmega168 и ATmega328 и 2.56 В на ATmega8 (не доступно на Arduino Mega);
  • EXTERNAL — внешний источник опорного напряжение, подключенный к выводу AREF (возможно от 0 В до 5 В);
  • INTERNAL1V1 — напряжение в 1.1 В (только для Arduino Mega);
  • INTERNAL2V56 — напряжение в 2.56 В (только для Arduino Mega);

Значения параметра для Arduino SAMD плат (Zero и тд.):

  • AR_DEFAULT — стандартное опорное напряжение 3.3 В;
  • AR_INTERNAL — встроенное опорное напряжение 2.23 В;
  • AR_INTERNAL1V0 — встроенное опорное напряжение 1.0 В;
  • AR_INTERNAL1V65 — встроенное опорное напряжение 1.65 В;
  • AR_INTERNAL2V23 — встроенное опорное напряжение 2.23 В;
  • AR_EXTERNAL — внешний источник опорного напряжение, подключенный к выводу AREF.

Значения параметра для Arduino SAM плат (Duo):

AR_DEFAULT — стандартное опорное напряжение 3.3 В. Для Arduino Duo доступно только это значение.

Функция analogWrite()

Описание

Функция выдает на пин аналоговую величину (ШИМ-сигнала или ШИМ-волну). Это может быть полезно например для управления яркостью светодиода или для задания скорости вращения мотора.

Могут использоваться только пины, помеченные символом «~». На Arduino Uno и на других платах на микроконтроллерах ATmega168 и ATmega328P это пины 3, 5, 6, 9, 10 и 11. На пинах 5 и 6 частота ШИМ-сигнала составляет около 980 Гц, а на остальных пинах — примерно 490 Гц. На плате Arduino Mega можно использовать пины 2–13 и 44–46. На Arduino DUE — пины 2–13, а также контакты DAC0 и DAC1. Причем DAC0 и DAC1 являются цифро-аналоговыми преобразователями и действуют как настоящие аналоговые выходы.

Перед использованием не требует вызова функции pinMode().

Синтаксис

analogWrite(pin, value)

Параметры

pin — номер пина, на который следует подать ШИМ-сигнал

value — период рабочего цикла от 0 (сигнал всегда выключен) до 255 (сигнал подан постоянно)

Возвращаемое значение

нет

Пример

Плавное мигание светодиодом:

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: