Building IoT Applications – Arduino IDE, Embedded C, Sensors, and Communication (NIELIT O Level M4-R5)

Building IoT Applications – Arduino IDE, Embedded C, Sensors, and Communication (NIELIT O Level M4-R5)

इस chapter में आप सीखेंगे कि Arduino IDE का उपयोग करके IoT applications कैसे बनाए जाते हैं। इसमें Embedded C के basics, sensors interfacing, serial communication और relay modules की पूरी जानकारी दी गई है।

👉 Swipe to see more
1️⃣ Introduction to Arduino IDE

🔹 What is Arduino IDE?

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 करते हैं।

💡 Example: अगर आपको LED blink करवानी है, तो आप Arduino IDE में code लिखेंगे → compile करेंगे → USB cable से Arduino board पर upload करेंगे। LED अपनी timing के अनुसार blink करेगी।

🔸 Main Features of Arduino IDE

  • ✔️ Open-source software – Free to download and use
  • ✔️ Supports multiple boards (UNO, Mega, Nano, ESP32, etc.)
  • ✔️ Built-in libraries and examples for beginners
  • ✔️ Serial Monitor for debugging and communication
  • ✔️ Easy interface for writing Embedded ‘C’ programs

🔹 Components of Arduino IDE Interface

जब आप Arduino IDE खोलते हैं, तो उसमें कुछ main parts दिखते हैं 👇

  1. Sketch Area: जहाँ code लिखा जाता है।
  2. Verify Button: Code को compile करता है और errors दिखाता है।
  3. Upload Button: Compiled code को Arduino board पर upload करता है।
  4. Serial Monitor: Board और computer के बीच communication दिखाता है (e.g., sensor data)।
  5. Message Area: Errors, warnings या uploading status दिखाता है।

🔹 Writing Code in Sketch

Arduino IDE में लिखा गया program Sketch कहलाता है। हर Sketch के दो main parts होते हैं:

  • void setup() – यह function program की शुरुआत में एक बार चलता है। इसमें initialization जैसे pinMode() या Serial.begin() होते हैं।
  • void loop() – यह function बार-बार चलता रहता है। इसमें continuously running logic (जैसे LED blink) लिखा जाता है।
💡 Example Code:
// 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 करेगी।

🔹 Compiling and Debugging

जब आप “✅ Verify” button दबाते हैं, IDE code को compile करता है। अगर कोई error होती है तो नीचे message area में दिखाई देती है। Common errors में semicolon की कमी, spelling mistake, या wrong function name शामिल हैं।

⚠️ Example Error: अगर आप digitalwrite लिख देंगे (small ‘w’) तो IDE error दिखाएगा — ‘digitalwrite’ was not declared in this scope

🔹 Uploading the Code to Arduino Board

जब code सही compile हो जाता है, “➡️ Upload” button दबाने से compiled program Arduino microcontroller में transfer हो जाता है। इसके लिए USB cable का use किया जाता है।

  • 1️⃣ Correct board select करें (Tools → Board → Arduino UNO)
  • 2️⃣ Correct port चुनें (Tools → Port → COM3 etc.)
  • 3️⃣ “Upload” दबाएँ और नीचे “Done Uploading” message आने का इंतज़ार करें

🔹 Role of Serial Monitor

Serial Monitor Arduino IDE का debugging tool है, जो computer और board के बीच real-time data communication दिखाता है। इसे हम sensor values या debugging messages देखने के लिए use करते हैं।

💡 Example:
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 दिखाएगा।

🔹 Advantages of Arduino IDE

  • ✅ Easy and user-friendly for beginners
  • ✅ Free and open-source
  • ✅ Supports hundreds of sensors and libraries
  • ✅ Real-time debugging through serial monitor
  • ✅ Compatible with all major operating systems (Windows, Mac, Linux)
2️⃣ Embedded ‘C’ Language Basics

Introduction

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 होते हैं।

1️⃣ Variables & Identifiers

