Обзор Arduino UNO R3 (DCcduino, CH340G) – RobotChip

Описание элементов платы arduino uno rev3

  • USB Plug – разъем для подключения устройств USB;
  • Analog Reference Pin – для определения опорного напряжения АЦП;
  • Digital Ground – земля;
  • Digital I/O Pins (2-13) – цифровые выводы;
  • Serial OUT (TX) – пин передачи данных по UART;
  • Serial IN (RX) – пин приема данных по UART;
  • Reset Button – кнопка перезагрузки микроконтроллера;
  • In-Circuit Serial Programmer (ISCP) – через эти контакты можно перепрограммировать плату;
  • ATmega328P Microcontroller – собственно сам чип Ардуинки, он же микроконтроллер, процессор, мозг и т.д.;
  • Analog In Pins (0-5) – аналоговые входы;
  • Voltage In – вход используется для подачи питания от внешнего источника;
  • Ground Pins – земля;
  • 5 Volt Power Pin – питание 5 В;
  • 3 Volt Power Pin – питание 3.3 В;
  • Reset Pin – вход для перезагрузки;
  • External Power Supply – разъем для подключения внешнего источника питания.

Описание пинов платы

Микроконтроллер имеет 14 цифровых пинов, они могут быть использованы, как вход или выход. Из них 6 могут выдавать ШИМ-сигнал. Они нужны для регулировки мощности в нагрузке и других функций.

Пин ардуиноАдресация в скетчеСпециальное назначениеШИМ
Цифровой пин 00RX
Цифровой пин 11TX
Цифровой пин 22Вход для прерываний
Цифровой пин 33Вход для прерыванийШИМ
Цифровой пин 44
Цифровой пин 55ШИМ
Цифровой пин 66ШИМ
Цифровой пин 77
Цифровой пин 88
Цифровой пин 99ШИМ
Цифровой пин 1010SPI (SS)ШИМ
Цифровой пин 1111SPI (MOSI)ШИМ
Цифровой пин 1212SPI (MISO)
Цифровой пин 1313SPI (SCK)
К выходу дополнительно подсоединен встроенный светодиод

Вызов ШИМ-сигнала осуществляется через команду AnalogWrite (номер ножки, значение от 0 до 255). Для работы с аналоговыми датчиками присутствует 6 аналоговых входов/выходов.

ПинАдресация в скетчеСпециальное назначение
Аналоговый пин A0A0 или 14
Аналоговый пин A1A1 или 15
Аналоговый пин A2A2 или 16
Аналоговый пин A3A3 или 17
Аналоговый пин A4A4 или 18I2C (SCA)
Аналоговый пин A5A5 или 19I2C (SCL)

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

Аналоговый сигнал обрабатывается 10 битным аналогово-цифровым преобразователем (АЦП), а при чтении микроконтроллер выдаёт численное значение от 0 до 1024. Это равно максимальному значению, которое можно записать в 10 битах. Каждый из выводов способен выдать постоянный ток до 40 мА.

Принципиальная схема платы выглядит так (нажмите для увеличения):

Описание пинов ардуино

Плата Arduino Uno R3: схема, описание, подключение устройствpinMode () в режиме INPUT_PULLUP. Допустимый ток на каждом из выходов – 20 мА, не более 40 мА в пике.
Для удобства работы некоторые пины совмещают в себе несколько функций:

Беспаячные макетные платы

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

На макетной плате расположены рельсы питания, а также контакты для размещения компонентов и радиодеталей (группированы по 5).

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

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

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

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

Беспаячные платы рекомендуются к использованию именно в макетах схем, так как обеспечивают высокую скорость подключения и простоту смены коммутируемых устройств. Для финальных устройств лучше использовать пайку.

Варианты питания ардуино уно

Рабочее напряжение платы Ардуино Уно – 5 В. На плате установлен стабилизатор напряжения, поэтому на вход можно подавать питание с разных источников. Кроме этого, плату можно запитывать с USB – устройств. Источник питания выбирается автоматически.

  • Питание от внешнего адаптера, рекомендуемое напряжение от 7 до 12 В. Максимальное напряжение 20 В, но значение выше 12 В с высокой долей вероятности быстро выведет плату из строя. Напряжение менее 7 В может привести к нестабильной работе, т.к. на входном каскаде может запросто теряться 1-2 В. Для подключения питания может использоваться встроенный разъем DC 2.1 мм или напрямую вход VIN для подключения источника с помощью проводов.
  • Питание от USB-порта компьютера.
  • Подача 5 В напрямую на пин 5V. В этом случае обходится стороной входной стабилизатор  и даже малейшее превышение напряжения может привести к поломке устройства.

Пины питания

  • 5V – на этот пин ардуино подает 5 В, его можно использовать для питания внешних устройств.
  • 3.3V – на этот пин от внутреннего стабилизатора подается напряжение 3.3 В
  • GND – вывод земли.
  • VIN – пин для подачи внешнего напряжения.
  • IREF – пин для информирования внешних устройств о рабочем напряжении платы.

Выбор платы и порта

Откройте Arduino IDE. Из меню Tools>Board выбирается Arduino/Genuino Uno.

Arduino Uno Rev3 - выбор устройстваВыберите последовательное устройство платы в меню Tools>Port. Скорее всего, это COM3 или выше (COM1 и COM2 обычно зарезервированы). Чтобы узнать, вы можете отключить свою плату и повторно открыть меню; запись, которая исчезает, должна быть Arduino или Genuino. Подсоедините плату и выберите этот последовательный порт.Arduino Uno Rev3 - выбор COM портаЕсли у вас модель Arduino Uno CH340G, то лучше использовать программатор Arduino as ISP.

