Измерение солнечной радиации на Arduino UNO с Ethernet Shield
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino UNO | 1 |
| Ethernet Shield 2 | 1 |
| Солнечный элемент (фотоэлектрическая ячейка) | 1 |
| Резистор 10 кОм | 1 |
Инструменты
- Цифровой мультиметр
О проекте
Зачем это нужно
Существует много датчиков погоды (температура, влажность, освещенность), но доступных датчиков солнечной радиации (пиранометров) нет — они стоят $200–800. Автор хотел оценить солнечный потенциал своей местности перед покупкой солнечной панели и решил сделать свой дешевый пиранометр на Arduino.
Методика
Солнечный элемент преобразует радиацию в напряжение. Чем больше радиация, тем выше напряжение. Используем прямо пропорциональную зависимость.
Необходимые параметры:
- Опорное напряжение Arduino ADC = 5 В (может отличаться)
- Максимальное напряжение вашего солнечного элемента (уточните в даташите, у калькуляторных ~5 В)
- Габариты элемента (для площади)
Формулы:
Power = (analogRead(A0)^2) / Resistance— мощность на резисторе (R = 10 кОм)Area = length * width— в м² (перевод из мм: /10000)Radiation = Power / Area— солнечная радиация в Вт/м²
Типичные значения: 150–300 Вт/м² в обычный день, до 900 Вт/м² в ясный день у экватора.
Подключение
- Определите полярность солнечного элемента мультиметром: если напряжение положительное — черный пробник на «земле» элемента.
- Земля элемента → GND Arduino. Плюс элемента → резистор 10 кОм → A0 Arduino. Второй конец резистора → GND. (Делитель напряжения / измерение тока через известное сопротивление).
Код: Базовый скетч (вывод в Serial)
#define ANALOG_PIN A0
#define RESISTANCE 10 // кОм
#define PANEL_LENGTH 60 // мм
#define PANEL_WIDTH 20 // мм
volatile float Area, Power, Radiation;
void setup() {
Serial.begin(9600);
while(!Serial);
delay(100);
}
void loop() {
Area = PANEL_LENGTH * PANEL_WIDTH / 10000.0; // м²
Power = pow(analogRead(ANALOG_PIN), 2) / RESISTANCE;
Radiation = Power / Area;
char msg[64];
sprintf(msg, "Solar Radiation: %.2f W/m2", Radiation);
Serial.println(msg);
delay(1000);
}
Код: С Ethernet Shield (веб-сервер)
Ethernet Shield надевается на Arduino, пины совпадают. Код создает веб-сервер на порту 80, обновляющий страницу каждые 5 секунд с текущим значением радиации.
#include <SPI.h>
#include <Ethernet.h>
#define ANALOG_PIN A0
#define RESISTANCE 10
#define PANEL_LENGTH 60
#define PANEL_WIDTH 20
volatile float Area, Power, Radiation;
byte mac[] = {0xDE, 0x0D, 0x8E, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 1, 177);
EthernetServer server(80);
void setup() {
Serial.begin(9600);
while (!Serial);
Ethernet.begin(mac, ip);
server.begin();
Serial.print("Server at ");
Serial.println(Ethernet.localIP());
}
void loop() {
Area = PANEL_LENGTH * PANEL_WIDTH / 10000.0;
Power = pow(analogRead(ANALOG_PIN), 2) / RESISTANCE;
Radiation = Power / Area;
char msg[64];
sprintf(msg, "Solar Radiation: %.2f W/m2", Radiation);
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 5");
client.println();
client.println("");
client.print(msg);
client.println("
");
client.println("");
break;
}
if (c == '\n') currentLineIsBlank = true;
else if (c != '\r') currentLineIsBlank = false;
}
}
delay(1);
client.stop();
}
}
Схема
Производственный процесс
- Измерение температуры на Raspberry Pi с датчиками Maxim 1-Wire и мостом DS2482 I2C
- Датчик CO2 K30: мониторинг качества воздуха в реальном времени на Arduino
- Устройство для общения глухосліпых людей с помощью 1Sheeld и Arduino
- Умная копилка: управление монетоприёмником на Arduino Nano
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Интеграция ёмкостного сканера отпечатков DFRobot с Arduino или ESP8266
- Интерактивный HMI-проект на Nextion с Arduino Mega и датчиками
- Роботизированная рука 6 степеней свободы на Arduino Mega с управлением через Nunchuk
- Солнечный трекер v2.0 — продвинутая DIY система слежения за солнцем
- Сборка точного измерительного колеса на Arduino Nano и вращательном энкодере