Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
Sirada PittayakornpisuthGovind MohanIan Del Rio
Published

CryptoBike

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

AdvancedWork in progress24 hours2,541
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
1 project • 2 followers
Contact
Govind Mohan
1 project • 1 follower
Contact
Ian Del Rio
1 project • 1 follower
Contact

Comments

Please log in or sign up to comment.