Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Arduino_labs

.pdf
Скачиваний:
159
Добавлен:
01.03.2016
Размер:
828.21 Кб
Скачать

21

// Создадим счетчик на второй строке lcd.setCursor(0, 1); lcd.print(counter, DEC);

lcd.write(' ');

lcd.write(0); // выведем смайлик

delay(500);

counter++;

}

Рисунок 2.5 - Результат выполнения программы

Для создания символа мы ограничены 8 пикселями в высоту и 5 в ширину. Нужно задать маску в виде 5 двоичных чисел. Рассмотрим на примере смайлика B00010000, B00110100, B00110000, B00110100, B00010000. Если каждое число написать снизу вверх и сложить столбики рядом то визуально выходит смайл:

00000

00000

01010

00000

11111

01110

00000

00000

22

Некоторые функции из библиотеки «PCD8544»:

drawColumn(unsigned char lines, unsigned char value) – позволяет нарисовать вертикальную линию заданной длины, в заданной позиции.

display() и noDisplay() – включить и выключить дисплей.

createChar(unsigned char chr, const unsigned char *glyph) – создать свой собственный символ.

home() – возвращает курсор в начало экрана.

clear() – возвращает курсор в начало экрана и стирает все данные с дисплея.

cursor() и noCursor() – позволяют показать курсор на дисплее (символ подчёркивания) и скрыть его.

stop()- Возвращает курсор в начало экрана и выключает дисплей.

setCursor(unsigned char column, unsigned char line) – установить курсор в заданную позицию.

2.7Порядок выполнения работы

1)Ознакомиться с теоретическими сведениями.

2)Собрать схему LCD-дисплея (см. п.п. 2.5 данной лабораторной

работы)

3)Импортировать и подключить к проекту библиотеку «LiquidCrystal». Если возникали какие-то проблемы при подключении, описать их и методы решения в отчете.

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

Таблица 2.2 – Варианты заданий

Задание

0,1

Организовать перенос получаемых из последовательного порта

 

данных в нижний ряд знакомест дисплея, если они не помещаются

 

в верхнюю строку. Если данные не помещаются даже в две строки,

 

вывести сообщение «Тoo much data» на дисплей.

2,3

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

 

последовательного порта. Строка бежит справа налево сначала в

 

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

 

секунду – 5. Если передаваемая строка длиннее 16 символов,

 

вывести на дисплей сообщение об ошибке.

4,5

Каждую строку, получаемую из последовательного порта

 

отобразить в верхнем ряду знакомест дисплея. При этом

 

предыдущая строка смещается на нижний ряд дисплея. Если в

23

строке больше 16 символов, вывести сообщение об ошибке.

6,7 Организовать перенос получаемых данных из последовательного порта в нижнюю строку дисплея. В верхнюю строку дисплея вывести ФИО и шифр группы.

8,9 Вывести текущую дату на дисплей, начиная с третьего знакоместа второй строки. Сдвигать строку влево. Кол-во кадров в секунду

5.

5)Импортировать и подключить к проекту библиотеку PCD8544. Если возникали какие-то проблемы при подключении, описать их и методы решения в отчете.

6)Написать программу, которая производит индикацию данных на дисплей Nokia, согласно вашему варианту задания. Варианты указаны ниже

втаблице 2.3. Вариант выбирается по последней цифре номера зачетной книжки.

Таблица 2.3 – Варианты заданий

Задание

1,2

Нарисовать закрашенный треугольник на дисплее Nokia с

 

использованием функции drawColumn(unsigned char lines, unsigned

 

char value).

3,4

Вывести в верхней строке дисплея Nokia ФИО, во второй строке

 

шифр группы, в третьей строке создать любой собственный

 

символ.

5,6

Нарисовать первую букву имени на весь дисплей Nokia.

 

Переставлять курсор с помощью функции setCursor() и выводить в

 

заданную позицию любой символ ASCII.

7,8

Coздать собственный символ и вывести его на четвертой позиции

 

пятой строки дисплея Nokia. В правом нижнем углу написать

 

«Created by …».

9,0

Нарисовать номер группы на весь дисплей Nokia. Переставлять

 

курсор с помощью функции setCursor() и выводить в заданную

 

позицию любой символ ASCII.

7)Произвести компиляцию проектов.

8)Загрузить программы в контроллер и проверить их работу.

9)Сделать отчет по выполненной работе.

2.8 Содержание отчета

Отчёт о выполнении лабораторной работы должен содержать:

номер и название работы;

цель работы;

24

краткие теоретические сведения;

порядок выполнения работы;

постановка задачи;

текст программ, разработанных согласно вашего варианта задания, содержащий необходимые комментарии и пояснения;

описание особенностей подключения библиотек и функции, которые были использованы из импортированных библиотек. Также особенности подключения LCD-дисплея.

выводы.

2.9Контрольные вопросы

1)Порядок автоматического подключения внешних библиотек к

Arduino.

2)Порядок ручного подключения внешних библиотек к Arduino.

3)Перечислите основные свойства СOM – портов.

4)Порядок запуска монитора последовательного порта. Для чего используется монитор последовательного порта.

5)Предназначение библиотеки Serial.

6)Основные функции библиотеки Serial.

7)Вывод в последовательный порт чисел в различных системах счисления.

8)Принципы работы дисплеев на жидких кристаллах(см. лаб. роб. 6 методички по Quartus для стендов за пред. семестр)

9)Назначение библиотеки LiquidCrystal.

10)Основные функции библиотеки LiquidCrystal.

11)Основное назначение библиотеки PCD8544.h.

12)Основные функции библиотеки PCD8544.h.

13)Порядок создания собственного символа.

14)Какой из рассмотренных дисплеев (LCD и Nokia) лучше использовать и почему? Какие их особенности и недостатки?

25

3 ЛАБОРАТОРНАЯ РАБОТА №3 РАЗРАБОТКА АВТОНОМНЫХ УСТРОЙСТВ ИЗМЕРЕНИЯ

ХАРАКТЕРИСТИК ОКРУЖАЮЩЕЙ СРЕДЫ

3.1 Цель работы

Изучить основные принципы приема данных с различных сенсоров и датчиков, их обработки и индикации. Изучить и проверить работу датчика температуры и влажности dht11, датчика температуры DALLAS 18b20,

газометра GazSensorV1.3.

3.2 Питание платы Arduino

В технике часто нужно разрабатывать устройства, которые не должны быть сопряжены с компьютером. Чаще всего требуется производить считывания с датчиков каких-либо значений, выполнять их обработку и выводить информацию не через последовательный порт в компьютер, а, например, на ЖК-дисплей. Также возможна ситуация, когда необходимо получить некоторую реакцию на внешний раздражитель. Ярким примером может послужить система подогрева, которая автоматически включается/выключается при определенных значениях температуры. Также таким примером может быть обыкновенная сигнализация.

Arduino Uno может получать питание не только через подключение USB, но и от внешнего источника питания. Внешнее питание может подаваться через преобразователь напряжения AC/DC (блок питания) или непосредственно от аккумуляторной батареи. Преобразователь напряжения подключается посредством разъема 2.1 мм с центральным положительным полюсом. Провода от батареи подключаются к выводам Gnd и Vin разъема питания.

Платформа Arduino может работать при внешнем питании от 6В до 20 В. Однако при напряжении питания ниже 7В, вывод 5В может выдавать напряжение менее 5 В, при этом платформа конечно же может работать нестабильно. При использовании напряжения выше 12В регулятор напряжения может перегреться и повредить плату.

Рекомендуемый диапазон напряжения питания от 7 В до 12 В.

3.3 Калибровка датчиков

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

26

Под калибровкой часто понимают процесс подстройки показаний выходной величины или индикации измерительного инструмента до достижения согласования между эталонной величиной на входе и результатом на выходе (с учётом оговоренной точности). Например, калибровкой медицинского термометра, показывающего температуру здорового человека в 36.6°С и результатом на дисплее 36,3°С, будет добавление 0,3°С.

Калибровка бывает первичной, вторичной и внеплановой. На этапе разработки устройства производится первичная калибровка, которая

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

3.4 Датчик DHT11

Датчик DHD11 предназначен для измерения температуры и влажности окружающей среды. Он отлично подходит для домашнего применения и для задач, которые не требуют высочайшей точности. Назначение выходов датчика изображено на рисунке 3.1. Третий выход не используется.

Рисунок 3.1 – Назначение ножек датчика DHT11

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

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

Недостатки:

1) DHT11 не умеет работать в «паразитном» режиме (питание по линии данных). Про паразитный режим подробнее см. п. 3.4

27

2)У DHT11 нет персонального идентификатора. Наличие такого

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

3)Измерение значений можно производить не чаще, чем один раз в

секунду.

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

 

 

 

Показатель

 

DHT11

 

 

Допустимый диапазон t,°C

 

0..+50

 

 

 

Погрешность измерения t, max

 

±2°C

 

 

Разрешение шкалы t,°C

 

1

 

 

Допустимый диапазон RH, %

 

20..95

 

 

 

Погрешность измерения RH, min

 

±4% при t = +25°C

 

Погрешность измерения RH, max

 

±5%

 

 

Разрешение шкалы RH, %

 

1

 

 

 

Следует отметить, что если датчик попадает в условия, выходящие за допустимые пределы, то погрешность сильно возрастает. Кроме того, ускоряется процесс старения аналогового сенсора, после чего требуется произвести процесс его восстановления. Подробнее об этом можно прочитать в документации по датчику (http://mk90.ru/files/datasheets/dht11.pdf).

Схема подключения датчика изображена на рисунке 3.2.

Рисунок 3.2 – Схема подключения к плате

Рекомендуется подключать резистор-подтяжку на 5 КОм к линии питания, однако он не является обязательным. Также можно подключить конденсатор между линиями питания и земли, который будет выполнять роль фильтра.

Подробное описание работы с датчиком можно найти на официальном сайте http://playground.arduino.cc/Main/DHTLib.

28

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

3.5 Датчик Dallas18B20

Датчик Dallas18b20 позволяет измерять температуру с большей точностью. Он работает по шине One-Wire. Для устройств, работающих по этой шине, в среде Arduino используется библиотека OneWire.

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

Показатель

 

DS18B20

 

 

Допустимый диапазон t,°C

 

-55..+125

Погрешность измерения t, min ±0.5°C при t=10..+85°C Погрешность измерения t, max±2°C

Разрешение шкалы t,°C

 

0.5 / 0.25 / 0.125 / 0.0625

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

Сам датчик изображен на рисунке 3.3.

(а)

(б)

Рисунок 3.3 – Датчик Dallas18b20 (а) и его внутренняя структура (б)

Датчик содержит уникальный 64-битный ROM код, состоящий из 8 битов, определяющих код серии, 48 бит уникального номера и 8 бит помехоустойчивого CRC кода.

29

Информация об измеренной температуре хранится в оперативной памяти датчика, которая состоит из 9 байт:

1 и 2 байты хранят информацию о температуре.

3 и 4 байты хранят соответственно верхний и нижний пределы температуры.

5 и 6 байты зарезервированы.

7 и 8 байты используются для сверхточного измерения температуры. 9 байт хранит помехоустойчивый CRC код предыдущих 8 байт.

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

Логическая линия может быть использована как источник питания,

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

Интерфейс 1-Wire использует паразитное питание.

1-Wireдвунаправленная шина связи для устройств с низкоскоростной передачей данных (обычно 15,4 Кбит/с, максимум 125 Кбит/с), в которой данные передаются по цепи питания (то есть всего используются два провода

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

Обычно интерфейс 1-Wire используется для того, чтобы связываться с недорогими простыми устройствами, такими как, например, цифровые термометры и измерители параметров внешней среды.

Собственно, схема подключения датчика изображена на рисунке 3.4.

Рисунок 3.4 – Схема подключения датчика

30

В лабораторной работе отсутствуют резисторы номиналом 4.7 КОм. Поэтому нужно использовать 5 последовательно соединенных резисторов номиналом 1 КОм каждый.

3.6 Пример работы с датчиками DHT11 и Dallas18b20

Пример №1. Сравнение показаний двух датчиков.

#include <OneWire.h>

#include <DallasTemperature.h> #include <DHT.h>

//Шина данных Wire подключена к пину 2 на плате Arduino #define ONE_WIRE_BUS 2

//Шина данных датчика DHT подключена к пину 4 на плате

#define DHTPIN 4

//Тип датчика DHT #define DHTTYPE DHT11

//Setup a oneWire instance to communicate with any OneWire devices

//инициализация OneWire интерфейса для коммуникации с Dallas 18b20 OneWire oneWire(ONE_WIRE_BUS);

//Указание ссылки к датчику температуры Dallas

DallasTemperature sensors(&oneWire);

//интерфейс DHT

DHT dht(DHTPIN, DHTTYPE);

void setup(void)

{

// Инициализация последовательного порта

Serial.begin(9600);

Serial.println("Dallas Temperature IC Control Library Demo");

sensors.begin();

dht.begin();

Serial.println("DHT and Dallas test!");

}

void loop(void)

{

Serial.print("DHT:\n");

float h = dht.readHumidity(); //чтение показаний влажности c DHD11 float t = dht.readTemperature();//чтение значения температуры с DHD11

// выводим показания датчика DHT if (isnan(t) || isnan(h)) {

print(" Error data!\n");

}else { Serial.print("\tHum: "); Serial.print(h); Serial.print(" %\t");

Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C\n");

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]