Имеется возможность не использовать загрузчик и запрограммировать микроконтроллер через выводы ICSP (внутрисхемное программирование).

Датчик влажности почвы

Датчик влажности почвы в комплекте с платой для настройки. Принцип работы датчика основан на изменении сопротивления на щупах, которые погружаются в почву. Датчик имеет аналоговый и цифровой выводы, что расширяет возможности подключения. Небольшие габариты и возможность настройки чувствительности датчика делают его очень удобным в применении для систем автоматического полива. Напряжение питания датчика 3.3 – 5 В.

Модуль датчика состоит из двух частей:  контактного щупа и датчика, в комплекте идут провода для подключения.. Между двумя электродами щупа создаётся небольшое напряжение. Если почва сухая, сопротивление велико и ток будет меньше. Если земля влажная — сопротивление меньше, ток — чуть больше.

  • Vcc – питание датчика;
  • GND – земля;
  • A0 — аналоговое значение;
  • D0 – цифровое значение уровня влажности.

Датчик построен на основе компаратора, который выдает напряжение на выход D0 по принципу: влажная почва – низкий логический уровень, сухая почва – высокий логический уровень. Уровень определяется пороговым значением, которое можно регулировать с помощью потенциометра.

На вывод A0 подается аналоговое значение, которое можно передавать в контроллер для дальнейшей обработки, анализа и принятия решений. Датчик YL-38 имеет два светодиода, сигнализирующих о наличие поступающего на датчик питания и уровня цифрового сигналы на выходе D0. Наличие цифрового вывода D0 и светодиода уровня D0 позволяет использовать модуль автономно, без подключения к контроллеру.

Изображения плат ардуино уно

Оригинальная плата выглядит следующим образом:

Оригинальный Arduino Uno
Оригинальный и официальный Arduino Uno

Многочисленные китайские варианты выглядят вот так:

Клон Arduino Uno
Плата – клон Arduino Uno

Еще примеры плат:

Код для подключения светодиодной матрицы 8×8, общий анод

С помощью кода, представленного ниже, можно подключить светодиодную матрицу к контроллеру.

#define data_pin 2     //data_pin 1-го регистра
#define st_pin 3      //latch_pin общий
#define sh_pin 4     //clock_pin 1-го регистра
#define data_pin2 5 //data_pin 2-го регистра
#define sh_pin2 6  //clock_pin 2-го регистра

byte pic0[8] {
  0b01111111,
  0b10111111,
  0b11011111,
  0b11101111,
  0b11110111,
  0b11111011,
  0b11111101,
  0b11111110
};
//массив pic0 не трогаем, по нему отключаются логические единицы на сроках

byte pic[8] {
  0b10111011,
  0b11101110,
  0b00000000,
  0b10111011,
  0b11101110,
  0b00000000,
  0b10111011,
  0b11101110
};
//в этом массиве создаем картинку построчно, единицы обозначают зажженные светодиоды, нули - погашенные

byte cifra[10][8] {
  { B00001110,
    B00011011,
    B00011011,
    B00011011,
    B00011011,
    B00011011,
    B00001110,
    B00000000
  },
  { B00000010,
    B00000110,
    B00001110,
    B00000110,
    B00000110,
    B00000110,
    B00000110,
    B00000000
  },
  {
    B00001110,
    B00011011,
    B00000011,
    B00000110,
    B00001100,
    B00011000,
    B00011111,
    B00000000
  },
  {
    B00001110,
    B00011011,
    B00000011,
    B00001110,
    B00000011,
    B00011011,
    B00001110,
    B00000000
  },
  {
    B00000011,
    B00000111,
    B00001111,
    B00011011,
    B00011111,
    B00000011,
    B00000011,
    B00000000
  },
  {
    B00011111,
    B00011000,
    B00011110,
    B00000011,
    B00000011,
    B00011011,
    B00001110,
    B00000000
  },
  {
    B00001110,
    B00011011,
    B00011000,
    B00011110,
    B00011011,
    B00011011,
    B00001110,
    B00000000
  },
  {
    B00011111,
    B00000011,
    B00000110,
    B00001100,
    B00001100,
    B00001100,
    B00001100,
    B00000000
  },
  {
    B00001110,
    B00011011,
    B00011011,
    B00001110,
    B00011011,
    B00011011,
    B00001110,
    B00000000
  },
  {
    B00001110,
    B00011011,
    B00011011,
    B00001111,
    B00000011,
    B00011011,
    B00001110,
    B00000000
  },
};
//в этом массиве хранятся изображния цифр

