|
ESP-12F(ESP8266MOD)Ai-Thinker
|
x 1 | |
|
Robot Accessory SG90 Steering Gear(180°/Angle control) |
x 1 | |
|
Matrix Keypad |
x 1 |
|
Unity 3D |
|
|
Vuforia |
|
|
3D Printer (generic) |
|
|
arduino IDEArduino
|
Touchless ATM using Augmented Reality
Stop The Spread
Prevent spreading of COVID-19 is very critical to flatten the curve. Research has found that COVID-19 virus can transmit through public objects used by many people in similar fashion during the course of a day such as ATM keypad, Gas station keypad, self checkout at grocery stores. Sanitizing keypad after every use is simply not feasible.
So we need a technology which can help us operate the keypad without physically touching it. At the same time we need to consider cost of new system or enhancement. Using Augmented Reality we can impose virtual keypad on digital image at real time. There is no need for any additional hardware or camera to be installed. All we are talking about is mobile app powered by augmented reality.
Watch the demo on youtube where I presented my proof of concept.
Other Technologies Considered
While researching on touch less system, apart from Augmented Reality, I have also considered NFC ( Near Field Communication) and QR Code based transactions. But both of these two technologies have one additional hardware component to be installed in all machines such as NFC reader or QR Code scanner. Though the hardware cost is not high but installation process is both consuming and expensive. Using VR based solution only needs software solution.
How Does It Work
Technical architecture is kept very simple. AR app sends data to the micro controller over MQTT which is best choice for low bandwidth data transmission between IoT devices.
High Level Architecture
Create VR App using Vuforia & Unity
I had a plan to work on 3D object for target but unfortunately Vuforia has 3D object scanner only for Android. So I had to compromise and pick static image instead.
Below are some sample screen shot of the Vuforia app design.
Source code of AR is available on Github. Please clone and import to Unity and get started.
#include <Keypad.h>
#include <Servo.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
const char* ssid = "";//put your wifi network name here
const char* password = "";//put your wifi password here
const char* mqtt_server = "broker.hivemq.com";
WiFiClient espClient;
PubSubClient client(espClient);
const byte n_rows = 4;
const byte n_cols = 4;
char keys[n_rows][n_cols] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte colPins[n_rows] = {D3, D2, D1, D0};
byte rowPins[n_cols] = {D7, D6, D5, D4};
Keypad myKeypad = Keypad( makeKeymap(keys), rowPins, colPins, n_rows, n_cols);
Servo myservo;
String passcode="";
String myPasscode="5432"; //predefined passcode, change as per your desire
void setup(){
Serial.begin(115200);
myservo.attach(15); //attach the servo on pin D8)
myservo.write(150);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void setup_wifi() {
delay(100);
// We start by connecting to a WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
String message;
for (int i = 0; i < length; i++) {
//Serial.print((char)payload[i]);
message+=(char)payload[i];
}
if(message==myPasscode){
publish("Approved");
dispatchMoney();
}else{
publish("Denied");
}
Serial.println();
Serial.println("-----------------------");
}
void publish(String msg){
char message[100];
msg.toCharArray(message,100);
client.publish("/ABC/ATM/ACK", message);
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
//if you MQTT broker has clientID,username and password
//please change following line to if (client.connect(clientId,userName,passWord))
if (client.connect(clientId.c_str()))
{
Serial.println("connected");
//once connected to MQTT broker, subscribe command if any
client.subscribe("/ABC/ATM/RCV");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 6 seconds before retrying
delay(6000);
}
}
} //end reconnect()
void loop(){
if (!client.connected()) {
reconnect();
}
client.loop();
char myKey = myKeypad.getKey();
if (myKey != NULL){
if(myKey =='#'){
Serial.print("You entered: ");
Serial.println(passcode);
if(passcode == myPasscode){
Serial.println("Your are welcome");
dispatchMoney();
}else{
Serial.println("Password did not match");
}
passcode="";
}else{
passcode+=myKey;
}
delay(200);
}
}
void dispatchMoney() {
Serial.println("Dispatching money...");
myservo.write(90); //rotates the motor counterclockwise at slow speed
delay(5000);
myservo.write(150); //rotates the motor counterclockwise at slow speed
}
Touchless ATM using Augmented Reality
*PCBWay community is a sharing platform. We are not responsible for any design issues and parameter issues (board thickness, surface finish, etc.) you choose.
- Comments(1)
- Likes(0)
- 0 USER VOTES
- YOUR VOTE 0.00 0.00
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
More by mithundotdas
- Mahout - Save The Elephants ?? Save The ElephantsLet's work together and save the beautiful elephants using cutting edge technol...
- Smart Indoor Harvesting Using Wio Terminal & Blynk MotivationThis project is basically designed and programmed by my daughter, Sashrika with little hel...
- A. Eye - Watch out for vehicles This is a getting started guide for beginners to Intel Compute Stick and OpenVINO. I will be using p...
- Touchless ATM using Augmented Reality Stop The SpreadPrevent spreading of COVID-19 is very critical to flatten the curve. Research has fou...
- Basement Monitoring Using Wio Terminal and Blynk MotivationI live in East Coast of USA where most of the houses have basements, some are finished, so...
- Buddy - A personal home office assistance What Problem Are We Talking About ?Corona virus out-break has put our lives upside dow, creating new...
- AI powered thermal camera for safe camping The ProblemI like camping but I am not a "camping enthusiast", I usually camp once or twice a year w...
- Pet Activity Tracker using XIAO BLE Sense & Edge Impulse StoryWhy should human have all the fitness trackers? Our pets deserve more to stay active. I am usin...
- Protect Peatlands for people and planet with help of SensiML The 1997 Indonesia fire burned 9.7– 11.7 million ha on Borneo and Sumatra, destroying 4.5–6 million ...
-
-
-
kmMiniSchield MIDI I/O - IN/OUT/THROUGH MIDI extension for kmMidiMini
125 0 0 -
DIY Laser Power Meter with Arduino
174 0 2 -
-
-
Box & Bolt, 3D Printed Cardboard Crafting Tools
164 0 2 -