Labels

Thursday, May 4, 2017

Measuring Distance with Arduino: A Guide to the HC-SR04 Ultrasonic Sensor



If you’ve ever wanted to give your Arduino projects "vision," the HC-SR04 Ultrasonic Sensor is the perfect place to start. Whether you're building an obstacle-avoiding robot or a digital tape measure, this little module is a staple in the maker community.

Today, I’m going to break down how this sensor works and show you how to get it up and running with your Arduino.

What is the HC-SR04?

The HC-SR04 is an affordable sensor that uses sonar to determine the distance to an object—much like a bat or a dolphin. It has a solid detection range of 2 cm to 400 cm (about 13 feet), which is more than enough for most DIY projects.

How it Works: The "Echo" Principle

The module consists of two main parts: an ultrasonic transmitter and a receiver. Here is the simple physics behind it:
  • The Trigger: The transmitter sends out a high-frequency sound wave (40 kHz).
  • The Bounce: If there is an object in front, the sound wave hits it and bounces back.
  • The Echo: The receiver detects the returning wave and records the time it took for the round trip.
  • By knowing the speed of sound, we can calculate the distance with a bit of simple math!
By knowing the speed of sound, we can calculate the distance with a bit of simple math!

Pros and Cons

Before we start coding, it’s important to know the sensor's limitations:

  1. The Good: Unlike infrared sensors, the HC-SR04 isn't bothered by sunlight or dark-colored objects.
  2. The Bad: It can struggle with soft materials like cloth or wool, which tend to absorb sound waves rather than reflecting them.
  3. The Variable: Keep in mind that temperature and humidity can slightly change the speed of sound, which might affect your accuracy if you're looking for precision.

Hooking it up to Arduino

To get started, you'll need to connect the four pins: VCC (5V), Trig (Trigger), Echo, and GND.


HC-SR04 Ultrasonic sensor Technical Specification

HC-SR04

power supply                  :- 5DC
Quiescent Current           :- 2mA
Working Current               :-15mA
Effect Angle                    :<15 degrees
Distance                           :- 2cm to 400cm
Resolution                        :-0.3cm
Trigger input pulse width :-10us
Ultrasonic Frequency       :-40KHz

Pins


VCC  :- arduino 5v pin
TRIG  :- arduino Digital pin
ECHO :- arduino Digital pin
GND  :- arduino GND pin

The TRIG pin is used to trigger the transmission of the ultrasonic sound pulse, while the ECHO pin is used to listen for the returning signal.

Example

int triggerPin= 8;
int echoPin= 7;
long pulsDuration =0;
long distanceCM =0;
long distanceINC =0;
void setup() {
  // put your setup code here, to run once:
  pinMode(triggerPin,OUTPUT);
  pinMode(echoPin,INPUT);

  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
   digitalWrite(triggerPin,LOW);
   delayMicroseconds(5);
   digitalWrite(triggerPin,HIGH);
   delayMicroseconds(10);
   digitalWrite(triggerPin,LOW);

  pulsDuration =pulseIn(echoPin,HIGH);

  distanceCM = (pulsDuration/2) / 29.1;
  distanceINC = (pulsDuration/2) / 74; 

   Serial.println("CM");
  Serial.println(distanceCM);

   Serial.println("INCH");
  Serial.println(distanceINC);

  delay(1000);

   Serial.println("**********************************************");
}








Thursday, April 20, 2017

How do i program IR Sensor - Arduino


FC-51 IR sensor module is a proximity sensor module. We can identify obstacle in front of sensor. So it has built in IR transmitter and IR receiver. It also has built in potentiometer to adjust distance rage. IR sensor module operate in 2cm-30cm range. FC-51 is compatible with Arduino.

Technical Specification 

1. Operation Voltage - 3.3V - 5V
2. Detection Angle   -35 degrees
3 Active Output level - Outputs Low logic level when obstacle is detected
4.Detection range: 2cm – 30cm (Adjustable using potentiometer)