void setup() {
  //включаем передачу данных по последовательному порту
  Serial.begin(9600);
  //задаем режим OUTPUT ( выход )
  for ( int i = 2; i < 7; i  ) {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  //output(массив с изображением);
  if (Serial.available() > 0) {     //ожидание доступных данных в com порте
    int cif = Serial.read() - '0'; //считывние данных из com порта 
      output(cifra[cif]);         //вывод цифры
  }
  obnulenie();
}

void obnulenie() {
  //в этом блоке гаснет вся матрица, при необходимости - использовать
  digitalWrite(st_pin, 0);
  shiftOut(data_pin, sh_pin, MSBFIRST, 0b11111111);
  shiftOut(data_pin2, sh_pin2, MSBFIRST, 0b00000000);
  digitalWrite(st_pin, 1);
}

void output(byte picture[8]) {
  //в этом блоке осуществляется вывод изображения на экран длительностью в 1 секунду (125*8мс)
  for (int kadr = 0; kadr < 125; kadr  ) {
    for (int i = 7; i > -1; i--) {
      //в этом цикле осуществляется вывод изображения, хранящегося в массиве ( выводится в обратном порядке чтобы изображение было в нормальной ориентации, при необходимости поменять на for (int i=0; i<8; i  ))
      digitalWrite(st_pin, 0);
      shiftOut(data_pin, sh_pin, MSBFIRST, pic0[i]);
      shiftOut(data_pin2, sh_pin2, MSBFIRST, picture[i]);
      digitalWrite(st_pin, 1);
      delay(1);
    }
  }
}

Конденсаторы

Конденсаторы — это пассивные электронные компоненты, назначение которых — сосредоточение, накопление и передача заряда электрического тока.

Конденсаторы бывают разных видов в зависимости от материала из которого они произведены, а также от других характеристик конденсаторов.

В нашем наборе предложены керамические и электролитические конденсаторы различных номиналов.

Схема подключения конденсатора

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

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

Подключение серво через конденсатор
Подключение серво через конденсатор

Коробка пластиковая двухуровневая

Бокс для хранения модулей и компонентов — это полезная и удобная составляющая нашего набора.

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

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

Верхний уровень представляет собой съемный отсек высотой 2 см с 4 делениями: 3 квадратных отделения 7х8 см и прямоугольное отделение 21х8 см. Для увеличения места в коробке, верхний уровень может быть вынут из нее.

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

В комплекте с компонентами весь набор станет отличным подарком.

Габариты бокса (ДШВ): 228х160х60 мм

Обзор Arduino UNO R3 (DCcduino, CH340G) – RobotChip

Модуль bluetooth 2.0 hc-05/06

Контроллеры Arduino, к сожалению, не поддерживают  беспроводную связь, а часто это просто необходимо. Например, удаленное управление роботом на Arduino, отправка данных с устройства на сервер или в Интернет, связь нескольких устройств между собой. Здесь могут пригодиться различные модули беспроводной связи, такие как модули Bluetooth.

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

Один из способов связи по Bluetooth вашего Arduino-устройства с планшетом, ноутбуком или другим Bluetooth-устройством – Модуль Bluetooth 2.0 HC-05 и Модуль Bluetooth 2.0 HC-06. Основным их отличием является то, что HC-05 может работать в режиме master/slave, а HC-06 — только в режиме slave.

Модули Bluetooth в наших наборах представлены сразу монтированными на UART переходник, что значительно упрощает подключение и не требует пайки.

Модуль enc28j60 spi ethernet

Модуль построен на одноимённой микросхеме производства Microchip – крупного производителя микроэлектроники. Контроллер реализует физический слой интерфейса Ethernet, позволяет использовать полудуплексный или дуплексный режим. Совместим со спецификацией IEEE 802.3.

Микросхемой поддерживается один порт 10BASE-T (10Мбит/с).

Со стороны микроконтроллера в качестве интерфейса обмена используется SPI на скорости до 20мБод. Всё общение с модулем, в том числе конфигурирование и непосредственно передача пакетов, происходят через него.

Для более гибкой конфигурации, модуль не реализует в себе стек TCP/IP, что позволяет реализовать его на стороне управляющего микроконтроллера. Отнимая процессорное время, это также даёт возможность использовать другие протоколы, использующие Ethernet в качестве физического уровня, как, например, Modbus-TCP.

Код для подключения модуля enc28j60 spi ethernet

В примере ниже показано, как подключить вывод модуля ENC28J60 SPI Ethernet к монитору последовательного порта платы (вывод можно посмотреть в мониторе порта Arduino IDE).


#include <EtherCard.h>

static byte mymac[] = { 0x74, 0x69, 0x69, 0x2D, 0x30, 0x31 };

byte Ethernet::buffer[700];

void setup () {
  Serial.begin(57600);
  Serial.println(F("n[testDHCP]"));

  Serial.print("MAC: ");
  for (byte i = 0; i < 6;   i) {
    Serial.print(mymac[i], HEX);
    if (i < 5)
      Serial.print(':');
  }
  Serial.println();

  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
    Serial.println(F("Failed to access Ethernet controller"));

  Serial.println(F("Setting up DHCP"));
  if (!ether.dhcpSetup())
    Serial.println(F("DHCP failed"));

  ether.printIp("My IP: ", ether.myip);
  ether.printIp("Netmask: ", ether.netmask);
  ether.printIp("GW IP: ", ether.gwip);
  ether.printIp("DNS IP: ", ether.dnsip);
}

void loop () {}

Скачать файл с кодом, формат .INO: Модуль Ethernet

Отладочная плата nodemcu esp8266 v3 ch340g

Модуль Nodemcu Lua V3 CH340 Wi-Fi на Esp8266 используется при создании различных электронных устройств. Отличительной особенностью является компактный размер, а в макетную плату модуль можно вставить без паяльника, благодаря тому, что все выводы чипа разведены на гребенки.

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

Модуль имеет встроенные TR переключатель и PLL, усилители мощности, стек TCP/IP. Рекомендуем купить Nodemcu Lua V3 CH340 Wi-Fi на Esp8266 для проектирования роботов или систем для «Умного дома», других устройств, управляемых на расстоянии. Плата версии V3 отличается от предшественников усовершенствованным USB портом и увеличенными размерами. Цена Nodemcu Lua V3 CH340 Wi-Fi на Esp8266 доступна каждому, кто увлекается робототехникой и программированием.

Отладочная плата NodeMCU ESP8266 V3 CH340G обладает следующими техническими характеристиками:

Отличия arduino uno от arduino nano

Современные платы Arduino Uno и Arduino Nano версии R3 имеют, как правило, на борту общий микроконтроллер: ATmega328. Ключевым отличием является размер платы и тип контактных площадок. Габариты Arduino Uno: 6,8 см x 5,3 см. Габариты Arduino Nano:

4,2 см x 1,85 см. В Arduino UNO используются коннекторы типа «мама», в Nano – «гребень» из ножек, причем у некоторых моделей контактные площадки вообще не припаяны.  Естественно, больший размер UNO по сравнению с Nano в некоторых случаях является преимуществом, а в некоторых – недостатком.

На платах Arduino Uno традиционно используется разъем TYPE-B (широко применяется также для подключения принтеров и МФУ). В некоторых случаях можно встретить вариант с разъемом Micro USB. В платах Arduino Nano стандартом является Mini или Micro USB.

Естественно, различия есть и в разъеме питания. В плате Uno есть встроенный разъем DC, в Nano ему просто не нашлось места.

Кроме аппаратных, существуют еще небольшие отличия в процессе загрузки скетча в плату. Перед загрузкой следует убедиться, что вы выбрали верную плату в меню «Инструменты-Плата».

Память arduino uno r3

Плата Uno по умолчанию поддерживает три типа памяти:

  • Flash – память объемом 32 кБ. Это основное хранилище для команд. Когда вы прошиваете контроллер своим скетчем, он записывается именно сюда. 2кБ из данного пула памяти отводится на bootloader- программу, которая занимается инициализацией системы, загрузки через USB и запуска скетча.
  • Оперативная SRAM память объемом  2 кБ. Здесь по-умолчанию хранятся переменные и объекты, создаваемые в ходе работы программы. Память эта энерго-зависимая, при выключении питания все данные, разумеется, сотрутся.
  • Энергонезависимая память (EEPROM) объемом 1кБ. Здесь можно хранить данные, которые не сотрутся при выключении контроллера. Но процедура записи и считывания EEPROM требует использования дополнительной библиотеки, которая доступна в Arduino IDE по-умолчанию. Также нежно помнить об ограничении циклов перезаписи, присущих технологии EEPROM.

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

Плата arduino-совместимая uno r3

Arduino-совместимые платы линейки UNO R3 – одни из самых популярных плат для быстрого старта программирования на открытой платформе Arduino. В большинстве случаев именно на их основе создаются самые первые проекты устройств.

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

Классическая Arduino-совместимая плата на Uno R3 обладает следующими характеристиками:

На Arduino-совместимой плате UNO R3 расположены 14 цифровых входов/выходов, часть из которых могут использоваться как выходы ШИМ, а также 6 аналоговых выходов. Также возможно подключение устройств по шине I2C.

Контроллер может быть запитан как от USB порта компьютера, так и от других источников питания (аккумуляторы, батарейки, блоки питания) через DC-разъем. На выходы платы подается напряжение 5В или 3.3В.

Простейший код blink

Для того, чтобы первично проверить работоспособность твоей Arduino-совместимой UNO или MEGA, тебе потребуется только подключенная к компьютеру плата и открытая программа ARDUINO IDE.

Через путь Файл/Примеры/01.Basics/Blink ты сможешь перейти в окно кода для проверки работы светодиода на плате.

Данный светодиод есть практически на всех платах Arduino и совместимых версиях, он контролируется константой LED_BUILTIN.

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

// функция setup исполняется один раз при включении платы
void setup() {
  // инициализация цифрового пина LED_BUILTIN в качестве выхода (output).
  pinMode(LED_BUILTIN, OUTPUT);
}

// фнукция loop исполняется в бесконечном цикле
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // включение светодиода (HIGH - это уровнь напряжения на пине)
  delay(1000);                       // ожидание 1 секунда
  digitalWrite(LED_BUILTIN, LOW);    // выключение светодиода
  delay(1000);                       // ожидание 1 секунда
}

