https://docs.google.com/presentation/d/1inthOcZ7DzixJDXrk2IdGKU_dLRDTP0ZsG1AlefEO5o/edit?usp=sharing
For the project i used Raspberry pico because of the wide range of GPIO pins that function almost the same.
from machine import Pin,SPI
from utime import sleep
import framebuf
from ssd1306 import SSD1306_SPI
button = Pin(1, Pin.IN, Pin.PULL_UP)
red = Pin(6, Pin.OUT)
amber = Pin(7, Pin.OUT)
green = Pin(9, Pin.OUT)#0 means that the light is currently off
spi = SPI(0, 100000, mosi=Pin(19), sck=Pin(18))
oled = SSD1306_SPI(128, 64, spi, Pin(17), Pin(20), Pin(16))
if __name__ == '__main__':
while True:
print(button.value())
if button.value() == 1:
#key press
red.on()
amber.off()
green.off()
for stop in range(10):
sleep(1)
oled.fill(0)
oled.text("CARS STOP",20,15)
oled.text(str(stop),55,35)
oled.show()
red.off()
amber.on()
green.off()
for ready in range(5):
sleep(1)
oled.fill(0)
oled.text("CARS READY",20,15)
oled.text(str(ready),55,35)
oled.show()
red.off()
amber.off()
green.on()
for moving in range(10):
sleep(1)
oled.fill(0)
oled.text("CARS MOVING",20,15)
oled.text(str(moving),55,35)
oled.show()
else:
red.on()
for ped in range(10):
sleep(1)
oled.fill(0)
oled.text("PED MOVING",20,15)
oled.text(str(ped),55,35)
oled.show()
https://docs.google.com/presentation/d/1inthOcZ7DzixJDXrk2IdGKU_dLRDTP0ZsG1AlefEO5o/edit?usp=sharing
For this project i used ESP32WROOM compactible with RFID and its easier to work with.
#include
#include
Servo servo;
#define SS_PIN 5
// ESP32 pin GPIO5
#define RST_PIN 0
// ESP32 pin GPIO27
#define SERVO_PIN 26
// ESP32 pin GPIO26 connected to Servo Motor's pin
MFRC522 rfid(SS_PIN, RST_PIN);
#define sensor 2
// ESP32 pin GPIO18 connected to OUT pin of IR obstacle avoidance sensor
#define red 12
#define green 13
byte adminUID[4] = {0x60, 0x79, 0xC5, 0x14};
byte visitorUID[4] = {0x59, 0x47, 0xA3, 0x18};
void setup() {
Serial.begin(9600);
SPI.begin(); // init SPI bus
rfid.PCD_Init(); // init MFRC522
SPI.begin(); // Init SPI bus
Serial.println("Tap an RFID/NFC tag on the RFID-RC522 reader");
servo.attach(SERVO_PIN, 500, 2400);
pinMode(sensor, INPUT);
pinMode(green,OUTPUT);
pinMode(red,OUTPUT);
}
void loop(){
int pos = 0;
bool value = digitalRead(sensor);
if (rfid.PICC_IsNewCardPresent()) {
// new tag is available
if (rfid.PICC_ReadCardSerial()) {
// NUID has been readed
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
if (rfid.uid.uidByte[0] == adminUID[0] &&
rfid.uid.uidByte[1] == adminUID[1] &&
rfid.uid.uidByte[2] == adminUID[2] &&
rfid.uid.uidByte[3] == adminUID[3] ) {
Serial.println("Access is granted to admin");
if(value == 0){
digitalWrite(green, HIGH);
digitalWrite(red, LOW);
for (pos = 0; pos <= 270; pos += 1) { //pos <= 90; pos += 1
servo.write(pos);
delay(15);
}
digitalWrite(green, LOW);
digitalWrite(red, HIGH);
}
else
{
digitalWrite(green, LOW);
digitalWrite(red, LOW);
for (pos = 270; pos >= 0; pos -= 1) {
servo.write(pos);
delay(50);
}
}
}
else if (rfid.uid.uidByte[0] == visitorUID[0] &&
rfid.uid.uidByte[1] == visitorUID[1] &&
rfid.uid.uidByte[2] == visitorUID[2] &&
rfid.uid.uidByte[3] == visitorUID[3] ) {
Serial.println("Access is granted to visitor");
if(value == 0){
digitalWrite(green,LOW );
digitalWrite(red, HIGH);
for (pos = 0; pos <= 270; pos += 1) { //pos <= 90; pos += 1
servo.write(pos);
delay(10);
}
digitalWrite(green, LOW);
digitalWrite(red, HIGH);
}
else
{
digitalWrite(green, HIGH);
digitalWrite(red, LOW);
for (pos = 270; pos >= 0; pos -= 1) {
servo.write(pos);
delay(10);
}
}
}
else
{
Serial.print("Access denied, UID:");
for (int i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
}
rfid.PICC_HaltA(); // halt PICC
rfid.PCD_StopCrypto1(); // stop encryption on PCD
}
}
}
For prepared slides (https://docs.google.com/presentation/d/1Lw0RQpA8CPZFVnlEcq3nxngfji6b6lySrrMzr-tpO38/edit?usp=sharing)