Table of Contents
Overview
We have all waited in line for payment in shopping malls and other places, it is very exhausting and a lot of time is wasted in the billing process. Today we will create a smart shopping cart with an automatic checkout system that reduces waiting time and makes the process very smooth and easy.
Here we use RFID cards and RFID readers with Arduino to build the Smart Shopping Cart project. The cart information and the total value will be displayed on the web page and on the LCD screen.
Components required table
S.No | COMPONENTS | DESCRIPTION | QUANTITY | link |
1 | Arduino | Arduino Uno | 1 | Arduino Uno |
2 | Em-18 Rfid Module | EM-18 RFID Reader – TTL | 1 | Em-18 Rfid Module |
3 | 16×2 Lcd Display | CD 16×2 Alphanumeric Display | 1 | 16×2 Lcd Display |
4 | connection wires | Jumper Wires | 40 | Jumper Wires |
EM18 RFID Reader and its Working
RFID stands for Radio Frequency Identification. It refers to a technology in which digital data is encoded on RFID tags and decoded by an RFID reader using radio waves. RFID is similar to a barcode in that data on a label is decoded by an RFID reader. RFID technology is used in various applications such as inventory management, attendance system, door locking system, access to restricted areas, etc.
EM18 Reader is a very popular RFID module that can read the identification information stored in RFID tags. RFID tags store a unique 12-digit number that can be decoded by an EM18 reader module when the tag comes into range of the Reader. This module has a built-in antenna that operates at a frequency of 125kHz and a 5v DC power supply is required to power it up.
It gives a serial data output and has a range of 8-12 cm. The serial communication parameters are 8 data bits, 1 stop bit, and 9600 baud.
EM18 RFID Reader Features:
- Operating voltage: +4.5V to +5.5V DC
- Current consumption:50mA
- Operating frequency:125KHZ
- Operating temperature: 0-80 degrees C
- Communication Baud Rate:9600
- Reading distance: 8-12 cm
- Antenna: Inbuilt
EM18 RFID Reader Pinout:
EM18 RFID Reader Pin description:
VCC: 4.5- 5V DC voltage input
GND: Ground pin
Buzzer: Buzzer or LED pin
TX: Serial data Transmitter pin of EM18 for RS232 (Output)
SEL: This must be HIGH for using RS232 (LOW if using WEIGAND)
Data 0: WEIGAND data 0
Data 1: WEIGAND data 1
Find out a Unique 12 digit Code for RFID Tag
Before programming the NodeMCU for the smart shopping cart project, we must first find out the unique code of the 12-digit RFID tag. As discussed above, RFID tags contain a unique 12-digit code and can be decoded through the use of an RFID reader. When the RFID card is swiped close to the Reader, the Reader will provide the unique codes through the output serial port when connected to NodeMCU. First, connect the NodeMCU to the RFID reader according to the circuit diagram, and then upload the code below to the NodeMCU.
After successfully uploading the code, open the serial monitor and set the baud rate to 9600. Then swipe the card close to the reader, and now you can see the 12-digit code on the serial monitor, as shown in the picture next. Do this process for all used RFID tags and write it down for future reference.
int count = 0;
char card_no[12];
void setup()
{
Serial.begin(9600);
}
void loop()
{
if(Serial.available())
{
count = 0;
while(Serial.available() && count < 12)
{
card_no[count] = Serial.read();
count++;
delay(5);
}
Serial.print(card_no);
}
}
Final Code
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
#include <string.h>
#define rxPin 8
#define txPin 9
SoftwareSerial RFID( rxPin, txPin );
// Set up outputs
#define ledPin 13
int i,j=0,k=0,l=0,total=0;
char s1[12] = "2100209E3DA2";
char s2[12] = "2000F587E0B2";
char s3[12] = "2000F5B28FE8";
int vaseline_cream=100,five_star_chocolate=50,Ice_cream=200;
String buf1;//stringTwo;
const int sw1= 7;
int button1;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(14, 15, 16, 17, 18, 19);
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(sw1, INPUT);
digitalWrite(ledPin, LOW);
Serial.begin(9600); // Serial port for connection to host
RFID.begin(9600); // Serial port for connection to RFID module
Serial.println("RFID Reader Initialized");
lcd.begin(16, 4);
// Print a message to the LCD.
lcd.setCursor(0, 0);
lcd.print("Welcome Supper Markt");
//lcd.print(" ");
Serial.println("Welcome supper market ");
//delay(2000);
Serial.println("pick you are requide products ");
}
void loop() {
button1 = digitalRead(sw1);
//Serial.println("pick you are requide products ");
if(button1 == LOW)
{
//Serial.println("pick you are requide products ");
if(RFID.available())
{
//Serial.println("pick you are requide products ");
delay(100);
buf1 = String(RFID.readString());
Serial.println(buf1);
for(i=0;i<12;i++)
{
//Serial.println("pick you are requide products ");
if(buf1[i]==s1[i])j++;if(buf1[i]==s2[i])k++;if(buf1[i]==s3[i])l++;
delay(5);
}
if((j>0)&&(j<9))j=0;if((k>0)&&(k<9))k=0;if((l>0)&&(l<9))l=0;
//Serial.println("pick you are requide products ");
if(j>=11)
{
j++;
total+= vaseline_cream;
lcd.setCursor(0, 1);
lcd.print("vaseline_cream = ");lcd.print(vaseline_cream);
lcd.setCursor(4, 2);
lcd.print("total = ");lcd.print(total);
lcd.setCursor(4, 3);
lcd.print("Thankq ....... ");
Serial.print("vaseline_cream = ");Serial.print(vaseline_cream);
Serial.println(" ");
Serial.print("total = ");Serial.print(total);
Serial.println(" ");
Serial.println("Thankq ....... ");
j=0;
}
if(k>=11)
{
//list();
k++;
total+=five_star_chocolate;
lcd.setCursor(0, 1);
lcd.print("five_star = ");lcd.print(five_star_chocolate);
lcd.setCursor(4, 2);
lcd.print("total = ");lcd.print(total);
lcd.setCursor(4, 3);
lcd.print("Thankq ....... ");
Serial.print("five_star_chocolate = ");Serial.print(five_star_chocolate);
Serial.println(" ");
Serial.print("total = ");Serial.print(total);
Serial.println(" ");
Serial.println("Thankq ....... ");
k=0;
}
if(l>=11)
{
//list();
l++;
total+=Ice_cream;
lcd.setCursor(0, 1);
lcd.print("Ice_cream = ");lcd.print(Ice_cream);
lcd.setCursor(4, 2);
lcd.print("total = ");lcd.print(total);
lcd.setCursor(4, 3);
lcd.print("Thankq ....... ");
Serial.print("Ice_cream = ");Serial.print(Ice_cream);
Serial.println(" ");
Serial.print("total = ");Serial.print(total);
Serial.println(" ");
Serial.println("Thankq ....... ");
l=0;
}
}
}
if(button1 == HIGH)
{
if(RFID.available())
{
delay(100);
buf1 = String(RFID.readString());
Serial.println(buf1);
for(i=0;i<12;i++)
{
if(buf1[i]==s1[i])j++;if(buf1[i]==s2[i])k++;if(buf1[i]==s3[i])l++;
delay(5);
}
if((j>0)&&(j<9))j=0;if((k>0)&&(k<9))k=0;if((l>0)&&(l<9))l=0;
if(j>=11)
{
// list();
j--;
total-= vaseline_cream;
lcd.setCursor(0, 1);
lcd.print("vaseline rmd = ");lcd.print(vaseline_cream);
lcd.setCursor(4, 2);
lcd.print("total = ");lcd.print(total);
lcd.setCursor(4, 3);
lcd.print("Thankq ....... ");
Serial.print("vaseline_cream = ");Serial.print(vaseline_cream);
Serial.println(" ");
Serial.print("total = ");Serial.print(total);
Serial.println(" ");
Serial.println("Thankq ....... ");
j=0;
}
if(k>=11)
{
//list();
k--;
total-= five_star_chocolate;
lcd.setCursor(0, 1);
lcd.print("five star rmd = ");lcd.print(five_star_chocolate);
lcd.setCursor(4, 2);
lcd.print("total =");lcd.print(total);
lcd.setCursor(4, 3);
lcd.print("Thankq ....... ");
Serial.print("five_star_chocolate = ");Serial.print(five_star_chocolate);
Serial.println(" ");
Serial.print("total = ");Serial.print(total);
Serial.println(" ");
Serial.println("Thankq ....... ");
k=0;
}
if(l>=11)
{
//list();
l--;
total-=Ice_cream;
lcd.setCursor(0, 1);
lcd.print("Ice_crm_rmd = ");lcd.print(Ice_cream);
lcd.setCursor(4, 2);
lcd.print("total = ");lcd.print(total);
lcd.setCursor(4, 3);
lcd.print("Thankq ....... ");
Serial.print("Ice_cream = ");Serial.print(Ice_cream);
Serial.println(" ");
Serial.print("total = ");Serial.print(total);
Serial.println(" ");
Serial.println("Thankq ....... ");
l=0;
}
}
}
}