PIN Out & In

1. VCC - 3.3V-5V DC power input
2. GND -0V Power pin
3. OUT -  Digital Output Pin

Programming 

There are may way to do it. So here i try to use IR sensor with Arduino Uno board. When obstacle is detected by sensor, it will generate LOW output, otherwise output is HIGH.


Example 1 

int irSenRead =7;
int isObstacle = HIGH;
void setup() {

  pinMode(irSenRead ,INPUT);
   Serial.begin(9600);

}

void loop() {

  isObstacle = digitalRead(irSenRead); // // Read IR sensor output
   Serial.println(digitalRead(irSenRead)); // // print the output

  // // isObstacle ==low there is obstacle infront of sensor
  // // using serial monitor we can see this output
  if (isObstacle == LOW) {
    Serial.println("OBSTACLE");
  }
  else
  {
    Serial.println("NO");
  }

  delay(500);
}

Example 2
In below code sample .LED bulb will be on when obstacle detected

int irSenRead =7;
int LED=6;
int isObstacle = HIGH;
int delayRead =100;
void setup() {

  pinMode(irSenRead ,INPUT);
   pinMode(LED ,OUTPUT);
   Serial.begin(9600);

}

void loop() {

  isObstacle = digitalRead(irSenRead);
   Serial.println(digitalRead(irSenRead));

   // isObstacle ==low there is obstacle infront of sensor
  if (isObstacle == LOW) {
    digitalWrite(LED ,HIGH);
  }
  else
  {
    digitalWrite(LED ,LOW);
  }

  delay(delayRead);
}



Monday, April 17, 2017

LEDs blink in a sequence with Arduino [Knight Rider]

e all remember the iconic 80s TV series Knight Rider. One of the most memorable features was the car’s signature sweeping LED flash. For this project, I used an Arduino UNO to recreate that display using 10 LEDs. While there are many ways to program the Arduino microchip, here is the approach I took to get that classic 'scanner' look.

Knight Rider 1

