Arduino. Изучаем вместе

Всё о ЧПУ (CNC). Компоненты, станки, программы.
Аватара пользователя
Автор темы
KimIV

Arduino. Изучаем вместе

Сообщение #41 KimIV » 04 фев 2018, 15:37

Назначение выводов платы Arduino Uno

Описывая основную плату ардуино, я как-то упустил из виду назначение выводов и прочей периферии. Надо это исправить. Хотя на самой плате все выводы подписаны, но тем не менее.

Arduino. Изучаем вместе - 08_1.png
Arduino. Изучаем вместе - 08_2.jpg


Разъём внешнего питания
Представляет собой обычный разъём под круглый Jack диаметром 5,5 мм, внешний вывод которого - минус, а внутренний - плюс питания. На этот разъём можно подавать от 6 до 20 В, рекомендуется от 7 до 12 В. А в комплекте идёт батарея типа "Крона" на 9 В.

Разъём USB
Внешне выглядит как USB-разъём, которые обычно бывают у принтеров, то есть не мини и не микро, а квадратный со скошенными верхними углами. Поэтому, если на практике для закачки скетча в память контроллера понадобится шнур подлиннее, то можно позаимствовать любой принтерный.

Кнопка Reset
Используется для перезапуска скетча, когда возникает в этом потребность. Позволяет реже перетыкать разъёмы питания и/или USB.

Выводы питания
- IOREF - Это информационный вывод и он напрямую, то есть электрически связан с выводом 7 контроллера ATmega. Используется для передачи платам расширения сообщения о том, каким напряжением запитывается контроллер ATmega. Я измерил напряжение на этот выводе при питании платы от кроны 9В и от USB-PowerBank 5 В. На IOREF всегда 5 В. Немного позже методом прозвонки обнаружил, что именно на плате Arduino Uno этот вывод электрически соединён с выводом 5V.

Arduino. Изучаем вместе - 08_3.jpg
Arduino. Изучаем вместе - 08_4.jpg
Arduino. Изучаем вместе - 08_5.jpg


- RESET - Это управляющий вход/выход и электрически связан с одним из выводов кнопки Reset. В исходном состоянии на этом выводе 5 В. Следовательно, сброс выполняется замыканием этого вывода на землю GND (общий вывод, минус питания). Причем, можно как нажатием на кнопку Reset на плате Arduino Uno передавать на платы расширения сигнал сброса, так и от плат расширения получать сигнал сброса.

Arduino. Изучаем вместе - 08_6.jpg


- 3.3V - Стабилизированное напряжение 3,3 В. Используется обычно для питания дисплейных модулей.

Arduino. Изучаем вместе - 08_7.jpg
Arduino. Изучаем вместе - 08_8.jpg
Arduino. Изучаем вместе - 08_9.jpg


- 5V - Электрически связан с выводом 4 стабилизатора питания.

Arduino. Изучаем вместе - 08_10.jpg
Arduino. Изучаем вместе - 08_11.jpg
Arduino. Изучаем вместе - 08_12.jpg


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

Arduino. Изучаем вместе - 08_13.jpg
Arduino. Изучаем вместе - 08_14.jpg
Arduino. Изучаем вместе - 08_15.jpg


Аналоговые входы
Их 6 (шесть) штук и каждый из них может использоваться не только как аналоговый вход, но и как цифровой выход. Но отличие от цифровых выводов аналоговые не нуждаются в установке режима работы, как входы или как выходы. Этот режим целиком и полностью определяется используемыми функциями:
- analogRead() - Измеряет напряжение на аналоговом входе с помощью 10-битного АЦП (аналого-цифровой преобразователь) и пропорционально преобразует его в целое число от 0 до 1024. Частота считывания около 0,1 мс.
- analogWrite() - Устанавливает либо низкий уровень на выходе, либо высокий.

Цифровые выводы
Их 14 (четырнадцать) штук и каждый из них может использоваться как вход или выход. Режим работы конкретного вывода устанавливается функцией pinMode(). Кроме того, 6 (шесть) выводов могут использоваться, как ШИМ (широтно-импульсная модуляция) выходы и их можно использовать например, для управления яркостью свечения светодиода или частоты вращения двигателя.
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.

Аватара пользователя
DOC

Arduino. Изучаем вместе

Сообщение #42 DOC » 05 фев 2018, 10:21

вот может интересно кому будет,Игорь в начало может поставишь :)
ардуино
Не стыдно быть бедным,стыдно быть дешёвым!

Next

Arduino. Изучаем вместе

Сообщение #43 Next » 07 фев 2018, 07:22

