← All projects

P—06 · Case study

Connected weather station

A probe outside, a unit inside, and a radio link between them. The system measures the weather and opens or closes the shutters on its own based on what it sees.

RoleEmbedded systems & IoT
SettingSchool project · IMT Nord Europe
Hardware2 Arduinos · XBee · servos
LanguageC / Arduino
Code on GitHub ↗ Report (French, PDF) ↗
01 — The idea

Measure, then act.

Most weather stations stop at showing a number. The goal here was to go one step further: have the readings trigger a physical action in the house, in this case opening and closing the shutters.

And make the display readable by anyone, no need to know what a volt is.

02 — Architecture

Two modules, one radio link.

The system is split across two independent Arduinos. The transmitter stays outside; the receiver sits indoors next to the user. They talk over XBee, a point-to-point radio link.

Outside · TransmitterArduino T

Temperature, humidity, wind, light

Inside · ReceiverArduino R

Frame decoding and decisions

OutputsLCD + servos

Display and motorized shutters

This split keeps things modular: you can swap a sensor without touching the interface, or rewrite the shutter rules without touching the outdoor probe.

03 — Sensors

What gets measured.

ReadingSensor and method
Temperature & humidityDHT-type sensor: °C and relative humidity.
WindPulse anemometer: pulses are counted to estimate speed in km/h.
LightPhotoresistor (LDR), used to decide whether to let daylight in.
04 — The protocol

A lightweight text frame.

The transmitter packs the readings into a short string and sends it over the XBee serial port. The receiver reads it, splits it up, refreshes the screen, then moves the servos if needed.

Station_Meteo_E.ino / _R.inoPseudocode
// Transmitter: read, assemble, send
void loop() {
  String frame = "T:" + readTemperature() + ";H:" + readHumidity()
               + ";W:" + readWindSpeed()  + ";L:" + readLight() + ";";
  xbee.print(frame);            // e.g. "T:23.4;H:41;W:12;L:380;"
}

// Receiver: read, decode, display, act
void loop() {
  if (xbee.available()) {
    parseFrame(xbee.readStringUntil('\n'));
    updateLCD();
    updateServos();
  }
}
05 — The rules

When to move the shutters.

ConditionShutter action
Above 30 °CClosed, to keep the room cool.
Between 20 and 30 °CHalf open.
Low lightOpen, to let daylight in.
High windClosed, to prevent damage.
06 — Interface

Readable by everyone.

  • An LCD with a keypad shows the readings in plain terms, one page at a time: temperature, humidity, wind, light.
  • A PAJ7620 gesture sensor lets you flip pages with a wave of the hand.
  • The display refreshes with every frame received.
07 — Takeaways

What I learned.

  • Designing a small communication protocol and making it robust on the receiving end.
  • Reading sensors continuously while driving actuators.
  • Designing the interface for the end user, not for the engineer with the serial monitor open.