Arduino UNO and BMP085 Based Weather Station with Solar Charging and APC220 Wireless Communication
View and Edit Project In Cirkit Designer
Circuit Documentation
Summary
The circuit in question is a complex system that integrates various components including microcontrollers, sensors, communication modules, power sources, and charging systems. The primary microcontroller is an Arduino UNO, which interfaces with an Adafruit BMP085 sensor and an APC220 radio communication module. Additional components include solar panels, a lithium-ion battery, a barrel jack with a terminal block, a CN3065 solar charge controller, a GPS NEO 6M module, and an Arduino UNO R4 WiFi module. The circuit is designed to collect environmental data, communicate wirelessly, and operate autonomously with solar power charging capabilities.
Component List
- Arduino UNO: A microcontroller board based on the ATmega328P, featuring digital and analog I/O pins.
- Adafruit BMP085: A high-precision, ultra-low power digital barometer.
- APC220: A wireless communication module for radio transmission.
- Solar Panel: A photovoltaic module for converting solar energy into electrical power.
- Lithium-ion Battery 10000mAh: A rechargeable battery for power storage.
- 2.1mm Barrel Jack with Terminal Block: A connector for power input to the circuit.
- CN3065 Solar Charge Controller: A charge controller designed for charging batteries with solar power.
- GPS NEO 6M: A GPS module for location tracking.
- Arduino UNO R4 WiFi: A microcontroller board with integrated WiFi capabilities.
Wiring Details
Arduino UNO
- 3.3V connected to Adafruit BMP085 (+3V3)
- 5V connected to APC220 (VCC)
- GND connected to APC220 (GND) and Adafruit BMP085 (GND)
- A4 (SDA) connected to Adafruit BMP085 (SDA)
- A5 (SCL) connected to Adafruit BMP085 (SCL)
- D0 (RX) connected to GPS NEO 6M (TX) and APC220 (TXD)
- D1 (TX) connected to GPS NEO 6M (RX) and APC220 (RXD)
Adafruit BMP085
- +3V3 connected to Arduino UNO (3.3V)
- GND connected to Arduino UNO (GND)
- SDA connected to Arduino UNO (A4)
- SCL connected to Arduino UNO (A5)
APC220
- VCC connected to Arduino UNO (5V)
- GND connected to Arduino UNO (GND)
- RXD connected to Arduino UNO (D1)
- TXD connected to Arduino UNO (D0)
Solar Panels
- + connected to CN3065 Solar Charge (SOLAR +)
- - connected to CN3065 Solar Charge (SOLAR -)
Lithium-ion Battery 10000mAh
- 11.1V connected to CN3065 Solar Charge (BAT +)
- GND connected to CN3065 Solar Charge (BAT -)
2.1mm Barrel Jack with Terminal Block
- POS connected to CN3065 Solar Charge (SYS +)
- NEG connected to CN3065 Solar Charge (SYS -)
CN3065 Solar Charge Controller
- SOLAR + connected to Solar Panels (+)
- SOLAR - connected to Solar Panels (-)
- BAT + connected to Lithium-ion Battery (11.1V)
- BAT - connected to Lithium-ion Battery (GND)
- SYS + connected to 2.1mm Barrel Jack (POS)
- SYS - connected to 2.1mm Barrel Jack (NEG)
GPS NEO 6M
- VCC connected to Arduino UNO (5V)
- RX connected to Arduino UNO (D1)
- TX connected to Arduino UNO (D0)
- GND connected to Arduino UNO (GND)
Arduino UNO R4 WiFi
- 5V connected to APC220 (VCC)
- GND connected to APC220 (GND)
- D0/RX connected to APC220 (RXD)
- D1/TX connected to APC220 (TXD)
Documented Code
Arduino UNO (Main Controller)
#include <Wire.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;
bool shouldTransmit = false;
void setup() {
// Initialize the serial communication with the APC220 module
Serial.begin(9600); // Ensure the baud rate matches the APC220 module's settings
// Initialize the BMP085 sensor
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
}
void loop() {
// Check if data is available to read from the APC220 module
if (Serial.available() > 0) {
// Read the incoming data
String receivedData = Serial.readString();
// Check if the received data is the "start" command
if (receivedData.trim() == "start") {
shouldTransmit = true;
}
}
// Transmit sensor data if the "start" command was received
if (shouldTransmit) {
// Read data from BMP085 sensor
float temperature = bmp.readTemperature();
float pressure = bmp.readPressure();
// Transmit sensor data via the APC220 module
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" *C, ");
Serial.print("Pressure: ");
Serial.print(pressure);
Serial.println(" Pa");
// Reset the flag to wait for the next "start" command
shouldTransmit = false;
}
delay(1000); // Delay for 1 second before the next reading
}
Other Microcontrollers
The other microcontrollers in the system (Arduino UNO R4 WiFi, additional Arduino UNO, and APC220 modules) have placeholder code provided, which is not included in this documentation as it does not perform any specific function. These microcontrollers would typically be programmed to perform tasks relevant to their role in the circuit, such as handling WiFi communication or additional sensor readings.