Светодиод rgb 5мм

Светодиоды RGB немного сложнее в подключении по сравнению с одноцветными светодиодами.

В RGB светодиодах содержатся три кристалла разных цветов в одном корпусе. Такие светодиоды имеют не два контакта, а четыре — один общий (анод или катод имеет самый длинный вывод) и три цветовых вывода. Каждая

RGB светодиоды объединяют три кристалла разных цветов в одном корпусе. RGB LED имеет 4 вывода — один общий (анод или катод имеет самый длинный вывод) и три цветовых вывода. К каждому цветовому выходу следует подключать резистор.

Код для подключения светодиода rgb

Ниже представлен простейший скетч для управления миганием RGB светодиода разными цветами.

#define RED 11  // присваиваем имя RED для пина 11
#define GRN 12 // присваиваем имя GRN для пина 12
#define BLU 13  // присваиваем имя BLU для пина 13
 
void setup() {
   pinMode(RED, OUTPUT);  // используем Pin11 для вывода
   pinMode(GRN, OUTPUT); // используем Pin12 для вывода
   pinMode(BLU, OUTPUT);  // используем Pin13 для вывода
}
 
void loop() {
 
   digitalWrite(RED, HIGH); // включаем красный свет
   digitalWrite(GRN, LOW);
   digitalWrite(BLU, LOW);
 
   delay(1000); // устанавливаем паузу для эффекта
 
   digitalWrite(RED, LOW);
   digitalWrite(GRN, HIGH); // включаем зеленый свет
   digitalWrite(BLU, LOW);
 
   delay(1000); // устанавливаем паузу для эффекта
 
   digitalWrite(RED, LOW);
   digitalWrite(GRN, LOW);
   digitalWrite(BLU, HIGH); // включаем синий свет
 
  delay(1000); // устанавливаем паузу для эффекта
}

