Блог

● Проект 17: Сервопривод. Крутим потенциометр, меняем положение

Опубликовано: 23.04.2018
Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
сервопривод;
• потенциометр 1 кОм;
провода папа-папа.
внешний блок питания +5 В.

Сервопривод (см. рис. 17.1) – устройство, обеспечивающее преобразование сигнала в строго соответствующее этому сигналу перемещение (как правило, поворот) исполнительного устройства. Представляет собой прямоугольную коробку с мотором, схемой и редуктором внутри и выходным валом, который может поворачиваться на строго фиксированный угол, определяемый входным сигналом.
Как правило, этот угол имеет предел в 60 в 180. Кроме этого, еще бывают сервоприводы и постоянного вращения.

                                                     Рис. 17.1. Сервопривод

Сервопривод подключается с помощью трех проводов к управляющему устройству (драйверу или контроллеру) и источнику питания. Сервопривод управляется с помощью импульсов переменной длительности. Угол поворота определяется длительностью импульса, который подается по сигнальному проводу. Это называется широтно-импульсной модуляцией. Сервопривод ожидает импульса каждые 20 мс. Длительность импульса определяет, насколько далеко должен поворачиваться мотор. Например, импульс в 1,5 мс диктует мотору поворот в положение 90° (нейтральное положение). Когда сервопривод получает команду на перемещение, его управляющий орган перемещается в это положение и удерживает его. Если внешняя сила действует на сервопривод, когда он удерживает заданное положение, сервопривод будет сопротивляться перемещению из этого положения. Максимальная величина силы, которую может выдерживать сервопривод, характеризует вращающий момент сервопривода. Однако сервопривод не навсегда удерживает свое положение, импульсы позиционирования должны повторяться, информируя сервопривод о сохранении положения.
В нашем эксперименте мы будем управлять положением сервопривода с помощью потенциометра. Схема подключения сервопривода и потенциометра к плате Arduino показана на рис. 17.2.
 Сервопривод TowerPro SG90 подключается к Arduino
Рис. 17.2. Схема подключения сервопривода и потенциометра к Arduino

Cервопривод подключается тремя проводами: питание (Vcc), «земля» (Gnd) и сигнальный (С). Питание– красный провод, он может быть подключен к +5 В внешнего источника питания, черны (или коричневый) провод – «земля» – подключается к GND-выводу Arduino GND, сигнальный (оранжевый/желтый/белый) провод подключается к цифровому выводу контроллера Arduino. Для питания сервопривода используем отдельный блок питания +5 В. Для управления сервоприводом в Arduino имеется стандартная библиотека Servo. На платах, отличных от Mega, использование библиотеки отключает возможность применения analogWrite() (ШИМ) на пинах 9 и 10 (вне зависимости, подключены к этим пинам сервы или нет). На платах Mega до 12 сервоприводов могут использоваться без влияния на функциональность ШИМ, но использование от 12 до 23 сервомашинок отключит PWM ШИМ на пинах 11 и 12.
Аналоговые данные потенциометра (0–1023) масштабируем функцией map() в значения угла поворота сервопривода (0–180) и с помощью библиотечной функции servo.write(angle) даем сервоприводу команду для поворота. Скетч приведен в листинге 17.1.

#include <Servo.h> // подключение библиотеки Servo
Servo servo1;
const int pinServo=8; // Пин для подключения сервопривода
const int POT=0; // Аналоговый вход A0 для подключения потенциометра
int valpot = 0; // переменная для хранения значения потенциометра
int angleServo = 0; // переменная для хранения угла поворота сервы
void setup()
{
// подключить переменную servo к выводу pinServo
servo1.attach(pinServo);
}
void loop()
{
valpot = analogRead(POT); // чтение данных потенциометра
// масштабируем значение к интервалу 0-180
angleServo=map(valpot,0,1023,0,180);
// поворот сервопривода на полученный угол
servo1.write(angleServo);
delay(15); // пауза для ожидания поворота сервопривода
}

Порядок подключения:

1. Подключаем датчик сервопривода и потенциометр по схеме на рис. 17.2.
2. Загружаем в плату Arduino скетч из листинга 17.1.
3. Поворотом ручки потенциометра управляем положением сервопривода.

