Настольная лампа Ардуино с включением через RFID

Замените свою старую настольную лампу новой, управляемой картой RFID и Ардуино, и настройте ее с помощью цветовой схемы RGB.

У нас была старая и, что не удивительно, ветхая настольная лампа в течение долгого времени, и появилась мысль, что это будет более эффективно и полезно, если провести её апгрейд с помощью RFID-считывателя MFRC522.

Но основная идея  была в том, чтобы персонализировать настольную лампу, используя специализированный цветовой паттерн, чтобы её выключить. Это всё можно сделать с использованием потенциометров и светодиодов RGB.

Шаг 1. Комплектующие

Комплектующие, используемые в проекте настольной лампы Ардуино, управляемой через RFID и RGB-паттерна.

Аппаратные компоненты

  • Arduino Nano R3 × 1
  • RFID-считыватель MFRC522 × 1
  • RFID ключ × 1
  • Реле RobotGeek × 1
  • Поворотный потенциометр × 3
  • Рассеянный общий анод RGB × 1
  • 5 мм светодиод: зеленый × 1
  • Резистор 221 Ом × 4
  • Провода папа-папа × 1
  • Провода папа-мама × 1
  • Макетная плата SparkFun с возможностью пайки (Mini) × 3
  • Зажим аккумулятора 9В × 1

Программное обеспечение

Инструменты

  • Паяльник (на выбор)
  • Горячий клей

Шаг 2. Как использовать RFID-считыватель MFRC522

Прежде всего, загрузите библиотеку MFRC522  с Гитхаба или с нашего сайта.

1). Припаяйте штырьковые коннекторы к RFID-считывателю MFRC522 с помощью паяльника осторожно.

2). Если вы не сохраняете или не регистрируете UID в EEPROM, используйте функцию registerCardUID(), ниже, раскомментировав ее из setup().

3). После сохранения введите UID из EEPROM, используя эту функцию.

4). И на последнем этапе просто сравните сохраненный UID и UID, прочитанный MFRC522, чтобы включить лампу и светодиод управления.

Код для проекта будет представлен на одном из следующих шагов.

Шаг 3. Соединение деталей

Используйте принципиальную схему, показанную ниже:

Соединения компонентов хорошо объяснены в исходном коде ниже, убедитесь, что правильно установлены контакты RST и SS.

Соедините все компоненты с Arduino Nano.

Здесь вам придется, исходя из того какая у вас лампа, изменить её, чтобы компоненты хорошо в неё вписались. И затем, закрепите все компоненты используя пистолет с горячим клеем.

Шаг 4. Код проекта

Вы можете скачать или скопировать код ниже:

// Соединения
// Arduino Nano :           
//                                MFRC522
// Pin 9  ----------------------- RST
// Pin 10 ----------------------- SDA
// Pin 11 ----------------------- MOSI
// Pin 12 ----------------------- MISO
// Pin 13 ----------------------- SCK
//                                Control Led
// Pin 7  -----------------------
//                                RGB
// Pin 3  -----------------------
// Pin 5  -----------------------
// Pin 6  -----------------------
//                                2-Way Relay
// Pin 8  -----------------------
//                                Potentiometer (Red) потенциометр
// Pin A0 -----------------------
//                                Potentiometer (Green) потенциометр
// Pin A1 -----------------------
//                                Potentiometer (Blue) потенциометр
// Pin A2 -----------------------

#include <EEPROM.h>     // Мы собираемся читать и писать UID PICC с / на EEPROM
#include <SPI.h>        // RC522 модуль использует SPI протокол
#include <MFRC522.h>  // Библиотека для Mifare RC522 устройств

// Create MFRC522 instance.
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

// Define MFRC5222 module key input.
MFRC522::MIFARE_Key key;

// Define the process controller and readCard byte.
int successUID;
byte readCard[4];

// Define openUID and lastRead strings.
String openUID;
String lastRead;

// Examine whether the UID is true or not.
boolean UIDisTrue = false;
int red;
int green;
int blue;

// Define RGB led control led pins.
#define redPin 3
#define greenPin 5
#define bluePin 6
#define controlLed 7
#define relay 8

// Define potentiometer pins.
#define pot_r A0
#define pot_g A1
#define pot_b A2

