Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Типизация данных в lua не обязательна. В синтаксисе разбиение на строки не имеет значения, как и точка с запятой.



Следующие 3 записи абсолютно эквивалентны:

· a = 1

b = a*2

· a = 1;

b = a*2;

· a = 1 b = a*2

Пример базового когда на NodeMCU:
local pin = 7
local status = gpio.LOW
local duration = 1000

gpio.mode(pin, gpio.OUTPUT) -- переключение GPIO на вход или выход
gpio.write(pin, status)       -- установка состояния GPIO

tmr.alarm(0, duration, 1, function () -- выполнение функции по расписанию
if status == gpio.LOW then
status = gpio.HIGH
else
status = gpio.LOW
end

gpio.write(pin, status)
end)

 













СПЕЦИАЛЬНАЯ ЧАСТЬ

Общая постановка задачми

     

Требования для данного устройства:

· Подключение к маршрутизатору через Wi-Fi (проводное соединение недопустимо).

· Управление мощными бытовыми приборами.

· Управление через веб-интерфейс.

· Поддержка протокола MQTT.

· Максимально низкая себестоимость, но не в убыток качеству.


 


Структурная и функциональная схема программы

         

 

Описание модулей

   Умная Розетка состоит из четырех основных элементов:

· Платформа Esp, отдает команды реле, принимает и отправляет данные и проводит вычисления.

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

· Реле, управляет нагрузкой

· Источник питания для вышеперечисленных модулей.

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

     Сравнение платформ Esp, использованных в образцах:

  Удешевленный ESP 01 (рис. 1) Сбалансированный Lolin v3 (рис. 2)
Размер 13× 21 мм 32× 58 мм
Цена $1.62 $2.88
Flash память 1 мб 4 мб
GPIO 4 (2 UART, 2 PWM) 11(1 АЦП, 10 PWM, 2 UART, 2 I2C, 3 SPI)
Поддержка TCP/IP Да Да
Потребление тока 220 мА 320 мА
Поддерживаемые режимы Wi-Fi Точка доступа, клиент Точка доступа, клиент

 

Наличие усилителей мощности и систем защиты Нет Стабилизатор тока, сглаживающие конденсаторы и фильтры
Интерфейс USB Нет Micro USB
Наличие встроенного программатора Нет CH340

 

Преобразователь логических уровней в упрощеной модели сделан на основе транзистора и пары резисторой, что делает его стоимость равной паре центов. В оптимальной моделе используется многоканальный двунаправленный преобразователь 3.3-5В, стоимостью $0.70.

 Реле – электромеханический модуль, а следовательно, подвержен износу. Поэтому нет смысла максимально экономить на реле, от его качества зависит долговечность всей конструкции. Хорошим выбором является реле с управляющим напряжением 5 В и коммутирующей нагрузкой 220 В 10 А, стоимостью $0.5.

Источник питания также является модулем, экономия на котором может пагубно отразиться на готовом продукте. При выборе источника питания есть нюанс: если в начале эксплуатации он выдает заявленный производителем ток без просадок по напряжению, обладает низкими пульсациями напряжения и не перегревается, то этот модуль врядли выйдет из строя ближайший десяток лет, так как ломаться там не чему. В дешевой модели используется блок питания от зарядного устройства, что крайне ненадежно. Силовые контакты оголены, а пульсации напряжения достигают 40 мВ. В оптимальной модели применен компактный блок питания на 5 В 600 мА, полщадью не превышающий плату lolin v3. Это лучший кандидат со всего рынка, учитывая цену, размер и качество. Такой блок питания обойдется в $2.

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

 

                                               Рис 1.

 

Электроника для удешевленного варианта обошлась в $3, но данный прототип нельзя назвать успешным.

 

 

рис. 2

Образец с оптимальной схемой обойдется в $ 6.1.

 

 

Программная инициализация будет выглядеть так:

// Arduino MEGA

 LiquidCrystal lcd(22, 23, 24, 25, 26, 27);

