इस chapter में आप सीखेंगे कि Arduino IDE का उपयोग करके IoT applications कैसे बनाए जाते हैं। इसमें Embedded C के basics, sensors interfacing, serial communication और relay modules की पूरी जानकारी दी गई है।
Arduino IDE (Integrated Development Environment) एक software platform है जिसका use Arduino boards (जैसे Arduino UNO, Mega, Nano आदि) को program करने के लिए किया जाता है। यह beginners के लिए बहुत आसान और friendly environment प्रदान करता है।
Simple words में — Arduino IDE एक text editor + compiler + uploader tool है जहाँ हम code लिखते हैं, उसे compile करते हैं, और फिर microcontroller पर upload करते हैं।
जब आप Arduino IDE खोलते हैं, तो उसमें कुछ main parts दिखते हैं 👇
Arduino IDE में लिखा गया program Sketch कहलाता है। हर Sketch के दो main parts होते हैं:
pinMode() या Serial.begin() होते हैं।
// LED Blink Program in Arduino IDE
void setup() {
pinMode(13, OUTPUT); // Pin 13 ko output mode me set karna
}
void loop() {
digitalWrite(13, HIGH); // LED ON
delay(1000); // 1 second wait
digitalWrite(13, LOW); // LED OFF
delay(1000); // 1 second wait
}
⚙️ इस program से Arduino board की pin 13 पर connected LED 1 सेकंड के अंतराल पर blink करेगी।
जब आप “✅ Verify” button दबाते हैं, IDE code को compile करता है। अगर कोई error होती है तो नीचे message area में दिखाई देती है। Common errors में semicolon की कमी, spelling mistake, या wrong function name शामिल हैं।
digitalwrite लिख देंगे (small ‘w’) तो IDE error दिखाएगा —
‘digitalwrite’ was not declared in this scope
जब code सही compile हो जाता है, “➡️ Upload” button दबाने से compiled program Arduino microcontroller में transfer हो जाता है। इसके लिए USB cable का use किया जाता है।
Serial Monitor Arduino IDE का debugging tool है, जो computer और board के बीच real-time data communication दिखाता है। इसे हम sensor values या debugging messages देखने के लिए use करते हैं।
void setup() {
Serial.begin(9600); // Start serial communication
}
void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue); // Sensor value serial monitor par print karega
delay(1000);
}
Output serial monitor में हर 1 सेकंड में sensor value दिखाएगा।
Embedded ‘C’ वह programming language है जो C language की तरह होती है, लेकिन इसे microcontrollers (जैसे Arduino, AVR, ARM, ESP32) पर hardware control के लिए use किया जाता है। इसका main उद्देश्य है sensors से data लेना, actuators को control करना और real-time tasks perform करना। Embedded C programs छोटे, fast और hardware-specific होते हैं।
Variable एक नाम है जहाँ memory में data store होता है। Identifiers वो नाम होते हैं जो variables, functions या constants को represent करते हैं।
Temp और temp अलग हैं।
int ledPin = 13; // ✅ Valid variable
int _counter = 0; // ✅ Valid variable
int 2sensor = 10; // ❌ Invalid (cannot start with digit)
int float = 20; // ❌ Invalid (keyword)
Data Types बताते हैं कि variable में किस प्रकार का data store होगा और कितना memory space लगेगा। Arduino में commonly used data types नीचे दिए गए हैं:
| Data Type | Size | Range | Example |
|---|---|---|---|
| bool | 1 byte | true / false | bool isON = true; |
| char | 1 byte | -128 to 127 | char grade = 'A'; |
| int | 2 bytes | -32,768 to 32,767 | int temp = 25; |
| unsigned int | 2 bytes | 0 to 65,535 | unsigned int speed = 40000; |
| long | 4 bytes | -2,147,483,648 to 2,147,483,647 | long counter = millis(); |
| float | 4 bytes | 6 decimal digits | float voltage = 3.14; |
Constant वो value होती है जो program के दौरान change नहीं होती। दो तरीके से constant बनाते हैं:
#defineconst keyword से
#define LED 13 // Preprocessor constant
const int baudRate = 9600; // Typed constant
Operators वो symbols होते हैं जो operations perform करते हैं। Common categories नीचे दी गई हैं:
+ - * / %== != > < >= <=&& || != += -= *= /= %=
int a = 10, b = 3;
int sum = a + b; // 13
int diff = a - b; // 7
int mod = a % b; // 1
if (a > b && b != 0) {
Serial.println("Condition True");
}
नीचे दिया गया example दिखाता है कि Embedded C में कैसे variables, constants, और operators को combine करके real sensor data handle किया जाता है।
const int SENSOR_PIN = A0;
const float VREF = 5.0;
void setup() {
Serial.begin(9600);
}
void loop() {
int value = analogRead(SENSOR_PIN); // Read sensor data
float voltage = (value * VREF) / 1023.0; // Convert to voltage
Serial.print("Sensor Value: ");
Serial.print(value);
Serial.print(" Voltage: ");
Serial.println(voltage);
delay(500);
}
7.0/3 करें।const variables memory efficient होते हैं – macros से बेहतर।Conditional Statements और Loops Embedded ‘C’ का वो हिस्सा हैं जो program को decision लेने और repetitive task करने की शक्ति देते हैं। Real-world IoT में ये concept sensors के values check करने, LEDs या motors control करने और समय-based automation करने में सबसे ज़्यादा इस्तेमाल होता है।
Conditional statements का use तब किया जाता है जब हमें किसी condition के आधार पर code का कोई हिस्सा चलाना या skip करना हो। Arduino में commonly if, if-else, else-if, और switch इस्तेमाल होते हैं।
अगर condition true है, तो block execute होता है, वरना ignore हो जाता है।
int temp = 30;
if (temp > 25) {
Serial.println("Fan ON");
}
⚙️ Output: Fan ON (क्योंकि 30 > 25)
जब दो possibilities हों (true या false)।
int light = analogRead(A0);
if (light < 500) {
digitalWrite(13, HIGH); // LED ON
} else {
digitalWrite(13, LOW); // LED OFF
}
जब कई अलग-अलग conditions हों और हमें उनमें से एक चुननी हो।
int temp = 28;
if (temp < 20)
Serial.println("Low Temp");
else if (temp < 30)
Serial.println("Normal Temp");
else
Serial.println("High Temp");
⚙️ Output: Normal Temp
जब एक condition के अंदर दूसरी condition check करनी हो।
int temp = 35;
int humidity = 80;
if (temp > 30) {
if (humidity > 70) {
Serial.println("Turn ON Dehumidifier");
}
}
जब एक variable के multiple values के लिए अलग-अलग code block चलाना हो।
int mode = 2;
switch (mode) {
case 1: Serial.println("Manual Mode"); break;
case 2: Serial.println("Auto Mode"); break;
case 3: Serial.println("Sleep Mode"); break;
default: Serial.println("Invalid Mode");
}
⚙️ Output: Auto Mode
Loops का इस्तेमाल तब किया जाता है जब कोई काम बार-बार दोहराना हो। IoT में sensor data को बार-बार read करने या display update करने के लिए loops बहुत जरूरी हैं।
जब तक condition true है, block बार-बार execute होता है।
int i = 0;
while (i < 5) {
Serial.println(i);
i++;
}
⚙️ Output: 0 1 2 3 4
पहले code run होता है, फिर condition check होती है। इसलिए यह loop कम से कम एक बार जरूर चलता है।
int i = 0;
do {
Serial.println(i);
i++;
} while (i < 5);
जब बार-बार fixed number of times कोई काम करना हो।
for (int i = 0; i < 10; i++) {
digitalWrite(13, HIGH);
delay(200);
digitalWrite(13, LOW);
delay(200);
}
⚙️ LED 10 बार blink करेगी।
एक loop के अंदर दूसरा loop — e.g. pattern printing या matrix data read करने के लिए।
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
Serial.print("* ");
}
Serial.println();
}
⚙️ Output:
* * *
* * *
* * *
Arduino में loop() function अपने-आप infinite loop की तरह चलता है। लेकिन manual infinite loop भी बनाया जा सकता है।
while (true) {
Serial.println("Running forever...");
delay(1000);
}
Logical operators का use multiple conditions combine करने के लिए होता है:
&& – AND → दोनों conditions true हों|| – OR → कोई एक true हो! – NOT → उल्टा result देता है
int temp = 32;
int humidity = 75;
if (temp > 30 && humidity > 70) {
Serial.println("High Heat & Humidity");
}
नीचे का example दिखाता है कि कैसे conditions और loops साथ में इस्तेमाल होते हैं।
const int TEMP_PIN = A0;
const int FAN_PIN = 9;
void setup() {
Serial.begin(9600);
pinMode(FAN_PIN, OUTPUT);
}
void loop() {
int sensorValue = analogRead(TEMP_PIN);
float temp = (sensorValue * 5.0 / 1023.0) * 100; // Convert to °C
Serial.print("Temp: ");
Serial.println(temp);
if (temp > 35)
digitalWrite(FAN_PIN, HIGH); // Fan ON
else
digitalWrite(FAN_PIN, LOW); // Fan OFF
delay(1000);
}
() में रखें।; कभी गलती से if के बाद न लगाएँ (if (x==1); ❌)।delay() use करने से real-time speed प्रभावित होती है — timers बेहतर हैं।Array एक ऐसा variable है जो एक ही नाम से कई values store कर सकता है। Simple words में, array एक collection of similar data elements होता है। Embedded ‘C’ में arrays का use sensors के readings, multiple LEDs control करने या data buffer store करने के लिए किया जाता है।
int temp[5] = {25, 27, 29, 31, 30};
Array को declare करने का syntax:
data_type array_name[size];
int sensor[4]; // Empty integer array of 4 elements
float voltage[3]; // Float array with 3 values
char msg[10]; // Character array (string buffer)
Array को declaration के समय initialize किया जा सकता है:
int ledPins[4] = {2, 3, 4, 5};
float readings[3] = {3.3, 4.1, 5.0};
char name[6] = {'A', 'r', 'd', 'u', 'i', 'o'};
अगर values declaration में दी गई हैं तो size optional होता है:
int temp[] = {25, 28, 30, 32};
Array elements index number से access किए जाते हैं। Index हमेशा 0 से शुरू होता है।
int temp[3] = {25, 27, 30};
Serial.println(temp[0]); // Output: 25
Serial.println(temp[1]); // Output: 27
Serial.println(temp[2]); // Output: 30
आप किसी भी index की value को update कर सकते हैं:
int led[3] = {2, 3, 4};
led[1] = 8; // 2nd element को 8 से replace किया गया
Arrays को handle करने का सबसे अच्छा तरीका loops हैं। Arduino में LEDs या sensor data read करने के लिए for-loop commonly इस्तेमाल होता है।
int ledPins[4] = {2, 3, 4, 5};
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
void loop() {
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], HIGH);
delay(200);
digitalWrite(ledPins[i], LOW);
}
}
⚙️ इस program में 4 LEDs एक के बाद एक blink करेंगी।
यह example दिखाता है कि array का use sensor readings को store और average calculate करने के लिए कैसे किया जाता है।
const int TEMP_PIN = A0;
float readings[5];
int index = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
readings[index] = analogRead(TEMP_PIN) * (5.0 / 1023.0);
index++;
if (index == 5) {
float sum = 0;
for (int i = 0; i < 5; i++) {
sum += readings[i];
}
float avg = sum / 5;
Serial.print("Average Voltage: ");
Serial.println(avg);
index = 0; // Reset index
}
delay(1000);
}
2D arrays का use तब किया जाता है जब हमें rows और columns में data store करना हो जैसे temperature grid या sensor matrix।
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
Serial.println(matrix[1][2]); // Output: 6
'\0' होना चाहिए।Functions Embedded ‘C’ में code को छोटे, reusable हिस्सों में बाँटने का तरीका हैं। इससे program modular, readable और debugging के लिए आसान बनता है। Arduino में दो main functions होते हैं — setup() और loop(), लेकिन हम custom functions भी बना सकते हैं ताकि बार-बार वही code न लिखना पड़े।
Function एक block of code होता है जो कोई specific task perform करता है। Arduino में हर function को call करने से वह task execute होता है। Function define करने का basic structure इस प्रकार है:
return_type function_name(parameter_list) {
// Code statements
return value; // (Optional)
}
नीचे एक simple function दिया गया है जो LED को blink करता है। Function को loop() से call किया गया है ताकि LED बार-बार blink करे।
int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
blinkLED(3); // Call function 3 बार LED blink करेगा
}
void blinkLED(int times) {
for (int i = 0; i < times; i++) {
digitalWrite(ledPin, HIGH);
delay(300);
digitalWrite(ledPin, LOW);
delay(300);
}
}
Prototype compiler को बताता है कि function exist करता है, उसका return type और parameters क्या हैं। Prototype को program के top पर लिखा जाता है:
void displayTemperature(float temp); // Prototype
void setup() {
Serial.begin(9600);
displayTemperature(25.6);
}
void displayTemperature(float temp) {
Serial.print("Temperature: ");
Serial.println(temp);
}
digitalWrite(), analogRead(), pinMode())Lcd.print(), DHT.readTemperature())जब function को कोई value वापस भेजनी हो तो उसका return type void नहीं बल्कि actual data type होता है।
int addNumbers(int a, int b) {
return a + b;
}
void setup() {
Serial.begin(9600);
int result = addNumbers(5, 10);
Serial.print("Sum = ");
Serial.println(result);
}
⚙️ Output: Sum = 15
Arduino में Libraries ready-made code होते हैं जो hardware को आसानी से control करने में मदद करते हैं। Libraries के जरिए हम sensors, displays, motors, Bluetooth, Wi-Fi आदि को few lines में operate कर सकते हैं।
#include <LibraryName.h>| Library Name | Purpose | Example Function |
|---|---|---|
| Wire.h | I2C communication (LCD, sensors) | Wire.beginTransmission() |
| LiquidCrystal.h | LCD display control | lcd.print("Hello"); |
| DHT.h | Temperature & Humidity sensors | dht.readTemperature(); |
| Servo.h | Servo motor control | servo.write(90); |
| SoftwareSerial.h | Bluetooth/Serial communication | Serial.read(); |
नीचे का program दिखाता है कि कैसे function और library दोनों साथ मिलकर काम करते हैं।
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
displayMessage("IoT Ready!", 1);
}
void loop() {
displayMessage("Sensor Active", 0);
delay(2000);
}
// Custom Function
void displayMessage(String msg, int row) {
lcd.clear();
lcd.setCursor(0, row);
lcd.print(msg);
}
⚙️ LCD पर पहले "IoT Ready!" और फिर "Sensor Active" alternate होता रहेगा।
Sensor Interfacing का मतलब है Arduino या किसी भी microcontroller को बाहरी devices से जोड़ना, ताकि वो physical world (जैसे temperature, light, gas, distance आदि) को digital signals में बदल सके। Sensors IoT systems का सबसे महत्वपूर्ण हिस्सा हैं क्योंकि ये real-world data को microcontroller तक पहुँचाते हैं।
Arduino board पर दो तरह के pins होते हैं — Digital pins और Analog pins. Sensor के nature (digital या analog) के अनुसार इन्हें जोड़ा जाता है।
// Syntax to read sensors
digitalRead(pin); // For digital sensor
analogRead(pin); // For analog sensor
Digital pin केवल दो states समझता है — HIGH (1) या LOW (0). जबकि Analog pin 0 से 1023 तक के values देता है जो sensor के analog voltage (0–5V) के proportional होती है।
| Type | Signal Range | Example Sensors | Read Function |
|---|---|---|---|
| Digital | 0 or 1 (HIGH/LOW) | IR, Motion, Flame Sensor | digitalRead(pin) |
| Analog | 0 to 1023 | LDR, DHT11, MQ135, LM35 | analogRead(pin) |
LED और Button basic components हैं जो sensor interface का base समझाते हैं। Button से input लिया जाता है और LED को output के रूप में control किया जाता है।
const int buttonPin = 2;
const int ledPin = 13;
int buttonState = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH)
digitalWrite(ledPin, HIGH);
else
digitalWrite(ledPin, LOW);
}
⚙️ जब button दबाया जाएगा, LED ON हो जाएगी।
DHT11 और DHT22 sensors humidity और temperature मापने के लिए सबसे common IoT sensors हैं। ये digital data output देते हैं और DHT.h library से easily interface होते हैं।
#include <DHT.h>
#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.print("Humidity: "); Serial.print(h);
Serial.print("% Temperature: "); Serial.print(t);
Serial.println("°C");
delay(2000);
}
⚙️ Output: Humidity और Temperature serial monitor पर show होंगे।
LDR sensor light intensity detect करता है। Light कम होने पर resistance बढ़ता है और output value कम हो जाती है।
int ldrPin = A0;
int ldrValue = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
ldrValue = analogRead(ldrPin);
Serial.print("LDR Value: ");
Serial.println(ldrValue);
delay(500);
}
⚙️ Light बढ़ने पर LDR value बढ़ेगी, Light घटने पर value घटेगी।
MQ135 sensor का use air quality या gas detection (CO2, CO, NH3) के लिए किया जाता है। यह analog voltage output देता है।
int gasPin = A1;
void setup() {
Serial.begin(9600);
}
void loop() {
int gasValue = analogRead(gasPin);
Serial.print("Gas Value: ");
Serial.println(gasValue);
delay(1000);
}
IR (Infrared) sensor obstacle detection के लिए use होता है। यह digital output देता है (object detect = LOW, object absent = HIGH)।
int irPin = 8;
void setup() {
pinMode(irPin, INPUT);
Serial.begin(9600);
}
void loop() {
int value = digitalRead(irPin);
if (value == LOW)
Serial.println("Object Detected");
else
Serial.println("No Object");
delay(500);
}
Sensor data को visualize करने के लिए LCD (Liquid Crystal Display) का use किया जाता है। Arduino में LiquidCrystal.h library से LCD को control किया जाता है।
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
lcd.print("Temp: 25C");
}
void loop() {
// Here you can print sensor data
}
⚙️ Output: LCD पर text display होगा — Temp: 25C
Keypad का use data input के लिए किया जाता है, जैसे PIN enter करना या menu select करना।
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.println(key);
}
}
⚙️ Output: Keypad press किए गए button का value serial monitor पर print होगा।
IoT projects में LCD Display और Keypad दोनों का उपयोग बहुत आम है — LCD का use sensor data या status दिखाने के लिए किया जाता है, जबकि Keypad का use user input लेने (जैसे password, commands, या settings) के लिए किया जाता है। Arduino के साथ इन दोनों को interface करना बहुत आसान है।
Arduino में सबसे ज़्यादा use होने वाला LCD module है 16x2 LCD (16 columns × 2 rows)। इसे control करने के लिए हम LiquidCrystal.h library का use करते हैं। यह library Arduino IDE में पहले से मौजूद होती है।
| Pin No. | Name | Function |
|---|---|---|
| 1 | VSS | Ground |
| 2 | VDD | +5V Supply |
| 3 | V0 | Contrast Adjustment (via Potentiometer) |
| 4 | RS | Register Select (Command/Data) |
| 5 | RW | Read/Write |
| 6 | EN | Enable Signal |
| 11–14 | D4–D7 | Data Pins |
#include <LiquidCrystal.h>
// LCD pins connected to Arduino (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2); // Initialize LCD
lcd.print("Hello IoT World!"); // Display text
}
void loop() {
// You can add sensor data display here
}
⚙️ LCD पर "Hello IoT World!" दिखेगा।
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int tempPin = A0;
void setup() {
lcd.begin(16, 2);
lcd.print("Temp: ");
}
void loop() {
int sensorValue = analogRead(tempPin);
float voltage = sensorValue * (5.0 / 1023.0);
float temperature = voltage * 100; // Assuming LM35 sensor
lcd.setCursor(0, 1);
lcd.print(temperature);
lcd.print(" C ");
delay(1000);
}
⚙️ Output: LCD पर live temperature value update होती रहेगी।
lcd.clear() से display साफ करें।lcd.setCursor(col, row) से text position set करें।lcd.print() का use text या numeric data दिखाने के लिए करें।Keypad का use user input लेने के लिए किया जाता है — जैसे password, numeric input, या control commands। Arduino में keypad connect करने के लिए हम Keypad.h library use करते हैं।
4x3 keypad में 4 row pins और 3 column pins होते हैं। इन pins को Arduino के 7 GPIO pins से जोड़ा जाता है।
#include <Keypad.h>
// Define keypad layout
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3};
// Create keypad object
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600);
Serial.println("Press a Key:");
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.print("You pressed: ");
Serial.println(key);
}
}
⚙️ Output: Keypad press करने पर serial monitor पर pressed key दिखाई देगी।
इस example में user keypad से data enter करता है, और LCD पर वही character दिखता है।
#include <LiquidCrystal.h>
#include <Keypad.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {A3, A2, A1};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
lcd.begin(16, 2);
lcd.print("Enter Key:");
}
void loop() {
char key = keypad.getKey();
if (key) {
lcd.setCursor(0, 1);
lcd.print("Key: ");
lcd.print(key);
}
}
⚙️ Output: हर बार जब कोई key दबाई जाएगी, LCD पर वह key दिखेगी।
keypad.getKey() का use करें।नीचे एक mini project दिया गया है जिसमें keypad से password enter करने पर LCD पर “Access Granted” या “Access Denied” message show होता है।
#include <LiquidCrystal.h>
#include <Keypad.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {A3, A2, A1};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String password = "1234";
String input = "";
void setup() {
lcd.begin(16, 2);
lcd.print("Enter Password:");
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key == '#') {
if (input == password) {
lcd.clear();
lcd.print("Access Granted");
} else {
lcd.clear();
lcd.print("Access Denied");
}
input = "";
delay(2000);
lcd.clear();
lcd.print("Enter Password:");
} else {
input += key;
lcd.setCursor(0, 1);
lcd.print(input);
}
}
}
⚙️ Output: सही password डालने पर "Access Granted" दिखेगा, गलत password पर "Access Denied"।
lcd.clear() और input="" reset करें।Serial Communication का मतलब है एक device से दूसरे device के बीच data transfer करना – bit-by-bit sequence में। Arduino में serial communication का सबसे ज़्यादा इस्तेमाल होता है Bluetooth, Wi-Fi modules और debugging के लिए। HC-05 Bluetooth Module एक लोकप्रिय serial communication device है जो wireless तरीके से Arduino को smartphone या laptop से connect करने में मदद करता है।
Serial communication में data bits एक-एक करके transmit होती हैं। Arduino में दो प्रकार की serial communication होती है:
HC-05 module Arduino से TX और RX lines के ज़रिए communicate करता है। जब Arduino कोई message भेजता है, HC-05 उसे wireless रूप में transmit करता है।
TX (Arduino) → RX (HC-05)
RX (Arduino) ← TX (HC-05)
| Pin | Name | Function |
|---|---|---|
| 1 | EN | Enable / Key (AT Mode) |
| 2 | VCC | Power Supply (3.6–6V) |
| 3 | GND | Ground |
| 4 | TXD | Transmits Serial Data |
| 5 | RXD | Receives Serial Data |
| 6 | STATE | Shows Connection Status (LED indicator) |
Arduino ↔ HC-05 Wiring:
⚠️ Note: HC-05 का RX pin 3.3V tolerant है। इसलिए 5V Arduino के TX pin से connect करते समय voltage divider (2 resistors) का use करें ताकि signal safe रहे।
नीचे दिया गया example Arduino और Android Bluetooth terminal के बीच message send/receive करता है।
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX, TX
void setup() {
Serial.begin(9600); // Serial Monitor
BTSerial.begin(9600); // Bluetooth HC-05
Serial.println("Bluetooth Ready!");
}
void loop() {
if (BTSerial.available()) { // If data received from phone
char data = BTSerial.read();
Serial.print("From Phone: ");
Serial.println(data);
}
if (Serial.available()) { // If data sent from Serial Monitor
char data = Serial.read();
BTSerial.write(data);
}
}
⚙️ Output: आप mobile app (जैसे “Serial Bluetooth Terminal”) से text भेजेंगे,
तो Arduino Serial Monitor पर वो text दिखेगा — और vice-versa।
इस example में आप smartphone से command भेजकर Arduino की LED ON/OFF कर सकते हैं।
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX, TX
int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT);
BTSerial.begin(9600);
Serial.begin(9600);
Serial.println("Send '1' to turn ON, '0' to turn OFF");
}
void loop() {
if (BTSerial.available()) {
char c = BTSerial.read();
if (c == '1') {
digitalWrite(ledPin, HIGH);
Serial.println("LED ON");
BTSerial.println("LED is ON");
} else if (c == '0') {
digitalWrite(ledPin, LOW);
Serial.println("LED OFF");
BTSerial.println("LED is OFF");
}
}
}
⚙️ Output:
📱 Send “1” → LED ON
📱 Send “0” → LED OFF
🔁 Message दोनों तरफ transmit होगा।
HC-05 को configure करने के लिए “AT Command Mode” होता है। इसमें हम Bluetooth का नाम, password, और baud rate बदल सकते हैं।
| Command | Function | Example |
|---|---|---|
| AT | Check Connection | OK |
| AT+NAME | Get Module Name | HC-05 |
| AT+NAME=MyBT | Change Name | MyBT |
| AT+PSWD=1234 | Set Password | 1234 |
HC-05 module का use करके आप mobile से lights, fans, sensors आदि control कर सकते हैं। Simple text commands (जैसे “ON1”, “OFF1”) Arduino को भेजकर appliances को toggle किया जा सकता है। यही concept IoT smart home systems की foundation बनाता है।
Relay Module एक ऐसा electronic switch होता है जो Arduino जैसे low-voltage circuits को High-voltage devices (जैसे Bulb, Fan, AC) से connect करता है। Relay की मदद से Arduino 220V AC devices को control कर सकता है, जबकि खुद केवल 5V DC signal generate करता है।
Simple words में कहा जाए तो relay एक “bridge” है जो low-power control system और high-power load के बीच signal pass करता है।
Relay के अंदर एक Electromagnet coil होती है जो energized होने पर magnetic field generate करती है और एक mechanical switch को activate करती है। इससे circuit ON या OFF होता है।
Relay internal working (Electromagnetic switch concept)
| Pin Name | Function |
|---|---|
| VCC | 5V DC Supply from Arduino |
| GND | Ground |
| IN | Control Signal (Digital pin from Arduino) |
| COM | Common connection for AC load |
| NO | Normally Open terminal |
| NC | Normally Closed terminal |
⚠️ Important: 220V AC circuit से काम करते समय safety gloves और insulated wires का उपयोग करें। Direct contact से खतरा हो सकता है ⚡।
यह example LED या Bulb को ON/OFF करने के लिए Arduino से relay module को control करता है।
int relayPin = 7;
void setup() {
pinMode(relayPin, OUTPUT);
Serial.begin(9600);
Serial.println("Send 1 to Turn ON, 0 to Turn OFF");
}
void loop() {
if (Serial.available()) {
char input = Serial.read();
if (input == '1') {
digitalWrite(relayPin, HIGH);
Serial.println("Device ON");
}
else if (input == '0') {
digitalWrite(relayPin, LOW);
Serial.println("Device OFF");
}
}
}
⚙️ Output:
- Serial Monitor पर “1” भेजने से Bulb ON
- “0” भेजने से Bulb OFF
अब हम relay को Bluetooth HC-05 module से control करेंगे, ताकि mobile से command भेजकर bulb ON/OFF किया जा सके।
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX, TX
int relayPin = 7;
void setup() {
pinMode(relayPin, OUTPUT);
BTSerial.begin(9600);
Serial.begin(9600);
Serial.println("Bluetooth Relay Ready!");
}
void loop() {
if (BTSerial.available()) {
char data = BTSerial.read();
if (data == '1') {
digitalWrite(relayPin, HIGH);
BTSerial.println("Appliance ON");
Serial.println("Relay ON");
}
else if (data == '0') {
digitalWrite(relayPin, LOW);
BTSerial.println("Appliance OFF");
Serial.println("Relay OFF");
}
}
}
⚙️ Output:
📱 Send “1” → Bulb ON
📱 Send “0” → Bulb OFF
(You can use the app “Serial Bluetooth Terminal”)
इस section में Arduino से जुड़े सभी common IoT sensors और modules के practical programs दिए गए हैं। हर code beginner-friendly है और NIELIT O Level (M4-R5) syllabus के अनुसार बनाया गया है।
int ledPin = 13;
void setup() { pinMode(ledPin, OUTPUT); }
void loop() {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
int buttonPin = 2, ledPin = 13;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
if (digitalRead(buttonPin))
digitalWrite(ledPin, HIGH);
else
digitalWrite(ledPin, LOW);
}
int ldrPin = A0;
int ledPin = 13;
void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); }
void loop() {
int value = analogRead(ldrPin);
Serial.println(value);
digitalWrite(ledPin, value < 400 ? HIGH : LOW);
delay(500);
}
int tempPin = A0;
void setup() { Serial.begin(9600); }
void loop() {
int value = analogRead(tempPin);
float temp = (value * 5.0 / 1023.0) * 100;
Serial.print("Temp: "); Serial.println(temp);
delay(1000);
}
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() { Serial.begin(9600); dht.begin(); }
void loop() {
Serial.print("Humidity: "); Serial.print(dht.readHumidity());
Serial.print("% Temp: "); Serial.println(dht.readTemperature());
delay(2000);
}
#define TRIG 9
#define ECHO 10
void setup() {
Serial.begin(9600);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
}
void loop() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long duration = pulseIn(ECHO, HIGH);
int distance = duration * 0.034 / 2;
Serial.print("Distance: "); Serial.println(distance);
delay(1000);
}
int irPin = 7, led = 13;
void setup() {
pinMode(irPin, INPUT);
pinMode(led, OUTPUT);
}
void loop() {
if (digitalRead(irPin) == LOW)
digitalWrite(led, HIGH);
else
digitalWrite(led, LOW);
}
int mqPin = A0;
void setup() { Serial.begin(9600); }
void loop() {
int value = analogRead(mqPin);
Serial.print("Air Quality: "); Serial.println(value);
delay(1000);
}
int flame = 8, led = 13;
void setup() { pinMode(flame, INPUT); pinMode(led, OUTPUT); }
void loop() {
if (digitalRead(flame) == LOW) {
Serial.println("🔥 Fire Detected!");
digitalWrite(led, HIGH);
} else digitalWrite(led, LOW);
}
int pir = 2, led = 13;
void setup() {
pinMode(pir, INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (digitalRead(pir) == HIGH) {
Serial.println("Motion Detected!");
digitalWrite(led, HIGH);
} else digitalWrite(led, LOW);
delay(500);
}
int relay = 7;
void setup() { pinMode(relay, OUTPUT); }
void loop() {
digitalWrite(relay, HIGH);
delay(1000);
digitalWrite(relay, LOW);
delay(1000);
}
#include <SoftwareSerial.h>
SoftwareSerial BT(10,11);
void setup() {
Serial.begin(9600);
BT.begin(9600);
}
void loop() {
if (BT.available()) Serial.write(BT.read());
if (Serial.available()) BT.write(Serial.read());
}
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16,2);
lcd.print("Hello IoT!");
}
void loop() {}
#include <Keypad.h>
const byte ROWS = 4, COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {9,8,7,6};
byte colPins[COLS] = {5,4,3};
Keypad keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() { Serial.begin(9600); }
void loop() {
char key = keypad.getKey();
if (key) Serial.println(key);
}
int buzzer = 9;
void setup() { pinMode(buzzer, OUTPUT); }
void loop() {
tone(buzzer, 1000);
delay(500);
noTone(buzzer);
delay(500);
}
#include <Servo.h>
Servo servo;
void setup() { servo.attach(9); }
void loop() {
servo.write(0); delay(1000);
servo.write(90); delay(1000);
servo.write(180); delay(1000);
}
int motorPin = 9;
void setup() { pinMode(motorPin, OUTPUT); }
void loop() {
for (int s=0; s<=255; s++){ analogWrite(motorPin, s); delay(10); }
for (int s=255; s>=0; s--){ analogWrite(motorPin, s); delay(10); }
}
int pot = A0, led = 9;
void setup() { pinMode(led, OUTPUT); }
void loop() {
int value = analogRead(pot);
int brightness = map(value, 0, 1023, 0, 255);
analogWrite(led, brightness);
}
#include <LiquidCrystal.h>
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() { lcd.begin(16,2); dht.begin(); }
void loop() {
float t = dht.readTemperature();
float h = dht.readHumidity();
lcd.clear();
lcd.setCursor(0,0); lcd.print("Temp: "); lcd.print(t); lcd.print("C");
lcd.setCursor(0,1); lcd.print("Hum: "); lcd.print(h); lcd.print("%");
delay(2000);
}
#include <SoftwareSerial.h>
SoftwareSerial BT(10,11);
int relay=7;
void setup(){
pinMode(relay, OUTPUT);
BT.begin(9600);
}
void loop(){
if(BT.available()){
char c=BT.read();
if(c=='1') digitalWrite(relay,HIGH);
else if(c=='0') digitalWrite(relay,LOW);
}
}
int a=2,b=3,c=4,d=5,e=6,f=7,g=8;
int seg[]={a,b,c,d,e,f,g};
byte nums[10][7] = {
{1,1,1,1,1,1,0},
{0,1,1,0,0,0,0},
{1,1,0,1,1,0,1},
{1,1,1,1,0,0,1},
{0,1,1,0,0,1,1},
{1,0,1,1,0,1,1},
{1,0,1,1,1,1,1},
{1,1,1,0,0,0,0},
{1,1,1,1,1,1,1},
{1,1,1,1,0,1,1}
};
void setup(){
for(int i=0;i<7;i++) pinMode(seg[i],OUTPUT);
}
void loop(){
for(int n=0;n<10;n++){
for(int i=0;i<7;i++) digitalWrite(seg[i], nums[n][i]);
delay(1000);
}
}