ARDUINO Цветомузыка на Arduino. Обсуждение проекта

Totkil87

✩✩✩✩✩✩✩
29 Янв 2021
7
0
так я прошивку не менял пины согласно схеме
А может хто ссылку кинуть на тестовый скетч для ленты (а то это моя первая схема на адруино)
Ну и объяснить толком как схему под этот скетч собрать может готовая статья есть а то я некогда с лентами не работал Спасибо.
 

wadimsuv

★★★✩✩✩✩
17 Ноя 2020
191
108
@Totkil87, Держи. Только в скетче укажи количество диодов, яркость, и пин куда лента подключена.
#define PIN 12
#define NUMPIXELS 120
#define BRIGHTNESS 50
 

Вложения

Diman

★★✩✩✩✩✩
20 Апр 2019
312
72
@Diman, а почему нельзя обойтись схемой попроще? Такую кто собирал, может по самой схеме покритикует?
Добавьте в неё 4 фильтра и второй канал, тогда увидите какая проще. По параметрам и схемотехнике она ущербна (ранее уже был её разбор).
 
Изменено:

novvel

★★★✩✩✩✩
29 Сен 2018
568
192
Добавь в неё 4 фильтра и второй канал, тогда увидишь какая проще. По параметрам и схемотехнике она ущербна (ранее уже был её разбор).
Ну я так и не понял, зачем вам фильтры, и так все работает же) Из минусов только кривой код как по мне.
 

Евгений Л

★✩✩✩✩✩✩
21 Июл 2020
34
11
@Diman, а почему нельзя обойтись схемой попроще? Такую кто собирал, может по самой схеме покритикует?
Полпробую ответить сразу на все вопросы которые вызывают обсуждения в этой ветке по схемам АРУ и Фильтров.Нужно не нужно и зачем.
Буду выражать свое собственное мнение, никому его не навязываю. Буковок будет много но попытаюсь доходчиво все обьяснить. Может у кого родятся какие идеи. Итак:
1. У нас 2 входа аналогового сигнала А1 (А2 для простоты не рассматриваем там все аналогично) который меряет АМПЛИТУДУ сигнала и формирует яркость светодиодов или длинну (количество) горящих ( в разных режимах ) и второй А3 - который анализирует частоту поданного сигнала.
2. Сйчас буду описывать только то что касается входа А1 ( амплитуда). Причем предельно упрощенно для понимания.
3. При превышении амплитуды сигнала на входе А1 некоторого значения опорного напряжения REF начинают светится светодиоды или формироватся длина светящейся линии пропорциональная величине превышения входного сигнала над опорным напряжением. Чем больше превышение тем ярче или длиннее линейка светодиодов. (на самом деле конечно все сложнее: 100 измерений, нахождение среднего, вычитание порга шумов, возведение в степень и т.д. Но это к програмистам я в этом понимаю мало) Но суть от этого не меняется.
4. Теперь немного теории: Человеческое ухо слышит уровень сигнала где то от 30 Дб до... пока не лопнут ушные перепонки 150 Дб. т.е диапазон120 Дб (150 - 30) или 1 000 000 раз!!! Но это крайности. TNX рекомендует воспроизводить музыку, кино с уровнем 80 Дб минимальная громкость хорошей акустики 40 Дб Итого диапазон 40 Дб (80-40) или 100 раз ( уже приемлимо). Но динамический диапазон светодиода (минимальная - максимальная яркость) максимум 25 Дб. В реальности ( у китайских дай бог 20 Дб) или 10 раз. Таким образом если мы настроим начальное свечение светодиода на самый тихий звук (40 Дб) то до 60 Дб звука - светодиод будет пропорционально зажигатся. но от 60 Дб и выше яркость будет неизменна (она уже максимальная) Если мы настроим от 60 до 80 Дб То тихие звуки до 60 Дб будут в полной темноте и только дальше начнется зажигание светодиодов. Что собственно мы и видим либо все засвечено, либо моргает изредка. ( а тут еще какой то програмный алгоритм усреднения)
5. Вот для этого и Нужен АРУ который сожмет динамический диапазон (причем только для ЦМУ а не для звука) входного сигнала и в идеальных условиях глубина АРУ тоже понятна - 20 Дб, а не как не 40 и больше ( при 40 Дб у нас вообще ничего мигать не будет ) сигнал на выходе по амплитуде будет неизменен!!!

