Hackster is hosting Hackster Holidays, Ep. 6: Livestream & Giveaway Drawing. Watch previous episodes or stream live on Monday!Stream Hackster Holidays, Ep. 6 on Monday!
Sirada PittayakornpisuthGovind MohanIan Del Rio
Published

CryptoBike

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

AdvancedWork in progress24 hours2,539
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