Листинги программ скачать
Читать далее

● Проект 16: Графический индикатор. Подключение дисплея Nokia 5110

Опубликовано: 23.04.2018
В этом эксперименте мы рассмотрим графический дисплей Nokia 5110, который можно использовать в проектах Arduino для вывода графической информации.

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

контроллер Arduino UNO R3;
плата для прототипирования;
графический дисплей Nokia 5110;
провода папа-папа.
• фоторезистор;
резистор 2 кОм.

Жидкокристаллический дисплей Nokia 5110 – монохромный дисплей с разрешением 84×48 на контроллере PCD8544, предназначен для вывода графической и текстовой информации. Питание дисплея должно лежать в пределах 2.7–3.3 В (максимум 3.3 В, при подаче 5 В на вывод VCC дисплей может выйти из строя). Но выводы контроллера толерантны к +5 В, поэтому их можно напрямую подключать к входам Arduino. Немаловажный момент – низкое потребление, что позволяет питать дисплей от платы Arduino без внешнего источника питания.
Схема подключения Nokia 5110 к Arduino показана на рис. 16.1.

Arduino проект www.arduino-kit.ru
Рис. 16.1. Схема подключения Nokia 5110 к Arduino

Для работы с дисплеем Nokia 5110 будем использовать библиотеку Adafruit_GFX, которая имеет богатые возможности для вывода графики и текста. В нашем эксперименте мы будем получать данные освещенности с фоторезистора, подключенного к аналоговому входу Arduino A0, и выводить данные освещенности в числовом и графическом представлениях. Схема подключения показана на рис. 16.2.

Подключение дисплея Nokia 5110
Рис. 16.2. Схема подключения Nokia 5110 и фоторезистора к Arduino

Код скетча нашего эксперимента показан в листинге 16.1. Мы считываем данные с фоторезистора и отображаем числовое значение, а также в графическом виде (прогресс-бар) значение освещенности в процентах от максимального значения. Значения минимальной и максимальной освещенности берем из эксперимента 13.

// Подключение библиотеки
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// PIN 7 - RST Pin 1 on LCD
// PIN 6 - CE Pin 2 on LCD
// PIN 5 - DC Pin 3 on LCD
// PIN 4 - DIN Pin 4 on LCD
// PIN 3 - CLK Pin 5 on LCD
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);
const int LIGHT=A0; // Контакт A0 для входа фоторезистора
const int MIN_LIGHT=200; // Нижний порог освещенности
const int MAX_LIGHT=900; // Верхний порог освещенности
// Переменная для хранения данных фоторезистора
int val1,val2 = 0;
void setup()
{
display.begin();
// установить контраст фона экрана
// очень важный параметр!
display.setContrast(60);
display.clearDisplay(); // очистить экран
delay(2000);
}
void loop()
{
val1 = analogRead(LIGHT); // Чтение показаний фоторезистора
drawText(val1,1); // вывести текст
// масштабирование значения потенциометра к 0–75
val2= map(val1, MIN_LIGHT, MAX_LIGHT, 0, 75);
// вывод черного прямоугольника в %
display.fillRect(5, 25, val2, 10, 1);
// вывод белой части прямоугольника
display.fillRect(5+val2,25, 75-val2, 10, 0);
display.display();
delay(1000); // пауза перед новым измерением
drawText(val1,2); // стереть текст
}
// процедура вывода текста
void drawText(unsigned long num,int color)
{
display.setTextSize(2); // размер шрифта
display.setCursor(20,5); // позиция курсора
if(color==1)
display.setTextColor(BLACK); // вывести значение
else
display.setTextColor(WHITE); // стереть (белым по белому)
display.print(num);
}

Порядок подключения:

1. Подключаем датчик дисплея Nokia 5110 и фоторезистор по схеме на рис. 16.2.
2. Загружаем в плату Arduino скетч из листинга 16.1.
3. Перекрывая рукой поток света, смотрим на экране дисплея изменение показаний освещенности.

Листинги программ скачать
Читать далее

● Проект 15: Индикатор LCD1602. Принцип подключения, вывод информации на него