Variable एक नाम है जहाँ memory में data store होता है। Identifiers वो नाम होते हैं जो variables, functions या constants को represent करते हैं।

  • Variable हमेशा alphabet या underscore (_) से शुरू होना चाहिए।
  • Spaces और special characters (%, #, @ आदि) allow नहीं हैं।
  • Case-sensitive: Temp और temp अलग हैं।
  • Keywords (जैसे int, float, char) को variable नाम में नहीं लिखा जा सकता।
int ledPin = 13;       // ✅ Valid variable
int _counter = 0;      // ✅ Valid variable
int 2sensor = 10;      // ❌ Invalid (cannot start with digit)
int float = 20;        // ❌ Invalid (keyword)
      

2️⃣ Data Types in Embedded C

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;

3️⃣ Constants

Constant वो value होती है जो program के दौरान change नहीं होती। दो तरीके से constant बनाते हैं:

  • Preprocessor constant#define
  • Typed constantconst keyword से
#define LED 13          // Preprocessor constant
const int baudRate = 9600;  // Typed constant
      

4️⃣ Operators

Operators वो symbols होते हैं जो operations perform करते हैं। Common categories नीचे दी गई हैं:

  • Arithmetic: + - * / %
  • Relational: == != > < >= <=
  • Logical: && || !
  • Assignment: = += -= *= /= %=
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 Program: Calculate and Display Voltage

नीचे दिया गया 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);
}
      

📌 Important Points

  • Semicolon (;) हर statement के बाद लगाना जरूरी है।
  • Integer division (7/3) → result 2 आता है, decimal चाहिए तो 7.0/3 करें।
  • UNO और ESP32 में int की size अलग हो सकती है। Long या float का सही इस्तेमाल करें।
  • const variables memory efficient होते हैं – macros से बेहतर।
3️⃣ Conditional Statements and Loops

Introduction

Conditional Statements और Loops Embedded ‘C’ का वो हिस्सा हैं जो program को decision लेने और repetitive task करने की शक्ति देते हैं। Real-world IoT में ये concept sensors के values check करने, LEDs या motors control करने और समय-based automation करने में सबसे ज़्यादा इस्तेमाल होता है।

1️⃣ Conditional Statements (Decision Making)

Conditional statements का use तब किया जाता है जब हमें किसी condition के आधार पर code का कोई हिस्सा चलाना या skip करना हो। Arduino में commonly if, if-else, else-if, और switch इस्तेमाल होते हैं।

🔸 if Statement

अगर condition true है, तो block execute होता है, वरना ignore हो जाता है।

int temp = 30;
if (temp > 25) {
  Serial.println("Fan ON");
}
      
⚙️ Output: Fan ON (क्योंकि 30 > 25)

🔸 if-else Statement

जब दो possibilities हों (true या false)।

int light = analogRead(A0);
if (light < 500) {
  digitalWrite(13, HIGH);  // LED ON
} else {
  digitalWrite(13, LOW);   // LED OFF
}
      

🔸 else-if Ladder

जब कई अलग-अलग 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

🔸 Nested if

जब एक condition के अंदर दूसरी condition check करनी हो।

int temp = 35;
int humidity = 80;

if (temp > 30) {
  if (humidity > 70) {
    Serial.println("Turn ON Dehumidifier");
  }
}
      

🔸 switch Statement

जब एक 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

2️⃣ Loops (Iteration Statements)

Loops का इस्तेमाल तब किया जाता है जब कोई काम बार-बार दोहराना हो। IoT में sensor data को बार-बार read करने या display update करने के लिए loops बहुत जरूरी हैं।

🔸 while Loop

जब तक condition true है, block बार-बार execute होता है।

int i = 0;
while (i < 5) {
  Serial.println(i);
  i++;
}
      
⚙️ Output: 0 1 2 3 4

🔸 do-while Loop

पहले code run होता है, फिर condition check होती है। इसलिए यह loop कम से कम एक बार जरूर चलता है।

int i = 0;
do {
  Serial.println(i);
  i++;
} while (i < 5);
      

🔸 for Loop

जब बार-बार fixed number of times कोई काम करना हो।

for (int i = 0; i < 10; i++) {
  digitalWrite(13, HIGH);
  delay(200);
  digitalWrite(13, LOW);
  delay(200);
}
      
⚙️ LED 10 बार blink करेगी।

🔸 Nested Loops

एक 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: * * * * * * * * *

🔸 Infinite Loop

Arduino में loop() function अपने-आप infinite loop की तरह चलता है। लेकिन manual infinite loop भी बनाया जा सकता है।

