Summary:
This Project aims to build a robot application for automating the collection of environmental aspects. The robot supports remote monitoring of performance and maintenance of various environmental factors in any area. Details of the design, configuration and use of the robot in the data acquisition system (DAQ) are provided here. Sensors provide accurate and reliable real-time data necessary for autonomous monitoring and control of any type of area or industry. The data acquired by the proposed system can be accessed, plotted and analyzed remotely. This provides a fully automated solution for monitoring and controlling remote locations.

Fig. 1: Arduino-based Land Rover robot prototype used for sensor data acquisition
Description:
Prerequisites and equipment:
You will need the following:
-
An Arduino board or Arduino clone (here's a guide if you need it)
-
Two DC motors.
-
A 5v TTL-UART Bluetooth module.
-
Robot chassis and wheels that adapt to the size of the chassis and motor.
-
Arduino IDE for programming.
Block Diagram:

Fig. 2: Block diagram of Arduino-based sensor data acquisition robot
Our goal in this project is to collect sensor data and store it for future analysis. There are many techniques used for data acquisition such as EEPROM, SD card. Here we will use internet-based storage, which is a reliable and efficient way of analyzing any sensor data.
Hardware assembly:
Make robot connections as indicated in the circuit diagram. Assemble the robot with the selected parts and connect the motors to the circuit. Optocouplers are used to protect Arduino from high voltage hazards. Note: The RX of Arduino must be connected to the TX of the Bluetooth module and the TX of the Arduino must be connected to the RX of the Bluetooth module.
Working:
In this Robot we added internet functionality using a GSM modem that provides GPRS connection. The section below will explain how to send sensor readings via an HTTP command to a website. We use the website ThingSpeak, which provides a simple and free API for logging data from a variety of sensors.

Fig. 3: Graph showing light intensity variations detected by LDR on the Arduino data acquisition robot

Fig. 4: Graph showing humidity variations recorded by the DHT11 sensor on the Arduino Data Acquisition Robot

Fig. 5: Graph showing temperature variations recorded by the DHT11 sensor on the Arduino Data Acquisition Robot
These are some examples of graphics that were generated from sensor data sent from the robot to the channel on the ThingSpeak website:
Thing Speak Setup
Here are the steps needed to make this example work with the ThingSpeak website:
-
Create an account with ThingSpeak (Sign Up).
-
Create a new channel

Fig. 6: Screenshot from the Thingspeak website showing the creation of a channel for data acquisition
-
Copy the WRITE API KEY from the APIKEYS tab of your new channel.
-
Set up your new channel (see the Channel Settings tab).
-
Add three fields to your channel.
-
Name the channel and each of the fields.
-
Save the new channel settings.
-
Note: Channel and field names are used to label data in charts. These names have no effect on the API and can be changed at any time.
-
Here are the channel settings used for this Robot:

Fig. 7: Screenshot from the Thingspeak website showing the addition of light intensity, temperature and humidity fields in the channel created for displaying sensor data
Library includes
In addition to the existing libraries, we must now also include the Timerone, Soft serial and DHT libraries in the draft using the #include compiler directive.
#include
#include
#include
The ThingSpeak API limits data upload to a maximum of once every 15 seconds. Additionally, it takes some time to establish the GPRS connection before any data can be sent. For this reason, we set Timer1.initialize(4000000); //sets a 4 second timer. And create a variable for 5 called tick_count so that readings are taken once every 20 seconds. (units are microseconds)
To set up:
In addition to the existing configuration code for robotic controls, we must do some initialization in GSM.
GPRS.write(“AT+CGATT=1”); //Attach a GPRS service
GPRS.write(“AT+CGDCONT=1,”IP”,”airtelgprs.com””); //Set PDP context
GPRS.write(“AT+CSTT=”airtelgprs.com”,””,”””); //Set access point, user ID and password
GPRS.write(“AT+CIICR”); //Activating wireless connection with GPRS takes time
GPRS.write(“AT+CIFSR”); // Get the local IP address. In fact, it's not necessary.
GPRS.write(“AT+CIPSTATUS”); // Gets the status of the PS connection. Must be 'IP STATUS'. // This can be used as a checkpoint.
GPRS.write(“AT+CIPHEAD=1”); // Add headers to the HTTP request.
GPRS.write(“AT+CDNSORIP=1”); //Indicates whether the connection request will use IP address (0) or domain name (1)
GPRS.write(“AT+CIPSTART=”TCP”,”api.thingspeak.com”,”80″”); //Start TCP connection (mode, IP address/name, port) PS if it returns 'CONNECT OK' then you are in luck
GPRS.write(“AT+CIPSEND”);//Informing the GSM module that we are going to send the data
Data collection:
Light = analog reading (A0); //Reading Light intensity
Reading temperature or humidity takes about 250 milliseconds! Sensor readings can also be up to 2 seconds old (it's a very slow sensor)
h = dht.readHumidity; // Read temperature as Celsius (the default)
t = dht.readTemperature ;
Sending data to Thing Speak:
itoa (Light,LIGHT_data,10);
itoa (h,HUMID_dados,10);
itoa (t,TEMP_dados,10); //Function to convert integer to string.
GPRS.write(“AT+CIPSEND”); //Informing the GSM module that we will send the data
GPRS.write(“GET /update?key=XXXXXXXXXXXXXXXXXXXXXX= “); // Switch to your API KEY.
GPRS.write(LIGHT_data);
GPRS.write(“&campo2= “);
GPRS.write(HUMID_dados);
GPRS.write(“&campo3= “);
GPRS.write(TEMP_data);
GPRS.write(”HTTP/1.1″); //And finally here comes the actual HTTP request //Next are the headers that must be set.
GPRS.write(“Host: api.thingspeak.com”);
GPRS.write(“Connection: keep-alive”);
GPRS.write(“Accept: */”);
GPRS.write(“*”);
GPRS.write(“Accept-Language: en-us”);
GPRS.write(0x1A);//Informs the GSM module that we will no longer send data
//char ctrlZ = 0x1A;
Circuit diagrams
| Circuit-Diagram-Arduino-Based-Control-Circuitry-Used-Data-Acquisition-Robot | ![]() |
Project video