См первое вложение верх - сигнал на входе, низ сигнал после АРУ,1 - начало ограничения ару 2. сигнал на входе растет на выходе неизменен, 3 ситуация такая же. От линии 1 и далее вправо никакой реакции на изменение входного сигнала не будет. Налицо излишняя глубина АРУ.

6. Но и тут не все так просто - не у всех есть системы TNX а значит у них динамический диапазон будет меньше а значит и глубину АРУ надо делать меньше, а вдруг кто захочет с микрофона взять сигнал - там еще меньше динамический диапазон да еще и АРУ встроеный (поэтому у многих от микрофона эта ЦМУ работает лучше), А может кто для вечеринок делает - там уровень громкости и до 110 Дб доходить может а значит и глубина АРУ гораздо выше должна быть. Поэтому для универсальности есть прямой смысл ввести регулировку глубины АРУ.
7. Самое интересное, что проблемы только начинаются - TNX регламентирует уровень сигнала на линейном входе\выходе 250 мВ. А со звуковой карты компьютера может быть от 200 мВ до 1 в , а с DVD проигрователя 750 мВ. А значит нужно вводить порог срабатывания АРУ Есть еще и другое: Многие наверно замечали что с одного и того же источника одна музыка звучит достаточно громко, а другая совсем тихо (сейчас нет стандарта на уровень записи на носитель).. ( конечно можно ввести регулятор уровня и каждый раз бегать к нему - но как то влом) но Можно поступить подругому ввести регулятор соотношения полезного сигнала и бегать не придется.
8. Теперь посложнее: Наша проблема низкое напряжение питания. МАХ амплитуду которую мы можем получить это 5 В на входе. Исходя из того что бы не упиратся в клиппинг - ограничим 4,8 В ( не много операционников при однополярном питании могут выдать такую амплитуду) Зачем нужна МАХ амплитуда расскажу чуть позже. Итак 1 ограничение - операционники райл ту райл. Или транзисторы ( и то не все). Пока не поменяется програмное обеспечение ( скетч) обрабатывающий амплитуду имеем: Условный "0" 2,5 в Опорное напряжение чуть выше -2,7 в . Что получается: 4,8- 2,7=2,2 В полезного сигнала да еще минус програмный шум (где 4 раза на 0 в скетче) Итого изменение полезного сигнала, на которое будет реагировать ЦМУ всего около 2 в ( а как я писал выше динамический диапазон музыки 40 Дб - 100 раз) таким образом наша ЦМУ должна реагировать на каждые 0,02 в ( 2/100) сомнительная преспектива оцифровки в ардуино. А при глубине АРУ в 20 Дб ( 10 раз) Нужно что бы Ардуинка реагировала на 2/10=0,2 в - я думаю что вполне.... Вот вам второй аргумент в пользу АРУ.
9. Теперь еще сложнее: Реальный звуковой сигнал это сложный сигнал в котором различные частоты накладываются друг на друга каждый со своей амплитудой хаотично образуя пики и спады см вторую вкладку.
Мы видим что все пики после АРУ урезаны и информации выше уровня 0,5 нет никакой.
Для понимания буду максимально все упрощать: Если не принять мер то АРУ мгновенно уменьшит пики суммарного сигнала а значит и полезные сигналы из которых этот суммарный состоял.
Как это происходит см. третью вкладку.
А это нам не нужно. ( но тут близкие по частоте сигналы для более яркого понимания.) Но такое же роисходит и с разнесенными по частоте сигналами
см четвертую вкладку.
А значит эти частоты ввиду суммирования ( даже при достаточной амплитуде ) отображатся не будут. А значит в АРУ нужно вводить регулятор скорости реакции АРУ (для пропуска редких пиков) и постоянную времени АРУ с регулировкой для усреднения сигнала (аналогично делается в скетче - среднее из 100 измерений) Но в АРУ это более гибко.

