Arduino uno r3 на базе процессора atmega328

Исходный код программы (скетча)

Код программы для ведущей платы (Arduino UNO)

Arduino

//Master code (Arduino UNO)
//Serial Communication Between Arduino using RS-485

int enablePin = 8;
int pushval = A0;
int potval =0 ;

void setup()
{
Serial.begin(9600); // initialize serial at baudrate 9600:
pinMode(enablePin, OUTPUT);
pinMode(pushval,INPUT);
delay(10);
digitalWrite(enablePin, HIGH); // (always high as Master Writes data to Slave)
}
void loop()
{
int potval = analogRead(pushval);
Serial.println(potval); //Serial Write POTval to RS-485 Bus
delay(100);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

//Master code (Arduino UNO)
//Serial Communication Between Arduino using RS-485
 

intenablePin=8;

intpushval=A0;

intpotval=;

voidsetup()

{

Serial.begin(9600);// initialize serial at baudrate 9600:

pinMode(enablePin,OUTPUT);

pinMode(pushval,INPUT);

delay(10);

digitalWrite(enablePin,HIGH);//  (always high as Master Writes data to Slave)

}

voidloop()

{

intpotval=analogRead(pushval);

Serial.println(potval);//Serial Write POTval to RS-485 Bus

delay(100);

}

Код программы для ведомой платы (Arduino Nano)

Arduino

//Slave code (Arduino NANO)
//Serial Communication Between Two Arduinos using RS-485
//Circuit Digest

#include <LiquidCrystal.h> //Include LCD library for using LCD display functions

int enablePin = 8;
int ledpin = 10;

LiquidCrystal lcd(2,3,4,5,6,7); // Define LCD display pins RS,E,D4,D5,D6,D7

void setup()
{
lcd.begin(16,2);
lcd.print(«CIRCUIT DIGEST»);
lcd.setCursor(0,1);
lcd.print(«RS485 ARDUINO»);
delay(3000);
lcd.clear();
Serial.begin(9600); // initialize serial at baudrate 9600:
pinMode(ledpin,OUTPUT);
pinMode(enablePin, OUTPUT);
delay(10);
digitalWrite(enablePin, LOW); // (Pin 8 always LOW to receive value from Master)

}

void loop()

{
while (Serial.available()) //While have data at Serial port this loop executes
{
lcd.clear();
int pwmval = Serial.parseInt(); //Receive INTEGER value from Master throught RS-485
int convert = map(pwmval,0,1023,0,255); //Map those value from (0-1023) to (0-255)
analogWrite(ledpin,convert); //PWM write to LED
lcd.setCursor(0,0);
lcd.print(«PWM FROM MASTER»);
lcd.setCursor(0,1);
lcd.print(convert); //Displays the PWM value
delay(100);
}
}

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

//Slave code (Arduino NANO)
//Serial Communication Between Two Arduinos using RS-485
//Circuit Digest
 
#include <LiquidCrystal.h>          //Include LCD library for using LCD display functions
 

intenablePin=8;

intledpin=10;

LiquidCrystallcd(2,3,4,5,6,7);// Define LCD display pins RS,E,D4,D5,D6,D7

voidsetup()

{

lcd.begin(16,2);

lcd.print(«CIRCUIT DIGEST»);

lcd.setCursor(,1);

lcd.print(«RS485 ARDUINO»);

delay(3000);

lcd.clear();

Serial.begin(9600);// initialize serial at baudrate 9600:

pinMode(ledpin,OUTPUT);

pinMode(enablePin,OUTPUT);

delay(10);

digitalWrite(enablePin,LOW);//  (Pin 8 always LOW to receive value from Master)

}
 

voidloop()

{

while(Serial.available())//While have data at Serial port this loop executes

{

lcd.clear();

intpwmval=Serial.parseInt();//Receive INTEGER value from Master throught RS-485

intconvert=map(pwmval,,1023,,255);//Map those value from (0-1023) to (0-255)

analogWrite(ledpin,convert);//PWM write to LED

lcd.setCursor(,);

lcd.print(«PWM FROM MASTER»);

lcd.setCursor(,1);

lcd.print(convert);//Displays the PWM value

delay(100);

}

}

Некоторое железо

  • GyverStepper – высокопроизводительная библиотека для управления шаговым мотором
  • AccelStepper – более интересная и качественная замена стандартной библиотеке Stepper для контроля шаговых моторчиков. Скачать можно со страницы разработчика, или вот прямая ссылка на архив.
  • AccelMotor – моя библиотека для управления мотором с энкодером (превращает обычный мотор в “шаговый” или сервомотор)
  • ServoSmooth – моё дополнение к стандартной библиотеке Servo, позволяющее управлять сервоприводом с настройкой максимальной скорости движения и разгона/торможения (как в AccelStepper, только для серво). Must have любого любителя серво манипуляторов!
  • CapacitiveSensor – библиотека для создания сенсорных кнопок (из пары компонентов рассыпухи). Описание
  • ADCTouchSensor – ещё одна версия библиотеки для создания сенсорных кнопок. Есть ещё одна, так, на всякий случай
  • TouchWheel – библиотека для создания сенсорных слайдеров и колец
  • Buzz – детектор присутствия на основе всего лишь одного провода! (измеряет ЭМ волны)
  • Bounce – библиотека антидребезга для кнопок и всего такого. Сомнительная полезность, но почитайте описание
  • oneButton – библиотека для расширенной работы с кнопкой. На мой взгляд неудобная
  • GyverButton – моя библиотека для расширенной работы с кнопкой. Очень много возможностей!
  • AdaEncoder – библиотека для работы с энкодерами
  • GyverEncoder – моя библиотека для энкодеров с кучей возможностей, поддерживает разные типы энкодеров
  • RTCLib – лёгкая библиотека, поддерживающая большинство RTC модулей
  • OV7670 – библиотека для работы с камерой на OV7670
  • IRremote – базовая библиотека для работы с ИК пультами и излучателями
  • IRLib – более расширенная версия для работы с ИК устройствами
  • IRLremote – самая чёткая библиотека для ИК пультов, работает через прерывания. 100% отработка пульта
  • keySweeper – почти готовый проект для перехвата нажатий с беспроводных клавиатур
  • USB_Host_Shield – позволяет Ардуине работать с геймпадами (PS, XBOX) и другими USB устройствами
  • Brain – библиотека для работы с NeuroSky ЭЭГ модулями
  • TinyGPS – шустрая библиотека для работы с GPS модулями
  • GyverRGB – моя библиотека для работы с RGB светодиодами и лентами
  • FadeLED – библиотека для плавного (ШИМ) мигания светодиодами с разными периодами
  • CurrentTransformer – измерение силы тока при помощи трансформатора (катушки) на проводе. Читай: токовые клещи
  • LiquidCrystal-I2C – библиотека для LCD дисплеев с I2C контроллером. Разработчик – fdebrabander
  • LiquidCrystal-I2C – библиотека для LCD дисплеев с I2C контроллером. Разработчик – johnrickman. Предыдущая вроде бы лучше
  • LiquidTWI2 – быстрая библиотека для LCD дисплеев на контроллерах MCP23008 или MCP23017
  • LCD_1602_RUS – библиотека русского шрифта для LCD дисплеев
  • LCD_1602_RUS_ALL – новая версия предыдущей библиотеки с поддержкой украинского языка
  • u8glib – библиотека для работы с монохромными LCD и OLED дисплеями
  • ucglib – библиотека для работы с цветными LCD и OLED дисплеями
  • Adafruit_SSD1306 – ещё одна библиотека для OLED дисплеев
  • Adafruit-GFX-Library – дополнение для adafruit библиотек дисплеев, позволяет выводить графику
  • SSD1306Ascii – самодостаточная и очень лёгкая библиотека для вывода текста на OLEDы
  • NeoPixelBus – библиотека для работы с адресной светодиодной лентой, адаптированная под esp8266 (NodeMCU, Wemos и др.). 
  • microLED – лёгкая и простая библиотека для работы с адресной лентой
  • – лёгкая библиотека для отправки любых данных через радио модули 433 МГц
  • rc-switch – библиотека для работы с радио модулями 433 МГц и разными протоколами связи

Конструкция и сборка

Особенности программирования на платформе Arduino

Термины

Программный код для Arduino принято называть скетчами (англ. sketches). У скетчей есть два основных метода: и . Первый метод автоматически вызывается после включения/сброса микроконтроллера. В нём происходит инициализация портов и различных модулей, систем. Метод вызывается в бесконечном цикле на протяжении всей работы микроконтроллера.

Порты — неотъемлемая часть любого микроконтроллера. Через них происходит взаимодействие микроконтроллера с внешними устройствами. С программной стороны порты называются пинами. Любой пин может работать в режиме входа (для дальнейшего считывания напряжения с него) или в режиме выхода (для дальнейшей установки напряжения на нём).

Любой пин работает с двумя логическими состояниями: и , что эквивалентно логическому нулю и единице соответственно. У некоторых портов есть встроенный АЦП, что позволяет считывать аналоговый сигнал со входа (например, значение переменного резистора). Также некоторые пины могут работать в режиме ШИМ (англ. PWM), что позволяет устанавливать аналоговое напряжение на выходе. Обычно функциональные возможности пина указываются на маркировке самой платы.

Основные функции

Для базовой работы с платой в библиотеке Arduino есть следующие функции:

  • — указывает назначение конкретного пина PIN (значение — вход, — выход);
  • — устанавливает логическое состояние на выходе ( — 0, — 1);
  • — возвращает логическое состояние со входа PIN ( — 0, — 1);
  • — устанавливает аналоговое напряжение на выходе ( в пределах от 0 до 255);
  • — возвращает значение аналогового уровня сигнала со входа (пределы зависят от разрядности встроенного АЦП. Обычно разрядность составляет 10 бит, следовательно, возвращаемое значение лежит в пределах от 0 до 1023);
  • — приостанавливает исполнение скетча на заданное количество миллисекунд;
  • — возвращает количество миллисекунд после момента запуска микроконтроллера.

В остальном процесс программирования на Arduino такой же, как на стандартном C++.

6

Arduino как источник питания

Важный момент, который вытекает из предыдущих: использование платы Arduino как источник питания для модулей/датчиков. Варианта тут два:

  • Питание датчиков и модулей от 5V
    • При питании платы от USB – максимальный ток 500 мА
    • При питании платы в Vin – максимальный ток 2 А при Vin 7V, 500 мА при Vin 12V
    • При питании платы в 5V – максимальный ток зависит от блока питания
  • Питание датчиков от GPIO (пинов D и A) – максимальный ток с одного пина: 40 мА, но рекомендуется снимать не более 20 мА. Максимальный суммарный ток с пинов (макс. ток через МК) не должен превышать 200 мА. Допускается объединение нескольких ног для питания нагрузки, но состояние выходов должно быть изменено одновременно (желательно через PORTn), иначе есть риск спалить ногу при её закорачивании на другую во время переключения. Либо делать ногу входом (INPUT), вместо подачи на неё низкого (LOW) сигнала. В этом случае опасность спалить ноги отсутствует.

Необходимые компоненты

Программное обеспечение

  1. Arduino IDE – для загрузки скетча в плату Arduino Uno.
  2. Firmata – это протокол для взаимодействия с различными микроконтроллерами с помощью программного обеспечения на компьютере или смартфоне. Программное обеспечение Firmata можно скачать для взаимодействия практически с любыми платами, например, Arduino, Teensy. Библиотека Firmata уже встроена в Arduino IDE, поэтому у вас не будет необходимости скачивать ее откуда либо. В качестве примера ее использования можно посмотреть статью про управление Arduino с помощью Raspberry Pi и pyFirmata.
  3. Johnny-Five – JavaScript платформа, ориентированная на взаимодействие с робототехникой и интернетом вещей. Используется как своеобразный мост (шлюз) между платой Arduino и компьютером. Более подробно объяснена далее в данной статье.

Общие принципы работы серводвигателей (сервомоторов)

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

Типы серводвигателей

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

Серводвигатель справа представляет собой так называемый стандартный серводвигатель. Это наиболее распространенный тип серводвигателя. Такие серводвигатели достаточно часто имеют одинаковые размеры и монтажные расстояния между отверстиями. Намного меньший (и более легкий) серводвигатель слева предназначен для летательных аппаратов. Эти серводвигатели называются сервоприводами 9g .

Сервоприводы с более высоким качеством исполнения и более высоким крутящим моментом имеют редуктор с шестернями из металла, а не из нейлона. Большинство серводвигателей работают на номинальном напряжении питания около 5 В при допустимом диапазоне питающих напряжений от 4 до 7 В. Подключение любительских сервоприводов обычно осуществляется через провода, заканчивающиеся 3-контактным разъемом: питание +, питание — и управляющий сигнал.

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

Устройство сервопривода

Сервопривод (см. рисунок) состоит из электродвигателя, постоянного тока, приводящего в действие редуктор, уменьшающий скорость вращения двигателя и, в то же время увеличивающий крутящий момент на валу. Для контроля положения выходного вала он соединен с датчиком положения (как правило, это переменный резистор). Для управления мощностью и направлением, в котором поворачивается двигатель сервопривода, схема управления использует входной сигнал от датчика положения в сочетании с сигналом управления, задающим требуемое положение.

Блок управления, получив через сигнал управления величину желаемого положения вала, вычитает из него величину действительного его положения и вырабатывает «сигнал ошибки», который может быть положительным или отрицательным. Этот «сигнал ошибки» подается на питание двигателя, заставляя его изменить положение вала в нужном направлении. Чем больше разница между желаемым и действительным положением выходного вала, тем быстрее двигатель будет поворачиваться к желаемой позиции. Чем ближе к нулю становится значение ошибки (рассогласования), тем меньше становится питание двигателя.

Управление серводвигателем

Управляющий сигнал на серводвигатель — это не напряжение, как можно было бы ожидать, а сигнал широтно-импульсной модуляции (ШИМ). Этот сигнал является стандартным для всех любительских сервомашинок и выглядит так, как показано на следующем рисунке.

Серводвигатель ожидает прихода импульса управления каждые 20 мс. Импульс длительностью 1,5 мс установит серводвигатель в центральное положение, соответствующее повороту выходного вала на 90°. Более короткие импульсы в 1,0 мс установят выходной вал в начальное положение — 0°, а импульсы в 2,0 мс — крайнее положение — 180°. В реальности этот диапазон может быть немного меньше, чем полные 180°, без укорочения импульсов на одном конце и удлинения на другом. Не редкость и ситуация, когда для 0° нужен импульс 0,5 мс, а для 180° — 2,5 мс.

Назначение контактов сервомотора

Представлено на следующем рисунке. Я думаю, здесь все просто и понятно.

1. Red (красный) = Положительное напряжение питания (от 4.8V до 6V)
2. Brown (коричневый) = Ground (земля)
3. Orange (оранжевый) = Control Signal – управляющий сигнал (PWM Pin – контакт ШИМ)

Схема проекта

Схема для последовательной связи с помощью интерфейса RS-485 между платами Arduino Uno и Arduino Nano представлена на следующем рисунке.

В следующей таблице представлены необходимые соединения между платой Arduino Uno (ведущей) и модулем RS-485.

RS-485 Arduino Uno
DI 1 (TX)
DE RE 8
R0 0 (RX)
VCC 5V
GND GND
A к контакту A ведомого RS-485
B к контакту B ведомого RS-485

В следующей таблице представлены необходимые соединения между платой Arduino Nano (ведомой) и модулем RS-485.

RS-485 Arduino Nano
DI 1 (TX)
DE RE 8
R0 D0 (RX)
VCC 5V
GND GND
A к контакту A ведущего RS-485
B к контакту B ведущего RS-485

В следующей таблице представлены необходимые соединения между платой Arduino Nano и ЖК дисплеем 16х2.

ЖК дисплей 16х2 Arduino Nano
VSS GND
VDD +5V
V0 к центральному контакту потенциометра для управления контрастностью ЖК дисплея
RS D2
RW GND
E D3
D4 D4
D5 D5
D6 D6
D7 D7
A +5V
K GND

Потенциометр 10 кОм подключен к аналоговому контакту A0 платы Arduino UNO. Светодиод подключен к контакту D10 платы Arduino Nano.

Скорость

  • softUART – скорость задаётся при создании объекта.
  • GBUS – скорость задаётся у самого интерфейса, например у “Serial’ов” это begin.
  • GBUSmini – скорость задаётся в GBUSmini.h, параметром GBUS_DEFAULT_SPEED, либо дефайном GBUS_SPEED в скетче перед подключением библиотеки.

Скорость задаётся в бодах (baud rate) и совпадает с бодрейтом UART’а. Время передачи одного байта равно секунд, соответственно скорость передачи составляет байт в секунду (например при скорости 300 бод – 30 байт в секунду).

Примечание: чем ниже скорость, там надёжнее передача и тем меньше влияют помехи, индуктивность линии и несовпадение частот тактирования у передатчика и приёмника. Скорость должна быть одинаковой для всей шины, т.е. всех подключенных к ней устройств!

Работа проекта

Когда вы сделаете все необходимые соединения в аппаратной части нашего проекта у вас должна получиться примерно следующая конструкция:

Теперь загрузите код программы в плату Arduino UNO и откройте окно монитора последовательной связи (serial monitor). Как мы уже указывали, мы должны сделать 2048 шагов для совершения одного полного оборота, то есть если мы в окне монитора последовательной связи введем 2048, то вал шагового двигателя совершит один полный оборот по часовой стрелке, а сам двигатель в это время сделает 2048 шагов. Для вращения против часовой стрелки просто вводите нужное число шагов со знаком “–“. То есть если вы введете -1024, то вал мотора совершит пол-оборота против часовой стрелки. Чтобы протестировать работу проекта вы можете вводить любые числа.

А нужен ли GBUS?

Для передачи между двумя платами через Serial (обычный и software) можно использовать полностью стандартный способ: методы и . Функции принимают байтовые массивы, но на ничего не мешает их обмануть и передавать что угодно, даже структуры:

// Пример отправки и приёма структуры через Serial
// ОТПРАВИТЕЛЬ
// Ардуины соединены так:
// отправитель D11 -> приёмник D10
#include < SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX

struct Str {
  byte val_b;
  int val_i;
  long val_l;
  float val_f;
};

void setup() {
  Serial.begin(9600);
  mySerial.begin(4000);
}

void loop() {
  // буфер на отправку
  Str buf;

  // заполняем
  buf.val_b = 123;
  buf.val_i = 12345;
  buf.val_l = 123456;
  buf.val_f = 123.456;

  // отправляем родным write()
  // указываем ему буфер-структуру, но приводим тип к byte*
  // размер можно указать через sizeof()
  mySerial.write((byte*)&buf, sizeof(buf));
  delay(2000);
}
// Пример отправки и приёма структуры через Serial
// ПРИЁМНИК
// Ардуины соединены так:
// приёмник D10 -> отправитель D11
#include < SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX

// структура для приёма
// должна соответствовать отпраляемой
struct Str {
  byte val_b;
  int val_i;
  long val_l;
  float val_f;
};

// создаём саму структуру
Str buf;

void setup() {
  Serial.begin(9600);
  mySerial.begin(4000);
}

void loop() {
  // читаем родным методом readBytes()
  // указываем ему буфер-структуру, но приводим тип к byte*
  // размер можно указать через sizeof()
  if (mySerial.readBytes((byte*)&buf, sizeof(buf))) {
    Serial.println(buf.val_b);
    Serial.println(buf.val_i);
    Serial.println(buf.val_l);
    Serial.println(buf.val_f);
  }
}

О других способах читайте в уроке общение по Serial.

GBUS по сути делает то же самое, но предлагает дополнительные возможности:

Объяснения программ для плат Arduino UNO и Arduino Nano

Для программирования обоих плат используется среда Arduino IDE. Убедитесь в том, что вы выбрали правильный порт из пункта меню Tools->Port и правильный тип платы из пункта меню Tools->Board.

Полный код программ приведен в конце статьи, здесь же мы рассмотрим их основные фрагменты. Видео, демонтсрирующее работу проекта, также приведено в конце статьи.

Объяснение программы для платы Arduino UNO (ведущей)

В программе для ведущей стороны нам просто необходимо считывать значение напряжения с выхода потенциометра, подключенного к аналоговому контакту A0 и затем с помощью функции SerialWrite передавать их модулю RS-485 через контакты последовательного порта (0,1) платы Arduino UNO.

Инициализация последовательной связи на контактах (0,1) производится с помощью следующей команды:

Arduino

Serial.begin(9600);

1 Serial.begin(9600);

Для считывания аналогового значения на контакте A0 платы Arduino UNO и его сохранения в переменной potval используется команда:

Arduino

int potval = analogRead(pushval);

1 intpotval=analogRead(pushval);

Перед передачей значения переменной potval по последовательному порту необходимо на контактах DE и RE модуля RS-485 установить напряжение высокого уровня (HIGH). Данные контакты подключены у нас к контакту 8 платы Arduino UNO, поэтому просто используем команду:

Arduino

digitalWrite(enablePin, HIGH);

1 digitalWrite(enablePin,HIGH);

Далее просто передаем по последовательному порту значение переменной potval.

Arduino

Serial.println(potval);

1 Serial.println(potval);

Объяснение программы для платы Arduino Nano (ведомой)

На ведомой стороне (Slave side) значение переменной целого типа, полученное от ведущего модуля RS-485, можно будет считать на контактах последовательного порта связи (0,1) платы Arduino Nano. Просто считываем эти значения и сохраняем их в переменной. Принятые значения будут в диапазоне 0-1023, поэтому преобразуем их к диапазону 0-255 чтобы управлять яркостью свечения светодиода с помощью широтно-импульсной модуляции (ШИМ).

Затем это конвертированное значение мы с помощью функции AnalogWrite подаем на контакт D10 (является ШИМ-контактом), к оторому подключен светодиод – таким образом мы управляем яркостью его свечения. Также эти значения мы будем показывать на экране ЖК дисплея 16х2.

Для того, чтобы модуль RS-485, подключенный к ведомой плате Arduino, мог принимать эти значения от ведущего модуля, необходимо на его контактах DE и RE установить напряжение низкого уровня (LOW). Для этого просто устанавливаем LOW на контакте D8 (enablePin) платы Arduino Nano.

Arduino

digitalWrite(enablePin, LOW);

1 digitalWrite(enablePin,LOW);

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

Arduino

int pwmval = Serial.parseInt();

1 intpwmval=Serial.parseInt();

Затем конвертируем это значение из диапазона 0-1023 в диапазон 0-255 и сохраняем полученное значение в переменной:

Arduino

int convert = map(pwmval,0,1023,0,255);

1 intconvert=map(pwmval,,1023,,255);

Затем подаем это значение на контакт D10, к которому подключен светодиод:

Arduino

analogWrite(ledpin,convert);

1 analogWrite(ledpin,convert);

Для отображения этого значения на экране ЖК дисплея 16×2 используем следующую последовательность команд:

Arduino

lcd.setCursor(0,0);
lcd.print(«PWM FROM MASTER»);
lcd.setCursor(0,1);
lcd.print(convert);

1
2
3
4

lcd.setCursor(,);

lcd.print(«PWM FROM MASTER»);

lcd.setCursor(,1);

lcd.print(convert);

Резюмируя

Теперь по сути дела: датчики, их куча кучная, измерять можно ну просто всё, что вообще измеряется. Электроника: напряжение, ток, сопротивление, работа с переменным током, поля. Параметры микроклимата: температура, влажность, давление, содержание газов, скорость ветра, освещенность, что угодно. Интересных модулей тоже очень много: Bluetooth, сотовая связь, GPS, дисплеи различных типов и размеров, датчики присутствия, как ИК, так и микроволновые, модули для беспроводной связи ардуинок и многое другое.

Можно управлять абсолютно любой железкой, которая выполняет свою функцию просто при подаче питания: лампочка, светодиодная лента, электронагреватель, мотор или любой электропривод, электромагнит, соленоид-толкатель, и это все с любым напряжением питания. Но тут нужно кое что понять: Ардуино (точнее микроконтроллер) – логическое устройство, то есть по-хорошему она должна только отдавать команды другим устройствам, или принимать их от них. Это я к тому, что напрямую от ардуино не работают ни лампочки, ни моторчики, ни нагреватели, ни-хуче-го. Максимум – светодиод. С пониманием этого идём дальше. Чтобы ардуино включила или выключила (подала питание) на другое устройство, нужно устройство – посредник, например реле или транзистор. Ардуино управляет реле, а реле в свою очередь включает любую нужную нагрузку с любым напряжением питания и все такое, подробнее об этом поговорим отдельно.

Как суть всего выше написанного – возможности Ардуино по подключению и управлению различными железками практически безграничны, можно воплотить любую идею, даже самую безумную. Датчики что то измеряют, исполнительные устройства что то контролируют, в это же время ведётся отсылка данных куда-нибудь, что-то отображается на дисплее и контролируется при помощи кнопок. Романтика!

У меня в каталоге ссылок на Ардуино-компоненты можно найти практически все существующие датчики, модули и прочие железки для Ардуино, и практически у каждого есть ссылка на статью с примером и библиотекой. Пользуйтесь!

Железо

Помимо микроконтроллера на отладочной плате стоит обвязка, необходимая для его работы: это кварцевый генератор, задающий частоту работы процессора, и “рассыпуха” – конденсаторы и резисторы, выполняющие фильтрующие и подтягивающие функции.

Arduino “на минималках”: кварц, конденсаторы и прочее

Давайте так: что нужно сделать для того, чтобы собрать устройство на микроконтроллере? Нужно подключить к выходам микроконтроллера необходимые устройства (далее – “железо”), загрузить на микроконтроллер прошивку, которая будет управлять этим железом, и обеспечить всё это дело стабильным питанием. Цель разработчиков ардуино была совместить вышеуказанное с простотой и удобством работы и модульностью, тем самым превратив разработку электронных устройств в мощный универсальный конструктор. Эта цель была достигнута так: на плате, вместе с микроконтроллером, разместили “программатор” для загрузки прошивки, usb порт и стабилизатор питания, позволяющий питать плату от широкого диапазона постоянных напряжений: 5-19 вольт. Микроконтроллеру нужно 5 вольт, что стабилизатор ему и обеспечивает.

Синтаксис

  • Тела функций заключаются в фигурные скобки
  • Каждая команда заканчивается точкой с запятой
  • Метод применяется к объекту через точку. Пример:
  • Вызов функции или метода всегда заканчивается скобками, даже если функция не принимает параметров. Пример:
  • Разделитель десятичных дробей – точка. Пример: У запятой тут другое применение
  • Запятыми перечисляются аргументы функций и методов, а также членов массива. Пример: массив – Также запятая является самостоятельным оператором, но об этом поговорим отдельно в другом уроке
  • Одиночный символ заключается в одиночные кавычки
  • Строка и массив символов заключается в двойные кавычки
  • Имена переменных могут содержать латинские буквы в верхнем и нижнем регистре (большие и маленькие), цифры и нижнее подчеркивание. Пример: .
  • Имена переменных не могут начинаться с цифры. Только с буквы или нижнего подчёркивания
  • Регистр имеет значение, т.е. большая буква отличается от маленькой. Пример: переменные и – не одно и то же.

К синтаксису также можно отнести комментарии, т.к. в разных языках они выделяются по-разному. Комментарий это обычный текст, который игнорируется на этапе компиляции. Комментарии нужны для пояснения кода, как себе самому, так и другим возможным его читателям. В C++ у нас два типа комментариев:

  • Однострочный комментарий
    // однострочный комментарий
    // компилятор меня игнорирует =(
  • Многострочный комментарий
    /* Многострочный
    комментарий */

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий