Мастер-класс «Создание измерительной станции на базе Ардуино»

11
0
Материал опубликован 15 February 2017 в группе

Автор: Камалетдинов Геннадий Болатович, учитель информатики МБОУ Егорлыкская СОШ №1, Егорлыкского района Ростовской области.

Цель. Создание измерительной станции на базе Ардуино.

Назначение. Исследовательская и конструкторская деятельность учащихся – работа для выставки.

Я занимаюсь исследовательской деятельностью с учащимися. Решил показать учащимся и всем заинтересованным применение платформы Ардуино.

Для работы потребуется:

Плата Arduino UNO 3;

Датчик давления и температуры BMP085;

Ультразвуковой датчик URM37 V3.2;

Четырехстрочный дисплей MT-20S4A;

Соединительные провода, коробка от мобильного телефона и паяльник.


 

Заходим на сайт https://circuits.io/lab


Щелкаем по кнопке



 

Соберем схему для проверки подключения дисплея



 

Напишем следующий скетч:

// Подключаем стандартную библиотеку LiquidCrystal

#include

#include

// Инициализируем объект-экран, передаём использованные

// для подключения контакты на Arduino в порядке:

// RS, E, DB4, DB5, DB6, DB7

LiquidCrystal lcd(4, 5, 10, 11, 12, 13);

void setup()

{

Serial.begin(9600);

// устанавливаем размер (количество столбцов и строк) экрана

lcd.begin(16, 2);

// печатаем первую строку

lcd.print("Te\xBC\xBE""epa\xBFypa");

lcd.setCursor(0, 1);

// печатаем вторую строку

lcd.print("\xE0""a\xB3\xBB""e\xBC\xB8""e");

}

void loop()

{

int temp=253;

lcd.setCursor(12, 0);

lcd.print(temp*0.1);

lcd.setCursor(12, 1);

lcd.print(101254/133.3);

delay(1000);

}

И протестируем программу:

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

Датчиков URM37и BMP085 в библиотеке тоже нет, поэтому мы их подключаем следующим образом:

Для датчика BMP085, и

Для датчика URM37.

Теперь объединим все три схемы и соберем все в коробке от телефона

Теперь загрузим программу ArduinoIDE

Прежде чем писать скетч, нам необходимо загрузить библиотеки BMP085 и URMSerial - https://github.com/adafruit/Adafruit_Sensor

и https://github.com/milesburton/URM37 соответственно.

Теперь напишем следующий скетч:

// Подключаем стандартную библиотеку LiquidCrystal

/* Это пример для Arduino + LCD + URM37ex + BMP085

* URM37

+5V — +5V

GND — GND

nRST, PMW, Moto, Comp/Trig — free

RXD — pin 7

TXD — pin 6

*/

#include

#include

#include

#include

#include

BMP085 dps = BMP085();

URMSerial urm;

long Temperature = 0, Pressure = 0, Altitude = 0;

// Инициализируем объект-экран, передаём использованные

// для подключения контакты на Arduino в порядке:

// RS, E, DB4, DB5, DB6, DB7

LiquidCrystal lcd(4, 5, 10, 11, 12, 13);

int meter;

int value; // This value will be populated

int getMeasurement()

{

// Читаем растояние с URM37

switch(urm.requestMeasurementOrTimeout(DISTANCE, value))

{

case DISTANCE: // Двойная проверка чтения DISTANCE type

// Serial.println(value); // Получить растояние в сантиметрах URM37

return value;

break;

case TEMPERATURE:

return value;

break;

case ERROR:

Serial.println("Error");

break;

case NOTREADY:

Serial.println("Not Ready");

break;

case TIMEOUT:

Serial.println("Timeout");

break;

}

return -1;

}

void setup()

{

Serial.begin(9600);

Wire.begin();

urm.begin(7,6,9600); // RX Pin, TX Pin, Baud Rate

delay(1000);

dps.init();

// устанавливаем размер (количество столбцов и строк) экрана

lcd.begin(20, 4);

// печатаем первую строку

lcd.print(" \xA5\xB7\xBC""epe\xBD\xB8\xC7");

// устанавливаем курсор в колонку 0, строку 1. То есть на

// самом деле это вторая строка, т.к. нумерация начинается с нуля

lcd.setCursor(0, 1);

// печатаем вторую строку

lcd.print("Te\xBC\xBE""epa\xBFypa");

lcd.setCursor(0, 2);

// печатаем третью строку

lcd.print("\xE0""a\xB3\xBB""e\xBC\xB8""e");

// печатаем четвертую строку

lcd.setCursor(0, 3);

lcd.print("Pac""\xBF""o""\xC7\xBD\xB8""e");

}

void loop()

{

dps.getTemperature(&Temperature);

dps.getPressure(&Pressure);

dps.getAltitude(&Altitude);

int temp=Temperature;

lcd.setCursor(12, 1);

// печатаем значение температуры

lcd.print(temp*0.1);

lcd.setCursor(12, 2);

// печатаем значение давления

lcd.print(Pressure/133.3);

value = getMeasurement();

// печатаем значение растояния

lcd.setCursor(11, 3);

meter = value/100;

lcd.print(meter);

lcd.setCursor(13, 3);

lcd.print("\xBC");

lcd.setCursor(15, 3);

lcd.print(value%100);

lcd.setCursor(18, 3);

lcd.print("c\xBC");

Serial.println(value);

delay(1000);

}

Так это выглядит в работающем состоянии. Измеряются температура воздуха, давление в мм/рт.ст. и дальность до препятствия.

Скетч прилагается./data/files/t1487161619.ino (Скетч_для_ардуино)

в формате Microsoft Word (.doc / .docx)
Комментарии
Комментариев пока нет.