Вот и получается что простенькая АРУ нормально работать не будет. Конечно все это лучше сделать все програмно, но тут я не спец.

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

Для особо продвинутых - объяснял с большими упрощениями для понимания сути.
 

Вложения

Diman

★★✩✩✩✩✩
20 Апр 2019
312
72
@Евгений Л, А как же быть, если сейчас мы (или вы) используем источник с сигналом 0,1В а потом переключились или повысили уровень сигнала до 2В. Это уже в 20 раз разница (26Дб)!!! Вы всё в кучу смешали не учитывая многих факторов.
( при 40 Дб у нас вообще ничего мигать не будет ) сигнал на выходе по амплитуде будет неизменен!!
Вообще-то у АРУ есть настраиваемые параметры, такие как время реакции и время восстановления (к вашей копилке знаний). И на соотношения амплитуд частот АРУ не влияет, она регулирует общий уровень сигнала.
 
Изменено:

Евгений Л

★✩✩✩✩✩✩
21 Июл 2020
34
11
А как же быть, если сейчас мы (или вы) используем источник с сигналом 0,1В а потом переключились или повысили уровень сигнала до 2В. Это уже в 20 раз разница (26Дб)!!! Вы всё в кучу смешали не учитывая многих факторов.
Я Вас как супер знатока пожплуй спровацирую - покажите линиию ( нарисуйте ) что называется уровнем входного сигнала?
 

Вложения

Diman

★★✩✩✩✩✩
20 Апр 2019
312
72
Условный "0" 2,5 в Опорное напряжение чуть выше -2,7 в . Что получается: 4,8- 2,7=2,2 В полезного сигнала да еще минус програмный шум (где 4 раза на 0 в скетче)
Опорное должно быть в 2 раза выше напр.смещения. Где вы такие значения набрали?
 

Евгений Л

★✩✩✩✩✩✩
21 Июл 2020
34
11
@Евгений Л, Что вам даст эта линия? Разве что среднеквадратичное значение в какой-то промежуток времени.
так что же 0,1 или 2 в которые уровень входного синала?
Где они на графике? Простой вопрос. Сигнала вообще может не быть а параметр выходного сигнала определяется для каждого изделия - так все же где он?
,
 

Diman

★★✩✩✩✩✩
20 Апр 2019
312
72
так что же 0,1 или 2 в которые уровень входного синала?
Где они на графике? Простой вопрос. Сигнала вообще может не быть а параметр выходного сигнала определяется для каждого изделия - так все же где он?
,
Прежде чем я отвечу, вы ответьте на прежние вопросы. А то получается пишите всякую чушь на которую сами не можете ответить.
Вы вообще о чем? какон напряжение смещения? Смещение где? Кого мы смещаем?
Вижу с пониманием работы АЦП у вас беда.
 
Изменено:

Евгений Л

★✩✩✩✩✩✩
21 Июл 2020
34
11
Вижу с пониманием работы АЦП у вас беда.
Вот вот именно - Может Вы поделитесь как работает АЦП . А то ведь действительно беда. Очень ждем. Всем польза будет.

Насколько я вас понял, если "Сигнала вообще может не быть" значит дискотека отменяется? :) Продолжайте дальше свою мысль...
Все же на вопрос то ответте. Поделитесь с людьми? Не держите свои познания при себе на то он и форум создан
 

Diman

★★✩✩✩✩✩
20 Апр 2019
312
72
Может Вы поделитесь как работает АЦП .
А книги для кого пишут? Если в интернете лень скачать, то сходите на досуге в библиотеку. Я уж точно не буду заниматься вашим обучением, тем более сам не всё знаю...
 
Изменено:

technotrasher

