Замените свою старую настольную лампу новой, управляемой картой 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 и выключите лампу.
На этом всё. Желаем вам отличных проектов.