// Arduino UNO

LiquidCrystal lcd(4, 5, 8, 9, 10, 11);

 

Температура, влажность DHT11..

Подключение датчика температуры и влажности DHT11 (SainSmart). Датчик расположите лицевой стороной вверх, выводы будут описаны слева направо.

DHT11 Arduino Mega
DATA Digital pin 2 (PWM) (см. ниже DHTPIN)
VCC 3, 3—5 В (рекомендуется 5 В, лучше внешнее питание)
GND GND

 

Программная инициализация

#define DHTPIN 2 // цифровой пин Digital pin 2 (PWM)

#define DHTTYPE DHT11 // см. DHT.h

 

// инициализация

DHT dht(DHTPIN, DHTTYPE);

 

Барометр BMP180.

Подключение датчика атмосферного давления BMP180 (барометр) + температура по интерфейсу I2C/TWI.

BMP180 Arduino Mega
VCC не подключен
GND GND
SCL 21 (SCL)
SDA 20 (SDA)
3, 3 3, 3B

 

Для UNO: A4 (SDA), A5 (SCL).

// инициализация

Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085); // sensorID

 

Таблица 1 - Модули используемые в проекте

Позиция Описание
Плата Arduino Uno Процессор: ATmega328p Тактовая частота: 16 МГц Память: 32 кб flash Контакты: 20 Габариты: 6, 9× 5, 3 см  
Датчик температуры и влажности DHT 11 Потребляемый ток: 100 – 150 мкА Напряжение питания: 5 В Диапазон температур: 0-50 ˚ С Погрешность измерения температуры: ± 2˚ С Диапазон влажности: 20 – 90 % Погрешность влажности: ±5% Частота измерения: 1 раз в 2 секунды  
Барометр BMP085 Потребляемые ток: 5 мкА Напряжение питания: 3 - 5 В Диапазон давления: 30 – 110 кПа Разрешение: 3 Па ( 25 см) высокоточный режим и 6 Па (50 см) в обычном режиме  
LCD-дисплей 1602 Напряжение питания: 5 В Размер дисплея: 2.6 дюйма Тип дисплея: 2 строки по 16 символов Цвет подсветки: синий Цвет символов: белый Габаритные: 80мм x 35мм x 11мм
Модуль реального времени DS1302 Напряжение внешнего питания: 4, 5–5, 5В Напряжение питания батарейки: 2–3, 5 В Потребляемый ток: 500 нА (≈ 6 месяцев на батарейке) Выходной интерфейс: I² C Габариты: 25, 4× 25, 4 мм  

2.4 Таблица идентификаторов

Идентификаторов - это уникальный признак объекта, позволяюший различать объекты или объект различающий объекты по идентификатору.

Таблица 2 -Таблица идентификаторов

Идентификатор Тип Описание
#include Синтаксис #include используется для включения сторонних библиотек в ваш скетч.
int() Преобразование типов Приводит значение к типу int.
float() Преобразование типов Приводит значение к типу float.
const Область видимости переменной и спецификаторы Это спецификатор, который изменяет поведение переменной и делает ее доступной только для чтения.
unsigned int Данные Переменные типа unsigned int (беззнаковые целые) схожи с int-переменными тем, что они содержат двухбайтовые значения.
void Данные Kлючевое слово void используется только при объявлении функций.
If…else Управляющие операторы Проверка на истину выражения.
  delay   Время   Приостанавливает выполнение программы на указанный промежуток времени (в миллисекундах). (В 1 секунде - 1000 миллисекунд.)

 

ЗАКЛЮЧЕНИЕ

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

CПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

1. ВикипедиЯ/материал на тему «Метеостанция»

 

ПРИЛОЖЕНИЕ А

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

 

Настоящее техническое задание распространяется на метеостанцию.