★★★★✩✩✩
14 Ноя 2019
508
227
Полпробую ответить сразу на все вопросы которые вызывают обсуждения в этой ветке по схемам АРУ и Фильтров.Нужно не нужно и зачем.
Буду выражать свое собственное мнение, никому его не навязываю. Буковок будет много но попытаюсь доходчиво все обьяснить. Может у кого родятся какие идеи. Итак:
1. У нас 2 входа аналогового сигнала А1 (А2 для простоты не рассматриваем там все аналогично) который меряет АМПЛИТУДУ сигнала и формирует яркость светодиодов или длинну (количество) горящих ( в разных режимах ) и второй А3 - который анализирует частоту поданного сигнала.
2. Сйчас буду описывать только то что касается входа А1 ( амплитуда). Причем предельно упрощенно для понимания.
3. При превышении амплитуды сигнала на входе А1 некоторого значения опорного напряжения REF начинают светится светодиоды или формироватся длина светящейся линии пропорциональная величине превышения входного сигнала над опорным напряжением. Чем больше превышение тем ярче или длиннее линейка светодиодов. (на самом деле конечно все сложнее: 100 измерений, нахождение среднего, вычитание порга шумов, возведение в степень и т.д. Но это к програмистам я в этом понимаю мало) Но суть от этого не меняется.
4. Теперь немного теории: Человеческое ухо слышит уровень сигнала где то от 30 Дб до... пока не лопнут ушные перепонки 150 Дб. т.е диапазон120 Дб (150 - 30) или 1 000 000 раз!!! Но это крайности. TNX рекомендует воспроизводить музыку, кино с уровнем 80 Дб минимальная громкость хорошей акустики 40 Дб Итого диапазон 40 Дб (80-40) или 100 раз ( уже приемлимо). Но динамический диапазон светодиода (минимальная - максимальная яркость) максимум 25 Дб. В реальности ( у китайских дай бог 20 Дб) или 10 раз. Таким образом если мы настроим начальное свечение светодиода на самый тихий звук (40 Дб) то до 60 Дб звука - светодиод будет пропорционально зажигатся. но от 60 Дб и выше яркость будет неизменна (она уже максимальная) Если мы настроим от 60 до 80 Дб То тихие звуки до 60 Дб будут в полной темноте и только дальше начнется зажигание светодиодов. Что собственно мы и видим либо все засвечено, либо моргает изредка. ( а тут еще какой то програмный алгоритм усреднения)
5. Вот для этого и Нужен АРУ который сожмет динамический диапазон (причем только для ЦМУ а не для звука) входного сигнала и в идеальных условиях глубина АРУ тоже понятна - 20 Дб, а не как не 40 и больше ( при 40 Дб у нас вообще ничего мигать не будет ) сигнал на выходе по амплитуде будет неизменен!!!

См первое вложение верх - сигнал на входе, низ сигнал после АРУ,1 - начало ограничения ару 2. сигнал на входе растет на выходе неизменен, 3 ситуация такая же. От линии 1 и далее вправо никакой реакции на изменение входного сигнала не будет. Налицо излишняя глубина АРУ.