void setup() {

  
     pinMode(2,OUTPUT);
       pinMode(3,OUTPUT);
         pinMode(4,OUTPUT);
           pinMode(5,OUTPUT);
             pinMode(6,OUTPUT);
               pinMode(7,OUTPUT);
                pinMode(8,OUTPUT);
                 pinMode(9,OUTPUT);
                  pinMode(10,OUTPUT);
                   pinMode(11,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
    for(int i=1;i<12;i=i+1)
 {
  digitalWrite(i,HIGH);
  digitalWrite(i+1,HIGH);
  digitalWrite(i+2,HIGH);
  
  delay(100);
  digitalWrite(i,LOW);
  digitalWrite(i+1,LOW);
  digitalWrite(i+2,LOW);
  
 }

for(int i =12 ;i>=1;i--)
 {
  digitalWrite(i,HIGH);
   digitalWrite(i-1,HIGH);
    digitalWrite(i-2,HIGH);
  delay(100);
  digitalWrite(i,LOW);
   digitalWrite(i-1,LOW);
     digitalWrite(i-2,LOW);
  
 }
}

Knight Rider 2

int pinArray[] = {2, 3, 4, 5, 6, 7,8,9,10,11};

int delayTime = 100;
void setup() {
  // put your setup code here, to run once:
for (int i=0;i<11;i++) {
    pinMode(pinArray[i], OUTPUT);
  }
}

void loop() {
  for (int i=2;i<11;i++) {
   digitalWrite(pinArray[i], HIGH);   
   digitalWrite(pinArray[i+1], HIGH);
   digitalWrite(pinArray[i+2], HIGH);
     delay(delayTime);

    digitalWrite(pinArray[i], LOW);   
   digitalWrite(pinArray[i+1], LOW);
   digitalWrite(pinArray[i+2], LOW);
  }
  for (int i=11;i>=2;i--) { 

  digitalWrite(pinArray[i],HIGH);
  digitalWrite(pinArray[i-1],HIGH);
  digitalWrite(pinArray[i-2],HIGH);
    delay(delayTime);
  digitalWrite(pinArray[i],LOW);
  digitalWrite(pinArray[i-1],LOW);
  digitalWrite(pinArray[i-2],LOW);
  }

}







Friday, August 26, 2016

SYS.SQL_MODULES in T-SQL (Catalog View)

The sys.sql_modules system view is a powerful tool for returning object details within a SQL Server database. It allows developers to easily retrieve the definition and metadata for various objects, including Stored Procedures, Replication-filter procedures, Views, and DML Triggers. Additionally, it covers SQL Scalar Functions, Inline Table-valued Functions, Table-valued Functions, and Rules. Using this view is an essential way to audit or search your codebase programmatically.

Columns


object_id
definition
uses_ansi_nulls
uses_quoted_identifier
is_schema_bound
uses_database_collation
is_recompiled
null_on_null_input
execute_as_principal_id

SELECT  object_id, definition, uses_ansi_nulls, uses_quoted_identifier,
                 is_schema_bound,uses_database_collation, is_recompiled,null_on_null_input,                                      execute_as_principal_id
 FROM   sys.sql_modules




Thursday, August 25, 2016

Logical processing order of SELECT statement

When a SQL query executes on SQL Server, it follows a specific sequence known as the Logical Query Processing Order. While we write queries starting with SELECT, SQL Server processes them in a very different order to ensure data is filtered and grouped correctly before being returned. Understanding this flow is essential for writing efficient code and troubleshooting unexpected results. Let’s break down the logical order of a SELECT statement.


1. FROM
2. ON
3. OUTER
4. WHERE
5 GROUP BY
6 CUBE or ROLLUP
7 HAVING
8 SELECT
9 DISTINCT
10 ORDER BY
11 TOP

SQL query to get table names and schema in Database

There are several ways to retrieve table names and their associated schemas within a SQL Server database. Depending on your specific needs—whether you are automating a script or performing a quick manual check—different methods offer different levels of detail. Below, I have outlined some of the most common and effective ways to query your database metadata.

1.
SELECT SCHEMA_NAME(schema_id) 'SchemaName' , name 'TableInDb' 
FROM sys.tables

Return all tables and related schema in selected database



2.
SELECT TABLE_CATALOG ,TABLE_SCHEMA ,TABLE_NAME ,TABLE_TYPE  FROM INFORMATION_SCHEMA.TABLES

this will return more information than first one, it's return VIEWs in Database as well



3.
  SELECT t.name 'TableName' ,s.name 'SchemaName'
  FROM sys.tables AS t
  INNER JOIN sys.schemas AS s
  ON t.[schema_id] = s.[schema_id]

  SELECT t.name 'TableName' ,s.name 'SchemaName'
  FROM sys.tables AS t
  INNER JOIN sys.schemas AS s
  ON t.[schema_id] = s.[schema_id]
  WHERE s.name = N'dbo';







Wednesday, August 24, 2016

UNION and UNION ALL in T-SQL

UNION

The UNION operator is used to combine the result sets of two or more SELECT statements. To use it successfully, you must follow three key rules:

  • Column Consistency: Each SELECT statement must have the same number of columns.

  • Data Compatibility: The corresponding columns in each statement must have similar or compatible data types.

  • Distinct Results: By default, UNION removes duplicate records and returns only distinct values.

UNION ALL

The UNION ALL operator works similarly to UNION, but with one major difference: it retrieves all rows from the selected tables without filtering for duplicates. Because it doesn't spend resources searching for and removing identical records, UNION ALL is significantly faster and more efficient when you know your data is unique or when you specifically want to include every result.  


Use UNION ALL by default if your data is already unique or if you don't mind including duplicate records. Because UNION must perform extra work to ensure only distinct values are returned, it is slower than UNION ALL. Only reach for the standard UNION when you specifically need to filter out overlapping data between your query results.