Скачать файл с кодом, формат .INO: Светодиод RGB

Светодиодная матрица 8×8, общий анод

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

Светодиодная матрица может отображать информацию как в статичном режиме, так и в режиме каскадного переливания. Главная особенность такого матричного дисплея – возможность объединения с такими же дисплеями с целью сборки большого табло.

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

Программирование светодиодной матрицы — это очень увлекательное занятие. Фактически, управление матрицей сводится к управлению конкретным светодиодом на пересечении строк и и столбцов схемы.

Код для подключения светодиодной матрицы 8×8, общий анод

С помощью кода, представленного ниже, можно подключить светодиодную матрицу к контроллеру.

#define data_pin 2     //data_pin 1-го регистра
#define st_pin 3      //latch_pin общий
#define sh_pin 4     //clock_pin 1-го регистра
#define data_pin2 5 //data_pin 2-го регистра
#define sh_pin2 6  //clock_pin 2-го регистра

byte pic0[8] {
  0b01111111,
  0b10111111,
  0b11011111,
  0b11101111,
  0b11110111,
  0b11111011,
  0b11111101,
  0b11111110
};
//массив pic0 не трогаем, по нему отключаются логические единицы на сроках

byte pic[8] {
  0b10111011,
  0b11101110,
  0b00000000,
  0b10111011,
  0b11101110,
  0b00000000,
  0b10111011,
  0b11101110
};
//в этом массиве создаем картинку построчно, единицы обозначают зажженные светодиоды, нули - погашенные

byte cifra[10][8] {
  { B00001110,
    B00011011,
    B00011011,
    B00011011,
    B00011011,
    B00011011,
    B00001110,
    B00000000
  },
  { B00000010,
    B00000110,
    B00001110,
    B00000110,
    B00000110,
    B00000110,
    B00000110,
    B00000000
  },
  {
    B00001110,
    B00011011,
    B00000011,
    B00000110,
    B00001100,
    B00011000,
    B00011111,
    B00000000
  },
  {
    B00001110,
    B00011011,
    B00000011,
    B00001110,
    B00000011,
    B00011011,
    B00001110,
    B00000000
  },
  {
    B00000011,
    B00000111,
    B00001111,
    B00011011,
    B00011111,
    B00000011,
    B00000011,
    B00000000
  },
  {
    B00011111,
    B00011000,
    B00011110,
    B00000011,
    B00000011,
    B00011011,
    B00001110,
    B00000000
  },
  {
    B00001110,
    B00011011,
    B00011000,
    B00011110,
    B00011011,
    B00011011,
    B00001110,
    B00000000
  },
  {
    B00011111,
    B00000011,
    B00000110,
    B00001100,
    B00001100,
    B00001100,
    B00001100,
    B00000000
  },
  {
    B00001110,
    B00011011,
    B00011011,
    B00001110,
    B00011011,
    B00011011,
    B00001110,
    B00000000
  },
  {
    B00001110,
    B00011011,
    B00011011,
    B00001111,
    B00000011,
    B00011011,
    B00001110,
    B00000000
  },
};
//в этом массиве хранятся изображния цифр