while (true) {
  Serial.println("Running forever...");
  delay(1000);
}
      

3️⃣ Logical Connectives

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");
}
      

🧠 Practice Program: Automatic Fan Control

नीचे का 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);
}
      

📌 Tips for Beginners

  • हर if condition parentheses () में रखें।
  • Semicolon ; कभी गलती से if के बाद न लगाएँ (if (x==1); ❌)।
  • Loop में delay() use करने से real-time speed प्रभावित होती है — timers बेहतर हैं।
  • Nested loops में proper indentation रखें ताकि readability बनी रहे।
4️⃣ Arrays in Embedded C

Introduction

Array एक ऐसा variable है जो एक ही नाम से कई values store कर सकता है। Simple words में, array एक collection of similar data elements होता है। Embedded ‘C’ में arrays का use sensors के readings, multiple LEDs control करने या data buffer store करने के लिए किया जाता है।

💡 Example: अगर आपको 5 temperature readings store करनी हैं तो 5 अलग-अलग variable बनाने की बजाय आप एक array बना सकते हैं:
int temp[5] = {25, 27, 29, 31, 30};
      

1️⃣ Declaring Arrays

Array को declare करने का syntax:

data_type array_name[size];
  • data_type → जैसे int, float, char
  • array_name → array का नाम
  • size → elements की संख्या
int sensor[4];           // Empty integer array of 4 elements
float voltage[3];        // Float array with 3 values
char msg[10];            // Character array (string buffer)
      

2️⃣ Initializing Arrays

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};
      

3️⃣ Accessing Array Elements

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
      

4️⃣ Changing Array Values

आप किसी भी index की value को update कर सकते हैं:

int led[3] = {2, 3, 4};
led[1] = 8;  // 2nd element को 8 से replace किया गया
      

5️⃣ Using Loops with Arrays

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 करेंगी।

🧠 Practical Example: Average Temperature from 5 Readings

यह 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);
}
      

6️⃣ Multi-Dimensional Arrays

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
      

📌 Tips for Beginners

  • Array index हमेशा 0 से शुरू होता है।
  • Index limit से बाहर access करने से undefined behavior होता है।
  • Loops का use arrays handle करने के लिए efficient तरीका है।
  • Float arrays में decimal values store की जा सकती हैं।
  • String arrays में characters के अंत में हमेशा '\0' होना चाहिए।
5️⃣ Functions and Arduino Libraries

Introduction

Functions Embedded ‘C’ में code को छोटे, reusable हिस्सों में बाँटने का तरीका हैं। इससे program modular, readable और debugging के लिए आसान बनता है। Arduino में दो main functions होते हैं — setup() और loop(), लेकिन हम custom functions भी बना सकते हैं ताकि बार-बार वही code न लिखना पड़े।

1️⃣ What is a Function?

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)
}
    
  • return_type: Function क्या type का value return करेगा (int, float, void आदि)
  • function_name: Function का नाम (जैसे blinkLED)
  • parameter_list: Input values जिन्हें function में भेजा जाता है

2️⃣ Example: User-defined Function

नीचे एक 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);
  }
}
      

3️⃣ Function Prototype

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);
}
      

4️⃣ Types of Functions

  • Built-in Functions: Arduino IDE द्वारा दिए गए ready-made functions (जैसे digitalWrite(), analogRead(), pinMode())
  • User-defined Functions: Developer द्वारा बनाए गए functions (custom logic)
  • Library Functions: External libraries द्वारा provide किए गए pre-coded functions (जैसे Lcd.print(), DHT.readTemperature())

5️⃣ Return Type Example

जब 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

6️⃣ Arduino Libraries

Arduino में Libraries ready-made code होते हैं जो hardware को आसानी से control करने में मदद करते हैं। Libraries के जरिए हम sensors, displays, motors, Bluetooth, Wi-Fi आदि को few lines में operate कर सकते हैं।

  • Library को include करने के लिए: #include <LibraryName.h>
  • Examples देखने के लिए: Arduino IDE → File → Examples
  • New Library install करने के लिए: Sketch → Include Library → Manage Libraries

7️⃣ Commonly Used Arduino Libraries

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();

8️⃣ Example: LCD Display with Function

नीचे का 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 होता रहेगा।

