Мегаобучалка Главная | О нас | Обратная связь


Данные о комплектующих



2016-09-17 505 Обсуждений (0)
Данные о комплектующих 0.00 из 5.00 0 оценок




ОТЧЕТ ПО УЧЕБНОЙ ПРАКТИКЕ

 

Выполнили:

Студенты группы ИБ-1401

Владимиров Павел

Поликарпов Александр

Смирнов Геннадий

Проверил:

Морозов С.К., ст. преподаватель.

 

 

 

 

 

Санкт-Петербург

 

Оглавление

1. Цель работы.. 3

2. InsideArduino. 4

3. OutsideArduino. 8

4. Данные о комплектующих. 10

5. ИК передача данных. 12

6. Статистические данные. 15

7. Список литературы.. 18

 


 

Цель работы

Создать систему из двух устройств на базе процессоров Arduino. Первое устройство(InsideArduino) должно иметь дисплей для отображения информации, RTC, датчик температуры и ИК-приемник для работы с вторым устройством(OutsideArduino). Второе же включает в себя датчик температуры и ИК-передатчик. При разработке учесть экономическую составляющую.


 

InsideArduino

 

Рис.1 Схема InsideArduino

 

Комплектующие:

1) Arduino Promini (ATmega168 20MU)

2) IR receiver (KY-022)

3) Real Time Clock (DS3231SN)

4) LCD Keypad Shield (LCD1602 IIC/I2C)

 

Функционал:

Во-первых, устройство выполняет все общие функции часов, то есть отображение и настройка даты и времени. Во-вторых, принятие ИК сигнала от OutsideArduino, декодировка данных и сравнение с снятыми данными с встроенного в RTC датчика температуры. Так же присутствуют разные режимы: отображение принимаемого ИК сигнала, часы с температурными показаниями с улицы и из помещения, режим настройки даты и времени.

Режимы работы:

1. Режим цикличного отображения

Запускается при загрузке InsideArduino или при нажатии кнопки Right. Представляет из себя отображение на экране считываемой с датчиков информации: температуры с RTC, температуры принятой по ИК и даты с RTC. Эти данные отображаются по очереди с задержкой на верхней строке дисплея. Так же постоянно отображается время на нижней строке дисплея. Режим можно изменить в любой момент работы этого режима.

2. Режим постоянного принятия ИК сигнала

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

3. Режим настройки RTC

Запускается нажатием кнопки Select. При запуске этого режима на RTC устанавливается дата - 01.01.2010 и время - 00:00:00. Далее отображается дата, и одной из кнопок Select, Left или Up увеличивается день, месяц или год соответственно. Чтобы продолжить или пропустить нужно нажать кнопку Right. После этого отображается время. Кнопками Select и Left можно увеличить час и минуты соответственно. Далее нажимается Right, и настройка заканчивается. После этого вы снова можете выбрать режим. Настройка хоть и не удобна пользователю, но выгодна в плане объёма кода, что было важно в нашем проекте (см. 4.1).

 

Код:

// Подключаем библиотеки для работы с RTC, дисплеем и ИК приемником.#include <DS3231.h>#include <OneWire.h>#include <Wire.h>#include <LiquidCrystal.h>#include <IRremote.h>#define ONE_WIRE_BUS 2int RECV_PIN = 2;IRrecv irrecv(RECV_PIN);// Назначение 2 цифрового выхода для работы с ИК приемником.IRsend irsend;decode_results results;DS3231 rtc(11, 10); // Назначение 10 и 11 цифровых выходов для работы с RTC.LiquidCrystal lcd(8, 9, 4, 5, 6, 7 ); // Назначение цифровых выходов с 4 по 9 включительно для работы с дисплеем.int button;int k=1;int getPressedButton() // Функция для работы с кнопками дисплея.{ int buttonValue = analogRead(0); // Считывание показателей с аналогового выхода 0. if (buttonValue < 100) {return 1;} else if (buttonValue < 200) {return 2;} else if (buttonValue < 400){return 3;} else if (buttonValue < 600){return 4;} else if (buttonValue < 800){return 5;} return 0;}void setup() // Загрузочная функция.{ lcd.begin(16, 2); // Подключение LCD. Serial.begin(9600); irrecv.enableIRIn(); // Подключение ИК приемника. rtc.begin(); // Подключение RTC.}void loop(void) // Функция цикла.{ delay(50); // Задержка на 50 мс. if (k!=1){button = getPressedButton();} button = getPressedButton(); // Считывание значения нажатия кнопки. if (k==1){button=1;k=0;}// Условие для автозапуска режима с Right(1) кнопки. switch (button) { case1:{ // Режим отображения даты, времени, температур внутри и снаружи. int c4=0; // Переменная для цикличного и последовательного отображения информации. while(getPressedButton()==0 || getPressedButton()==1){ if(c4>49){ lcd.setCursor(0, 0); lcd.print(rtc.getDateStr()); // Получение данных о дате с RTC. lcd.print(" ");} if(c4>24&&c4<50){ lcd.setCursor(0, 0); lcd.print("Outside C: "); if (irrecv.decode(&results)) // Получение данных с ИК приемника. { if(results.value!=0x0&&results.value!=0xffffffff){ // Отсеивание искаженных сигналов. float p; // Переменная для принятого сигнала (данных о температуре). p=results.value; // Присвоение данных переменной. p/=100; // Преобразование цифры обратно, после увеличения на OutsideArduino. if(p>-40&&p<200){ // Отсеивание искаженных сигналов. lcd.setCursor(11, 0); lcd.print(p); lcd.print(" ");} }irrecv.resume();}} if(c4<25){ lcd.setCursor(0, 0); lcd.print("Inside C: "); lcd.print(rtc.getTemp()); // Получение данных о температуре с RTC. lcd.print(" ");} lcd.setCursor(0, 1); lcd.print(rtc.getTimeStr()); // Получение данных о времени с RTC. delay(200); if(c4==76 || c4> 76){c4=0;}else{c4++;} } break;} case5: { // Режим настройки даты и времени. lcd.clear(); // В целях оптимизации и сокращения обьема кода настройка была упрощена. // И при запуске данного режима полностью откатывается RTC. int m=1; int d=1; int y=2010; int mi=0; int h=0; int c=1; while(c==1){ lcd.setCursor(0, 0); lcd.print(rtc.getDateStr()); delay(200); if (getPressedButton()==5){ d+=1;} if (getPressedButton()==4){ m+=1;} if (getPressedButton()==3){ y+=1;} if (getPressedButton()==1){ c=0;} rtc.setDate(d,m,y); } c=1; while(c==1){ lcd.setCursor(0, 1); lcd.print(rtc.getTimeStr()); delay(200); if (getPressedButton()==5){ mi+=1;} if (getPressedButton()==4){ h+=1;} if (getPressedButton()==1){ c=0;} rtc.setTime(mi,h,0); } } case3:{ // Режим принятия ИК сигнала с отображением принятого сигнала и декодированной температуры. // Прием и обработка описаны выше. lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(" "); while(getPressedButton()==0 || getPressedButton()==3){ if (irrecv.decode(&results)) { if(results.value!=0x0&&results.value!=0xffffffff){ lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print(results.value, HEX); lcd.setCursor(0, 1); lcd.print(" "); float p; p=results.value; p/=100; lcd.setCursor(0, 1); lcd.print(p); }irrecv.resume();} delay(200);} break;} }}

 

OutsideArduino

 

Рис.2 Схема OutsideArduino

 

Комплектующие:

1) Arduino Promini (ATmega168 20MU)

2) IR transmitter (KY-005)

3) Temperature sensor (DS18B20)

 

Функционал:

Считывание данных с датчика температуры, кодировка и передача данных по средствам ИК сигнала.

 


 

Код:

