Monitoring industrial machinery is challenging due to complex sensor data and limited real-time visualization, making remote tracking and understanding difficult.
Solution:
Augmented Reality Digital twin Mobile Application
Impact Statement
Got Cash prize of rupees 10,000 on Niral Naan Mudhalvan Hackathon
Got FreeLance clients who are ready to pay for this tech.A Company from Italy contacted via upwork has signed up a contract for 300 dollars
Components Required
WLY52535 450 mAh 3.7V single cell Rechargeable LiPo Battery
Acrylic Board (For enclosure)
Wires (20 AWG)
Watch the full demonstration by clicking on the YouTube video below :
Circuit Explanation:
Sensor data from real machinery is taken and read using analog pins of Arduino Uno R4.
In my case there rotational encoders are used which mimic Arm Boom and Bucket angle(marked in the 3D object above).
Hydraulic oil temperature in Cylinders is read using NTC103 Sensor using an Analog pin of Uno R4.
Data Transfer:
The read sensor data are formatted to JSON data and sent from Arduino Uno R4 to Google Firebase real-time Database
The data is stored for retrieval from the App
Mobile Application:
This mobile application is developed in Unity.
This mobile application retrieves data from Google Realtime Database.
The 3D twin of the Machinery(Excavator in my case) is placed in Augmented Reality.
The Excavator is Modelled in Blender a 3d Modeling software.
The transferred Data is read in the application and the 3D model is updated accordingly.
Use:
By this where ever the real machine be the user of the app can easily visualize exactly what the machine is doing. By this -
Real-time Monitoring: Provides live updates of machinery movements and conditions through a 3D digital twin.
Simplified Data Interpretation: Transforms complex sensor data into easy-to-understand visuals.
Remote Access: Enables users to track machinery operations from any location via a mobile app.
Immersive Experience: Offers an AR mode for enhanced interaction, allowing users to visualize machinery in their physical space.
Predictive Maintenance: Integrates machine learning to forecast potential issues, reducing downtime.
Increased Efficiency: Improves decision-making by providing real-time, actionable insights.
Unique Selling Points:
Portability: Effortlessly monitor machines using just your mobile phone.
Accessibility: Enjoy a significantly simpler access experience compared to traditional monitoring HMI systems.
Cost: With a small mobile app and hardware available for under 3000 rupees, all essential user requirements are fully met.
Hardware Pictures:
#include <Arduino.h>
#include <WiFi.h>
#include <FirebaseClient.h>
#define WIFI_SSID "Lunchbag"
#define WIFI_PASSWORD "ananthsona"
// The API key can be obtained from Firebase console > Project Overview > Project settings.
#define API_KEY "AIzaSyAt3gvgQn-aJIsIHuMycoOHHs15bYk4oPE"
// User Email and password that already registerd or added in your project.
#define DATABASE_URL "https://iot-unor4-try-mob-default-rtdb.asia-southeast1.firebasedatabase…"
// Global SSL client and network objects
WiFiClientSecure ssl_client; // SSL client
DefaultNetwork network; // Network configuration
AsyncClientClass aClient(ssl_client, getNetwork(network)); // Async client instance
const int HX711_dout = D1; //mcu > HX711 dout pin
const int HX711_sck = D0; //mcu > HX711 sck pin
//HX711 constructor:
HX711_ADC LoadCell(HX711_dout, HX711_sck);
const int calVal_calVal_eepromAdress = 0;
unsigned long t = 0;
//LOAD CELL
float randNumber1;
float randNumber2;
float randNumber3;
float randNumber4;
#define FIREBASE_HOST "iottry07-default-rtdb.asia-southeast1.firebasedatabase.app"
#define FIREBASE_AUTH "AIzaSyB4oZb1FWkHGS5LblnAUQiBAfOupKyCT-k"
#define WIFI_SSID "Lunchbag"
#define WIFI_PASSWORD "ananthsona"
FirebaseData firebaseData;
void setup() {
// ANALOG DATAS
Serial.begin(9600);
pinMode(A0,INPUT);
pinMode(D5,OUTPUT);
pinMode(D6,OUTPUT);
pinMode(D7,OUTPUT);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to ");
Serial.print(WIFI_SSID);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("Connected to ");
Serial.println(WIFI_SSID);
Serial.print("IP Address is : ");
Serial.println(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true);
Serial.println();
delay(1000);
}
void loop() {
digitalWrite(D5,0);
digitalWrite(D6,0);
digitalWrite(D7,0);
delay(10);
BoomAngle = analogRead(A0);
Serial.print(BoomAngle);
BoomAngle = map(BoomAngle, 0, 1023, -45, 70);
delay(1);
digitalWrite(D5,0);
digitalWrite(D6,1);
digitalWrite(D7,0);
delay(10);
ArmAngle = analogRead(A0);
Serial.print(ArmAngle);
ArmAngle = map(ArmAngle, 0, 1023, -45, 70);
delay(1);
digitalWrite(D5,1);
digitalWrite(D6,0);
digitalWrite(D7,1);
delay(10);
BucketAngle = analogRead(A0);
Serial.print(BucketAngle);
BucketAngle = map(BucketAngle, 0, 1023, -45, 70);
delay(1);
digitalWrite(D5,1);
digitalWrite(D6,0);
digitalWrite(D7,0);
delay(10);
NTC_OilTemp = analogRead(A0);
Serial.print(NTC_OilTemp);
delay(1);
Firebase.setInt(firebaseData, "/BoomAngle",BoomAngle);
Firebase.setInt(firebaseData, "/ArmAngle",ArmAngle);
Firebase.setInt(firebaseData, "/BucketAngle",BucketAngle);
Firebase.setInt(firebaseData, "/NTC_OilTemp",NTC_OilTemp);
delay(100);
}