6. Но и тут не все так просто - не у всех есть системы TNX а значит у них динамический диапазон будет меньше а значит и глубину АРУ надо делать меньше, а вдруг кто захочет с микрофона взять сигнал - там еще меньше динамический диапазон да еще и АРУ встроеный (поэтому у многих от микрофона эта ЦМУ работает лучше), А может кто для вечеринок делает - там уровень громкости и до 110 Дб доходить может а значит и глубина АРУ гораздо выше должна быть. Поэтому для универсальности есть прямой смысл ввести регулировку глубины АРУ.
7. Самое интересное, что проблемы только начинаются - TNX регламентирует уровень сигнала на линейном входе\выходе 250 мВ. А со звуковой карты компьютера может быть от 200 мВ до 1 в , а с DVD проигрователя 750 мВ. А значит нужно вводить порог срабатывания АРУ Есть еще и другое: Многие наверно замечали что с одного и того же источника одна музыка звучит достаточно громко, а другая совсем тихо (сейчас нет стандарта на уровень записи на носитель).. ( конечно можно ввести регулятор уровня и каждый раз бегать к нему - но как то влом) но Можно поступить подругому ввести регулятор соотношения полезного сигнала и бегать не придется.
8. Теперь посложнее: Наша проблема низкое напряжение питания. МАХ амплитуду которую мы можем получить это 5 В на входе. Исходя из того что бы не упиратся в клиппинг - ограничим 4,8 В ( не много операционников при однополярном питании могут выдать такую амплитуду) Зачем нужна МАХ амплитуда расскажу чуть позже. Итак 1 ограничение - операционники райл ту райл. Или транзисторы ( и то не все). Пока не поменяется програмное обеспечение ( скетч) обрабатывающий амплитуду имеем: Условный "0" 2,5 в Опорное напряжение чуть выше -2,7 в . Что получается: 4,8- 2,7=2,2 В полезного сигнала да еще минус програмный шум (где 4 раза на 0 в скетче) Итого изменение полезного сигнала, на которое будет реагировать ЦМУ всего около 2 в ( а как я писал выше динамический диапазон музыки 40 Дб - 100 раз) таким образом наша ЦМУ должна реагировать на каждые 0,02 в ( 2/100) сомнительная преспектива оцифровки в ардуино. А при глубине АРУ в 20 Дб ( 10 раз) Нужно что бы Ардуинка реагировала на 2/10=0,2 в - я думаю что вполне.... Вот вам второй аргумент в пользу АРУ.
9. Теперь еще сложнее: Реальный звуковой сигнал это сложный сигнал в котором различные частоты накладываются друг на друга каждый со своей амплитудой хаотично образуя пики и спады см вторую вкладку.
Мы видим что все пики после АРУ урезаны и информации выше уровня 0,5 нет никакой.
Для понимания буду максимально все упрощать: Если не принять мер то АРУ мгновенно уменьшит пики суммарного сигнала а значит и полезные сигналы из которых этот суммарный состоял.
Как это происходит см. третью вкладку.
А это нам не нужно. ( но тут близкие по частоте сигналы для более яркого понимания.) Но такое же роисходит и с разнесенными по частоте сигналами
см четвертую вкладку.
А значит эти частоты ввиду суммирования ( даже при достаточной амплитуде ) отображатся не будут. А значит в АРУ нужно вводить регулятор скорости реакции АРУ (для пропуска редких пиков) и постоянную времени АРУ с регулировкой для усреднения сигнала (аналогично делается в скетче - среднее из 100 измерений) Но в АРУ это более гибко.

Вот и получается что простенькая АРУ нормально работать не будет. Конечно все это лучше сделать все програмно, но тут я не спец.

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

Для особо продвинутых - объяснял с большими упрощениями для понимания сути.
Огромная благодарность за подробное объяснение!!!!!
 

Diman

★★✩✩✩✩✩
20 Апр 2019
312
72
@technotrasher, Если бы ещё написанное им соответствовало действительности...
 
Изменено:

novvel

★★★✩✩✩✩
29 Сен 2018
568
192
Ну нам бы по хорошему вообще избавится от второго входа который для измерения уровня, мы же по идее можем измерять уровень из частотного входа как на анализаторе спектра и делать какое то усреднение или фильтрацию по частоте что бы не использовать лишние частоты для VU метра. Я и все таки поддержу тех кто за ограничение диапазона в 9кгц или около того.
 
  • Лойс +1
Реакции: technotrasher

technotrasher

★★★★✩✩✩
14 Ноя 2019
508
227
Ну нам бы по хорошему вообще избавится от второго входа который для измерения уровня, мы же по идее можем измерять уровень из частотного входа как на анализаторе спектра и делать какое то усреднение или фильтрацию по частоте что бы не использовать лишние частоты для VU метра. Я и все таки поддержу тех кто за ограничение диапазона в 9кгц или около того.
но это именно к программисту.
 

Евгений Л

★✩✩✩✩✩✩
21 Июл 2020
34
11
Задам вопрос : Своими суждениями по применению фильтров делиться ? Интерес есть? Или пойду вискарь пить. А то опять буковок много писать придется. что бы зря не было.
 