// Подключение необходимых библиотек для работы с ИК передатчиком и с датчиком температуры.#include <OneWire.h>#include <DallasTemperature.h>#define ONE_WIRE_BUS 6OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire);#include "IRremote.h"IRsend irsend;int t; // Переменная для данных о температуре. void setup() // Загрузочная функция. { Serial.begin(9600); sensors.begin();}void loop() { // Функция основного цикла. sensors.requestTemperatures(); // Получение данных с датчика температуры. Serial.println(sensors.getTempCByIndex(0)); t=sensors.getTempCByIndex(0)*100; // Увеличение данных о темпретуре в 100 раз для упрощения передачи числа. Serial.println(t, HEX); unsigned long data =0x0;// Преобразование температуры из десятичной системы счисления в шестнадцатиричную. data=+t; int nbits = 16;// Кол-во бит в сигнале. irsend.sendNEC(data, nbits);// Кодировка данных в сигнал формата NEC. delay(100);}

 

Данные о комплектующих

 

4.1 Arduino ProMini ATmega168 20MU

Рис *** Arduino ATmega168

 

Изначально система разрабатывалась на Arduino Mega2560, но так как потенциал Mega2560 не был использован полностью нами было принято решение оптимизировать и перенести все на Promini. Изначально код для InsideArduino весил ~23 КБайта и использовал ~1.5 КБайта оперативной памяти, но после оптимизации библиотек и самого кода, а также удаления маловажных функций, код стал занимать 14 028 байт памяти и использует 742 байта динамической памяти. Это дополнительно помогло сделать проект более экономически выгодным.

 

Стоимость 84 руб.
Питание (постоянный ток) От 5 до 12 V
Частота процессора 16 МГц
Размер 33.3*18.0 мм
Кол-во выводов
Цифровые выводы
Аналоговые выводы
Флеш память 16 кБайт
Оперативная память 1 кБайт

 

 

4.2 LCD Keypad Shield

Встроенный IIC/I2C преобразователь. Питание 5В. Работает только с латиницей, но можно добавлять собственные символы.

Шилд с дисплеем LCD1602 подключается через 6 цифровых выходов и 1 аналоговый выводы. Через аналоговый пин подключены 5 кнопок благодаря подключению кнопок через резисторы разного сопротивления (рис. 3). Также для работы шилда необходимо подключить питание и выход Reset.Используемые выводы: А0 - кнопки (Select, Up, Right, Down, Left), D4-D10 - подключение экрана.

Рис.3 Схема подключения кнопок на LCD Keypad Shield.


ИК передача данных

 

InfraRed Data Association - передача данных с использованием инфракрасного диапазона световых волн в качестве среды передачи. Является разновидностью оптической линии связи ближнего радиуса действия.

Была особо популярна в конце 1990-х начале 2000-х годов. В данное время практически вытеснена более современными аналогами, такими как WiFi и Bluetooth.

Основные причины отказа от IrDA были:

1. Усложнение сборки корпусов устройств, в которых монтировалось ИК-прозрачное окно.

2. Ограниченная дальность действия и требования прямой видимости пары приёмник-передатчик.

3. Относительно низкая скорость передачи данных первых реализаций стандарта. В последующих ревизиях стандарта этот недостаток исправили: скоростные возможности немного превышают, например, возможности самой распространённой на сегодняшний момент версии протокола Bluetooth (спецификация 4.0). Однако широкого распространения скоростные варианты IrDA получить уже не успели.

 

В нашей системе передача ИК сигнала происходит через NEC протокол инфракрасного управления. Формат NEC, первоначально разработанный одноименной японской фирмой, встречается в большом количестве вариаций. Здесь представлен так называемый Японский вариант.

Особенности формата:

1) 8 бит данных и 8 бит команда

2) Адрес и команда передаются дважды для исключения ошибки

3) Метод кодирования бит - интервалами

4) Несущая частота 38 кГц

5) Время передачи бита 1.125 мс или 2.25 мс

NEC формат использует для передачи информации опорную частоту 38 кГц со скважностью 3 или 4. Все пакеты кроме преамбулы имеют длительность 560 мкс (21 импульс опорной частоты). "Единица" передается интервалом 2.25 мс, "ноль" - интервалом 1.125 мс.

Рис ** Логические 1 и 0 в NEC формате