void setup()
{
  //Protocol Configuration
  Serial.begin(9600);  // Initialize serial communications with PC
  SPI.begin();           // MFRC522 Hardware uses SPI protocol
  mfrc522.PCD_Init();    // Initialize MFRC522 Hardware

  // If you do not register a new UID to EEPROM yet, reload the code after turning these lines into uncommented.
  
  // Save the new card or key tag UID to EEPROM. But do not forget it only has 1KB memory.
  // Serial.print("Approximate the new card or key tag to scan and register new UID.");
  // do{
  // Wait for the new card reading process.
  // successUID = registerCardUID();
  // }while(!successUID);

  // Get the open UID from EEPROM.
  getUIDfromEEPROM();
  Serial.print("UID is received from EEPROM :\n----------------------------------\n");
  Serial.print(openUID);

  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  pinMode(controlLed, OUTPUT);
  pinMode(relay, OUTPUT);
}

void loop(){
// Turn relay and controlLed off.
digitalWrite(relay, HIGH);
digitalWrite(controlLed, LOW);
// Get potentiometer data from 0 to 255.
readPotentiometer();
// Adjust RGB led colors in regard to potentiometer values.
adjustColor(red, green, blue);
// Open the desk lamp if the UID is accurate.
UID();

}

int UID(){
  // Get the last UID from MFRC522.
  if ( ! mfrc522.PICC_IsNewCardPresent()){
    return;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()){
    return;
  }
    for(int i=0;i<mfrc522.uid.size;i++){
    lastRead += mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ";
    lastRead += String(mfrc522.uid.uidByte[i], HEX);
    }
    // Arrange lastRead for comparing.
    lastRead.trim();
    lastRead.toUpperCase();

  
  // Activate relay and controlLed if the UID is accurate.
  if(lastRead == openUID){
    UIDisTrue = true;
    while(UIDisTrue == true){
      // Get potentiometer data from 0 to 255.
      readPotentiometer();
      // Adjust RGB led colors in regard to potentiometer values.
      adjustColor(red, green, blue);
      // Turn relay and controlLed on.
      digitalWrite(controlLed, HIGH);
      digitalWrite(relay, LOW);
      // Turn relay and controlLed off.
      if(red == 0 && green == 0 && blue == 0){
        UIDisTrue = false;
        // Dump lastRead.
        lastRead = "";
        }
      }
    }
}

int readPotentiometer(){
  red = map(analogRead(pot_r), 0, 1023, 0, 255);
  green = map(analogRead(pot_g), 0, 1023, 0, 255);
  blue = map(analogRead(pot_b), 0, 1023, 0, 255);
  }

void adjustColor(int r, int g, int b){
 r = 255 - r;
 g = 255 - g;
 b = 255 - b;
 analogWrite(redPin, r);
 analogWrite(greenPin, g);
 analogWrite(bluePin, b);
}

int registerCardUID() {
  // Detect the new card UID. 
  if ( ! mfrc522.PICC_IsNewCardPresent()) { 
    return 0;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return 0;
  }

  // Display the new UID.
  Serial.print("\n----------------------------------\nNew Card or Key Tag UID : ");
  for (int i = 0; i < mfrc522.uid.size; i++) {  //
    readCard[i] = mfrc522.uid.uidByte[i];
    Serial.print(readCard[i], HEX);
  }
  Serial.print("\n----------------------------------\n");
  
  // Save the new UID to EEPROM. 
  for ( int i = 0; i < mfrc522.uid.size; i++ ){
   EEPROM.write(i, readCard[i] );
  }
  Serial.print("UID is saved successfully to EEPROM.\nIf you want to save another card, use i+4(...) instead i.");
  
  // If the card reading process is successful, return 1 and end the reading process.
  mfrc522.PICC_HaltA();
  return 1;
}

int getUIDfromEEPROM(){
  // Get the open UID from EEPROM.
  for(int i=0;i<4;i++){
    openUID += EEPROM.read(i) < 0x10 ? " 0" : " ";
    openUID += String(EEPROM.read(i), HEX);
    }
  // Arrange openUID for comparing.
  openUID.trim();
  openUID.toUpperCase();
  }

Шаг 5. Итоговый результат

Некоторые характеристики.

ВКЛ:

Когда считыватель RFID MFRC522 считывает тот же UID, который был сохранен EEPROM.

- Поверните светодиод управления и лампа включится.

ВЫКЛ:

Когда все значения потенциометра становятся в ноль.

Значение красного потенциометра = 0;
Значение зеленого потенциометра = 0;
Значение синего потенциометра = 0;

- Поверните светодиод управления, светодиод RGB и выключите лампу.

На этом всё. Желаем вам отличных проектов.

Ардуино+