Опубликовано: 23.04.2018
В этом эксперименте мы познакомимся с жидкокристаллическими индикаторами Winstar для вывода символьной информации. Научимся в Arduino-проектах применять библиотеки и создадим проект вывода показаний датчика температуры LM335 на экран дисплея.

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

контроллер Arduino UNO R3;
плата для прототипирования;
LCD-экран WH1602;
резистор 2,2 кОм;
резистор 50 Ом;
• потенциометр 1 кОм;
• датчик температуры LM335;
провода папа-папа.
внешний блок питания +5 В.

Жидкокристаллические индикаторы (ЖКИ, англ. LCD) являются удобным и недорогим средством для отображения данных ваших проектов. Символьный индикатор WH1602 позволяет выводить на экран 2 строки по 16 символов (размером 5×7 или 5×10 и дополнительная строка под курсор). Управляет работой дисплея контроллер.
На рис. 15.1 показан ЖКИ Winstar с контроллером HD44780.

Рис. 15.1. ЖКИ WH1602 на контроллере HD44780

Назначение выводов контроллера:

• DB0–DB7 – отвечают за входящие/исходящие данные;
• RS – высокий уровень означает, что сигнал на выходах DB0–DB7 является данными, низкий – командой;
• R/W – определяет направление данных (чтение/запись). Так как операция чтения данных из индикатора обычно бывает невостребованной, то можно установить постоянно на этом входе низкий уровень;
• E – импульс длительностью не менее 500 мс на этом выводе определяет сигнал для чтения/записи данных с выводов DB0–DB7, RS и W/R;
• V0 – используется для задания контраста изображения;
• A, K – питание подсветки (анод и катод), если она имеется;
• VSS – земля;
• VDD – питание ЖК-индикатора.

Для управления ЖК-индикатором необходимо 6 или 10 выводов Arduino, в зависимости от того, выбран 4- или 8-битный режим обмена данными. Для сокращения требуемого числа выводов микроконтроллера можно работать в 4-битном режиме. В этом случае на выводах DB4–DB7 индикатора сначала будут передаваться старшие четыре бита данных/команды, затем – младшие четыре бита. Выводы DB0–DB3 останутся незадействованными.

В нашем эксперименте мы будем считывать данные с датчика температуры LM335, который мы рассмотрели в эксперименте 13, и выводить на экран ЖКИ значение температуры в Кельвинах и градусах Цельсия. Схема подключения датчика температуры и ЖКИ в 4-битном режиме к плате Arduino показана на рис. 15.2. Заметьте, что для питания ЖКИ нужен отдельный блок питания +5 В.

Приступим к написанию скетча. Функционал Arduino может быть расширен за счет использования библиотек. Библиотеки Arduino предоставляют дополнительную функциональность для использования в скетчах и сильно упрощают процесс написания программ. Ряд основных библиотек устанавливается вместе со средой Arduino IDE, а дополнительные, которых очень много, вы можете установить сами. При работе Arduino с ЖКИ-дисплеями на контроллере HD44780 будем использовать библиотеку LiquidCrystal. Для подключения библиотеки в начале скетча вставляем строку

#include

Arduino проект www.arduino-kit.ru
Рис. 15.2. Схема подключения датчика температуры и ЖКИ к Arduino
 
Затем создаем переменную типа LiquidCrystal
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
где 12, 11, 7, 6, 5, 4 – номера контактов RS, E, D4, D5, D6, D7.
В setup() запускаем функцию lcd.begin(), определяющую размерность индикатора, для установки курсора в определенную позицию – lcd.setCursor(), для вывода информации на экран дисплея – cd.print().
Содержимое данного скетча показано в листинге 15.1.

// Подключение библиотеки
#include <LiquidCrystal.h>
// инициализация с указанием контактов подключения
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
const int LM335=A0; // для подключения LM335
void setup() {
// установить размерность дисплея
lcd.begin(16, 2);
}
void loop()
{
double val = analogRead(LM335); // чтение
double voltage = val*5.0/1024; // перевод в вольты
// вывод значения в Кельвинах
lcd.setCursor(2,0);
lcd.print("Tk="); lcd.print(voltage*100); lcd.print("K");
double temp = voltage*100 - 273.15; // в градусы Цельсия
// вывод значения в градусах Цельсия
lcd.setCursor(2,1);
lcd.print("Tc="); lcd.print(temp); lcd.print("");
delay(1000); // пауза перед следующим измерением
}


