kali ini kita akan belajar membuat alat keamanan pintu otomatis menggunakan selenoid door lock berbasis iot.
#penting yang harus diperhatikan :
instal library
instal port arduino
board disesuaikan yang saat kita gunakan (arduino, nodemcu, dll)
komponen yang dibutuhkan :
1. adapter 12 volt (bisa gunakan carging HP kalian)
2. sensor sentuh / touch sensor
3. selenoid door lock
4. kabel jumper (male to male, male to female, female to female)
5. breadboard arduino
6. nodemcu (ESP8266)
7. modul relay
8. jack DC
skema rangkaian yang harus diperhatikan
penjelasan pin gambar diatas
Sensor Sentuh | NodeMCU |
---|---|
VCC | 5V |
GND | GND |
SIG | D7 |
Module Relay | NodeMCU |
---|---|
IN 1 | D4 |
GND | GND |
VCC | 5V |
Module Relay | Door Lock |
---|---|
NO | + (merah) |
COM | + Jack DC |
Selenoid (hitam) ke (-) Jack DC |
source code (coding)
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
// Wifi network station credentials
#define WIFI_SSID "Redmi Note 9 Pro"
#define WIFI_PASSWORD "123456789"
// Telegram BOT Token (Get from Botfather)
#define BOT_TOKEN "5123947571:AAGhTz2-aHVHBUN_-oFA9F5NG8g5SgGmDV0"
#define TouchSensor 13 // Pin Di gunakan untuk capactitive touch sensor
#define RELAY_ON 0
#define RELAY_OFF 1
#define RELAY_1 2 // pin yang digunakan yaitu pin 2
boolean currentState = LOW;
boolean lastState = LOW;
boolean RelayState = LOW;
const unsigned long BOT_MTBS = 1000; // mean time between scan messages
X509List cert(TELEGRAM_CERTIFICATE_ROOT);
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
unsigned long bot_lasttime; // last time messages' scan has been done
const int ledPin = 2;
int ledStatus = 0;
void handleNewMessages(int numNewMessages)
{
Serial.print("handleNewMessages ");
Serial.println(numNewMessages);
for (int i = 0; i < numNewMessages; i++)
{
String chat_id = bot.messages[i].chat_id;
String text = bot.messages[i].text;
String from_name = bot.messages[i].from_name;
if (from_name == "")
from_name = "Guest";
if (text == "/kuncibuka")
{
digitalWrite(ledPin, LOW); // turn the LED on (HIGH is the voltage level)
ledStatus = 1;
bot.sendMessage(chat_id, "Led is ON", "");
}
if (text == "/kuncitutup")
{
ledStatus = 0;
digitalWrite(ledPin, HIGH); // turn the LED off (LOW is the voltage level)
bot.sendMessage(chat_id, "Led is OFF", "");
}
if (text == "/status")
{
if (ledStatus)
{
bot.sendMessage(chat_id, "Led is ON", "");
}
else
{
bot.sendMessage(chat_id, "Led is OFF", "");
}
}
if (text == "/start")
{
String welcome = "Welcome to Universal Arduino Telegram Bot library, " + from_name + ".\n";
welcome += "This is Flash Led Bot example.\n\n";
welcome += "/kuncibuka : to switch the Led ON\n";
welcome += "/kuncitutup : to switch the Led OFF\n";
welcome += "/status : Returns current status of LED\n";
bot.sendMessage(chat_id, welcome, "Markdown");
}
}
}
void setup()
{
Serial.begin(9600);
pinMode(RELAY_1, OUTPUT);
digitalWrite(RELAY_1, RELAY_OFF);
pinMode(TouchSensor, INPUT);
Serial.begin(115200);
Serial.println();
pinMode(ledPin, OUTPUT); // initialize digital ledPin as an output.
delay(10);
digitalWrite(ledPin, HIGH); // initialize pin as off (active LOW)
// attempt to connect to Wifi network:
configTime(0, 0, "pool.ntp.org"); // get UTC time via NTP
secured_client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
Serial.print("Connecting to Wifi SSID ");
Serial.print(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
Serial.print("\nWiFi connected. IP address: ");
Serial.println(WiFi.localIP());
// Check NTP/Time, usually it is instantaneous and you can delete the code below.
Serial.print("Retrieving time: ");
time_t now = time(nullptr);
while (now < 24 * 3600)
{
Serial.print(".");
delay(100);
now = time(nullptr);
}
Serial.println(now);
}
void loop()
{
currentState = digitalRead(TouchSensor);
if (currentState == HIGH && lastState == LOW) {
Serial.println("pressed");
delay(1);
if (RelayState == HIGH) {
digitalWrite(RELAY_1, RELAY_OFF);
RelayState = LOW;
} else {
digitalWrite(RELAY_1, RELAY_ON);
RelayState = HIGH;
}
}
lastState = currentState;
if (millis() - bot_lasttime > BOT_MTBS)
{
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages)
{
Serial.println("got response");
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
bot_lasttime = millis();
}
}
link video youtube
1 komentar