And Two ASK Radios
Integrating wireless technologies into embedded systems recently has become much easier. In this project article, Raul describes his homemade wireless weather station that monitors ambient temperature, relative humidity, wind speed and wind direction. The design uses Arduino and a pair of inexpensive Amplitude Shift Keying (ASK) radio modules.
By Raul Alvarez Torrico
In this project I present a homemade wireless weather station. The system comprises two wireless nodes in a peer-to-peer communication setup: one Transmitting Node with all the weather sensors, and one Receiving Node with a display to show the received data. At the Transmitting Node, I have a low cost DHT22 sensor for reading temperature and ambient humidity, an anemometer for wind speed and a wind vane for sensing wind direction. At the Receiving Node, I connected a 0.96″ OLED display with SPI interface for visualizing the received weather readings. Both nodes have ASK transmitting and receiving radio modules, respectively. The range for these modules is around 50 m (line of sight) with a 5-V DC power supply.
Due to the inherent unreliability of wireless communications, the data are transmitted using a very simple communication protocol designed specifically for this project. This protocol allows the transmission of data packed into frames and implements basic addressing and payload error checking. This helps to determine, for instance, if a given received frame is, in fact, directed to the Receiving Node—and if the received data are error-free. A few Arduino libraries are available for wireless communication using ASK modules that implement communication protocols. I won’t be using any of them, however, because one of the objectives for this project is to show the basics about how to implement a wireless communication protocol, for those who are new to the subject.
Looking under the hood, this project is a basic introduction to the way wireless communications protocols work, using the concept of packing data into frames. I’ll also examine why adding metadata to them is important for addressing, packet identification and error checking, among other things. And, to explain what got me interested in these types of projects, see sidebar: “A Tribute to Steve Ciarcia” on page 14.
As I said earlier, the system comprises two wireless nodes: one transmitting and one receiving. Each are based on an Arduino Pro Mini board with a Microchip ATmega328P microcontroller (Figure 1). The Transmitting Node is the one with the weather sensors: temperature, relative humidity, wind speed and wind direction. It has also a low-cost ASK transmitter radio module working in the 433 MHz band. But 315 MHz modules can also be used. The Receiving Node has its corresponding 433 MHz ASK receiver radio module and a 0.96″ OLED display that shows the received weather data.
The Transmitting Node takes readings from all its sensors and sends the data wirelessly every fixed period statically defined in code—in other words, every few seconds. Meanwhile, the Receiving Node is constantly listening for incoming data. And every time it receives a valid data frame that is addressed to it, it will extract the payload containing the readings from all remote sensors and then visualize them in the OLED display. The Transmitting Node sends the data packed into frames following a very simple protocol designed specifically for this project. I will explain this protocol in detail later.
Both the transmitter and receiver are low-cost ASK radio modules, such as those used for wireless garage door openers. Why use these “toy” radio modules instead of much more sophisticated ones? For me, the short answer is: Because it can be done! I really like minimalist approaches, and I always tend to push things to the extremes to see how so much can be accomplished with so little. …
Read the full article in the September 338 issue of Circuit Cellar
Don’t miss out on upcoming issues of Circuit Cellar. Subscribe today!