Изменено:

technotrasher

★★★★✩✩✩
14 Ноя 2019
508
227
Задам вопрос : Своими суждениями по применению фильтров делиться ? Интерес есть? Или пойду вискарь пить. А то опять буковок много писать придется. что бы зря не было.
ДА! мне интересно! да и думаю кто хочет тоже прочитает и подумает.
 
  • Лойс +1
Реакции: Fil61

Slenk

★★★★★★✩
21 Янв 2020
382
591
34
Краснодар
@Евгений Л, интересно. В во всяких резисторах и транзисторах я не соображаю, но вот по части "логики" и в частности п.3 у Вас есть ряд несоответствий.
“Аналоговые” пины могут принимать напряжение от 0 (GND) до опорного напряжения и преобразовывать его в цифровое значение, просто в какие-то условные единицы. АЦП у нас имеет разрядность в 10 бит, т.е. мы получаем измеренное напряжение в виде числа от 0 до 1023. Функция, которая оцифровывает напряжение, называется analogRead(pin), данная функция принимает в качестве аргумента номер аналогового пина и возвращает полученное значение. Сам пин должен быть сконфигурирован как INPUT (вход), напомню, что по умолчанию все пины так и настроены.
Опорное напряжение играет главную роль в измерении аналогового сигнала, потому что именно от него зависит максимальное измеряемое напряжение и вообще возможность и точность перевода полученного значения 0-1023 в Вольты. Изучим следующую функцию –analogReference(mode), где mode:
  • DEFAULT
    : опорное напряжение равно напряжению питания МК. Активно по умолчанию
  • INTERNAL
    : встроенный источник опорного на 1.1V для ATmega168 или ATmega328P и 2.56V на ATmega8
  • INTERNAL1V1
    : встроенный источник опорного на 1.1V (только для Arduino Mega)
  • INTERNAL2V56
    : встроенный источник опорного на 2.56V (только для Arduino Mega)
  • EXTERNAL
    : опорным будет считаться напряжение, поданное на пин AREF
После изменения источника опорного напряжения (вызова analogReference() ) первые несколько измерений могут быть нестабильными (сильно шумными).
Значение 1023 функции analogRead() будет соответствовать выбранному опорному напряжению или напряжению выше его, но не выше 5.5V, что спалит плату. То есть при режиме DEFAULT мы можем оцифровать напряжение от 0 до напряжения питания. Если напряжение питания 4.5 Вольта, и мы подаём 4.5 Вольт – получим оцифрованное значение 1023. Если подаём 5 Вольт – опять же получим 1023, т.к. выше опорного. Это правило работает и дальше, главное не превышать 5.5 Вольт. Как измерять более высокое напряжение (12 Вольт например) я расскажу в отдельном уроке.
Что касается точности: при питании от 5V и режиме
DEFAULT
мы получим точность измерения напряжения (5 / 1024) ~4.9 милливольт. Поставив
INTERNAL
мы можем измерять напряжение от 0V до 1.1V с точностью (1.1 / 1024) ~0.98 милливольт. Весьма неплохо, особенно если баловаться с делителем напряжения.
Что касается внешнего источника опорного напряжения. Нельзя использовать напряжение меньше 0V или выше 5.5V в качестве внешнего опорного в пин AREF. Также при использовании режима
EXTERNAL
нужно вызвать
analogReference(EXTERNAL)
до вызова функции
analogRead()
, иначе можно повредить микроконтроллер. Можно подключить опорное в пин AREF через резистор на ~5 кОм, но так как вход AREF имеет собственное сопротивление в 32 кОм, реальное опорное будет например 2.5 * 32 / (32 + 5) = ~2.2V.
Тут полная статья: Гайвер

Ну и по поводу "диапазона" светодиодов - тоже я не совсем понял.

