Погодная станция
Описание работы
Обычная погодная станция, в которой показана, какая на данный момент температура и возможность появления небольшой рекламы на экране.
Применение в жизни
Может использоваться в следующих примерах:
- Оптимизация посадок и урожая: Погодные станции помогают фермерам отслеживать параметры, такие как температура, влажность, количество осадков и скорость ветра. Это позволяет оптимально планировать посадку, полив и сбор урожая.
- Управление возобновляемыми источниками энергии: Погодные станции играют ключевую роль в мониторинге и управлении солнечными и ветряными электростанциями, помогая прогнозировать производство энергии и оптимизировать работу систем
- Система раннего предупреждения о погодных явлениях: Погодные станции помогают городам и муниципалитетам предсказывать и готовиться к экстремальным погодным условиям, таким как ураганы, наводнения и снегопады.
- Предотвращение теплового удара и обморожений: Предоставление актуальных данных о температуре и влажности помогает предупреждать население о рисках теплового удара в жаркое время года и обморожений зимой.
Список компонентов
- Плата “Arduino UNO”
- Макет
- 1 температурный датчик
- 19 провода
- 2 резистора
- 1 LCD экран
*Код*
#include <LiquidCrystal.h>
#include <Wire.h>
// Инициализация LCD
LiquidCrystal lcdDisplay(11, 12, 2, 3, 4, 5);
// Создание пользовательских символов
byte iconDrive[8] = {
0b00000, 0b01110, 0b10001,
0b11111, 0b10101, 0b01110,
0b00000, 0b00000 };
byte iconFood[8] = {
0b00110, 0b00100, 0b11111,
0b10001, 0b11111, 0b11111,
0b11111, 0b11111 };
byte iconTaxi[8] = {
0b11100, 0b01010, 0b01101,
0b01111, 0b00101, 0b10110,
0b01010, 0b10110 };
byte iconWheels[8] = {
0b00110, 0b01001, 0b01001,
0b00110, 0b01100, 0b10010,
0b10010, 0b01100 };
byte iconWeather[8] = {
0b00011, 0b00110, 0b01100,
0b11111, 0b11111, 0b00011,
0b00110, 0b01100 };
char* adsMessages[] = {
"TTHK ", "McDonalds ",
"KFC ", "Coca-Cola "
};
int sensorPin = A0;
int currentAdIndex = 0;
void setup() {
Serial.begin(9600);
Wire.begin();
lcdDisplay.begin(16, 2); // 16 столбцов x 2 строки
// Загрузка пользовательских символов в LCD
lcdDisplay.createChar(0, iconDrive);
lcdDisplay.createChar(1, iconFood);
lcdDisplay.createChar(2, iconTaxi);
lcdDisplay.createChar(3, iconWheels);
lcdDisplay.createChar(4, iconWeather);
}
void loop() {
// Получение текущего времени
unsigned long currentMillis = millis();
unsigned long fiveSeconds = currentMillis / 5000;
char upperRow[20];
sprintf(upperRow, "%02d/%02d/%02d %02d:%02d",
(fiveSeconds % 86400L) / 3600,
(fiveSeconds % 3600) / 60,
(fiveSeconds % 60),
(fiveSeconds / 86400L),
(fiveSeconds % 86400L) / 3600);
lcdDisplay.setCursor(0, 0);
lcdDisplay.print(upperRow);
// Измерение температуры и отображение сообщения или рекламы
if (fiveSeconds % 2 == 0) {
int rawTemperatureValue = analogRead(sensorPin);
float sensorVoltage = rawTemperatureValue * (5.0 / 1023.0);
float temperature = (sensorVoltage - 0.5) * 100.0;
char temperatureMessage[20];
if (temperature < 0) {
strcpy(temperatureMessage, "Very Cold ");
} else if (temperature < 10) {
strcpy(temperatureMessage, "Cold ");
} else if (temperature < 20) {
strcpy(temperatureMessage, "Mild ");
} else if (temperature < 30) {
strcpy(temperatureMessage, "Warm ");
} else if (temperature < 35) {
strcpy(temperatureMessage, "Hot ");
} else {
strcpy(temperatureMessage, "Very Hot ");
}
lcdDisplay.setCursor(0, 1);
lcdDisplay.print(temperatureMessage);
lcdDisplay.setCursor(14, 1);
lcdDisplay.write(byte(4));
} else {
lcdDisplay.setCursor(0, 1);
lcdDisplay.print(adsMessages[currentAdIndex % 4]);
lcdDisplay.setCursor(14, 1);
lcdDisplay.write(byte(currentAdIndex % 4));
currentAdIndex++;
}
delay(3000);
}
*Конструкция в Tinkercad*

Отчеты
*Конструкция в реальности*