Бытовые метеостанции позволяют получать точные показания о температуре и влажности в помещении и за окном (как правило, только цифровые метеостанции), измерять атмосферное давление, анализировать динамику изменения атмосферного давления, на основании которого самостоятельно делать прогноз погоды на 6-36 часов (только цифровые). Цифровые метеостанции имеют возможность подключения дополнительных беспроводных датчиков, которые будут передавать информацию о температуре (иногда и влажности) в помещениях вашего дома, гараже или улице в радиусе их действия.

1 Основание для разработки

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

 

2 Назначение разработки

Основным назначением проекта является демонстарция огромнейшего потенциала микроконтроллера Arduino.

 

3 Требование к программе и программному изделию

3.1Требования к функциональным характеристикам:

- Своевременное отображение данных на дисплее;

- Удобный интерфейс и легкая возможность отключения питания;

- Удобноемодернизирование;

3.2 Требования к надежности:

- Предусмотреть контроль полученной информации о погодных условиях;

- Предусмотреть блокировку некорректных действий пользователя;

3.3Требования к составу и параметрам технических средств:

 

ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ А

 

3.5 Требования к транспортированию и хранению

Хранить и транспортировать проект нужно в влагозащитном чехле.

 

 

Таблица 1.А – Этапы и стадии разработки

№ этапа Дата работ Названия этапов
1   02.11.18 Изучение предметной области.
2   03.11.18 Общая постановка решаемой задачи.
3   04.11.18 Анализ входных и выходных с датчиков.
4   14.11.18 Сборка технической части проекта.  
5 15.11.18 Создание кода программы.
6 16.11.18 Отладка программы.
7 17.11.18 Тестирование программного обеспечения.
8 19.11.18 Создание всей необходимой документации.

 

ПРИЛОЖЕНИЕ Б

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

 

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

Мтеостанция нуждается в смене питания каждые 3-4 недели, в зависимости от частоты использования. Необходимая батарея «Крона».

 

 

ПРИЛОЖЕНИЕ В

ЛИСТИНГ ПРОГРАММЫ

 

/* СОЕДИНЕНИЯ

Подключение датчика температуры-влажности DHT11 ---

- OUT > цифровой пин 9

- " +" > +3V (+5V)

- " -" > GND

Подключение датчика давления-температуры BMP085 ---

- VCC > 3.3V; (поддерживается 1.8 - 3.6 В)

- GND > GND

- SDA > аналоговый пин A4

- SCL > аналоговый пин A5

Детектор газа --------------------------------------

- A0

- VCC

- GND

ЖКИ ------------------------------------------------

- LCD RS      > к цифровым выводам 12 - 8

- LCD Enable > к выводам 11 - 9

- LCD D4      > к выводам 5 - 4

- LCD D5      > к выводам 4 - 5

- LCD D6      > к выводам 3 - 6

- LCD D7      > к выводам 2 - 7

- LCD R/W    > GND

- 10K резистор между +5V и землёй

- сброс          > к LCD VO (пин 3)

*/

// Подключение библиотек:

#include < dht11.h> // датчика температуры-влажности

#include < LiquidCrystal.h> // LCD

#include < Wire.h> // датчика BMP085

#include < MQ135.h> // газовый детектор MQ135

 

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); /* соединение LCD-шилда

\x## - для вывода кириллических символов, где ## - номера символов в таблице */

dht11 sensorTempHumid; // датчик температуры и влажности

MQ135 gasSensor = MQ135(A0); // датчик газа

#define RZERO 76.63

float rzero; // показания с датчика газа

float ppm;

 

int del = 5000; // задержка, мс

 

/* Oversampling Setting (OSS) -

настройки разрешения для датчика давления BMP085,

см. https: //www.sparkfun.com/tutorials/253

OSS может быть 0, 1, 2 или 3:

0 - ультранизкое потребление, низкое разрешение;

1 - стандартное потребление;

2 - высокое разрешение;

3 - ультравысокое разрешение и максимальное потребление. */

const unsigned char OSS = 0;

 

// Калибровочные переменные для BMP085:

int ac1;

int ac2;

int ac3;

unsigned int ac4;

unsigned int ac5;

unsigned int ac6;

int b1;

int b2;

int mb;

int mc;

int md;

long b5;

 

float temperature; // температура

long pressure; // давление

 

// Для прогноза:

const float p0 = 101325; // давление на уровне моря, Па.

const float currentAltitude = 179.5; // высота погодной станции над уровнем моря, м;

const float ePressure = p0 * pow((1 - currentAltitude/44330), 5.255); // нормальное давление на данной высоте, Па.

float weatherDiff;

 

#define DHT11PIN 9 // пин 9 датчика DHT11.

#define BMP085_ADDRESS 0x77 /* I2C адрес датчика BMP085;

см. https: //www.sparkfun.com/tutorials/253 */

 

void setup() {

lcd.begin(16, 2); // инициализация ЖК

Wire.begin(); // инициализация I2C

bmp085Calibration(); // калибровка датчика BMP085

}

 

void loop() {

// Проверка датчика давления-влажности:

int chk = sensorTempHumid.read(DHT11PIN);

 

switch (chk) {

case DHTLIB_OK:

           lcd.clear();

           break;

case DHTLIB_ERROR_CHECKSUM:

           lcd.clear();

           lcd.print(" Checksum error" );

           delay(del);

           return;

case DHTLIB_ERROR_TIMEOUT:

           lcd.clear();

           lcd.print(" Time out error" );

           delay(del);

           return;

default:

           lcd.clear();

           lcd.print(" Unknown error" );

           delay(del);

           return;

}

 

// Считываем с датчика BMP085:

temperature = bmp085GetTemperature(bmp085ReadUT());

temperature *= 0.1;

pressure = bmp085GetPressure(bmp085ReadUP());

pressure *= 0.01;

 

// Разница давлений для вычисления простого прогноза

weatherDiff = pressure - ePressure;

    

rzero = gasSensor.getRZero();

ppm = gasSensor.getPPM();

   

// ЖК:

lcd.setCursor(0, 0); // курсор на строку 1, поз. 1;

//lcd.print(" p = " );

lcd.print(pressure*3/4); // Па -> мм рт.ст.

lcd.print(" mmHg " ); // мм рт.ст.

 

// " Прогноз":

if(weatherDiff > 250)

lcd.print(" Sun" );

else if ((weatherDiff < = 250) || (weatherDiff > = -250))

lcd.print(" Cloudy" );

else if (weatherDiff > -250)

lcd.print(" Rain" );

 

lcd.setCursor(0, 1); // переход на строку 2

//lcd.print(" t=" );

lcd.print(temperature, 1);

lcd.print(" C " );

 

//lcd.print(" f=" );

lcd.print(sensorTempHumid.humidity);

lcd.print(" % " );

 

lcd.print(ppm);

 

//lcd.print(" t=" );

//lcd.print(sensorTempHumid.temperature);

//lcd.print(" C " );

  

delay(del);

lcd.clear();

}

 

// ВЫЧИСЛЕНИЕ ДАВЛЕНИЯ

 

// Функция получает калибровочные значения для BMP085

// и должна быть запущена в начале.

Void bmp085Calibration()

{

ac1 = bmp085ReadInt(0xAA);

ac2 = bmp085ReadInt(0xAC);

ac3 = bmp085ReadInt(0xAE);

ac4 = bmp085ReadInt(0xB0);

ac5 = bmp085ReadInt(0xB2);

ac6 = bmp085ReadInt(0xB4);

b1 = bmp085ReadInt(0xB6);

b2 = bmp085ReadInt(0xB8);

mb = bmp085ReadInt(0xBA);

mc = bmp085ReadInt(0xBC);

md = bmp085ReadInt(0xBE);

}

 

// Вычисление нескомпенсированной температуры.

// Возврашает значение в десятых долях градуса Цельсия.


Поделиться:



Последнее изменение этой страницы: 2019-06-19; Просмотров: 147; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.104 с.)
Главная | Случайная страница | Обратная связь