📌 Tips for Beginners

  • हर custom function को main code के बाहर लिखें ताकि readability बढ़े।
  • Function का नाम meaningful रखें (जैसे readSensorData(), updateLCD())।
  • Library include करते समय spelling case-sensitive होती है।
  • अगर library missing error आए तो Arduino IDE → Tools → Manage Libraries से install करें।
  • Function को test करने के लिए Serial Monitor का use करें।
6️⃣ Interfacing Sensors

Introduction

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) के अनुसार इन्हें जोड़ा जाता है।

⚙️ Types of Sensor Pins

  • Digital Sensor: Output देता है केवल 0 या 1 (HIGH/LOW) जैसे IR Sensor, Motion Sensor
  • Analog Sensor: Output देता है variable voltage (0V से 5V तक) जैसे LDR, Temperature Sensor
// Syntax to read sensors
digitalRead(pin);   // For digital sensor
analogRead(pin);    // For analog sensor
      

1️⃣ Working of Digital vs Analog Pins

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)

2️⃣ Interfacing LED and Button

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 हो जाएगी।

3️⃣ Interfacing DHT Sensor (Temperature & Humidity)

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 होंगे।

4️⃣ Interfacing LDR Sensor (Light Dependent Resistor)

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 घटेगी।

5️⃣ Interfacing MQ135 Gas Sensor

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);
}
      

6️⃣ Interfacing IR Sensor

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);
}
      

7️⃣ Displaying Sensor Data on LCD

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

8️⃣ Interfacing Keypad

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 होगा।

📌 Tips for Beginners

  • Sensor connect करते समय power (VCC) और ground (GND) सही लगाएँ।
  • Analog sensors को हमेशा A0, A1 जैसे analog pins से connect करें।
  • Library install न होने पर Arduino IDE → Manage Libraries से add करें।
  • Sensor data smooth करने के लिए average या filter algorithm use करें।
  • Always check sensor’s datasheet for correct voltage and pin configuration.
7️⃣ Display Data on LCD and Interfacing Keypad

Introduction

IoT projects में LCD Display और Keypad दोनों का उपयोग बहुत आम है — LCD का use sensor data या status दिखाने के लिए किया जाता है, जबकि Keypad का use user input लेने (जैसे password, commands, या settings) के लिए किया जाता है। Arduino के साथ इन दोनों को interface करना बहुत आसान है।

1️⃣ Interfacing LCD Display

Arduino में सबसे ज़्यादा use होने वाला LCD module है 16x2 LCD (16 columns × 2 rows)। इसे control करने के लिए हम LiquidCrystal.h library का use करते हैं। यह library Arduino IDE में पहले से मौजूद होती है।

⚙️ Pin Configuration (16x2 LCD)

Pin No. Name Function
1VSSGround
2VDD+5V Supply
3V0Contrast Adjustment (via Potentiometer)
4RSRegister Select (Command/Data)
5RWRead/Write
6ENEnable Signal
11–14D4–D7Data Pins

💡 Basic Example: Display Message on LCD

#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!" दिखेगा।

💡 Example: Display Sensor Data on LCD

#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 होती रहेगी।

📘 Tips for LCD Display

  • V0 pin को potentiometer से connect करें ताकि contrast adjust किया जा सके।
  • lcd.clear() से display साफ करें।
  • lcd.setCursor(col, row) से text position set करें।
  • lcd.print() का use text या numeric data दिखाने के लिए करें।

2️⃣ Interfacing 4x3 or 4x4 Keypad

Keypad का use user input लेने के लिए किया जाता है — जैसे password, numeric input, या control commands। Arduino में keypad connect करने के लिए हम Keypad.h library use करते हैं।

⚙️ Pin Setup

4x3 keypad में 4 row pins और 3 column pins होते हैं। इन pins को Arduino के 7 GPIO pins से जोड़ा जाता है।

💡 Basic Keypad Example

#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: Keypad + LCD Combined Project

इस 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 दिखेगी।

📘 Tips for Keypad

  • Keypad library Arduino IDE → Manage Libraries → "Keypad by Mark Stanley" install करें।
  • Row और Column pins को सही क्रम में connect करें।
  • Key press detection के लिए keypad.getKey() का use करें।
  • Multiple key inputs store करने के लिए string variable का use किया जा सकता है।