Если вкратце, смысл такой:
1. Ардуина может обработать диапазон сигнала от 0 до 5 вольт с разрешением 1024 шага.
2. При помощи опорного напряжения можно сделать например от 0 до 2 вольт с тем же разрешением.
3. Что программно делать с этим значением от 0 до 1023 - это уже дело десятое. Масштабировать, растянуть, сузить, обрезать низ (шум), обрезать верх (хз зачем, программный дистёршн типа) и т.д.
А у Вас получается всё с точностью до наоборот...

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

kostyamat

★★★★★★✩
29 Окт 2019
1,098
632
Зачем вам компрессор? Тут он скорее зло. Второе, чем не устраивает MAX9814? У него и gain и АРУ настраиваемые? И средняя точка, все как вам надо, и стоит копейки.
Неделю тут уже флудом занимаетесь, и все безрезультатно.
 
Изменено:
  • Лойс +1
Реакции: novvel

Евгений Л

★✩✩✩✩✩✩
21 Июл 2020
34
11
@Евгений Л, интересно. В во всяких резисторах и транзисторах я не соображаю, но вот по части "логики" и в частности п.3 у Вас есть ряд несоответствий.
“Аналоговые” пины могут принимать напряжение от 0 (GND) до опорного напряжения и преобразовывать его в цифровое значение, просто в какие-то условные единицы. АЦП у нас имеет разрядность в 10 бит, т.е. мы получаем измеренное напряжение в виде числа от 0 до 1023. Функция, которая оцифровывает напряжение, называется analogRead(pin), данная функция принимает в качестве аргумента номер аналогового пина и возвращает полученное значение. Сам пин должен быть сконфигурирован как INPUT (вход), напомню, что по умолчанию все пины так и настроены.
Опорное напряжение играет главную роль в измерении аналогового сигнала, потому что именно от него зависит максимальное измеряемое напряжение и вообще возможность и точность перевода полученного значения 0-1023 в Вольты. Изучим следующую функцию –analogReference(mode), где mode:
  • DEFAULT
    : опорное напряжение равно напряжению питания МК. Активно по умолчанию
  • INTERNAL
    : встроенный источник опорного на 1.1V для ATmega168 или ATmega328P и 2.56V на ATmega8
  • INTERNAL1V1
    : встроенный источник опорного на 1.1V (только для Arduino Mega)
  • INTERNAL2V56
    : встроенный источник опорного на 2.56V (только для Arduino Mega)
  • EXTERNAL
    : опорным будет считаться напряжение, поданное на пин AREF
После изменения источника опорного напряжения (вызова analogReference() ) первые несколько измерений могут быть нестабильными (сильно шумными).
Значение 1023 функции analogRead() будет соответствовать выбранному опорному напряжению или напряжению выше его, но не выше 5.5V, что спалит плату. То есть при режиме DEFAULT мы можем оцифровать напряжение от 0 до напряжения питания. Если напряжение питания 4.5 Вольта, и мы подаём 4.5 Вольт – получим оцифрованное значение 1023. Если подаём 5 Вольт – опять же получим 1023, т.к. выше опорного. Это правило работает и дальше, главное не превышать 5.5 Вольт. Как измерять более высокое напряжение (12 Вольт например) я расскажу в отдельном уроке.
Что касается точности: при питании от 5V и режиме
DEFAULT
мы получим точность измерения напряжения (5 / 1024) ~4.9 милливольт. Поставив
INTERNAL
мы можем измерять напряжение от 0V до 1.1V с точностью (1.1 / 1024) ~0.98 милливольт. Весьма неплохо, особенно если баловаться с делителем напряжения.
Что касается внешнего источника опорного напряжения. Нельзя использовать напряжение меньше 0V или выше 5.5V в качестве внешнего опорного в пин AREF. Также при использовании режима
EXTERNAL
нужно вызвать
analogReference(EXTERNAL)
до вызова функции
analogRead()
, иначе можно повредить микроконтроллер. Можно подключить опорное в пин AREF через резистор на ~5 кОм, но так как вход AREF имеет собственное сопротивление в 32 кОм, реальное опорное будет например 2.5 * 32 / (32 + 5) = ~2.2V.
Тут полная статья: Гайвер