Я вот тоже Игорь думал раньше, когда MQL4 осваивал, с чем я его потом есть буду, когда надоест..Вот и пригодились знания. Давно собирался заказать этот комплекс.

Аватара пользователя
Автор темы
KimIV

Arduino. Изучаем вместе

Сообщение #44 KimIV » 08 фев 2018, 15:40

Аналоговые выводы, как цифровые выходы

Изучение аналоговых выводов - это мои первые грабли, на которые я наступил, что есть дури :crazy: А впрочем, давайте разбираться вместе и по порядку... ;)

Я хоть и имею корейские гены от деда, но по воспитанию русский до мозга костей что называется, поэтому инструкции читаю либо по диагонали, либо в самом конце, когда что-нибудь не получится или сломается :crazy: Именно поэтому я самостоятельно провёл параллель между цифровыми и аналоговыми выводами. А именно наделил аналоговые выводы способностью работать как выходы. Когда я наступил на эти грабли, я потом читал несколько разных источников. Везде аналоговые выводы упоминаются как входы, способные только принимать сигналы и работать как 10-ти битные АЦП (аналого-цифровой преобразователь). Но это было потом, а сначала я почему-то решил, что аналоговые выводы могут работать, как ШИМ-выходы и управлять яркостью свечения светодиода или скоростью вращения двигателя. Для экспериментов собрал на макетке вот такую схему.

Arduino. Изучаем вместе - 09_1.jpg
Arduino. Изучаем вместе - 09_2.jpg
Arduino. Изучаем вместе - 09_3.jpg
Arduino. Изучаем вместе - 09_4.png


И написал вот такой скетч.

Код: Выделить всё

int ledPin = A0;    // Номер аналогового вывода

void setup() {
}

void loop() {
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledPin, i);
    delay(2);
  }

  for (int i = 255; i >= 0; i--) {
    analogWrite(ledPin, i);
    delay(2);
  }
}


Программа работает следующим образом. В целочисленную переменную ledPin помещается значение константы A0. Какое это именно значение, то есть какое это число, мы выясним позже, когда будем изучать средства отладки скетчей. А сейчас пока пользуемся константами вслепую. Инициализирующая функция setup() нам не нужна, поэтому оставляем её пустой. В основной функции loop() у нас два цикла. Первый увеличивает значение счётчика i от 0 до 255 с шагом 1, а второй уменьшает значение счётчика i от 255 до 0 и тоже с шагом 1. В телах обоих циклов две одинаковые команды. Первая прописывает аналоговое значение, задаваемое счётчиком i, на вывод, номер которого указан в переменной ledPin. Вторая выполняет паузу 2 мс. Таким образом, первый цикл увеличивает значение от 0 до 255, выводимое на аналоговый вывод, а второй цикл - уменьшает от 255 до 0. Предполагалось, что светодиод (зелёный), подключенный к аналоговому выводу А0, будет постепенно набирать яркость и постепенно гаснуть, то есть плавно так мигать. Но реальность оказалась немного другой - светодиод мигал так, как-будто был подключен к цифровому выходу. Увеличение паузы до 10 мс ни к чему не привело. Светодиод всё так же резко вспыхивал и резко выключался.

После этого я убрал циклы и попробовал управлять аналоговыми выводами так же, как цифровыми, то есть устанавливать значения HIGH и LOW. Для этого переписал скетч следующим образом.

Код: Выделить всё

int ledPin = A0;    // Номер аналогового вывода

void setup() {
}

void loop() {
  analogWrite(ledPin, HIGH);
  delay(200);

  analogWrite(ledPin, LOW);
  delay(200);
}


Светодиод погас и больше не вспыхивал. Значения HIGH и LOW заменил на 255 и 0. Светодиод замигал. Теперь установил значения 128 и 127. Светодиод продолжил мигать. Вообщем, экспериментально я выяснил следующее

Аналоговые выводы работают как цифровые выходы, причём функция analogWrite() устанавливает на выходе сигнал низкого уровня при использовании значения параметра от 0 до 127 и сигнал высокого уровня при значении параметра от 128 до 32767.

Значение 32767 - это 2 в степени 15 минус единица. Я выяснил, что начиная от 2 в степени 15 (32768) и до 2 в степени 18, и наверняка и выше функция analogWrite() при использовании такого параметра на аналоговом выходе устанавливает сигнал низкого уровня.

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

Код: Выделить всё

int ledPin = A5;    // Номер аналогового вывода

void setup() {
}

void loop() {
  digitalWrite(ledPin, HIGH);
  delay(200);

  digitalWrite(ledPin, LOW);
  delay(200);
}