Порядок подключения:

1. Подключаем датчик LM335 и ЖКИ по схеме на рис. 15.2.
2. Загружаем в плату Arduino скетч из листинга 15.1.
3. Смотрим на экране дисплея показания датчика температуры в Кельвинах и градусах Цельсия (рис. 15.2).

Листинги программ скачать
Читать далее

● Проект 14: Датчик температуры аналоговый LM335. Принцип работы, пример работы

Опубликовано: 23.04.2018
В этом эксперименте мы познакомимся с аналоговым датчиком для измерения температуры LM335.

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

контроллер Arduino UNO R3;
плата для прототипирования;
• датчик температуры LM335;
резистор 2,2 кОм;
RGB-светодиод;
резистор 220 Ом – 3 штуки;
провода папа-папа.

LM335 – это недорогой температурный чувствительный элемент с диапазоном от –40 °C до +100 °C и точностью в 1 °C. По принципу действия датчик LM335 представляет собой стабилитрон, у которого напряжение стабилизации зависит от температуры. При повышении температуры на один градус Кельвина напряжение стабилизации увеличивается на 10 милливольт. Для измерения температуры ис- пользуются 2 вывода, третий нужен для калибровки датчика. В качестве примера использования датчика LM335 создадим индикатор температуры окружающей среды на RGB-светодиоде. Схема подключения показана на рис. 14.1.
Приступим к написанию скетча. Нам необходимо получить значение с аналогового входа A0 подключения датчика LM335, перевести в значение в вольтах, исходя из значения опорного напряжения +5 В. Мы получим значение температуры в Кельвинах. Для получения значения в градусах Цельсия полученное значение необходимо уменьшить на величину 273.15. Определим комфортное значение температуры в интервале MIN_T–MAX_T (20–27 °C). При попадании значения в этот интервал RGB-светодиод горит желтым цветом, при пониженном значении – синим, при повышенном – красным.
Для проверки выводим значение температуры в монитор последовательного порта Arduino IDE.

Arduino проект www.arduino-kit.ru
Рис. 14.1. Схема подключения датчика температуры и RGB-светодиода к Arduino

const int BLUE=9; // Вывод BLUE RGB-светодиода
const int GREEN=10; // Вывод GREEN RGB-светодиода
const int RED=11; // Вывод RED RGB-светодиода
const int lm335=A0; // для подключения LM335
int MIN_T=20; // Нижний порог
int MAX_T=30; // Верхний порог
int val = 0;
void setup()
{
// конфигурируем выводы светодиоды как OUTPUT
pinMode(RED,OUTPUT);
pinMode(GREEN,OUTPUT);
pinMode(BLUE,OUTPUT);
}
void loop()
{
double val = analogRead(lm335); // чтение
double voltage = val*5.0/1024; // перевод в вольты
double temp = voltage*100 - 273.15; // в градусы Цельсия
Serial.print(" temp = ");
Serial.println(temp);
if(temp < MIN_T) // синий цвет RGB-светодиода
setRGB(0,0,1);
else if(temp > MIN_T) // красный цвет RGB-светодиода
setRGB(1,0,0);
else // желтый цвет RGB-светодиода
setRGB(1,0,0);
delay(1000); // пауза перед следующим измерением
}
// установка цвета RGB-светодиода
void setRGB(int r, int g, int b)
{
digitalWrite(RED,r);
digitalWrite(GREEN,g);
digitalWrite(BLUE,b);
}


Порядок подключения:
1. Подключаем датчик LM335 и RGB-светодиод по схеме на рис. 14.1.
2. Загружаем в плату Arduino скетч из листинга 14.1.
3. Смотрим в мониторе последовательного порта Arduino IDE вывод значений температуры, RGB-светодиод показывает интервал комфортности температуры.

Листинги программ скачать
Читать далее

Главное меню

Каталог

Полезные ссылки

Цена
от
до