void setup() {
  //включаем передачу данных по последовательному порту
  Serial.begin(9600);
  //задаем режим OUTPUT ( выход )
  for ( int i = 2; i < 7; i  ) {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  //output(массив с изображением);
  if (Serial.available() > 0) {     //ожидание доступных данных в com порте
    int cif = Serial.read() - '0'; //считывние данных из com порта 
      output(cifra[cif]);         //вывод цифры
  }
  obnulenie();
}

void obnulenie() {
  //в этом блоке гаснет вся матрица, при необходимости - использовать
  digitalWrite(st_pin, 0);
  shiftOut(data_pin, sh_pin, MSBFIRST, 0b11111111);
  shiftOut(data_pin2, sh_pin2, MSBFIRST, 0b00000000);
  digitalWrite(st_pin, 1);
}

void output(byte picture[8]) {
  //в этом блоке осуществляется вывод изображения на экран длительностью в 1 секунду (125*8мс)
  for (int kadr = 0; kadr < 125; kadr  ) {
    for (int i = 7; i > -1; i--) {
      //в этом цикле осуществляется вывод изображения, хранящегося в массиве ( выводится в обратном порядке чтобы изображение было в нормальной ориентации, при необходимости поменять на for (int i=0; i<8; i  ))
      digitalWrite(st_pin, 0);
      shiftOut(data_pin, sh_pin, MSBFIRST, pic0[i]);
      shiftOut(data_pin2, sh_pin2, MSBFIRST, picture[i]);
      digitalWrite(st_pin, 1);
      delay(1);
    }
  }
}

Скачать файл с кодом, формат .INO: Матрица 8×8

Сдвиговый регистр sn74hc595n

Регистр это устройство, выполненное на триггерах для выполнения ряда действий с двоичными числами. Сдвиговый регистр 74hc595 обычно используется для управления семисегментными индикаторами и светодиодами.

Чтобы понять принцип работы микросхемы 74hc595, следует рассмотреть распиновку сдвигового регистра.

  • Контакты DS, ST_CP и SH_CP — служат для управления и подключаются к любым выходам платы Arduino.
  • Контакты Q0Q7 — это выходы (разряды) сдвигового регистра. С помощью отправки байта с контроллера можно менять состояние разряда (HIGH или LOW).
  • Контакты VCC и GND — это питание регистра
  • Контакт MR — сброс (не активен)
  • Контакт OE подключается к GND
  • Контакт Q7` предназначен для последовательного соединения регистров.

Код для подключения сдвигового регистра sn74hc595n

Ниже представлен код подключения сдвигового регистра SN74HC595N.

#define clock 13
#define data 12
#define latch 10

boolean states[8];

void setup() {
  pinMode(clock, OUTPUT);
  pinMode(data, OUTPUT);
  pinMode(latch, OUTPUT);
  digitalWrite(latch, HIGH);
  cleanreg();

}

void loop() {
  sendbyte(1);
}


void sendbyte(byte value){
  digitalWrite(latch, LOW);
  shiftOut(data, clock, LSBFIRST, value);
  digitalWrite(latch, HIGH);
}

void sendpin(int pin, boolean state){
  pin--;
  states[pin]=state;
  
  byte value = 0;
  byte add = 1;
  for(int i=0; i<8; i  ){
    if(states[i]==HIGH) value =add;
    add*=2;
  }
  digitalWrite(latch, LOW);
  shiftOut(data, clock, LSBFIRST, value);
  digitalWrite(latch, HIGH);
}

void cleanreg(){
  for(int i=0; i<8; i  ) states[i]=LOW;
  digitalWrite(latch, LOW);
  shiftOut(data, clock, LSBFIRST, 0);
  digitalWrite(latch, HIGH);
}

Скачать файл с кодом, формат .INO: Сдвиговый регистр

Семисегментный индикатор, 4 цифры, точки, 0.56 дюйма

Цифровые сегментные индикаторы – устройства, предназначенные для отображения символьных и цифровых данных в электронном оборудовании. Главное преимущество таких индикаторов в сравнении с жидкокристаллическими – яркое продолжительное свечение и эргономичность.

7-сегментные цифровые индикаторы – устройства, состоящие из 7 светодиодов, которые установлены в форме цифры 8. С помощью зажигания отдельных сегментов отображаются цифры от 0 до 9, а также некоторые буквы (обычно латинского алфавита). Один модуль может состоять из одной или из нескольких цифр.

Управляются такие индикаторы напрямую с микроконтроллера или специальными драйверами. Семисегментные индикаторы могуть быть с общим катодом или с общим анодом. На схеме ниже представлен индикатор с общим катодом.

Код для подключения семисегментного индикатора

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

#define g  11  // присвоение имен пинам
#define d1 A1
#define d2 A2
#define d3 A3
#define d4 A4

void setup() {
   pinMode(g, OUTPUT);   // установка режимов работы пинов
   pinMode(d1, OUTPUT);
   pinMode(d2, OUTPUT);
   pinMode(d3, OUTPUT);
   pinMode(d4, OUTPUT);

   digitalWrite(d1, HIGH);  // подача напряжения на пины
   digitalWrite(d2, HIGH);
   digitalWrite(d3, HIGH);
   digitalWrite(d4, HIGH);

   digitalWrite(g, HIGH);   // подача напряжения на сегмент (G)
   delay(1000);
}

void loop() {
   digitalWrite(d1, LOW); // включаем первый разряд
   digitalWrite(d4, HIGH);
   delay(200);
   digitalWrite(d2, LOW); // включаем второй разряд
   digitalWrite(d1, HIGH);
   delay(200);
   digitalWrite(d3, LOW); // включаем третий разряд
   digitalWrite(d2, HIGH);
   delay(200);
   digitalWrite(d4, LOW); // включаем четвертый разряд
   digitalWrite(d3, HIGH);
   delay(200);
}

Скачать файл с кодом, формат .INO: Семисегментный индикатор

Схема подключения конденсатора

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

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

Подключение серво через конденсатор
Подключение серво через конденсатор

Ультразвуковой дальномер hc-sr04

Ультразвуковой дальномер (датчик расстояния) HC-SR04. Генерирует звуковые импульсы на частоте 40 кГц, и по отраженному сигналу определяет расстояние до объекта. Программно сравнивая показания датчика, можем определить, перемещается ли объект, скорость и направление движения.

В отличие от инфракрасных датчиков расстояния не зависит от освещенности и цвета объекта. Однако и у него есть недостатки — плохо реагирует на слишком тонкие объекты, волосы, пух.

Для начала измерения необходимо подать на цифровой вход логическую единицу на 10мкс. После завершения измерения, на выход будет подана логическая единица на время, пропорциональное расстоянию до объекта.

Угол измерения 30°, наиболее эффективный — 15°. Прозрачность объекта не имеет значения.

Код для подключения ультразвукового дальномера hc-sr04

В примере ниже показано, как подключить вывод ультразвукового дальномера HC-SR04 к монитору последовательного порта платы (вывод можно посмотреть в мониторе порта Arduino IDE).

 int echoPin = 2; // назначение цифрового вывода для Echo
int trigPin = 3; // назначение цифрового вывода для Trig

void setup() {
Serial.begin (9600); // подключение монитора порта для выведения данных
pinMode(trigPin, OUTPUT); // генерируется импульс для измерения расстояния
pinMode(echoPin, INPUT); // завершение импульса, считывание дистанции
}

void loop() {
int duration, cm; // назначение меры длины в см
digitalWrite(trigPin, LOW); // подача низкого сигнала на пин trigPin
delayMicroseconds(2); // пауза 2 микросекунды
digitalWrite(trigPin, HIGH); // подача высокого сигнала на пин trigPin
delayMicroseconds(10); // пауза 10 микросекунд
digitalWrite(trigPin, LOW); // подача низкого сигнала на пин trigPin

duration = pulseIn(echoPin, HIGH); // pulseIn - длина положительного импульса на пине echoPin в микросекундах
cm = duration / 58; // формула для выведения корректных данных в см
Serial.print(cm); // выведение данных в монитор порта в см
Serial.println(" cm"); // условия выведения надписи в монитор порта, добавление к значению меры длины
delay(1000); // пауза между измерениями 1 секунда
} 

Скачать файл с кодом, формат .INO: Ультразвуковой дальномер

Универсальный двунаправленный 4-х канальный преобразователь уровней 3.3в — 5в (spi, i2c, uart и др)

Двунаправленный 4-канальный преобразователь логических уровней представляет собой миниатюрное устройство, которое понижает 5В-сигналы до 3.3В, и повышает 3.3В-сигналы до 5В. Преобразователь также работает с устройствами, логический уровень которых составляет 2.8В и 1.8В. Одна такая плата способна преобразовывать напряжения между 4 выводами на одной стороне и 4 выводами на другой.

Данный 4-канальный двунаправленный преобразователь может использоваться как с обычными последовательными интерфейсами UART, I2C, SPI, так и для преобразования любых цифровых сигналов. Не работает с аналоговыми сигналами.

Преобразователь уровней довольно прост в использовании и требует только подключения двух источников питания (с высоким и низким напряжениями, которые используются в вашем проекте). Высокое напряжение (например, 5В) подключается к выводу ‘HV’, низкое напряжение (например, 2.8В) – к выводу ‘LV’, а общая точка схемы – к выводу ‘GND’.

Остальные выводы обозначены как входы высокого напряжения (HV) или низкого (LV). Логическая единица, поступающая на вывод HV (на стороне 5В) появится на выводе LV (на стороне 3.3В) в виде напряжения 3.3В. И наоборот, логическая единица, поступающая на вывод LV (на стороне 3.3В) появится на выводе HV (на стороне 5В) в виде напряжения 5В.

Установка драйверов

Если вы использовали установщик, Windows — от XP до 10 — автоматически установит драйверы, как только вы подключите свою плату.

Если вы загрузили и распаковали Zip архив или по какой-то причине плата неправильно распознана, выполните приведенную ниже процедуру.

  • Нажмите на меню «Пуск» и откройте панель управления.
  • Перейдите в раздел «Система и безопасность» (System and Security). Затем нажмите «Система» (System). Затем откройте диспетчер устройств (Device manager).
  • Посмотрите под Порты (COM и LPT) (Ports (COM & LPT)). Вы должны увидеть открытый порт с именем «Arduino UNO (COMxx)». Если раздел COM и LPT отсутствует, просмотрите раздел «Другие устройства», «Неизвестное устройство».
  • Щелкните правой кнопкой мыши по порту Arduino UNO (COMxx) и выберите опцию «Обновить драйверы…».
  • Затем выберите опцию «Выполнить поиск драйверов на этом компьютере».
  • Наконец, найдите файл драйвера с именем «arduino.inf», который находится в папке «Drivers» программы Arduino (а не подкаталог «FTDI USB Drivers»). Если вы используете старую версию IDE (1.0.3 и старше), выберите файл драйвера Uno с именем «Arduino UNO.inf».
  • После этого Windows завершит установку драйвера.

Характеристики

В основе платы лежит процессор ATmega 328. Кроме него на плате находится модуль USB для связи с компьютером и прошивки. Этот модуль называется «USB-TTL преобразователь». На фирменных платах Arduino Uno для этой целей используется дополнительный микроконтроллер ATmega16U2.

ХарактеристикиArduino Uno R3
МикроконтроллерATmega328
Рабочее напряжение
Напряжение питания (рекомендуемое)7-12В
Напряжение питания (предельное)6-20В
Цифровые входы/выходы14 (из них 6 могут использоваться в качестве ШИМ-выходов)
Аналоговые входы6
Максимальный ток одного вывода40 мА
Максимальный выходной ток вывода 3.3V50 мА
Flash-память32 КБ (ATmega328) из которых 0.5 КБ используются загрузчиком
SRAM2 КБ (ATmega328)
EEPROM1 КБ (ATmega328)
Тактовая частота16 МГц

Особенность этого чипа заключается в аппаратной поддержке USB, что позволяет организовывать связь без дополнительных преобразователей. В то время как ATmega328 не поддерживает такой функции, поэтому 16u2 выступает в роли преобразователя данных из USB в последовательный порт для МК AVR. В него залита программа для выполнения этой задачи.

Однако так происходит не всегда: в более мелких платах, таких как Arduino Nano, используют преобразователи уровней на базе различных микросхем, например FT232, CP21XX, Ch340g и подобных. Это решение является более дешевым и не требует прошивки дополнительного связывающего контроллера, как описано выше.

Внимание! Не всё так однозначно с DCcduino UNO r3 на ch340g. В ней как раз и использован более дешевый, чем в оригинале, вариант преобразователя USB-TTL.

На плате есть выход 3.3 В, он нужен для подключения периферии и некоторых датчиков, его пропускная способность по току равна 50 мА.

ATmega328 работает на частоте 16 МГц. Она фиксирована кварцевым резонатором, который вы можете, по желанию, заменить, тем самым ускорив работу Uno r3.

Важно! После замены кварцевого резонатора функции, связанные со временем, такие как Delay, не будут соответствовать введенным значениям. Это функция задержки времени, по умолчанию её аргументом является требуемое время задержки в мс. Функция прописана в библиотеках Ардуино, с учетом стандартной тактовой частоты в 16 МГц.

Характеристики arduino uno rev3

МикроконтроллерATmega328P
Рабочее напряжение
Напряжение питания (рекомендуемое)7-12В
Напряжение питания (предельное)6-20В
Цифровые входы/выходы14 (из них 6 могут использоваться в качестве ШИМ-выходов)
Аналоговые входы6
ШИМ (PWM) пины
6
Постоянный ток через вход/выход40 мА
Максимальный выходной ток вывода 3.3V50 мА
Flash-память32 КБ (ATmega328P) из которых 0.5 КБ используются загрузчиком
SRAM2 КБ (ATmega328P)
EEPROM1 КБ (ATmega328P)
Тактовая частота16 МГц
Встроенный светодиод13
Длина68.6 мм
Ширина53.4 мм
Вес25 г

Шаговый двигатель 28byj-48 с драйвером uln2003

Униполярный шаговый двигатель 28BYJ-48 со встроенным редуктором и драйвером на микросхеме ULN2003 — это популярный в бытовой технике механизм, его использует в кондиционерах, тепловентиляторах, увлажнителях и в других бытовых устройствах, для обеспечения точного позиционирования выдвижных механизмов.

28BYJ-48 комплектуется платой драйвера, собранной на микросхеме ULN2003. На плате драйвера есть 4 светодиода отображающие на какой из обмоток есть напряжение. Так же на плате можно задействовать неиспользуемые четыре канала по 500 мА для подключения маломощных нагрузок к Arduino. Двигатель легко программируется в среде Ардуино, так же есть способы программно увеличить его мощность.

Код для подключения шагового двигателя 28byj-48 с драйвером uln2003

В примере ниже показано, как подключить вывод шагового двигателя 28byj-48 с драйвером ULN2003 к монитору последовательного порта платы (вывод можно посмотреть в мониторе порта Arduino IDE).


// порты для подключения модуля ULN2003 к Arduino
#define in1 8
#define in2 9
#define in3 10
#define in4 11

int dl = 5; // время задержки между импульсами

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}

void loop() {
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(dl);

  digitalWrite(in1, HIGH);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(dl);

  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  delay(dl);

  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, HIGH);
  delay(dl);
}

Скачать файл с кодом, формат .INO: Шаговый двигатель 28byj-48

Шилд ethernet w5100

Шилд Ethernet Shield W5100 в проектах Arduino часто используется для организации веб-сервера с доступом к нем. С помощью этого шилда можно подключить контроллер форм-фактора UNO/MEGA к сети Интернет или локальной сети.

Сам шилд основан на чипе Wiznet W5100 и поддерживает скорость передачи данных до 100 Мбит/с. На плате также расположен разъем для SD карты, если потребуется увеличить объем хранимых данных. Шилд с легкостью можно установить, например, на плату Arduino-совместимую UNO R3 и в дальнейшем расширить возможности устройства, дополнив его другими подходящими шилдами.

Контроллер может взаимодействовать как с чипом W5100, так и с SD-картой. Для этого на платах семейства UNO используется шина SPI и выводы 10, 11, 12 и 13. В случае с платами семейства MEGA используются выводы 50, 51 и 52. Для плат форм-фактора UNO/MEGA вывод 10 используется для выбора W5100 и вывод 4 – для SD-карты, эти пины при подключении Ethernet не должны использоваться в схеме. Так-как W5100 и SD-карта используют одну шину SPI, одновременно может быть активно только одно устройство.

Код для подключения шилда ethernet w5100

В качестве кода подключения можно использовать стандартную библиотеку Ethernet по пути Файл/Примеры/Ethernet/Web-Server. Схема подключения в данном случае не требуется, так как достаточно установить шилд на плату контроллера.

#include <SPI.h>                                   // подключение библиотеки SPI
#include <Ethernet.h>                              // подключение библиотеки Ethernet
 
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // указание MAC адреса 
IPAddress ip(192, 168, 21, 105);                   // указание статического IP 
 
EthernetServer server(80);                         // инициализация библиотеки Ethernet "server" на порту 80 
 
void setup() 
{
  Serial.begin(9600);                              
  while (!Serial) {;}
 
  Ethernet.begin(mac, ip);                         // запуск сервера  
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}
 
void loop() 
{
  EthernetClient client = server.available();     // прием данных от клиента 
  if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (c == 'n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // соединение будет закрыто после завершения ответа
          client.println("Refresh: 5");  // обновление страницы каждые 5 секунд
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          for (int analogChannel = 0; analogChannel < 6; analogChannel  ) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");
          }
          client.println("</html>");
          break;
        }
        if (c == 'n') {
          currentLineIsBlank = true;
        } else if (c != 'r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disconnected");
  }
}

Скачать файл с кодом, формат .INO: Ethernet w5100

Расположение выводов, распиновка

Разработчики платы Arduino очень удобно и логично расположили выводы платы. Дело в том, что при разработке на «чистых» МК АВР приходилось обращаться к выводу порта, для этого нужно было запомнить название каждой ножки на чипе. Здесь это гораздо проще. На самой плате указано название каждого из пинов. Удобства добавляет и то, что пины разбиты на 3 группы:

  1. Digital – блок цифровых пинов.
  2. Analog – блок аналоговых пинов.
  3. Power – блок пинов, которые связаны с питанием и работой микросхемы.
Распиновка платы
Распиновка платы

При этом в разделе Digital пины, которые могут выдавать ШИМ-сигнал (PWM), помечены тильдой «~». Для служебных целей и проверки работоспособности контроллера на плате установлен светодиод, который подключен к 13-му выводу, а из среды разработки Arduino IDE к нему можно обращаться через встроенную директиву LED_BUILTIN.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *