Федеральное агентство железнодорожного транспорта
Омский государственный университет путей сообщения
Кафедра «Автоматика и системы управления»
РАЗРАБОТКА ЦИФРОВОГО УСТРОЙСТВА
НА БАЗЕ МИКРОКОНТРОЛЛЕРА ATMEL
Пояснительная записка к курсовому проекту
по дисциплине «Программирование аппаратных средств ЭВМ»
ИНМВ.302000.000 ПЗ
Студентка гр. 24 М
____________Г.И. Магай
«__»________2017 г.
Руководитель - доцент
кафедры АиСУ
____________А.C. Окишев
«__»________2017 г.
Омск 2017
Задание
Тема данного курсового проекта - «Отображение и хранение температурных показаний с помощью веб-интерфейса».
В курсовом проекте необходимо разработать принципиальную схему, топологию макетной платы, прошить микроконтроллер.
Реферат
Пояснительная записка содержит 17 страниц, 3 рисунка, 3 таблицы, 4 источника, 1 приложение.
Arduino UNO, датчик влажности и температуры DHT11, макетная плата, соединительные провода.
Цель работы - разработать устройство беспроводной системы передачи температурных показаний.
В результате курсового проекта разработана топология макетной платы, собрана макетная схема, написан соответствующий скетч для микроконтроллера, прошит микроконтроллер.
Курсовой проект выполнен в текстовом редакторе Microsoft Word 2010, прошивка написана в Arduino IDE, разработка топологии макетной платы выполнена в Fritzing.
Содержание
1 Разработка принципиальной схемы
Принципиальная схема, принципиальная электрическая схема - графическое изображение (модель), служащее для передачи с помощью условных графических и буквенно-цифровых обозначений (пиктограмм) связей между элементами электрического устройства.
1.1 Микроконтроллер
Микроконтроллеры выпускают десятки компаний, причем производятся не только современные 32-битные микроконтроллеры, но и 16, и даже 8-битные (как i8051 и аналоги).
Микроконтроллеры Atmel объединяют в себе эффективные встроенные решения, проверенные технологии и революционные идеи, являясь идеальным выбором для современных интеллектуальных сетевых продуктов.
Микроконтроллеры Atmel также поддерживают простую и удобную интеграцию технологии емкостного сенсорного ввода для реализации кнопок, ползунков и колес прокрутки. Кроме того, микроконтроллеры Atmel позволяют внедрять беспроводные функции и функции защиты.
В качестве микроконтроллера выбран Arduino Leonardo на базе ATmega32u4 (рисунок 1).
Arduino Leonardo имеет 20 цифровых вход/выходов (из них 7 могут использоваться в качестве выходов ШИМ и 12 - как аналоговые входы), кварцевый генератор частотой 16 МГц, гнездо микро-USB, разъем ICSP и кнопку reset. На ней есть все, что необходимо для работы с микроконтроллером. ATmega32u4 имеет 32 КБ флеш-памяти (вместе с 4 КБ, которые используются загрузчиком (бутлодером)). Также контроллер имеет 2,5 КБ ОЗУ и 1 КБ EEPROM (чтение и запись которой производится с помощью библиотеки EEPROM).
Рисунок 1 - Микроконтроллер Arduino Leonardo
Назначение выводов микроконтроллера Arduino Leonardo представлено в таблице 1, на рисунке 2.
Рисунок 2 - Назначение выводов микроконтроллера Arduino Leonardo
Таблица 1 - Назначение выводов микроконтроллера Arduino Leonardo
|
Вывод |
Назначение |
|
|
PD3 |
Цифровой вывод ШИМ |
|
|
PD5 |
Цифровой вывод ШИМ |
|
|
PD6 |
Цифровой вывод ШИМ |
|
|
PB5 |
Цифровой вывод ШИМ |
|
|
PB6 |
Цифровой вывод ШИМ |
|
|
PB7 |
Цифровой вывод ШИМ |
|
|
PC7 |
Цифровой вывод ШИМ |
|
|
5V |
Вывод для напряжение 5 В от стабилизатора платы |
|
|
3.3V |
Вывод для напряжения 3,3 В от стабилизатора напряжения платы |
|
|
GND |
Выводы земли |
|
|
VIN |
Напряжение от внешнего источника питания |
|
|
PF0 |
Аналоговый вход |
|
|
PF1 |
Аналоговый вход |
|
|
PF4 |
Аналоговый вход |
|
|
PF5 |
Аналоговый вход |
|
|
PF6 |
Аналоговый вход |
|
|
PF7 |
Аналоговый вход |
|
|
PD2 |
Используется для передачи данных по последовательному интерфейсу RX0 |
|
|
PD3 |
Используется для передачи данных по последовательному интерфейсу TX1 |
|
|
AREF |
Аналоговое опорное напряжение |
|
|
PD1 |
АЦП пины на цифровом пине |
|
|
PD4 |
АЦП пины на цифровом пине |
|
|
PE6 |
АЦП пины на цифровом пине |
|
|
IOREF |
Предоставляет платам расширения информацию о рабочем напряжении |
|
|
PD0 |
Используется для связи с другими устройствами по шине I2C |
|
|
PD1 |
Используется для связи с другими устройствами по шине I2C |
1.2 DHT11 датчик
Плата модуля содержит основные компоненты: датчик температуры и относительной влажности DHT11 в синем корпусе, светодиод индикации питания и вилка соединителя. Внутри DHT11 небольшая плата с компонентами: емкостным датчиком влажности, терморезистором, имеющим отрицательную характеристику и микроконтроллером.
Рисунок 3 - Назначение выводов датчика DHT11
Характеристики:
? измерение температуры и относительной влажности;
? низкое энергопотребление;
? измерение температуры в диапазоне 0°C - 50°C (погрешность ±2°C);
? измерение влажности в диапазоне 20% - 90% (погрешность ±5%)
? шаг измерения температуры 1°С;
? напряжение питания 3 - 5,5В;
? максимальный потребляемый ток 2,5мА;
? потребляемый ток в режиме ожидания: 150нА.
Датчик влажности и температуры DHT11 способен работать, только если он один подключен к линии интерфейса.
На плате модуля контакт информационного сигнала соединен с линией питания резистором 10 кОм. При использовании соединения длинной 20 м этот резистор следует заменить на 4,7 или 5,1 кОм. Для соединения протяженностью более 30 см для информационного сигнала необходимо применять экранированный провод. В этом случае использовать экран сигнального провода в качестве проводника GND запрещается. Подключение к общему проводу должно выполняться как обычно отдельным проводом. Электрическое соединение экрана производится в соответствии с правилами экранирования для защиты от помех. К линиям питания датчика должен быть подключен конденсатор. Выход датчика соединяется с интерфейсом 1-Wire микроконтроллера. После включения питания и до первого обращения к датчику должно пройти не менее 1 секунды. Микроконтроллер должен установить соединенный с датчиком вывод в режим выхода. Далее на выходе МК формируется лог. 0 продолжительностью не менее 18 мс, представлено на рисунках 4,5.
Рисунок 4 - Представление сигнала
Затем выход МК переводится в лог. 1 на время не менее 50 микросекунд. После этого МК переводит контакт в режим входа, готовясь принимать данные.
Рисунок 5 - Представление сигнала
Датчик влажности и температуры DHT11 выходит из режима ожидания и примерно через 25…45 микросекунд датчик отвечает микроконтроллеру, переводя линию на 80 микросекунд в лог. 0, а затем на 80 микросекунд в лог.
1.3 Ethernet - контроллер w5100
Плата расширения Aduino Ethernet построена на базе Ethernet-контроллера Wiznet W5100, который позволяет Ардуино подключаться к сети Интернет. Wiznet W5100 поддерживает стек сетевых протоколов (IP) и позволяет работать как с TCP, так и с UDP-протоколами. При этом микросхема может обслуживать до четырех одновременно открытых сокет-соединений. Для написания программ, работающих с глобальной сетью через плату расширения, рекомендуется использовать библиотеку Ethernet. Для подключения платы расширения к Ардуино предусмотрен специальный разъем, представляющий собой металлические выводы ("папа") с одной стороны платы и гнезда ("мама") - с другой стороны. Такая конструкция позволяет подключить к Ардуино сразу несколько плат расширения, разместив их одну над другой.
Последняя версия платы расширения поддерживает стандартную распиновку 1.0, принятую в модели Arduino UNO R3.
Плата расширения Ethernet поддерживает технологию "Power over Ethernet" и имеет стандартный разъем RJ-45 со встроенной гальванической развязкой.
На плате предусмотрен разъем для подключения micro-SD карты памяти, что дает возможность хранения файлов и организации сетевого доступа к ним. Устройство совместимо с Arduino Uno и Mega (используется библиотека Ethernet). Для работы со встроенным microSD-кардридером служит библиотека SD. Для активизации кардридера с помощью этой библиотеки в качестве вывода SS следует указывать вывод 4. Самая первая версия платы расширения Ethernet содержала полноразмерный разъем для SD-карт, который в настоящее время не поддерживается.
В устройстве также реализована функция управления сбросом Ethernet-модуля W5100 при подаче питания. Необходимость в этой функции обусловлена тем, что предыдущие версии платы расширения были несовместимыми с Arduino Mega, из-за чего приходилось вручную сбрасывать Ethernet-модуль после каждой подачи питания.
Текущая версия платы расширения поддерживает технологию Power over Ethernet (PoE) и может работать со специальным модулем, позволяющим получать энергию через Ethernet-кабель, который представляет собой обычную витую пару категорий. Достоинства контроллера:
- низкий уровень выходных пульсаций и шума (100 мВ от пика до пика);
- диапазон входного напряжения от 36В до 57В;
- защита от перегрузок и коротких замыканий;
- выходное напряжение 9В;
- DC-DC преобразователь с высоким КПД: 75% при 50% нагрузке;
- изоляция между входом и выходом в 1500В.
Ардуино взаимодействует с микросхемой W5100 и SD-картой памяти по одной SPI-шине (через разъем ICSP). На Duemilanove шина SPI занимает цифровые выводы 11, 12 и 13, а на Arduino Mega - 50, 51 и 52. На обеих платах в качестве выводов для активизации микросхемы W5100 или SD-карты памяти используются выводы 10 и 4 соответственно. Поэтому данные выводы не могут использоваться в качестве выводов общего назначения для выполнения каких-то других функций. Следует также помнить, что для корректной работы SPI-интерфейса аппаратный вывод SS Arduino Mega (53) должен быть всегда сконфигурирован как выход, несмотря на то, что он не взаимодействует ни с W5100, ни с SD-картой памяти.
Рисунок 2 - Внешний вид Ethernet -контроллера W5100
2 Разработка схемы соединений
Ниже представлена принципиальная схема подключения Ардуино, модуля и датчика. Датчик DHT11 подключен с помощью соединительных проводов к пинам на плате Arduino, соединил разъем GND на микроконтроллере с выводом земли на макетной плате, выход DATA в датчике соединён с пином 7 на плате, вывод VCC соединён с питанием 5V на плате.
Рисунок 3 - Схема соединений на макетной плате.
3 Прошивка микроконтроллера и разработка программы
Запись прошивки в микроконтроллер осуществляется с помощью Arduino IDE (рисунок 9).
Микроконтроллеры для Arduino отличаются наличием предварительно прошитого в них загрузчика (bootloader). С помощью этого загрузчика пользователь загружает свою программу в микроконтроллер без использования традиционных отдельных аппаратных программаторов. Загрузчик соединяется с компьютером через интерфейс USB (если он есть на плате) или с помощью отдельного переходника UART-USB. Поддержка загрузчика встроена в Arduino IDE и выполняется в один щелчок мыши.
Что бы работать с DHT-11, подключаем библиотеку dht11.h прописываем пин на котором подключен датчик (у нас будет 7 цифровой пин) и вводим переменные. Чтобы на страницу выводить русские символы, кириллицу, вызываем команду установки кодировки текста. А чтобы наша страничка обновляла значения с датчиков пишем тег "refresh" со значением 5 секунд.
Код программы представлен в листинге А.
Заключение
В ходе выполнения курсового проекта была изучена документация микроконтроллера Arduino Leonardo, а также подключаемых модулей Wiznet W5100, температурного датчика DHT11, собрана схема в специальном программном пакете Fritzing. Произведено описание структурной схемы.
Библиографический список
1 Arduino IDE [Электронный ресурс] - Режим доступа: http://www.arduino.cc
2 Микроконтроллер Arduino Leonardo [Электронный ресурс] - Режим доступа:https://www.arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3b.pdf
3 Температурный датчик DHT11 [Электронный ресурс] - Режим доступа: https://datasheets.maximintegrated.com/en/ds/ DHT11.pdf
4 Fritzing [Электронный ресурс] - Режим доступа: https://fritzing.org/ /download/
Приложение А
(Обязательное)
Листинг программы
#include <dht11.h>
#include <SPI.h>
#include <Ethernet.h>
dht11 DHT;
#define DHT11_PIN 7
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 43, 177);
EthernetServer server(80);
void setup() {
Ethernet.begin(mac, ip); //инифиализация библиотеки Ethernet server library
server.begin();
}
void loop() {
// listen for incoming clients // если подключился клиент, это значит, что у него будут байты, которые можно будет прочитать:
EthernetClient client = server.available();
if (client) {
// an http request ends with a blank line // считываем байты, пришедшие от клиента, а затем отправляем их
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Connection: close");
client.println();