Rucksikaa Raajkumar
Published © CC BY

Social Distancing with Automatic Door Control System

An effective and cheap way to practice social distancing while standing in queues at public places such as malls, supermarkets, counters, etc

IntermediateFull instructions provided4 hours243
Social Distancing with Automatic Door Control System

Things used in this project

Hardware components

Arduino Mega 2560 & Genuino Mega 2560
Arduino Mega 2560 & Genuino Mega 2560
Unfortunately, the Arduino MKR and new Nano boards are not available here in Sri Lanka. Ordering online may take longer because of the pandemic, so I have decided to use my Arduino Mega 2560 instead.
×1
Laser Diode, 655 nm
Laser Diode, 655 nm
×5
Photo resistor
Photo resistor
×5
Resistor 10k ohm
Resistor 10k ohm
×5
SG90 Micro-servo motor
SG90 Micro-servo motor
One servo motor is used to control the barrier and the other is used to control the door in my prototype.
×2
Ultrasonic Sensor - HC-SR04 (Generic)
Ultrasonic Sensor - HC-SR04 (Generic)
×1
RGB Backlight LCD - 16x2
Adafruit RGB Backlight LCD - 16x2
I have used a 16x2 LCD display module with I2C interface
×1
IR tracking sensor module
×1
Male/Female Jumper Wires
Male/Female Jumper Wires
×1
Male/Male Jumper Wires
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Schematics

Schematic

A schematic showing the basic concept of this project (social distancing)

Code

I2C scanner

Arduino
This can be used to scan your I2C device and obtain the I2C address
// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    https://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
 
#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknown error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}

LDR value

Arduino
This will be used to test your LDRs. You can check the analog output when the laser diode is shone on the LDR surface and when it is not.
// TESTING LDR values
// ARDUINO PROJECTS BY R
// AUTHOR: RUCKSIKAA RAAJKUMAR
int sensorPin = A0; // The LDR will be connected to A0
void setup() {
   Serial.begin(9600); // Set baud rate to 9600 
   pinMode(25, OUTPUT); // Configure laser diode pin as OUTPUT and connect it to D25 (You won't be needing to add this line of code if you provide 5V to the laser diode separately)
   delay(1000);
   digitalWrite(25, HIGH); // Turn on the laser diode
}
void loop (){
     Serial.print(analogRead(sensorPin)); // The LDR reading will be printed on the Serial monitor
     Serial.print('\n');
     delay(1000); // Set a delay period of 1 second
} 

Credits

Rucksikaa Raajkumar

Rucksikaa Raajkumar

5 projects • 18 followers
I have completed International A/Ls and am currently waiting for university offers. I publish Arduino projects on my blog and help people.

Comments