Realtime Digital Twin-Operational Ecosystem in Your Pocket

Published  November 8, 2024   0
Monitor Industrial Machinery with Realtime digital Twin

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

  1. NTC 103 10K thermistor

  2. WLY52535 450 mAh 3.7V single cell Rechargeable LiPo Battery

  3. Arduino UNO R4 WiFi

  4. 10K Potentiometer

  5. Load cell 5Kg

  6. Prototype Board

  7. Acrylic Board (For enclosure)

  8. Female Header Pin

  9. Wires (20 AWG)

Watch the full demonstration by clicking on the YouTube video below :

Circuit Explanation:

Schematics of 3D Twin of The Machine
  • 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.

Interface of 3D Twin of The Machine

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:

Hardware Pictures of 3D Twin of The Machine3D Twin of The Machine Side View3D Twin of The Machine Top View

 

Code

#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);
}

Have any question realated to this Article?

Ask Our Community Members