Ну и по поводу "диапазона" светодиодов - тоже я не совсем понял.

Если вкратце, смысл такой:
1. Ардуина может обработать диапазон сигнала от 0 до 5 вольт с разрешением 1024 шага.
2. При помощи опорного напряжения можно сделать например от 0 до 2 вольт с тем же разрешением.
3. Что программно делать с этим значением от 0 до 1023 - это уже дело десятое. Масштабировать, растянуть, сузить, обрезать низ (шум), обрезать верх (хз зачем, программный дистёршн типа) и т.д.
А у Вас получается всё с точностью до наоборот...

П.С. мне тоже интересно почитать продолжение, но плиз с учетом моих замечаний. Или ткните носом где я может не прав.
Я уже начал писать и даже картинку приготовил но нашел несоответствие в описании алгоритма а именно:
“Аналоговые” пины могут принимать напряжение от 0 (GND) до опорного напряжения и преобразовывать его в цифровое значение,
Значение 1023 функции analogRead() будет соответствовать выбранному опорному напряжению или напряжению выше его, но не выше 5.5V ну и далее по тексту.
Где правильно?
Всю жизнь было что оцифровка начинается ОТ опорного напряжения, как раз что бы шумы убрать.
Картинку я все же приложу с вопросом: суммируем условное значение зеленой амплитуды( самый большой сигнал) (левый период как Вы пишите (предположим 1000 и еще какое то которое вычтем так как шумы и будет 1000) и коричневый график (средний амплитуды)( 800 и 150 будет 950) и синий самый малый ( где то 300 и 700 будет 1000)( синенькие линии (условно из пиков) вот Вам и разница в амплитуде.
Правый период Как всю жизнь АЦП работал - зеленый значение 1000 коричневый 700 синий 200.( а отрицательную волну не берем так что суммировать все с "0") мне кажется как то ближе к правде
Да и схема приведенная с потенциометром и описание говорит, что мы все таки ОТ и выше опорного пляшем а не до. В противном случае ногу потенциометра нужно было бы подключать к AREF а не к Uпит.

Я УБЕЖДЕН что фраза ]“Аналоговые” пины могут принимать напряжение от 0 (GND) до опорного" ошибка - в ардуине обычные электронные компоненты. Я уверен, что не создан такой компаратор (из уровня цены ардуинки) который бы переключался с перепадом 1мВ (1 в /1000 значений)
Вот еще фраза говорящаяя о другом:

Что касается точности: при питании от 5V и режиме
DEFAULT
мы получим точность измерения напряжения (5 / 1024) ~4.9 милливольт.
Короче надо эксперементировать, а может причину нестабильности нашли :)

Вот еще нашел: В Arduino Ethernet есть 8 аналоговых входов, каждый из которых может представить аналоговое напряжение в виде 10-битного числа (1024 различных значения). По умолчанию, измерение напряжения осуществляется относительно диапазона от 0 до 5 В. Тем не менее, верхнюю границу этого диапазона можно изменить, используя вывод AREF и функцию analogReference(). Помимо этого, некоторые из выводов имеют дополнительные функции:
 

Вложения

Изменено:
  • Лойс +1
Реакции: technotrasher

novvel

★★★✩✩✩✩
29 Сен 2018
568
192
@Евгений Л, в даташите все описано же....зачем полемику лишнюю разводить?


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

Ну и еще что то нарыл в инете: "Последний параметр, влияющий на точность измерения это внутреннее сопротивление источника сигнала. Разработчики микроконтроллеров ATmega определили, что для сохранения максимальной точности внутреннее сопротивление источника сигнала на аналоговом входе не должно превышать 10 кОм.
В частности, это требование должно быть учтено при использовании на аналоговых входах платы Ардуино резисторных делителей. Эквивалентное сопротивление делителя должно быть не более 10 кОм."

Только не знаю, зачем нам вообще точность в ЦМУ)) у нас проблема то в основном не в точности измерений напряжений и частот, а в кривоватой схеме и коде.
 
Изменено:
  • Лойс +1
Реакции: Slenk и kostyamat