Типичный формат посылки NEC состоит из преамбулы - пакета несущей частоты длительностью 9 мс, за которой следует промежуток 4.5 мс. Преамбула помогает приемнику установить необходимый уровень усиления и нуля, хотя современные приемники в этом не нуждаются. Далее следует реперный пакет стандартной длительности и за ней 32 интервала, соответствующие 4 байтам информации, причем каждый байт передается младшим битом вперед. Адрес и команда передаются дважды, второй раз они передаются в дополнительном коде. Общая длительность передачи пакета постоянна, поскольку каждый бит передается сначала в прямом, затем в инверсном виде.

Рис *** NEC сигнал с 8 битами полезной нагрузки

 

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

 

 

Рис *** Преамбула и единичный интервал

Общий вид последовательности при нажатой и удерживаемой кнопке такой:

Рис *** Сигнал при зажимании кнопки

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

Рис *** Сигнал NEC с 16 битами полезной нагрузки

Существует множество форматов передачи данных по ИК излучению, но для наших целей нужен был простой в реализации и понимании формат, поэтому наш выбор пал на NEC.

В нашей системе используется модифицированная версия протокола, которая задается через переменную nbits в нашем коде:

 

int nbits = 16; irsend.sendNEC(data, nbits); Переменная data это 16 бит информации, в нашем случае это целое шестнадцатеричное число.

 

Статистические данные

 

В целях проверки нашей системы мы провели серию опытов относительно положения ИК устройств и условий, влияющих на передачу сигнала. Ниже приведена таблица №1 и график №1 наглядно показывающие работоспособность нашей системы в различных условиях и на разных расстояниях.

 

Расстояние, см Препятствие (условия) Кол-во опытов Кол-во удачно переданных сигналов Процент передачи
Воздух 80%
Воздух 70%
Воздух 85%
Воздух 60%
Воздух 65%
Воздух 70%
~800 Воздух 64%
Стекло 90%
Стекло (Ветреная погода) 65%
Стекло (Ветреная погода) 75%
Мутное стекло 95%
Доска (50 мм) 0%
Бумага (лист А4) 20%

Таб.1 Изучение влияния условий и расстояния на передачу ИК сигнала

 

График. 1 Зависимость качества передачи от расстояния


 

После мы замерили влияние угла поворота устройств приема и передачи инфракрасного излучения. Для этого мы расположили устройства как показано на рисунке . Данные измерений приведены в таблице №2 и на графике №2.

 

Рис. *** Схематичное изображение установки для опытов

 

Расстояние, см Градус поворота ИК передатчика Градус поворота ИК приемника Кол-во опытов Кол-во успешных передач сигнала Процентное соотношение переданных сигналов
94%
15° 70%
30° 50%
60° 75%
90° 35%
120° 15%
150° 40%
180° 0%
15° 80%
30° 75%
60° 55%
90° 65%
120° 60%
150° 30%
180° 0%
15° 15° 75%
30° 30° 55%
60° 60° 0%

Таб. 2 Влияние поворота на передачу ИК сигнала

График 2 Качество передачи при повороте устройств

 

Приняв к сведению эмпирические данные и условия передачи сигнала. Мы рассчитали скорость передачи с использованием формата NEC, в градусном диапазоне от 0° до 15°, при средней потере данных в 28% и на расстоянии в 200 сантиметров, а именно 20 байт в секунду. Чего достаточно для целей нашего проекта, а именно передачи температурных данных.

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


 

Вывод

 

Мы собрали и запрограммировали два устройства, которые составляют из себя систему по беспроводному сбору информации. А именно InsideArduino с функцией часов и отображающую температуру внутри и снаружи, а также OutsideArduino с датчиком температуры.

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

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

Список литературы

1. Arduino блокнот программиста – Brian W. Evans

2. http://arduino.ru/

3.

4. https://www.arduino.cc/

5. http://www.studfiles.ru/preview/2806677/

6. http://led-displays.ru/ir/nec_protocol.html

7.

 

 



2016-09-17 505 Обсуждений (0)
Данные о комплектующих 0.00 из 5.00 0 оценок









Обсуждение в статье: Данные о комплектующих

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (505)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.012 сек.)