Urban Sensing Through Bus-Based Mobility
This project is a bus-based sensing system for Smart Cities. In a broader view, sensor nodes, embbeded onto buses, gather data about the city. Such data is delivered to users using access points mounted into the bus stops of the city. Data is presented to users using a cloud service. The whole schema is shown below:
The schema is abstracted in three layers: sensing, flushing, and publishing. These layers are mapped into the architecture of the current project.
This project has three main layers, as shown:
The Sensing layer is responsible for gathering raw data from the city. It is composed by wireless sensor nodes embbeded onto urban buses of public transportation.
The Flushing layer receives raw data directly from the Sensing layer and sends it to the Publishing layer, through the Internet. It is composed by access points, mounted on bus stops.
The Publishing layer receives data from all the nodes in the Flushing layer and serves data to the users, using an API and a web interface. This layer is composed by a server running on a distributed cloud.
Each layer is a component of this project, as explained in detail throughout the next sections.
The Sensing layer is a mobile wireless sensor network that gathers data from the city, using buses as mobility platform. Every node in this network is capable of gathering data, storing it and send it to the Flushing layer.
There should be one node per bus.
Every sensing node is cabable of gathering data, storing and transmitting it to a Flushing node. The Sensing Node follows an architecture presented here and ilustrated here:
The devices used to implement each module are on teh following table:
Module | Device | Manufacturer |
---|---|---|
Controller | Arduino UNO R3 | Arduino |
GNSS Receiver | GS-96U7 | Guangzhou Xintu |
SD Card Interface | GS-96U7 | Guangzhou Xintu |
Wireless Interface | ESP8266 | Espressif |
The sensor bank has the following sensors:
Sensor | Device | Manufacturer |
---|---|---|
Humidity | DHT11 | DFRobot |
Temperature | DHT11 | DFRobot |
Light Intensity | GL5528 | GBK Robotics |
Rain Intensity | YL-38 | 100y |
The Controller and Wireless Interface are programmable devices. In the folder "sensing" of the current project, the codes used in each of them can be found.
The Flushing layer allows a descentralized pre-processing of data from Sensing layer. The Flushing layer receives the data from Sensing layer and analize the data to identify defective data, then deletes it. After that, this layer is responsible to send this data to Publishing layer. Beside that, this layer tries to ensure autheticity and acumulation of data.
Every flushing node is responsible of receives data from sensing nodes, delete defective data, do a acumulation data and sends to Publishing node.
The devices used to implement this node are on the following table:
Module | Device | Manufacturer |
---|---|---|
Controller | Raspberry Pi model B | Raspberry Pi Foundation |
Wireless Interface | Wi-Pi | element14 |
The Flushing Nodes runs a code responsible to execute the flushing layer's functions. This nodes use bus station to receive. In the folder "flushing" of the current project, all codes used in this layer can be found.
The Publishing layer receives the data from Flushing layer and publishes the data to the users. Users can obtain data in two ways:
- Receiving data through an API;
- Visualizing data on a map generated by a web service.
The Publishing layer is implemented as a single Publishing node, explained in the following session.
The Publishing Node is a web service powered by Django. The visualizing platform is implemented with Bootstrap and with Google Maps API. The Publishing Node runs on a cloud platform, described here.
The publishing API offers the retrieval of measurements using filters. A user requests measurements with the HTTP GET method. The GET parameters are the filters applied to the data being queried. The possible filters are:
- bus_id: Selects measurements from the bus identified by bus_id;
- start_time: Selects measurements older than start_time;
- end_time: Selects measurements newer than end_time;
- sensor_name: Selects measurements from specified sensor;
- min_lat: Selects measurements with latitudes bigger than min_lat;
- max_lat: Selects measurements with latitudes smaller than max_lat;
- min_lng: Selects measurements with longitudes bigger than min_lng;
- max_lng: Selects measurements with longitudes smaller than max_lng;
An example url is www.your-website.com/data?bus_id=123&sensor_name=temperature
To use the visualization tool, the user just needs access the url: https://sensingbus.gta.ufrj.br/visualize/. The user can select a filter and see this measures at the map.
To install the system, follow the instructions on the README.md located at every layer directory.