Светодиод стал мигать еле-еле. Яркость свечения намного меньше, чем "в полнакала". Забавный фифект, подумал я, увеличил паузу и полез мультиметром. 1,75 В на выводе... А при ярком свечении светодиода, устанавливаемого функцией analogWrite(ledPin, 128), напряжение на выводе 4,5 В. Для демонстрации фифекта и записи видео написал скетч с использованием функций digitalWrite() для аналогового вывода А5 и analogWrite() для вывода А0.

Код: Выделить всё

void setup() {
}

void loop() {
  digitalWrite(A5, HIGH);
  delay(200);
  digitalWrite(A5, LOW);

  analogWrite(A0, 128);
  delay(200);
  analogWrite(A0, 127);
}


Ну а теперь световой эффект "Переползание" на аналоговых выходах.

Код: Выделить всё

int High=255;
int Low=0;

void setup() {
}

void loop() {
  analogWrite(A0, High);
  delay(200);
  analogWrite(A1, High);
  delay(200);
  analogWrite(A2, High);
  delay(200);
  analogWrite(A3, High);
  delay(200);
  analogWrite(A4, High);
  delay(200);
  analogWrite(A5, High);
  delay(200);
  analogWrite(A0, Low);
  delay(200);
  analogWrite(A1, Low);
  delay(200);
  analogWrite(A2, Low);
  delay(200);
  analogWrite(A3, Low);
  delay(200);
  analogWrite(A4, Low);
  delay(200);
  analogWrite(A5, Low);
}


https://youtu.be/18cw2DAF_Zc
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.

Аватара пользователя
ROW

Arduino. Изучаем вместе

Сообщение #45 ROW » 08 фев 2018, 16:08

KimIV писал(а):Источник цитаты
Вообщем, экспериментально я выяснил следующее

Аналоговые выводы работают как цифровые выходы, причём функция analogWrite() устанавливает на выходе сигнал низкого уровня при использовании значения параметра от 0 до 127 и сигнал высокого уровня при значении параметра от 128 до 32767.
дурик,ты зачем усы отрастил? ардуину поломал?! Это ж получается недокументированая функция да?
Каждый убежден, что другие ошибаются, когда судят о нем, и что он не ошибается, когда судит о других.

Аватара пользователя
Автор темы
KimIV

Arduino. Изучаем вместе

Сообщение #46 KimIV » 08 фев 2018, 16:29

ROW писал(а):Источник цитаты дурик,ты зачем усы отрастил? ардуину поломал?!

Нам с тобой, Рома, давно пора поделить сферы влияния! Вот давай тут на берегу и договоримся. Ты ломаешь форум, я тебе не мешаю. А я ломаю ардуину и ты мне не мешаешь :D :D :D

ROW писал(а):Источник цитаты Это ж получается недокументированая функция да?

Похоже, что так... я по аналоговым портам ещё кое-что выяснил... но это чуть позже. Сначала надо про средства отладки скетчей рассказать ;)
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.

Аватара пользователя
ROW

Arduino. Изучаем вместе

Сообщение #47 ROW » 08 фев 2018, 17:20

Сообщение не по теме
KimIV писал(а):Источник цитаты Ты ломаешь форум, я тебе не мешаю. А я ломаю ардуину и ты мне не мешаешь
:shock: а чё, так можно делать?! :? ну давай попробуем..боюсь ардуиной тебе некогда будет заниматся..а так я согласен :D
Свернуть

KimIV писал(а):Источник цитаты Похоже, что так... я по аналоговым портам ещё кое-что выяснил...

какой ток и как длительно они смогут отдавать его?
Каждый убежден, что другие ошибаются, когда судят о нем, и что он не ошибается, когда судит о других.

Аватара пользователя
Автор темы
KimIV

Arduino. Изучаем вместе

Сообщение #48 KimIV » 09 фев 2018, 10:57

Отладка скетчей

Как-только я встретил в кодах скетчей такие константы, как HIGH, LOW, OUTPUT, мне сразу же стало любопытно, а что в них? Понятно, что это скорее всего какие-то числа, но какие именно? И чтобы ответить на этот вопрос, стал искать средства отладки скетчей и в первую очередь средства просмотра значений переменных и констант. И ведь нашёл :yahoo: Оказывается, в самой среде Arduino IDE есть средство взаимодействия с исполняемой контроллером прошивкой. Называется это средство "Монитор порта" и вызывается либо из Меню - Инструменты, либо кликом по кнопке на панели инструментов.