3️⃣ Real IoT Example: Password Access System

नीचे एक 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"।

📌 Final Tips

  • LCD और Keypad को एक साथ चलाते समय power consumption पर ध्यान दें।
  • Data clear करने के लिए lcd.clear() और input="" reset करें।
  • Security systems, attendance machines और smart locks में यही combination use होता है।
  • आप चाहें तो buzzer या relay जोड़कर system को और advanced बना सकते हैं।
8️⃣ Serial Communication (Bluetooth HC-05)

Introduction

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 करने में मदद करता है।

1️⃣ Working Principle of Serial Communication

Serial communication में data bits एक-एक करके transmit होती हैं। Arduino में दो प्रकार की serial communication होती है:

  • Hardware Serial: Arduino के RX (Pin 0) और TX (Pin 1) से होती है।
  • Software Serial: जब आपको दूसरे pins पर serial connection बनाना हो।

HC-05 module Arduino से TX और RX lines के ज़रिए communicate करता है। जब Arduino कोई message भेजता है, HC-05 उसे wireless रूप में transmit करता है।

TX (Arduino) → RX (HC-05)
RX (Arduino) ← TX (HC-05)
      

2️⃣ HC-05 Bluetooth Module Pin Configuration

Pin Name Function
1ENEnable / Key (AT Mode)
2VCCPower Supply (3.6–6V)
3GNDGround
4TXDTransmits Serial Data
5RXDReceives Serial Data
6STATEShows Connection Status (LED indicator)

3️⃣ Circuit Connection with Arduino UNO

Arduino ↔ HC-05 Wiring:

  • VCC → 5V
  • GND → GND
  • TX → Pin 10 (Arduino RX)
  • RX → Pin 11 (Arduino TX via voltage divider)

⚠️ Note: HC-05 का RX pin 3.3V tolerant है। इसलिए 5V Arduino के TX pin से connect करते समय voltage divider (2 resistors) का use करें ताकि signal safe रहे।

4️⃣ Example: Arduino Bluetooth Communication using SoftwareSerial

नीचे दिया गया 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।

5️⃣ Example: Control LED via Bluetooth

इस 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 होगा।

6️⃣ AT Commands (Configuration Mode)

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

7️⃣ Advantages of Bluetooth Serial Communication

  • Wireless connection up to 10 meters range।
  • Low power consumption suitable for IoT devices।
  • Data transfer speed up to 2.1 Mbps।
  • Easy pairing with Android devices।
  • Bi-directional (Full duplex) communication support।

8️⃣ Real-Life Example: Home Automation using Bluetooth

HC-05 module का use करके आप mobile से lights, fans, sensors आदि control कर सकते हैं। Simple text commands (जैसे “ON1”, “OFF1”) Arduino को भेजकर appliances को toggle किया जा सकता है। यही concept IoT smart home systems की foundation बनाता है।

📌 Tips for Beginners

  • HC-05 का RX pin 3.3V tolerant है — हमेशा voltage divider लगाएँ।
  • Pair करने से पहले Android में Bluetooth visibility “ON” रखें।
  • Default pairing code: 1234 या 0000
  • SoftwareSerial baud rate हमेशा 9600 रखें (default)।
  • Power off करने से पहले module disconnect करें ताकि AT mode safe रहे।
9️⃣ Controlling 220V AC Devices using Relay Module

Introduction

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 करता है।

1️⃣ Working Principle of Relay

Relay के अंदर एक Electromagnet coil होती है जो energized होने पर magnetic field generate करती है और एक mechanical switch को activate करती है। इससे circuit ON या OFF होता है।

Relay Working

Relay internal working (Electromagnetic switch concept)

  • Normally Open (NO): जब तक relay OFF है, circuit open रहता है (current flow नहीं होता)।
  • Normally Closed (NC): relay OFF होने पर circuit closed रहता है (current flow होता है)।
  • Common (COM): यह NO या NC के बीच connect होता है, load को connect करने के लिए।

2️⃣ Relay Module Pin Configuration

Pin Name Function
VCC5V DC Supply from Arduino
GNDGround
INControl Signal (Digital pin from Arduino)
COMCommon connection for AC load
NONormally Open terminal
NCNormally Closed terminal

