Vezi starea bateriei a laptopului tau
Pentru a genera si vizualiza un raport detaliat al starii bateriei.
[mai mult...]Soluții pentru problemele tale IT
Pentru a genera si vizualiza un raport detaliat al starii bateriei.
[mai mult...]In this detailed guide, you’ll learn how to build an RFID door lock system using an Arduino Uno and an MFRC522 RFID reader. The system reads RFID cards or keyfobs, checks authorization, and controls a solenoid lock or servo latch to grant access. It’s perfect for home automation, maker projects, or educational demonstrations.
Solenoid Lock Wiring
Arduino D7 → Gate of MOSFET (via 100Ω resistor)
MOSFET Source → GND (common)
MOSFET Drain → Solenoid negative terminal
Solenoid positive → +12V
12V supply GND → Arduino GND
Flyback diode across solenoid (1N4007, cathode to +12V)
Optional Servo Connection
Servo Signal → D7 (PWM)
Servo V+ → 5V external supply
Servo GND → Common GND
Arduino Code — Basic Version
This version uses a hard-coded list of authorized RFID tags.
/* RFID Door Lock - Basic Version */
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#define RST_PIN 9
#define SDA_PIN 10
MFRC522 rfid(SDA_PIN, RST_PIN);
#define ACTUATOR_TYPE 0 // 0=Solenoid/Relay, 1=Servo
const int RELAY_PIN = 7;
const int LED_PIN = 4;
const int BUZZER_PIN = 5;
const int SERVO_PIN = 7;
const unsigned long UNLOCK_MS = 3000;
Servo lockServo;
void setup() {
Serial.begin(115200);
SPI.begin();
rfid.PCD_Init();
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
if (ACTUATOR_TYPE == 0) {
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
} else {
lockServo.attach(SERVO_PIN);
lockServo.write(0);
}
Serial.println("RFID door lock ready");
}
// Replace these with your own card UIDs
byte allowedUIDs[][4] = {
{0xDE, 0xAD, 0xBE, 0xEF},
{0x11, 0x22, 0x33, 0x44}
};
const int allowedCount = sizeof(allowedUIDs)/4;
bool uidAllowed(byte *uid, byte uidSize) {
if (uidSize != 4) return false;
for (int i=0;i<allowedCount;i++) {
bool match = true;
for (int j=0;j<4;j++) if (allowedUIDs[i][j] != uid[j]) { match = false; break; }
if (match) return true;
}
return false;
}
void unlockAction() {
Serial.println("UNLOCK!");
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 1000, 150);
if (ACTUATOR_TYPE == 0) {
digitalWrite(RELAY_PIN, HIGH);
delay(UNLOCK_MS);
digitalWrite(RELAY_PIN, LOW);
} else {
lockServo.write(90);
delay(UNLOCK_MS);
lockServo.write(0);
}
digitalWrite(LED_PIN, LOW);
}
void loop() {
if (!rfid.PICC_IsNewCardPresent()) return;
if (!rfid.PICC_ReadCardSerial()) return;
Serial.print("Card UID:");
for (byte i=0;i<rfid.uid.size;i++) {
Serial.print(" ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
if (uidAllowed(rfid.uid.uidByte, rfid.uid.size)) {
Serial.println("Access granted");
unlockAction();
} else {
Serial.println("Access denied");
for (int i=0;i<2;i++) {
tone(BUZZER_PIN, 600, 150);
digitalWrite(LED_PIN, HIGH);
delay(200);
digitalWrite(LED_PIN, LOW);
delay(100);
}
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
Advanced Version — Store Tags in EEPROM
This version allows adding and removing authorized cards dynamically through the Serial Monitor.
/* RFID Door Lock - EEPROM Version */
#include <SPI.h>
#include <MFRC522.h>
#include <EEPROM.h>
#define RST_PIN 9
#define SDA_PIN 10
MFRC522 rfid(SDA_PIN, RST_PIN);
#define RELAY_PIN 7
#define LED_PIN 4
#define BUZZER_PIN 5
#define UNLOCK_MS 3000
#define MAX_TAGS 20
#define UID_SIZE 4
#define EEPROM_START 0
void setup() {
Serial.begin(115200);
SPI.begin();
rfid.PCD_Init();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
Serial.println("RFID lock with EEPROM ready");
}
/* Helper functions omitted for brevity in this preview — see full code in guide */
Serial commands:
l — List stored tagsa — Add a new tag (scan after command)r — Remove a tagc — Clear all stored tagsPower Considerations
Mechanical Installation
Testing Steps
Troubleshooting
| Issue | Possible Cause | Fix |
|---|---|---|
| No response from reader | Wrong wiring or 5V used | Use 3.3V and correct SPI pins |
| Actuator not moving | Power supply too weak or wrong driver | Use proper MOSFET/relay and check GND |
| UIDs print gibberish | Wrong Serial baud rate | Match Serial.begin(115200) |
| Unstable lock | Power noise | Add capacitor or separate supply |
Security Enhancements
Optional Upgrades
You’ll build a simple digital thermometer that measures ambient temperature using a temperature sensor (like the LM35, TMP36, or DHT11) and displays the reading via the Serial Monitor or LCD screen.
We’ll cover two main versions:
Basic Version — Using an analog temperature sensor (LM35 or TMP36).
Advanced Version — Using a digital sensor (DHT11 or DHT22) with humidity support.
Materials Needed
| Component | Quantity | Description |
|---|---|---|
| Arduino Uno (or Nano/Mega) | 1 | The main microcontroller board |
| LM35 or TMP36 sensor | 1 | Analog temperature sensor |
| Breadboard | 1 | For easy circuit assembly |
| Jumper wires | ~6 | Male-to-male wires |
| USB cable | 1 | To connect Arduino to your computer |
| (Optional) 16×2 LCD Display | 1 | For local display |
| (Optional) 10kΩ Potentiometer | 1 | LCD contrast control |
Step 1: Understand the Sensor
LM35 Pinout
| Pin | Label | Function |
|---|---|---|
| 1 | VCC | +5V from Arduino |
| 2 | VOUT | Analog output (connect to Arduino analog input) |
| 3 | GND | Ground |
The LM35 outputs 10 mV per °C.
So if the output voltage = 250 mV → temperature = 25°C.
Step 2: Wiring the LM35 to Arduino
Connections
| LM35 Pin | Connects To |
|---|---|
| VCC | 5V on Arduino |
| GND | GND on Arduino |
| VOUT | A0 on Arduino |
Circuit Diagram (Text Form)
[Arduino 5V] ---- [LM35 VCC]
[Arduino GND] ---- [LM35 GND]
[Arduino A0] ---- [LM35 OUT]
Step 3: Arduino Code (LM35 Version)
// Simple Temperature Sensor with LM35
const int sensorPin = A0; // LM35 connected to A0
float temperatureC;
void setup() {
Serial.begin(9600);
Serial.println(“LM35 Temperature Sensor”);
}
void loop() {
int sensorValue = analogRead(sensorPin); // Read analog value
float voltage = sensorValue * (5.0 / 1023.0); // Convert to voltage
temperatureC = voltage * 100; // 10mV per degree C (LM35)
Serial.print(“Temperature: “);
Serial.print(temperatureC);
Serial.println(” °C”);
delay(1000); // Update every second
}
Explanation
analogRead(A0): reads 0–1023 corresponding to 0–5V.
Voltage calculation: (value * 5.0) / 1023.0.
LM35 output scaling: 10 mV = 1°C → multiply voltage by 100.
Step 4: Viewing Data
Open Arduino IDE → Tools → Serial Monitor.
Set baud rate = 9600.
You’ll see continuous readings like:
Temperature: 24.87 °C
Temperature: 25.02 °C
Step 5: Calibration (Optional)
Real sensors may have small offsets.
You can adjust the output manually:
temperatureC = (voltage * 100) - 0.5; // Adjust by small offset
Compare readings with a known thermometer and tweak the offset until accurate.
Advanced: Using DHT11 / DHT22 (Digital Sensor)
Required Library
Install “DHT sensor library” by Adafruit from Arduino Library Manager.
Wiring (DHT11)
| DHT11 Pin | Connects To |
|---|---|
| VCC | 5V |
| GND | GND |
| DATA | Digital Pin 2 |
Code (DHT11)
#include "DHT.h"
#define DHTPIN 2 // Data pin connected to digital pin 2
#define DHTTYPE DHT11 // or DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float tempC = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(tempC) || isnan(humidity)) {
Serial.println(“Failed to read from DHT sensor!”);
return;
}
Serial.print(“Temperature: “);
Serial.print(tempC);
Serial.print(” °C, Humidity: “);
Serial.print(humidity);
Serial.println(” %”);
delay(2000);
}
Step 6: (Optional) Display on LCD
If using a 16×2 LCD (I2C):
Install “LiquidCrystal_I2C” library.
Connect SDA → A4, SCL → A5.
Example snippet:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
}
void loop() {
lcd.setCursor(0, 0);
lcd.print(“Temp: “);
lcd.print(temperatureC);
lcd.print(“C”);
}
Troubleshooting Guide
| Issue | Possible Cause | Solution |
|---|---|---|
| No readings / 0°C | Wrong wiring or pin | Check sensor pins |
| Negative readings | Wrong sensor type (TMP36 needs offset) | Adjust formula |
| Unstable readings | Noisy analog signal | Add capacitor (0.1 µF) between VOUT & GND |
| “nan” or “Failed to read” | DHT library issue | Check sensor type & connections |
Next Steps & Enhancements
Add OLED / LCD display for portable thermometer
Store data using SD card module
Upload readings to the cloud via ESP8266 / WiFi module
Use RGB LED to indicate temperature range (blue/cool, red/hot)
Build an IoT dashboard (ThingSpeak, Blynk, etc.).
You have used the ESET Start Menu uninstaller and continue to have problems uninstalling or reinstalling your ESET product for Windows
[mai mult...]Outlook Error 421 is a common critical SMTP error that hampers transmissions of emails.
[mai mult...]