Мастер-класс «Создание измерительной станции на базе Ардуино»
Автор: Камалетдинов Геннадий Болатович, учитель информатики МБОУ Егорлыкская СОШ №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 (Скетч_для_ардуино)