3️⃣ Arduino to Relay Connection

  • VCC → 5V (Arduino)
  • GND → GND (Arduino)
  • IN → Digital Pin 7 (Control Signal)
  • COM → 220V Live Line
  • NO → Appliance (Bulb/Fan) Line

⚠️ Important: 220V AC circuit से काम करते समय safety gloves और insulated wires का उपयोग करें। Direct contact से खतरा हो सकता है ⚡।

4️⃣ Example: Control 220V Bulb via Arduino

यह 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

5️⃣ Example: Bluetooth Controlled Home Appliance

अब हम 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”)

6️⃣ Types of Relay Modules

  • 1-Channel Relay: एक ही appliance control करने के लिए।
  • 2-Channel Relay: दो devices (जैसे fan + light) control करने के लिए।
  • 4/8-Channel Relay: multiple home automation systems के लिए।
  • Solid-State Relay (SSR): बिना mechanical part के, silent operation और high durability।

7️⃣ Real-Life IoT Applications

  • Smart Home Automation (Light, Fan, AC Control)
  • Automatic Irrigation Systems
  • Industrial Equipment ON/OFF Scheduling
  • Voice Controlled Smart Devices (with Alexa/Google)

⚠️ Safety Guidelines

  • Always disconnect main power before wiring the relay module.
  • Use plastic relay enclosures for safety.
  • Use proper insulation tape for 220V AC wires.
  • Prefer opto-isolated relay modules (to protect Arduino from AC spikes).
  • Never touch live wires while Arduino is powered ON.

📘 Tips for Beginners

  • Relay module का input pin logic “Active LOW” या “Active HIGH” check करें।
  • Relay के click sound से ON/OFF status पता चलता है।
  • For heavy loads (e.g. AC Motor), use separate power relay.
  • Control multiple devices easily using 4 or 8 channel relay boards.
1️0️⃣ All Arduino Practical Programs (Common Sensors & Modules)

💡 Complete Collection of Arduino IoT Practical Codes

इस section में Arduino से जुड़े सभी common IoT sensors और modules के practical programs दिए गए हैं। हर code beginner-friendly है और NIELIT O Level (M4-R5) syllabus के अनुसार बनाया गया है।

1️⃣ LED Blink

int ledPin = 13;
void setup() { pinMode(ledPin, OUTPUT); }
void loop() {
  digitalWrite(ledPin, HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}
    

2️⃣ Button Controlled LED

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);
}
    

3️⃣ LDR Sensor

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);
}
    

4️⃣ LM35 Temperature Sensor

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);
}
    

5️⃣ DHT11 Temperature & Humidity Sensor

#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);
}
    

6️⃣ Ultrasonic Distance Sensor

#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);
}
    

7️⃣ IR Obstacle Detection

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);
}
    

8️⃣ MQ135 Air Quality Sensor

int mqPin = A0;
void setup() { Serial.begin(9600); }
void loop() {
  int value = analogRead(mqPin);
  Serial.print("Air Quality: "); Serial.println(value);
  delay(1000);
}
    

9️⃣ Flame Sensor

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);
}
    

10️⃣ PIR Motion Sensor

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);
}
    

11️⃣ Relay Control (220V AC)

int relay = 7;
void setup() { pinMode(relay, OUTPUT); }
void loop() {
  digitalWrite(relay, HIGH);
  delay(1000);
  digitalWrite(relay, LOW);
  delay(1000);
}
    

12️⃣ Bluetooth HC-05

#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());
}
    

13️⃣ LCD Display

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16,2);
  lcd.print("Hello IoT!");
}
void loop() {}
    

14️⃣ 4x3 Keypad Input

#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);
}
    

15️⃣ Buzzer

int buzzer = 9;
void setup() { pinMode(buzzer, OUTPUT); }
void loop() {
  tone(buzzer, 1000);
  delay(500);
  noTone(buzzer);
  delay(500);
}
    

16️⃣ Servo Motor

#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);
}
    

17️⃣ DC Motor Speed Control

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); }
}
    

18️⃣ Potentiometer

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);
}
    

19️⃣ DHT11 + LCD Display

#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);
}
    

20️⃣ Smart Home (Relay + Bluetooth)

#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);
  }
}
    

21️⃣ 7-Segment Display

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);
  }
}