Community project
Button-Controlled 90° Lock
This project builds a simple electromechanical lock controlled by two push buttons. An Arduino Uno drives an SG90 servo motor that rotates between two positions (0° and 90°) to lock and unlock a mechanism, with debouncing logic to ensure reliable button presses.
The guide includes a complete wiring diagram showing how to connect the servo and buttons to the Arduino, a full parts list, the Arduino sketch with debounce handling, and step-by-step assembly instructions. Builders will have everything needed to create a functional button-controlled lock suitable for boxes, cabinets, or other applications requiring simple two-position locking.
Wiring diagram

Gather all the parts
Assemble it in 4 steps
1. Odłącz Arduino podczas składania
Odłącz Arduino Uno od przewodu USB. Połóż Arduino, serwo i dwa przyciski tak, aby ich metalowe nóżki nie stykały się przypadkiem.
- Przycisk ma dwie nóżki po każdej stronie, które są już ze sobą połączone; umieść go w poprzek środkowej szczeliny płytki stykowej.
- Nie wkładaj ani nie wyjmuj przewodów serwa przy podłączonym USB — przypadkowe zwarcie może uszkodzić płytkę.
2. Podłącz serwo
Podłącz przewody serwa: czerwony VCC → 5V (zasilanie), brązowy albo czarny GND → GND (masa), pomarańczowy albo żółty SIGNAL → D9 (sygnał sterujący).
- Po włączeniu serwo ustawi się na pozycję otwartą, czyli 0°.
- Wszystkie części muszą mieć wspólny przewód GND — bez niego serwo nie będzie reagowało poprawnie. Jeżeli serwo szarpie albo Arduino resetuje się pod obciążeniem, zasil serwo z osobnego stabilnego źródła 5 V i połącz jego GND z GND Arduino.
3. Podłącz przycisk zamykania
Podłącz jedną nóżkę pierwszego przycisku do D2 (sygnał), a nóżkę po przeciwnej stronie przycisku do GND (masa). Ten przycisk obraca serwo do 90°.
- Nie dodawaj rezystora: program używa wbudowanego zabezpieczenia wejścia Arduino.
- Podłącz nóżki po przeciwnych stronach przycisku; dwie nóżki po tej samej stronie są już połączone wewnątrz.
4. Podłącz przycisk otwierania
Podłącz jedną nóżkę drugiego przycisku do D3 (sygnał), a nóżkę po przeciwnej stronie przycisku do GND (masa). Ten przycisk przywraca serwo do 0°.
- Nie łącz D2 ani D3 bezpośrednio z 5V — w tym układzie przyciski mają łączyć piny wyłącznie z GND.
Review all connections
1. Connections between "servo_1" and "Arduino"
2. Connections between "close_button" and "Arduino"
3. Connections between "open_button" and "Arduino"
Deploy the firmware
#include <Arduino.h>
#include <Servo.h>
const byte CLOSE_BUTTON_PIN = 2;
const byte OPEN_BUTTON_PIN = 3;
const byte SERVO_PIN = 9;
const byte STEP_ANGLE = 90;
const byte MIN_ANGLE = 0;
const byte MAX_ANGLE = 180;
const unsigned long DEBOUNCE_MS = 40;
Servo doorServo;
byte servoAngle = MIN_ANGLE;
bool lastCloseReading = HIGH;
bool lastOpenReading = HIGH;
unsigned long lastCloseChange = 0;
unsigned long lastOpenChange = 0;
void setup() {
pinMode(CLOSE_BUTTON_PIN, INPUT_PULLUP);
pinMode(OPEN_BUTTON_PIN, INPUT_PULLUP);
doorServo.attach(SERVO_PIN);
doorServo.write(servoAngle);
}
void loop() {
bool closeReading = digitalRead(CLOSE_BUTTON_PIN);
bool openReading = digitalRead(OPEN_BUTTON_PIN);
unsigned long now = millis();
if (closeReading != lastCloseReading) {
lastCloseChange = now;
lastCloseReading = closeReading;
}
if (openReading != lastOpenReading) {
lastOpenChange = now;
lastOpenReading = openReading;
}
if (closeReading == LOW && now - lastCloseChange > DEBOUNCE_MS) {
if (servoAngle <= MAX_ANGLE - STEP_ANGLE) {
servoAngle += STEP_ANGLE;
doorServo.write(servoAngle);
}
while (digitalRead(CLOSE_BUTTON_PIN) == LOW) delay(5);
lastCloseReading = HIGH;
lastCloseChange = millis();
}
if (openReading == LOW && now - lastOpenChange > DEBOUNCE_MS) {
if (servoAngle >= MIN_ANGLE + STEP_ANGLE) {
servoAngle -= STEP_ANGLE;
doorServo.write(servoAngle);
}
while (digitalRead(OPEN_BUTTON_PIN) == LOW) delay(5);
lastOpenReading = HIGH;
lastOpenChange = millis();
}
}Remix this project
Make it yours in one click
Open a full copy of this project in your own Schematik workspace — diagram, code, parts, and assembly steps included. Swap the sensor, add features, or redesign the whole thing with AI. The author's original stays untouched.




