CryptoBike

Hassle free bike sharing through IoT tracking and encrypted RFID access.

AdvancedWork in progress24 hours2,513
CryptoBike

Things used in this project

Story

Read more

Schematics

Circuit Schematic

Code

CryptoBike: mechanical

Arduino
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
//declare servo pin
int servoPin = 8;
//create servo object
Servo Servo1;
constexpr uint8_t RST_PIN = 9;     // Configurable, see typical pin layout above
constexpr uint8_t SS_PIN = 10;     // Configurable, see typical pin layout above
 
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
 
MFRC522::MIFARE_Key key; 
 
// Init array that will store new NUID 
byte nuidPICC[4];
 
void setup() { 
  //attach servo to pin number
  Servo1.attach(servoPin);
  Servo1.write(10); //start in stopped
  Serial.begin(9600);
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522 
 
  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }
 
  Serial.println(F("This code scan the MIFARE Classsic NUID."));
  Serial.print(F("Using the following key:"));
  printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}
 
void loop() {
  
  //Serial.println("in loop");
  // Look for new cards
  if ( ! rfid.PICC_IsNewCardPresent())
    return;
 
  // Verify if the NUID has been readed
  if ( ! rfid.PICC_ReadCardSerial())
    return;
 
  Serial.println(F("PICC: "));
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
  Serial.println(rfid.PICC_GetTypeName(piccType));
 
  // Check is the PICC of Classic MIFARE type
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&  
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println(F("Your tag is not of type MIFARE Classic."));
    return;
  }
 
  if (rfid.uid.uidByte[0] != nuidPICC[0] || 
    rfid.uid.uidByte[1] != nuidPICC[1] || 
    rfid.uid.uidByte[2] != nuidPICC[2] || 
    rfid.uid.uidByte[3] != nuidPICC[3] ) {
    Serial.println(F("A new card has been detected."));
 
    // Store NUID into nuidPICC array
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
   
    Serial.println(F("The NUID tag is:"));
    Serial.println(F("hex: "));
    printHex(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
    Serial.println(F("dec: "));
    printDec(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
    Serial.println(F("correct_RFID:"));
    Serial.println(F("true"));
    //unlock turn servo 0 degrees turns clockwise
    for(int angle = 10; angle < 180; angle++)  
    {                                  
      Servo1.write(angle);               
      delay(5);                   
    } 
  }
  else
  {
    Serial.println(F("second_time"));
    Serial.println(F("lock"));
    //lock turn servo 180 degree counterclockwise
    for(int angle = 180; angle > 10; angle--)  
    {                                  
      Servo1.write(angle);               
      delay(5);                   
    } 
    Serial.println(F("yeet"));
  }

  // Halt PICC
  rfid.PICC_HaltA();
 
  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
}
 
 
/**
 * Helper routine to dump a byte array as hex values to Serial. 
 */
void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i], HEX);
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
  }
}
 
/**
 * Helper routine to dump a byte array as dec values to Serial.
 */
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i], DEC);
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
  }
}

CryptoBike

all code regarding software components

Credits

Sirada Pittayakornpisuth

Sirada Pittayakornpisuth

1 project • 2 followers
Govind Mohan

Govind Mohan

1 project • 1 follower
Ian Del Rio

Ian Del Rio

1 project • 1 follower

Comments