Arduino. Изучаем вместе - 10_1.png
Arduino. Изучаем вместе - 10_2.png
Arduino. Изучаем вместе - 10_3.png


Взаимодействие с портом, который можно мониторить из среды Arduino, выполняется посредством объекта Serial. Отправка сообщения в порт выполняется функциями:

Код: Выделить всё

Serial.print(<Параметры>); // Без переноса строки
Serial.println(<Параметры>); // С переносом строки


Про параметры функции Serial.print() подробнее почитать можно там.

А чтение из порта выполняется функцией:

Код: Выделить всё

Serial.read();


Ну а теперь посмотрим значения встроенных (предопределённых) констант. Функцию Serial.print() я буду вызывать из функции setup(), чтобы выполнение (вывод инфы в порт) было однократным.

Вывод десятичных значений констант HIGH, LOW, INPUT и OUTPUT

Код: Выделить всё

void setup() {
  Serial.begin(9600);

  Serial.print("HIGH=");
  Serial.println(HIGH, DEC);

  Serial.print("LOW=");
  Serial.println(LOW, DEC);

  Serial.print("INPUT=");
  Serial.println(INPUT, DEC);

  Serial.print("OUTPUT=");
  Serial.println(OUTPUT, DEC);
}

void loop() {
}


Arduino. Изучаем вместе - 10_4.png


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

Код: Выделить всё

void setup() {
  Serial.begin(9600);

  Serial.print("BIN=");
  Serial.println(BIN, DEC);

  Serial.print("OCT=");
  Serial.println(OCT, DEC);

  Serial.print("DEC=");
  Serial.println(DEC, DEC);

  Serial.print("HEX=");
  Serial.println(HEX, DEC);
}

void loop() {
}


Arduino. Изучаем вместе - 10_5.png


Десятичные значения констант, в которых содержатся номера аналоговых выводов.

Код: Выделить всё

void setup() {
  Serial.begin(9600);

  Serial.print("A0=");
  Serial.println(A0, DEC);

  Serial.print("A1=");
  Serial.println(A1, DEC);

  Serial.print("A2=");
  Serial.println(A2, DEC);

  Serial.print("A3=");
  Serial.println(A3, DEC);

  Serial.print("A4=");
  Serial.println(A4, DEC);

  Serial.print("A5=");
  Serial.println(A5, DEC);
}

void loop() {
}


Arduino. Изучаем вместе - 10_6.png


А вот это уже очень интересно. Цифровые выводы имеют номера с 0 до 13, а аналоговые с 14 до 19. Таким образом, мы имеем единое адресное пространство для всех выводов платы Arduino Uno. Что нам это даёт? Это даёт нам возможность упрощать код скетча. И когда, например, нам в каком-либо проекте не хватит цифровых выходов, которые обрабатываются в едином цикле, то мы без проблем в этот же единый цикл можем добавить аналоговые входы и использовать их как цифровые выходы. Для подтверждения этой мысли я собрал схемку, в которой задействовал цифровые выходы с 10 по 13 и аналоговые с А0 по А5 (их номера с 14 по 19) и написал скетч для реализации светового эффекта "Бегущий огонь".

Arduino. Изучаем вместе - 10_7.jpg
Arduino. Изучаем вместе - 10_8.jpg


Код: Выделить всё

int High=255;
int Low=0;

void setup() {
}

void loop() {
  for(int i=10; i<=19; i++) {
    analogWrite(i, High);
    delay(200);
    analogWrite(i, Low);
  }
}


https://youtu.be/s7-SA8h-_rA
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.

Аватара пользователя
Автор темы
KimIV

Arduino. Изучаем вместе

Сообщение #49 KimIV » 09 фев 2018, 11:03

ROW писал(а):Источник цитаты какой ток и как длительно они смогут отдавать его?

Не знаю, но предполагаю, что как и цифровые 40 мА. А по факту они у меня мигали минут 15, а то и больше. Ток в импульсном режиме держали такой 4,5 В /220 Ом = 0,02 А или 20 мА.
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.

Аватара пользователя
ROW

Arduino. Изучаем вместе

Сообщение #50 ROW » 09 фев 2018, 11:45

KimIV писал(а):Источник цитаты Ток в импульсном режиме держали такой 4,5 В /220 Ом = 0,02 А или 20 мА.
:shock: обычно диод на постоянку подключеный такой ток потребляет а тут в импульсе..что там за СД? 0,5Вт на видюшке вроде "обычные" "желудем"
Каждый убежден, что другие ошибаются, когда судят о нем, и что он не ошибается, когда судит о других.


Вернуться в «Системы ЧПУ»