SlideShare a Scribd company logo
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
1 RAJESH KUMAR(14001003908)
DECLARATION
I hereby declare that the work presented in this Report entitled “Advanced Material
and sensors Laboratory work with CSIO division”, in partial fulfillment of the
requirements for the award of degree of Bachelor of Technology in Electronics and
Communication Engineering, submitted to Deenbandhu Chhotu Ram University of
Science and technology, Murthal, is an authentic record of my own work carried out
during the period from 13 June, 2016 to 28nd July, 2016 under the guidance of
Industrial guide Mr. Satish Kumar and academic guide Mr.Charanjeet Singh, A.P.
in ECE Department.
RajeshKumar
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
2 RAJESH KUMAR(14001003908)
ACKNOWLEDGEMENT
This report gives the details of the study work done in one and half months of the
industrial training after sixth semester for partial fulfillment of the requirements for the
degree of Bachelor of Technology (B.Tech) ,under the supervision of Mr. Satish
Kumar. I have take efforts in this report. However , it would not have been possible
without the kind support and help of many individuals and organizations. I would like to
extend our sincere thanks to all of them.
I am highly indebted for their guidance and constant supervision as well as for
providing necessary information regarding the project and also for their support in
completing the project. I would also like to express our gratitude towards our parents for
their kind co-operation and encouragement which help us in completion of this
industrial training
Rajesh Kumar
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
3 RAJESH KUMAR(14001003908)
Introduction
CSIO was established in October 1959 as a laboratory which works on the research,
design, and development of scientific and industrial instruments. It was located in New
Delhi, and then moved to Chandigarh in 1962. The first Director was Piara Singh
Gill.[3] CSIO campus (spread over an area of approximately 120 acres) comprises office
buildings, R&D laboratories, Indo-Swiss Training Centre and a housing complex. A
building and the accompanying workshops were inaugurated in December 1967.
Another block was added in 1976 for housing the R&D Divisions and library. During
the mid-1980s the laboratory buildings and infrastructural facilities were modernized.
An Administration Block was inaugurated in September 1994.
With a view to meeting the demand for instrument technologists, the Indo-Swiss
Training Centre (ISTC) was started in December 1963 with the co-operation of Swiss
Foundation for Technical Assistance, Zurich, Switzerland.
CSIO is under the Physical Sciences Cluster of CSIR. CSIR-CSIO has signed anMoU
with CSIR-IMTECH Chandigarh on April 28, 2012 for collaborative research work.
CSIO has infrastructural facilities in the areas of microelectronics, optics, applied
physics, electronics, and mechanical engineering. R&D programmes are in food &
agriculture, health and rehabilitation, avionics, snow and seismic monitoring in
strategic sector, landslide and structure health monitoring for public safety, and bio and
nano sciences.
A large number of instruments have been developed by the Institute and their know-
how have been passed on to the industry for commercial exploitation.
The laboratory provides a two-year postgraduate research programme in Engineering
(PGRPE) in 'Advanced Instrumentation Engineering' the only such program in India.
The students are designated as Quick Hire Scientist Trainee QHS(T). The areas of
research are Optics and Photonics, Bio-Medical Instrumentation and Agrionics. After
the completion of 1-year course work taught by the senior scientists of the organization
they are given a one-year project work as their thesis.
Major R&D areas
 Strategic and Defence Applications
 Optics &Opto-Electronics
 Computational Instrumentation
 Geo-Scientific Instrumentation
 Medical Instrumentation
 Analytical Instrumentation
 Advanced Materials & Science
 Agri-Electronic Instrumentation
 Energy Management, Condition Monitoring & Quality Control
 Environmental Monitoring Instrumentation
 Microelectro Mechanical Systems (MEMS) and Sensors
 Biomolecular Electronics and Nanotechnology
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
4 RAJESH KUMAR(14001003908)
Live Projects
Portable Reading Machine for Blind
Laboratory Name CSIR-Central Scientific Instruments Organisation,
Chandigarh
Brief Profile of  Portable Reading Machine (PRM) is an assistive
Technology/Produc device for visually impaired that helps them reading
t printed documents, e-books, or recorded speech. It is
based on the principle of contact scanning of a printed
document and converting it into speech.
 The device is stand-alone, portable, completely
wireless and uses open source hardware and
software. The device can analyze a multi-column
document and provide seamless reading. It is capable
of page, sentence and word level navigation while
reading.
Returns/Benefits  It helps visually impaired to read print media as well
as electronic files such as eBooks.
 It has support for speaking Hindi, English and is
further compatible for other Indian languages such as
Bengali, Kannada, Malayalam, Marathi, Punjabi,
Tamil, Telugu, etc. The device may also be readily
configured for major foreign languages.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
5 RAJESH KUMAR(14001003908)
Validation Level Prototype of the Reading Machine has been tested at
Institute for the Blind Sec 26, Chandigarh and Saksham,
New Delhi.
IPR Status [also Copyright under process
indicating the
status of the patent
(if any)
End product price Rs. 10,000/ (approx.)
(if not available,
estimated price)
Technology/Produc BEL, Panchkula under Corporate Social Responsibility
t Collaborator
Relevance of Available technologies are very expensive and does not
Technology in cater multi-functionality as available in this developed
present times technology. Also similar technology is not available in
Indian market, hence not cater the need for Indian users.
Similar Commercial available technology:
technology/product SARA
developed ReadEasy+
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
6 RAJESH KUMAR(14001003908)
CSIR Developed Earthquake Warning System alerted Delhi Metro about
the recent earthquake in real time
CSIR-Central Scientific Instruments Organization (CSIR-CSIO), Chandigarh developed an Earthquake
Warning System (EqWS). It senses and records the event and generates SMS to the concerned action
points, in real time.
In the case of the earthquake of magnitude 6.8 on the Richter scale with the epicentre at Hindukush
region, Afghanistan occurred on Sunday, the 10th April 2016, as reported by India Meteorological
Department on its website the following figure show the earthquake data from the node at Huda City
Centre, recorded at 16:01:08 (IST) and a report is generated by the system. The earthquake took place at
15:58:57 (IST) origin time at epicentre.
Tremors of this earthquake were felt at various parts of North India including Delhi-NCR region. The
distance from the epicentre to Delhi is approximately 1000 km.
The CSIR-CSIO developed EqWS, consists of five seismic sensing nodes at different locations in Delhi
and is in operation for Delhi Metro Rail Corporation since August 2015. This is an outcome of a
sponsored project. This network of five seismic sensing nodes consisting of seismic sensors,
communication module, processing units is devised for regional notification of a substantial earthquake
while it is in progress. The five nodes are strategically located to gather information about seismic
activity and communicate it to the central control located at Operation Control Centre (DMRC-OCC)
regarding potential earthquake incidence. The central control takes a final decision based on the
response of all the individual nodes and generates an audio visual alarm and sends the event details via
email and SMS to the registered users.
CSIR-CSIO has established this network of five nodes at Mundka, Botanical Garden, Huda City Centre,
Metro Bhawan and Faridabad, comprising seismic warning systems with LAN connectivity with the
DMRC network for generation of alarm signal on major earthquake.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
7 RAJESH KUMAR(14001003908)
Automatic Target Reorganization Projects (DRDO Project)
This Project detect any unwanted motion which is coming towards the base camp by using
sensors placing on the ground. When any motion detected, the output of sensor goes to
receiving section in which it first apply to the input of anti-alising filter which pass some
range of frequency and rejects all other frequency. The signal output from anti-alising filter
converted to digital signal and applied to the input of microcontroller. The microcontroller
process the output signal and output is plotting on display in the camp. The receiving section
is shown below:
Anti-Alising filter
The MAX7400/MAX7403/MAX7404/MAX7407 8th-order, lowpass, elliptic, switched-capacitor filters
(SCFs) oper-ate from a single +5V (MAX7400/MAX7403) or +3V (MAX7404/MAX7407) supply.
These devices draw 2mA of supply current and allow corner frequencies from 1Hz to 10kHz,
making them ideal for low-power anti-aliasing and post-DAC filtering applications. They fea-ture a
shutdown mode that reduces the supply current to 0.2µA.
Two clocking options are available: self-clocking (through the use of an external capacitor) or
external clocking for tighter cutoff-frequency control. In addition, an offset adjustment pin (OS)
allows for the adjustment of the DC output level.
The MAX7400/MAX7404 provide 82dB of stopband rejection and a sharp rolloff with a transition
ratio of 1.5. The MAX7403/MAX7407 provide a sharper rolloff with a transition ratio of 1.2, while
still delivering 60dB of stop-band rejection. The fixed response of these devices simplifies the
design task to corner-frequency selection by setting a clock frequency. The MAX7400/
MAX7403/MAX7404/MAX7407 are available in 8-pin SO and DIP packages.
Applications
ADC Anti-Aliasing Speech Processing
Post-DAC Filtering Air-Bag Electronics
CT2 Base Stations
Anti-Aliasing
Filter
ADC converter Microcontroller
Real time
Plotting of Data
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
8 RAJESH KUMAR(14001003908)
A technique known as oversampling is commonly used in audio ADCs. The idea is to use a
higher intermediate digital sample rate, so that a nearly-ideal digital filter can sharply cut
off aliasing near the original low Nyquist frequency, while a much simpler analog filter can stop
frequencies above the new higher Nyquist frequency. Because analog filters have relatively high
cost and limited performance, relaxing the demands on the analog filter can greatly reduce both
aliasing and cost. Furthermore, because some noise is averaged out, the higher sampling rate can
moderately improve SNR.
Alternatively, a signal may be intentionally oversampled without an intermediate frequency to
reduce the requirements on the anti-alias filter. For example, CD audio typically extends up to
20 kHz, but is sampled with a 22.05 kHz Nyquist rate. By oversampling by 2.05 kHz, both
aliasing and attenuation of higher audio frequencies can be prevented even with less than ideal
filters.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
9 RAJESH KUMAR(14001003908)
Introduction
Arduino is an open-source prototyping platform based on easy-to-use hardware and software. Arduino boards are
able to read inputs - light on a sensor, a finger on a button, or a Twitter message - and turn it into an output -
activating a motor, turning on an LED, publishing something online. You can tell your board what to do by
sending a set of instructions to the microcontroller on the board. To do so you use the Arduino programming
language (based on Wiring), and the Arduino Software (IDE),based on Processing.
Over the years Arduino has been the brain of thousands of projects, from everyday objects to complex scientific
instruments. A worldwide community of makers - students, hobbyists, artists, programmers, and professionals -
has gathered around this open-source platform, their contributions have added up to an incredible amount
of accessible knowledge that can be of great help to novices and experts alike.
Arduino was born at the Ivrea Interaction Design Institute as an easy tool for fast prototyping, aimed at students
without a background in electronics and programming. As soon as it reached a wider community, the Arduino
board started changing to adapt to new needs and challenges, differentiating its offer from simple 8-bit boards to
products for IOT applications, wearable, 3D printing, and embedded environments. All Arduino boards are
completely open-source, empowering users to build them independently and eventually adapt them to their
particular needs. The software, too, is open-source, and it is growing through the contributions of users
worldwide.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
10 RAJESH KUMAR(14001003908)
Why Arduino?
Thanks to its simple and accessible user experience, Arduino has been used in thousands of different
projects and applications. The Arduino software is easy-to-use for beginners, yet flexible enough for
advanced users. It runs on Mac, Windows, and Linux. Teachers and students use it to build low cost
scientific instruments, to prove chemistry and physics principles, or to get started with programming and
robotics. Designers and architects build interactive prototypes, musicians and artists use it for
installations and to experiment with new musical instruments. Makers, of course, use it to build many of
the projects exhibited at the Maker Faire, for example. Arduino is a key tool to learn new things.
Anyone - children, hobbyists, artists, programmers - can start tinkering just following the step by step
instructions of a kit, or sharing ideas online with other members of the Arduino community.
There are many other microcontrollers and microcontroller platforms available for physical computing.
Parallax Basic Stamp, Netmedia's BX-24, Phidgets, MIT's Handyboard, and many others offer similar
functionality. All of these tools take the messy details of microcontroller programming and wrap it up in
an easy-to-use package. Arduino also simplifies the process of working with microcontrollers, but it
offers some advantage for teachers, students, and interested amateurs over other systems:
1. Inexpensive - Arduino boards are relatively inexpensive compared to other microcontroller
platforms. The least expensive version of the Arduino module can be assembled by hand, and
even the pre-assembled Arduino modules cost less than $50
2. Cross-platform - The Arduino Software (IDE) runs on Windows, Macintosh OSX, and Linux
operating systems. Most microcontroller systems are limited to Windows.
3. Simple, clear programming environment - The Arduino Software (IDE) is easy-to-use for
beginners, yet flexible enough for advanced users to take advantage of as well. For teachers, it's
conveniently based on the Processing programming environment, so students learning to
program in that environment will be familiar with how the Arduino IDE works.
4. Open source and extensible software - The Arduino software is published as open source tools,
available for extension by experienced programmers. The language can be expanded through
C++ libraries, and people wanting to understand the technical details can make the leap from
Arduino to the AVR C programming language on which it's based. Similarly, you can add AVR-
C code directly into your Arduino programs if you want to.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
11 RAJESH KUMAR(14001003908)
The Arduino-Uno Board
The Arduino-uno board features an Atmel ATmega328 microcontroller operating at 5 V with 2 Kb of
RAM, 32 Kb of flash memory for storing programs and 1 Kb of EEPROM for storing parameters. The
clock speed is 16 MHz, which translates to about executing about 300,000 lines of C source code per
second. The board has 14 digital I/O pins and 6 analog input pins. There is a USB connector for talking
to the host computer and a DC power jack for connecting an external 6-20 V power source, for example
a 9 V battery, when running a program while not connected to the host computer. Headers are provided
for interfacing to the I/O pins using 22 g solid wire or header connectors. For additional information on
the hardware, see http://arduino.cc/en/Main/ArduinoBoardUno.
The Arduino programming language is a simplified version of C/C++. If you know C, programming the
Arduino will be familiar. If you do not know C, no need to worry as only a few commands are needed to
perform useful functions.
An important feature of the Arduino is that you can create a control program on the host PC, download it
to the Arduino and it will run automatically. Remove the USB cable connection to the PC, and the
program will still run from the top each time you push the reset button. Remove the battery and put the
Arduino board in a closet for six months. When you reconnect the battery, the last program you stored
will run. This means that you connect the board to the host PC to develop and debug your program, but
once that is done, you no longer need the PC to run the program.
 What You Needfor a Working System
 Arduino Uno Development board
 USB programming cable (A to B)
 9V battery or external power supply (for stand-alone operation)
 Solderless breadboard for external circuits, and 22 g solid wire for connections
 Host PC running the Arduino development environment. Versions exist for Windows, Mac
and Linux
 1.3 Installing the Software
Follow the instructions on the Getting Started section of the Arduino web site,
http://arduino.cc/en/Guide/HomePage.Go all the way through the steps to where you see the pin13 LED
blinking. This is the indication that you have all software and drivers successfully installed and can start
exploring with your own programs.
 1.4 Connecting a Battery
For stand-alone operation, the board is powered by a battery rather than through the USB connection to
the computer. While the external power can be anywhere in the range of 6 to 24 V (for example, you
could use a car battery), a standard 9 V battery is convenient. While you could jam the leads of a battery
snap into the Vin and Gnd connections on the board, it is better to solder the battery snap leads to a DC
power plug and connect to the power jack on the board. Here is what this looks like.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
12 RAJESH KUMAR(14001003908)
CONTENTS
 Introduction
 Realtime or Recentlycompleted Projects.
 Automatic TargetRecognization (DRDO Project)
 Anti-Alising Filter(Max7400 IC)
 A/D converter
 Microcontroller(Arduino-uno)
 Realtime Plotting
 Arduino-uno microcontroller
 Introduction
 Specifications
 Advantages and Applications
 Programming concepts
 Interfacing with I/O devices.
 Introduction to GPS and their interfacing with arduino.
 Tracking systemusing Ardiuno-uno development board
 Introduction
 Circuit Diagram
 Working Operation
 Programming Structure
 References
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
13 RAJESH KUMAR(14001003908)
Warning: Watch the polarity as you connect your battery to the snap as reverse
orientationcould blow out your board.
Disconnect your Arduino from the computer. Connect a 9 V battery to the Arduino power jack
using the battery snap adapter. Confirm that the blinking program runs. This shows that you can
power the Arduino from a battery and that the program you download runs without needing a
connection to the host PC
 Moving On
Connect your Arduino to the computer with the USB cable. You do not need the battery for
now. The green PWR LED will light. If there was already a program burned into the Arduino, it
will run.
Warning: Do not put your board down on a conductive surface; you will short out the pins
onthe back!
Start the Arduino development environment. In Arduino-speak, programs are called
“sketches”, but here we will just call them programs.
In the editing window that comes up, enter the following program, paying attention to where
semi-colons appear at the end of command lines.
void setup()
{
Serial.begin(9600); Serial.println("Hello
World");
}
void loop() {}
Your window will look something like this
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
14 RAJESH KUMAR(14001003908)
Click the Upload button or Ctrl-U to compile the program and load on the Arduino board.
Click the Serial Monitor button . If all has gone well, the monitor window will show your
message and look something like this
Congratulations; you have created and run your first Arduino program!
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
15 RAJESH KUMAR(14001003908)
Push the Arduino reset button a few times and see what happens.
Hint: If you want to check code syntax without an Arduino board connected, click the Verify
button or Ctrl-R.
Hint: If you want to see how much memory your program takes up, Verify then look at the
message at the bottom of the programming window.
 Troubleshooting
If there is a syntax error in the program caused by a mistake in typing, an error message will
appear in the bottom of the program window. Generally, staring at the error will reveal the
problem. If you continue to have problems, try these ideas
Run the Arduino program again
Check that the USB cable is secure at both ends.
Reboot your PC because sometimes the serial port can lock up
If a “Serial port…already in use” error appears when uploading
Ask a friend for help
 Solderless Breadboards
A solderless breadboard is an essential tool for rapidly prototyping electronic circuits.
Components and wire push into breadboard holes. Rows and columns of holes are internally
connected to make connections easy. Wires run from the breadboard to the I/O pins on the
Arduino board. Make connections using short lengths of 22 g solid wire stripped of insulation
about 0.25” at each end. Here is a photo of a breadboard showing which runs are connected
internally. The pairs of horizontal runs at the top and bottom are useful for running power and
ground. Convention is to make the red colored run +5 V and the blue colored run Gnd. The
power runs are sometimes called “power busses”.
Horizontal runs connected
Vertical runs
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
16 RAJESH KUMAR(14001003908)
Warning: Only use solid wire on the breadboard. Strands of stranded wire can break off and fill
the holes permanently.
Hint: Trim wires and component leads so that wires and components lie close to the board.
To keep the Arduino board and breadboard together, you can secure both to a piece of fom-
core, cardboard or wood using double-stick foam tape or other means.
2 Flashing an LED
Light emitting diodes (LED's) are handy for checking out what the Arduino can do.. For this
task, you need an LED, a 330 ohm resistor, and some short
pieces of 22 or 24 g wire. The figure to the right is a sketch
of an LED and its symbol used in electronic schematics
Using 22 g solid wire, connect the 5V power pin on the
Arduino to the bottom red power bus on the breadboard and
the Gnd pin on the Arduino to the bottom blue power buss
on the breadboard. Connect the notched or flat side of the LED (the notch or flat is on the rim
that surrounds the LED base; look carefully because it can be hard to find) to the Gnd bus and
the other side to a free hole in main area of the breadboard Place the resistor so that one end is in
the same column as the LED and the other end is in a free column. From that column, connect a
wire to digital pin 2 on the Arduino board. Your setup will look something like this
DCRUST MURTHAL UNIVERSITY INDUSTRIAL
TRAINING REPORT
17 RAJESH KUMAR(14001003908)
To test whether the LED works,
temporarily disconnect the wire from pin
2 on the Arduino board and touch to the
5V power bus. The LED should light up.
If not, try changing the orientation of the
LED. Place the wire back in pin 2.
On the LED, current runs from the anode
(+) to the cathode (-) which is marked by
the notch. The circuit you just wired up
is represented in schematic form in the
figure to the right.
Create and run this Arduino program
void setup()
{
pinMode(2,OUTPUT);
digitalWrite(2,HIGH);
delay(1000);
digitalWrite(2,LOW);
}
void loop()
{}
Gnd
PIN 2 330
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
18 RAJESH KUMAR(14001003908)
Did the LED light up for one second? Push the Arduino reset button to run the program again.
Now try this program, which will flash the LED at 1.0 Hz. Everything after the // on a line is a
comment, as is the text between „/*‟ and „*/‟ at the top. It is always good to add comments to a
program.
/*---------------------------
Blinking LED, 1.0 Hz on pin 2
----------------------------*/
void setup() // one-time actions
{
pinMode(2,OUTPUT); // define pin 2 as an output
}
void loop() // loop forever
{
digitalWrite(2,HIGH); // pin 2 high (LED on)
delay(500); // wait 500 ms
digitalWrite(2,LOW); // pin 2 low (LED off)
delay(500); // wait 500 ms
}
The pinMode command sets the LED pin to be an output. The first digitalWrite command says
to set pin 2 of the Arduino to HIGH, or +5 volts. This sends current from the pin, through the
resistor, through the LED (which lights it) and to ground. The delay(500) command waits for
500 msec. The second digitalWrite command sets pin 2 to LOW or 0 V stopping the current
thereby turning the LED off. Code within the brackets defining the loop() function is repeated
forever, which is why the LED blinks.
This exercise shows how the Arduino can control the outside world. With proper interface
circuitry the same code can turn on and off motors, relays, solenoids, electromagnets,
pneumatic valves or any other on-off type device.
3 Reading a switch
The LED exercise shows how the Arduino can control
the outside world. Many applications require reading
the state of sensors, including switches. The figure to
the right shows a picture of a pushbutton switch and its
schematic symbol. Note that the symbol represents a
switch whose contacts are normally open, but then are
shorted when the button is pushed. If you have a
switch, use the continuity (beeper) function of a digital
multi-meter (DMM) to understand when the leads are
open and when they are connected as the button is
pushed.
For this exercise, the Arduino will read the state of a normally-open push button switch and
display the results on the PC using the serial.println() command. You will need a switch, a 10
kohm resistor and some pieces of 22 g hookup wire. If you don't have a switch, substitute two
wires and manually connect their free ends to simulate a switch closure. The figure below
shows the schematic for the circuit on the left and a realization on the right.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
19 RAJESH KUMAR(14001003908)
+5 V
10K
PIN 3
Gnd
Create and run this Arduino program
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println(digitalRead(3));
delay(250);
}
Open the Serial Monitor window. When the switch is open, you should see a train of 1's on the
screen. When closed, the 1's change to 0's. On the hardware side, when the switch is open, no
current flows through the resistor. When no current flows through a resistor, there is no voltage
drop across the resistor, which means the voltage on each side is the same. In your circuit,
when the switch is open, pin 3 is at 5 volts which the computer reads as a 1 state. When the
switch is closed, pin 3 is directly connected to ground, which is at 0 volts. The computer reads
this as a 0 state.
Now try this program which is an example of how you can have the computer sit and wait for
a sensor to change state.
void setup()
{
Serial.begin(9600);
}
void loop()
{
while (digitalRead(3) == HIGH)
;
Serial.println("Somebody closed the switch!");
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
20 RAJESH KUMAR(14001003908)
while (digitalRead(3) == LOW)
;
Serial.println("The switch is now open!");
}
Watch the activity in the Serial Monitor window as you press and release the switch.
4 Controlling a Small DC Motor
The Arduino can control a small DC motor through a transistor switch. You will need a TIP120
transistor, a 1K resistor a 9V battery with battery snap and a motor.
The TIP120 pins look like this and on a schematic the pins are like this
Here is the schematic diagram for how to connect the motor
And here is a pictorial diagram for how to connect the components. The connections can be
soldered or they can be made through a solderless breadboard.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
21 RAJESH KUMAR(14001003908)
Pin 2
Gnd
Pin 2 can be any digital I/O pin on your Arduino. Connect the minus of the battery to the emitter
of the transistor (E pin) and also connect the emitter of the transistor to Gnd on the Arduino
board.
To check if things are working, take a jumper wire and short the collector to the emitter pins of
the transistor. The motor should turn on. Next, disconnect the 1K resistor from pin 2 and jumper
it to +5V. The motor should turn on. Put the resistor back into pin 2 and run the following test
program:
void setup()
{
pinMode(2,OUTPUT);
digitalWrite(2,HIGH);
delay(1000);
digitalWrite(2,LOW);
}
void loop() {}
The motor should turn on for 1 second.
5 Arduino Hardware
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
22 RAJESH KUMAR(14001003908)
The power of the Arduino is not its ability to crunch code, but rather its ability to interact with the
outside world through its input-output (I/O) pins. The Arduino has 14 digital I/O pins labeled 0 to 13
that can be used to turn motors and lights on and off and read the state of switches.
Each digital pin can sink or source about 40 mA of current. This is more than adequate for
interfacing to most devices, but does mean that interface circuits are needed to control devices
other than simple LED's. In other words, you cannot run a motor directly using the current
available from an Arduino pin, but rather must have the pin drive an interface circuit that in turn
drives the motor. A later section of this document shows how to interface to a small motor.
To interact with the outside world, the program sets digital pins to a high or low value using C
code instructions, which corresponds to +5 V or 0 V at the pin. The pin is connected to external
interface electronics and then to the device being switched on and off. The sequence of events
is shown in this figure.
Program sets pin digitalWrite(4,HIGH); high/low
(1/0) digitalWrite(4,LOW);
+5V
0V
Board pin
set to +5V/0V
+12 V
Interface
electronics use
signal voltages and
1K
power supply to PIN 4
TIP120
switch motor
on/off
To determine the state of switches and other sensors, the Arduino is able to read the voltage value
applied to its pins as a binary number. The interface circuitry translates the sensor signal into a 0 or
+5 V signal applied to the digital I/O pin. Through a program command, the Ardiunp interrogates
the state of the pin. If the pin is at 0 V, the program will read it as a 0 or LOW. If it is at +5 V, the
program will read it as a 1 or HIGH. If more than +5 V is applied, you may blow out your board, so
be careful. The sequence of events to read a pin is shown in this figure.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
23 RAJESH KUMAR(14001003908)
Interacting with the world has two sides. First, the designer must create electronic interface
circuits that allow motors and other devices to be controlled by a low (1-10 mA) current signal
that switches between 0 and 5 V, and other circuits that convert sensor readings into a switched 0
or 5 V signal. Second, the designer must write a program using the set of Arduino commands
that set and read the I/O pins. Examples of both can be found in the Arduino resources section of
the ME2011 web site.
When reading inputs, pins must have either 0 or 5V applied. If a pin is left open or "floating", it will read random
voltages and cause erratic results. This is why switches always have a 10K pull up resistor connected when
interfacing to an Arduino pin.
Note: The reason to avoid using pins 0 and 1 is because those pins are used for the serial communications between
the Arduino and the host computer.
The Arduino also has six analog input pins for reading continuous voltages in the range of 0 to 5
V from sensors such as potentiometers.
6 Programming Concepts
This chapter covers some basic concepts of computer programming, going under the assumption
that the reader is a complete novice.
A computer program is a sequence of step-by-step instructions for the computer to follow. The
computer will do exactly what you tell it to do, no more no less. The computer only knows
what's in the program, not what you intended. Thus the origin of the phrase, "Garbage in,
garbage out".
The set of valid instructions comes from the particular programming language used. There are
many languages, including C, C++, Java, Ada, Lisp, Fortran, Basic, Pascal, Perl, and a thousand
others. The Arduino uses a simplified variation of the C programming language.
For any programming language, the instructions must be entered in a specific syntax in order for
the computer to interpret them properly. Typically, the interpretation is a two step process. A
compiler takes the language specific text you enter for the program and converts it into a
machine readable form that is downloaded into the processor. When the program executes, the
processor executes the machine code line by line.
6.1 Basics of Programming Languages
All sequential programming languages have four categories of instructions. First are operation
commands that evaluate an expression, perform arithmetic, toggle states of I/O lines, and many
other operations. Second are jump commands that cause the program to jump immediately to
another part of the program that is tagged with a label. Jumps are one way to break out of the
normal line-by-line processing mode. For example, if you want a program to repeat over and
over without stopping, have the last line of the program be a jump command that takes the
program back to its first line. Third are branch commands that evaluate a condition and jump if
the condition is true. For example, you might want to jump only if a number is greater than zero.
Or, you might want to jump only if the state of an i/o line is low. Fourth are loop commands that
repeat a section of code a specified number of times. For example, with a loop you can have a
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
24 RAJESH KUMAR(14001003908)
light flash on and off exactly six times.
Most programming languages contain a relatively small number of commands. The complexity
of computers comes from combining and repeating the instructions several million times a
second.
Here's a generic program.
1. Do this
2. Do that
3. Jump to instruction 6
4. Do the other thing
5. All done, sleep
6. If switch closed, do that thing you do
7. Jump to instruction 4
The computer will execute this line by line. The art of programming is simply a matter of
translating your intent into a sequence of instructions that match.
Here is an example of a for loop command followed by a branch command that uses an IF
statement
for (i=0;i<6,i++) {
instructions
}
if (j > 4) gotolabelinstructions
The commands inside the loop will be repeated six times. Following this, if the value of
the variable j is greater than 4, the program will skip to the instruction tagged with the
specified label, and if not, the line following the if statement will be executed.
In addition to the basic commands, languages have the ability to call functions which are
independent sections of code that perform a specific task. Functions are a way of calling a
section of code from a number of different places in the program and then returning from
that section to the line that follows the calling line. Here's an example
apples();
instructions
apples();
more instructions
void apples(){
instructions
}
The function apples is everything between the set of braces that follows “apples()”. When
the function completes, the program jumps back to the line following the line that called the
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
25 RAJESH KUMAR(14001003908)
function.
6.2 Digital Numbers
When working with a microcontroller that interacts with the real world, you have to dig a
little below the surface to understand numbering systems and data sizes.
A binary (base 2) variable has two states, off and on, or 0 and 1, or low and high. At their
core, all computers work in binary since their internal transistors can only be off or on and
nothing between. Numbers are built up from many digits of binary numbers, in much the
same way that in the base 10 system we create numbers greater than 9 by using multiple
digits.
A bit is one binary digit that can take on values of either 0 or 1. A byte is a number comprised
of 8 bits, or 8 binary digits. By convention, the bits that make up a byte are labeled right to left
with bit 0 being the rightmost or least significant bit as shown below
b7 b6 b5 b4 b3 b2 b1 b0
Thus, in the binary number 011, bits 0 and 1 are 1 while bit 2 is 0. In the binary
number 1000001, bits 0 and 7 are 1 and the rest are zero.
Here are a few binary to decimal conversions for byte size numbers.
Binary Decimal
00000011 3
00000111 7
11111111 255
In a computer, variables are used to store numbers. A bit variable can take on two values, 0 and
1, and is typically used as a true/false flag in a program. A byte variable can take on integer
values 0-255 decimal while a 16-bit word variable can take on integer values 0-65,535.
Variables can be either signed (positive and negative values) or unsigned (positive only).
7 Arduino Programming Language
The Arduino runs a simplified version of the C programming language, with some extensions
for accessing the hardware. In this guide, we will cover the subset of the programming language
that is most useful to the novice Arduino designer. For more information on the Arduino
language, see the Language Reference section of the Arduino web site,
http://arduino.cc/en/Reference/HomePage.
All Arduino instructions are one line. The board can hold a program hundreds of lines long and
has space for about 1,000 two-byte variables. The Arduino executes programs at about 300,000
source code lines per sec.
7.1 Creating a Program
Programs are created in the Arduino development environment and then downloaded to the
Arduino board. Code must be entered in the proper syntax which means using valid
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
26 RAJESH KUMAR(14001003908)
command names and a valid grammar for each code line. The compiler will catch and flag
syntax errors before download. Sometimes the error message can be cryptic and you have to
do a bit of hunting because the actual error occurred before what was flagged.
Although your program may pass cleanly through the syntax checker, it still might not do what
you wanted it to. Here is where you have to hone your skills at code debugging. The Arduino did
what you told it to do rather than what you wanted it to do. The best way to catch these errors is
to read the code line by line and be the computer. Having another person go through your code
also helps. Skilled debugging takes practice.
7.2 Program Formatting and Syntax
Programs are entered line by line. Code is case sensitive which means "myvariable" is different
than "MyVariable".
Statements are any command. Statements are terminated with a semi-colon. A classic mistake
isto forget the semi-colon so if your program does not compile, examine the error text and see if
you forgot to enter a colon.
Comments are any text that follows “//” on a line. For multi-line block comments, begin
with“/*” and end with “*/”
Constants are fixed numbers and can be entered as ordinary decimal numbers (integer only)
orin hexadecimal (base 16) or in binary (base 2) as shown in the table below
Decimal Hex Binary
100 0x64 B01100100
Labels are used to reference locations in your program. They can be any combination of
letters,numbers and underscore (_), but the first character must be a letter. When used to mark a
location, follow the label with a colon. When referring to an address label in an instruction line,
don't use the colon. Here's an example
repeat:digitalWrite(2,HIGH); delay(1000);
digitalWrite(2,LOW);
delay(1000);
goto repeat;
Use labels sparingly as they can actually make a program difficult to follow and challenging to
debug. In fact, some C programmers will tell you to never use labels.
Variables are allocated by declaring them in the program. Every variable must be declared. If
avariable is declared outside the braces of a function, it can be seen everywhere in the program. If it
is declared inside the braces of a function, the variable can only be seen within that function.
Variables come in several flavors including byte (8-bit, unsigned, 0 to 255), word (16-bit,
unsigned, 0 to 65,536), int (16-bit, signed, -32,768 to 32,767), and long (32-bit,
signed, -2,147,483,648 to 2,147,483,647). Use byte variables unless you need negative numbers
or numbers larger than 255, then use int variables. Using larger sizes than needed fills up
precious memory space.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
27 RAJESH KUMAR(14001003908)
Variable declarations generally appear at the top of the program
byte i;
word k;
int length; int
width;
Variable names can be any combination of letters and numbers but must start with a letter.
Names reserved for programming instructions cannot be used for variable names and will give
you an error message
Symbols are used to redefine how something is named and can be handy for making the
codemore readable. Symbols are defined with the "#define" command and lines defining
symbols should go at the beginning of your program. Here's an example without symbols for
the case where an LED is connected to pin 2.
void setup()
{
pinMode(2,OUTPUT);
}
void loop()
{
digitalWrite(2,HIGH); // turn LED on
delay(1000);
digitalWrite(2,LOW); // turn LED off delay(1000);
}
Here is the same using a symbol to define "LED"
#define LED 2 // define the LED pin
void setup()
{
pinMode(LED,OUTPUT);
}
void loop()
{
digitalWrite(LED,HIGH);
delay(500);
digitalWrite(LED,LOW);
delay(500);
}
Note how the use of symbols reduces the need for comments. Symbols are extremely useful to
define for devices connected to pins because if you have to change the pin that the device
connects to, you only have to change the single symbol definition rather than going through the
whole program looking for references to that pin.
7.3 Program Structure
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
28 RAJESH KUMAR(14001003908)
All Arduino programs have two functions, setup() and loop(). The instructions you place in the
startup() function are executed once when the program begins and are used to initialize. Use it to
set directions of pins or to initialize variables. The instructions placed in loop are executed
repeatedly and form the main tasks of the program. Therefore every program has this structure
void setup()
{
// commands to initialize go here
}
void loop()
{
// commands to run yourmachine go here
}
The absolute, bare-minimum, do-nothing program that you can compile and run is
void setup(){} void loop() {}
The program performs no function, but is useful for clearing out any old program. Note that the
compiler does not care about line returns, which is why this program works if typed all on one
line.
7.4 Math
The Arduino can do standard mathematical operations. While floating point (e.g. 23.2) numbers
are allowed if declared as floats, operations on floats are very slow so integer variables and
integer math is recommended. If you have byte variables, no number, nor the result of any math
operation can fall outside the range of 0 to 255. You can divide numbers, but the result will be
truncated (not rounded) to the nearest integer. Thus in integer arithmetic, 17/3 = 5, and not 5.666
and not 6. Math operations are performed strictly in a left-to-right order. You can add
parenthesis to group operations.
The table below shows some of the valid math operators. Full details of their use can be found
in the Arduino Language Reference.
Symbol Description
+ addition
- subtraction
* multiplication
/ division
% modulus (division remainder)
<< left bit shift
>> right bit shift
& bitwise AND
| bitwise OR
8 The Simple Commands
This section covers the small set of commands you need to make the Arduino do something
useful. These commands appear in order of priority. You can make a great machine using only
digital read, digital write and delay commands. Learning all the commands here will take you
to the next level.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
29 RAJESH KUMAR(14001003908)
If you need more, consult the Arduino language reference page at h
http://arduino.cc/en/Reference/HomePage.
pinMode
This command, which goes in the setup() function, is used to set the direction of a digital I/O
pin. Set the pin to OUTPUT if the pin is driving and LED, motor or other device. Set the pin to
INPUT if the pin is reading a switch or other sensor. On power up or reset, all pins default to
inputs. This example sets pin 2 to an output and pin 3 to an input.
void setup()
{
pinMode(2,OUTPUT);
pinMode(3,INPUT);
}
void loop() {}
Serial.print
The Serial.print command lets you see what's going on inside the Arduino from your computer.
For example, you can see the result of a math operation to determine if you are getting the right
number. Or, you can see the state of a digital input pin to see if the Arduino is a sensor or switch
properly. When your interface circuits or program does not seem to be working, use the
Serial.print command to shed a little light on the situation. For this command to show anything,
you need to have the Arduino connected to the host computer with the USB cable.
For the command to work, the command Serial.begin(9600) must be placed in the setup()
function. After the program is uploaded, you must open the Serial Monitor window to see the
response.
There are two forms of the print command. Serial.print() prints on the same line while
Serial.println() starts the print on a new line.
Here is a brief program to check if your board is alive and connected to the PC
void setup()
{
Serial.begin(9600); Serial.println("Hello
World");
}
void loop() {}
Here is a program that loops in place, displaying the value of an I/O pin. This is useful for
checking the state of sensors or switches and to see if the Arduino is reading the sensor properly.
Try it out on your Arduino. After uploading the program, use a jumper wire to alternately
connect pin 2 to +5V and to Gnd.
void setup()
{
Serial.begin(9600);
}
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
30 RAJESH KUMAR(14001003908)
void loop()
{
Serial.println(digitalRead(2));
delay(100);
}
If you wanted to see the states of pins 2 and 3 at the same time, you can chain a few print
commands, noting that the last command is a println to start a new line.
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("pin 2 = ");
Serial.print(digitalRead(2)); Serial.print(" pin 3 =
"); Serial.println(digitalRead(3));
delay(100);
}
You may have noticed when trying this out that if you leave one of the pins disconnected, its
state follows the other. This is because a pin left floating has an undefined value and will wander
from high to low. So, use two jumper wires when trying out this example.
Here's one that checks the value of a variable after an addition. Because the calculation is done
just once, all the code is in the setup() function. The Serial.flush()
inti,j,k; void
setup()
{
Serial.begin(9600);
i=21;
j=20;
k=i+j;
Serial.flush();
Serial.print(k);
}
void loop() {}
digitalWrite
This command sets an I/O pin high (+5V) or low (0V) and is the workhorse for commanding the
outside world of lights, motors, and anything else interfaced to your board. Use the pinMode()
command in the setup() function to set the pin to an output.
digitalWrite(2,HIGH); // sets pin 2 to +5 volts
digitalWrite(2,LOW); // sets pin 2 to zero volts
delay
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
31 RAJESH KUMAR(14001003908)
Delay pauses the program for a specified number of milliseconds. Since most interactions with
the world involve timing, this is an essential instruction. The delay can be for 0 to 4,294,967,295
msec. This code snippet turn on pin 2 for 1 second.
digitalWrite(2,HIGH); // pin 2 high (LED on)
delay(1000); // wait 500 ms
digitalWrite(2,LOW); // pin 2 low (LED off)
if
This is the basic conditional branch instruction that allows your program to do two different
things depending on whether a specified condition is true or false.
Here is one way to have your program wait in place until a switch is closed. Connect a switch to
pin 3 as shown in Section 3. Upload this program then try closing the switch
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (digitalRead(3)== LOW) { Serial.println("Somebody closedthe switch!");
}
}
The if line reads the state of pin 3. If it is high, which it will be for this circuit when the switch is
open, the code jumps over the Serial.println command and will repeat the loop. When you close
the switch, 0V is applied to pin 3 and its state is now LOW. This means the if condition is true so
this time around the code between the braces is executed and the message is printed
The syntax for the if statement is
if (condition) {
//commands
}
If the condition is true, the program will execute the commands between the braces. If the
condition is not true, the program will skip to the statement following the braces.
The condition compares one thing to another. In the example above, the state of pin 1 was
compared to LOW with ==, the equality condition. Other conditional operators are != (not equal to),
> (greater than), < (less than), >= (greater than or equal to), and <= (less than or equal to).
You can have the program branch depending on the value of a variable. For example,
this program will print the value of i only when it is less than 30.
int i;
void setup()
{
Serial.begin(9600);
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
32 RAJESH KUMAR(14001003908)
i=0;
}
void loop()
{
i=i+1;
if (i<30) { Serial.println(i);
}
}
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
33 RAJESH KUMAR(14001003908)
FOR
The for statement is used to create program loops. Loops are useful when you want a chunk of
code to be repeated a specified number of times. A variable is used to count the number of times
the code is repeated. Here is an example that flashes an LED attached to pin 2 five times
int i;
void setup()
{
pinMode(2,OUTPUT); for
(i=0;i<5;i++) {
digitalWrite(2,HIGH);
delay(250);
digitalWrite(2,LOW);
delay(250);
}
}
void loop() {}
The variable i is the loop counter. The for() statement has three parts: the initialization, the check
and the increment. Variable i is initialized to zero. The check is to see if i is less then 5. If so, the
commands between the braces are executed. If not, those commands are skipped. After the
check, i is incremented by 1 (the i++ command). While the for statement could read for
(i=1;i==5;i++), it is convention to start the counter variable at zero and use less than for the
condition check.
You can have the loop counter increment by two or by three or by any increment you want.
For example, try this code fragment.
int i;
void setup()
{
Serial.begin(9600); for
(i=0;i<15;i=i+3) {
Serial.println(i);
}
}
void loop() {}
Loops can be nested within loops. This example will flash the LED 10 times because for each
of the five outer loops counted by i, the program goes twice through the inner loop counted by j.
inti,j; void setup()
{
pinMode(2,OUTPUT); for
(i=0;i<5;i++) {
for(j=0;j<2;j++) {
digitalWrite(2,HIGH);
delay(250);
digitalWrite(2,LOW);
delay(250);
}
}
}
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
34 RAJESH KUMAR(14001003908)
void loop() {}
while
The while statement is another branch command that does continuous looping. If the condition
following the while is true, the commands within the braces are executed continuously. Here
is an example that continuously reads a switch on pin 3, and then when the switch is pressed,
the condition is no longer true so the code escapes the while command and prints.
void setup()
{
Serial.begin(9600); while(digitalRead(3) ==
HIGH) {
}
Serial.println("Switch was pressed");
}
void loop() {}
goto
The goto statement commands the computer to jump immediately to another part of the
program marked by an address label. The goto should be used sparingly because it makes the
program hard to follow, but is handy for breaking out of nested loops or other complex control
structures. Here is an example
void setup()
{
Serial.begin(9600);
while(true){
if (digitalRead(3) == LOW) {
gotowrapup;
}
}
wrapup:
Serial.println("Switch was pressed");
}
void loop() {}
The while(true) statement runs continuously, checking the state of pin 3 each time. When pin 3
is low (pressed), the if condition is true and the goto statement executed, breaking out of the
while loop.
functions
Functions are a powerful programming feature that are used when you want to set up an action
that can be called from several places in the program. For example, let's say you wanted an
LED connected to pin 2 to flash 3 times as an alert, but that you needed to execute the alert at
three different places in the program. One solution would be to type in the flashing code at the
three separate program locations. This uses up precious code space and also means that if you
change the flash function, for example changing from 3 flashes to 4, you have to change the
code in three places. A better solution is to write the flash function as a subroutine and to call it
from the main body of the code. Here is an example
int i;
void setup()
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
35 RAJESH KUMAR(14001003908)
{
pinMode(2,OUTPUT);
Serial.begin(9600);
Serial.println("Welcome to my program"); delay(1000);
flasher(); // call flasher function Serial.println("I hope you like
flashing"); delay(1000);
flasher(); // call flasher again Serial.println("Here it is one more
time"); delay(1000);
flasher();
}
void loop() {}
void flasher()
{
for(i=0;i<3;i++) {
digitalWrite(2,HIGH);
delay(250);
digitalWrite(2,LOW);
delay(250);
}
}
Several things should be noted here. The function flasher() is defined outside the setup() and
loop() functions. When the main program encounters a flasher(); command, the program
immediately jumps to the function and starts executing the code there. When it reaches the end
of the function, the program returns to execute the command that immediately follows the
flasher(); command. It is this feature that allows you to call the subroutine from several
different places in the code. Parameters can be passed to and returned from functions, but that
feature is for the advanced programmer.
This concludes the section on basic program commands. You can write some awesome
programs using just what was described here. There is much more that the Arduino can do and
you are urged to read through the complete Arduino Language Reference page on-line
9 Coding Style
Style refers to your own particular style for creating code and includes layout, conventions
for using case, headers, and use of comments. All code must follow correct syntax, but there
are many different styles you can use. Here are some suggestions:
Start every program with a comment header that has the program name and perhaps a
brief description of what the program does.
Use indentation to line things up. Function name and braces are in column one, then use
indents in multiples of 2 or 4 to mark code chunks, things inside loops and so on.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
36 RAJESH KUMAR(14001003908)
Mark major sections or functions with a comment header line or two
Have just the right number of comments, not too few and not too many. Assume the reader
knows the programming language so have the comment be instructive. Here is an example of
an instructive comment
digitalWrite(4,HIGH) // turn on motor
and here is a useless comment
digitalWrite(4,HIGH) // set pin 4 HIGH
You need not comment every line. In fact, commenting every line is generally bad practice.
Add the comments when you create the code. If you tell yourself, "Oh, I'll add the comments
when the code is finished", you will never do it.
10 Common Coding Errors
Forgetting the semi-colon at the end of a statement
Misspelling a command
Omitting opening or closing braces
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
37 RAJESH KUMAR(14001003908)
How to find a position using GPS
Orbiting the Earth are a number of Global Positioning System (GPS) satellites that can help
determine your location on the planet. The concepts behind GPS positioning are very simple, but
the application and implementation require amazing precision.
GPS positioning works on two basic mathematical concepts. The first is called trilateration,
which literally means positioning from three distances. The second concept is the relationship
between distance traveled, rate (speed) of travel and amount of time spent traveling, or:
Distance = Rate × Time
The first concept, trilateration, is the focus of this activity. It centers around finding your position
on the Earth by knowing the location of orbiting GPS satellites and the distance from those
satellites to your location on the planet. However, there is no way to actually take a yardstick,
tape measure, etc., and measure the distance from your location up to the satellites. So how can
we use trilateration if we can't physically measure the distances? The answer lies in the second
concept, relating distance, rate and time. The trick lies in the fact that GPS satellites are always
sending out radio signals.
In GPS positioning the rate is how fast the radio signal travels, which is equal to the speed of
light (299,792,458 meters per second). Time is determined by how long it takes for a signal to
travel from the GPS satellite to a GPS receiver on earth. With a known rate and a known time we
can solve for the distance between satellite and receiver. Once we have the distance from at least
3 satellites, we can determine a 3 dimensional position on the surface of the earth.
To teach you the basic concept of how GPS works, we will conduct an exercise to demonstrate
trilateration. Trilateration is determining a position by knowing your distance from at least 3
known points. In GPS those known points are the satellites themselves. It is important to
understand that this is a simple exercise in trilateration itself, and not an exact representation of
how the process of GPS positioning works. We will be using a flat map and string, when in
reality the earth is round and the satellites are in the sky, not on the ground. Also, one often can
"see" many more than three GPS satellites in the sky at any time, so we are going to use four
points instead of just 3, to exemplify some of the issues surrounding extra satellites. This
exercise should give you and your students a good example of how GPS positioning works.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
38 RAJESH KUMAR(14001003908)
This exercise is best done in groups of 3-4 people.
Materials:
 4 pieces of different color string (pre-cut)
 Pencil or pen for marking the potential position of each signal
 A large map (provided)
Overview:
In this exercise we are going to simulate GPS positioning using 4 satellites. You are going to
pretend to be a GPS receiver somewhere on the map and will figure out where you are based on
the 4 "signals" you receive. But for you (and for a GPS receiver) all those signals tell you is
where the satellite was when it sent the signal, and how long it took for the signal to get from the
satellite to you. In other words, you have the time elapsed from when the signal left the satellite
to when it arrived at your location. You also know where the satellite was when it sent you the
signal, since the positions of the satellites are shown on the map. You need to determine where
you could be, based on that amount of time elapsed. Since we know the speed of the signal (R),
and the elapsed time (T), we can figure out the distance (D).
Distance = Rate × Time
In true 3 dimensional GPS positioning, the signals from the satellites are represented by spheres.
For this exercise, we are going to use circles since we are on a 2 dimensional map. So, as a GPS
receiver you need to figure out just how far from each satellite you are. Keep in mind you could
be anywhere!
Directions:
1. Lay the provided map flat on your table and tape down all four corners.
2. Get 4 pieces of string, about 1/2 meter long,1 each of 4 colors. (We need to know how far
away you are from 4 different points which are represented by the length of 4 different
colors of string.)
3. Determine exactly how long each string is supposed to be by solving our D = R × T
equation. The speed of light (R) is 299,792,458 m / s. Use the amount of time that it takes
for each signal to get from the satellites to the receiver provided below to solve for D.
Time for the Signals to reach the GPS receiver:
1. A = .00505783 seconds
2. B = .00423206 seconds
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
39 RAJESH KUMAR(14001003908)
3. C = .00836090 seconds
4. D = .00712225 seconds
Once you have figured out the distance each of our satellites is from our position on the
ground, proceed to step 4 where you will calculate the scaled distances.
SATELLITE
A
STRING
COLOR
SATELLITE
B
STRING
COLOR
SATELLITE
C
STRING
COLOR
SATELLITE
D
STRING
COLOR
TIME (IN
SECONDS)
.00505783 .00423206 .00836090 .00712225
DISTANCE (M)
1516299.2878
4614
1268739.6698
0348
2506534.7620
922
2135196.8339
905
SCALED
DISTANCE (M)
.07124 0.05961 0.11776 0.10032
SCALED
DISTANCE (CM)
7.12 5.96 11.76 10.03
4. Now you know how long each string is supposed to be but the distances are a lot longer
than the strings we cut. You need to account for the scale factor of the map. This map has
a scale factor of 1:21,283,839. This means that 1 meter on the map equals 21,283,839
meters on the earth's surface. Using a simple proportion, figure out what the scaled
version of your string should be. Convert the units to centimeters for easier measuring.
[Note: In this shorter exercise, all the math has been done for you.] The single most
important thing in this exercise is to make your string lengths as accurate as possible
because you are going to be using your string to draw a circle showing all the possible
places where the satellite signal could have gone in the given amount of time. In some
cases, the circle may not fit on the paper and may just show up as an arc. You and your
team should come up with a way to make those circles and arcs as precise as possible.
Think about that for a minute before you cut your strings. Is there some inventive
technique you can come up with to make your circles and arcs more precise? Cut your
strings and get ready for the next step.
5. Now you have four different strings, representing the distances from 4 satellites. Using
whatever technique you came up with, go ahead and draw your circles and arcs using the
satellite as the center point. This arc is a representation of where the satellite signal would
be given the elapsed time. Remember, our position could be anywhere along that arc
since that signal is traveling in all directions. Repeat this for String B and Dot B. You
should see that there are at least two places where you could be! What were those two
places?
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
40 RAJESH KUMAR(14001003908)
Complete the process for Strings C and D.
6. Now you have a series of arcs and circles that overlap in a few places. But there should
only be one place on the map where they all intersect each other.
Where are you?
Why didn't your lines all cross in exactly the same spot?
Take a look at how close you came. What would you say your level of accuracy was?
How does your accuracy compare to consumer grade GPS receivers?
How does your accuracy compare to Survey grade GPS receivers?
Wrap Up:
Of course GPS positioning is not quite that simple. In order to know the distance from the
satellite to the receiver you need to know exactly where the satellite was when it sent its signal.
That positional information is included in the signal that travels from the satellites. Also, the rate
is not exactly the speed of light (it's really close though), as there are a variety of things that can
cause delays, such as atmospheric conditions. There is also the problem of multi-path (signals
bouncing off the ground or off of buildings), dilution of precision (really bad distribution of
satellites in the sky) and other potential sources of error that was covered in the lecture. But for
the most part, it really is that simple.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
41 RAJESH KUMAR(14001003908)
Project Based on Arduino-uno microcontroller
Tracking of vehicle is a process in which we track the vehicle location in form of Latitude and
Longitude (GPS coordinates). GPS Coordinates are the value of a location. This system is very
efficient for outdoor application purpose.
This kind of Vehicle Tracking System Project is widely in tracking Cabs/Taxis, stolen vehicles,
school/colleges buses etc.
Components Required:
 Arduino-uno microcontroller
 GSM Module
 GPS Module
 16x2 LCD
 Power Supply
 Connecting Wires
 10 K POT
GPS Module and Its Working:
GPS stands for Global Positioning System and used to detect the Latitude and Longitude of
any location on the Earth, with exact UTC time (Universal Time Coordinated). GPS module is
the main component in our vehicle tracking system project. This device receives the
coordinates from the satellite for each and every second, with time and date.
Orbiting the Earth are a number of Global Positioning System (GPS) satellites that can help
determine your location on the planet. The concepts behind GPS positioning are very simple, but
the application and implementation require amazing precision.
GPS positioning works on two basic mathematical concepts. The first is called trilateration,
which literally means positioning from three distances. The second concept is the relationship
between distance traveled, rate (speed) of travel and amount of time spent traveling, or:
Distance = Rate × Time
The first concept, trilateration, is the focus of this activity. It centers around finding your position
on the Earth by knowing the location of orbiting GPS satellites and the distance from those
satellites to your location on the planet. However, there is no way to actually take a yardstick,
tape measure, etc., and measure the distance from your location up to the satellites. So how can
we use trilateration if we can't physically measure the distances? The answer lies in the second
concept, relating distance, rate and time. The trick lies in the fact that GPS satellites are always
sending out radio signals.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
42 RAJESH KUMAR(14001003908)
In GPS positioning the rate is how fast the radio signal travels, which is equal to the speed of
light (299,792,458 meters per second). Time is determined by how long it takes for a signal to
travel from the GPS satellite to a GPS receiver on earth.
GPS module sends the data related to tracking position in real time, and it sends so many data in
NMEA format (see the screenshot below). NMEA format consist several sentences, in which we
only need one sentence. This sentence starts from $GPGGA and contains the coordinates, time
and other useful information. This GPGGA is referred to Global Positioning System Fix
Data. Know more about Reading GPS data and its strings here.
We can extract coordinate from $GPGGA string by counting the commas in the string. Suppose
you find $GPGGA string and stores it in an array, then Latitude can be found after two commas
and Longitude can be found after four commas. Now these latitude and longitude can be put in
other arrays.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
43 RAJESH KUMAR(14001003908)
Below is the $GPGGA String, along with its description:
$GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,,*47
$GPGGA,HHMMSS.SSS,latitude,N,longitude,E,FQ,NOS,HDP,altitude,M,height,M,,checksum
data
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
44 RAJESH KUMAR(14001003908)
Identifier Description
$GPGGA Global Positioning system fix data
HHMMSS.SSS Time in hour minute seconds and
milliseconds format.
Latitude Latitude (Coordinate)
N Direction N=North, S=South
Longitude Longitude(Coordinate)
E Direction E= East, W=West
FQ Fix Quality Data
NOS No. of Satellites being Used
HPD Horizontal Dilution of Precision
Altitude Altitude from sea level
M Meter
Height Height
Checksum Checksum Data
Circuit Explanation:
Circuit Connections of this Vehicle Tracking System Project is simple. Here
Tx pin of GPS module is directly connected to digital pin number 10 of Arduino.
By using Software Serial Library here, we have allowed serial communication on
pin 10 and 11, and made them Rx and Tx respectively and left the Rx pin of GPS
Module open. By default Pin 0 and 1 of Arduino are used for serial
communication but by using SoftwareSerial library, we can allow serial
communication on other digital pins of the Arduino. 12 Volt supply is used to
power the GPS Module.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
45 RAJESH KUMAR(14001003908)
GSM module’s Tx and Rx pins of are directly connected to pin Rx and Tx of
Arduino. GSM module is also powered by 12v supply. An optional LCD’s data
pins D4, D5, D6 and D7 are connected to pin number 5, 4, 3, and 2 of Arduino.
Command pin RS and EN of LCD are connected with pin number 2 and 3 of
Arduino and RW pin is directly connected with ground. A Potentiometer is also
used for setting contrast or brightness of LCD.
Working Explanation:
In this project, Arduino is used for controlling whole the process with a GPS
Receiver and GSM module. GPS Receiver is used for detecting coordinates of
the vehicle, GSM module is used for sending the coordinates to user by SMS.
And an optional 16x2 LCD is also used for displaying status messages or
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
46 RAJESH KUMAR(14001003908)
coordinates. We have used GPS Module SKG13BL and GSM Module
SIM900A.
When we ready with our hardware after programming, we can install it in our
vehicle and power it up. Then we just need to send a SMS, “Track Vehicle”, to
the system that is placed in our vehicle. We can also use some prefix (#) or suffix
(*) like #Track Vehicle*, to properly identify the starting and ending of the
string, like we did in these projects: GSM Based Home Automation and Wireless
Notice Board
Sent message is received by GSM module which is connected to the system and
sends message data to Arduino. Arduino reads it and extract main message from
the whole message. And then compare it with predefined message in Arduino. If
any match occurs then Arduino reads coordinates by extracting $GPGGA String
from GPS module data (GPS working explained above) and send it to user by
using GSM module. This message contains the coordinates of vehicle location.
Programming Explanation:
In programming part first we include libraries and define pins for LCD &
software serial communication. Also define some variable with arrays for storing
data. Software Serial Library is used to allow serial communication on pin 10
and 11.
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
47 RAJESH KUMAR(14001003908)
#include<LiquidCrystal.h>
LiquidCrystallcd(7, 6, 5, 4, 3, 2);
#include <SoftwareSerial.h>
SoftwareSerialgps(10,11); // RX, TX
charstr[70];
String gpsString="";
... ....
.... ....
Here array str[70] is used for storing received message from GSM module
and gpsString is used for storing GPS string. char *test=”$GPGGA” is used to
compare the right string that we need for coordinates.
After it we have initialized serial communication, LCD, GSM & GPS module in
setup function and showed a welcome message on LCD.
void setup()
{
lcd.begin(16,2);
Serial.begin(9600);
gps.begin(9600);
lcd.print("Vehicle Tracking");
lcd.setCursor(0,1);
... ....
.... ....
In loop function we receive message and GPS string.
void loop()
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
48 RAJESH KUMAR(14001003908)
{
serialEvent();
if(temp)
{
get_gps();
tracking();
}
}
Functions void init_sms and void send_sms() are used to initialising and sending
message. Use proper 10 digit Cell phone no, in init_sms function.
Function void get_gps() has been used to extract the coordinates from the
received string.
Function void gpsEvent() is used for receiving GPS data into the Arduino.
Function void serialEvent() is used for receiving message from GSM and
comparing the received message with predefined message (Track Vehicle).
voidserialEvent()
{
while(Serial.available())
{
if(Serial.find("Track Vehicle"))
{
temp=1;
break;
}
... ....
.... ...
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
49 RAJESH KUMAR(14001003908)
Initialization function ‘gsm_init()’ is used for initialising and configuring the
GSM Module, where firstly, GSM module is checked whether it is connected or
not by sending ‘AT’ command to GSM module. If response OK is received,
means it is ready. System keeps checking for the module until it becomes ready
or until ‘OK’ is received. Then ECHO is turned off by sending the ATE0
command, otherwise GSM module will echo all the commands. Then finally
Network availability is checked through the ‘AT+CPIN?’ command, if inserted
card is SIM card and PIN is present, it gives the response +CPIN: READY. This
is also check repeatedly until the network is found. This can be clearly
understood by the Video below.
Check all the above functions in CodeSection below.
Code:
#include<LiquidCrystal.h>
LiquidCrystallcd(7, 6, 5, 4, 3, 2);
#include <SoftwareSerial.h>
SoftwareSerialgps(10,11); // RX, TX
//String str="";
char str[70];
String gpsString="";
char *test="$GPGGA";
String latitude="No Range ";
String longitude="No Range ";
int temp=0,i;
booleangps_status=0;
void setup()
{
lcd.begin(16,2);
Serial.begin(9600);
gps.begin(9600);
lcd.print("Vehicle Tracking");
lcd.setCursor(0,1);
lcd.print(" System ");
delay(2000);
gsm_init();
lcd.clear();
Serial.println("AT+CNMI=2,2,0,0,0");
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
50 RAJESH KUMAR(14001003908)
lcd.print("GPS Initializing");
lcd.setCursor(0,1);
lcd.print(" No GPS Range ");
get_gps();
delay(2000);
lcd.clear();
lcd.print("GPS Range Found");
lcd.setCursor(0,1);
lcd.print("GPS is Ready");
delay(2000);
lcd.clear();
lcd.print("System Ready");
temp=0;
}
void loop()
{
serialEvent();
if(temp)
{
get_gps();
tracking();
}
}
void serialEvent()
{
while(Serial.available())
{
if(Serial.find("Track Vehicle"))
{
temp=1;
break;
}
else
temp=0;
}
}
void gpsEvent()
{
gpsString="";
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
51 RAJESH KUMAR(14001003908)
while(1)
{
while (gps.available()>0) //checking serial data from GPS
{
char inChar = (char)gps.read();
gpsString+= inChar; //store data from GPS into gpsString
i++;
if (i < 7)
{
if(gpsString[i-1] != test[i-1]) //checking for $GPGGAsentence
{
i=0;
gpsString="";
}
}
if(inChar=='r')
{
if(i>65)
{
gps_status=1;
break;
}
else
{
i=0;
}
}
}
if(gps_status)
break;
}
}
void gsm_init()
{
lcd.clear();
lcd.print("Finding Module..");
booleanat_flag=1;
while(at_flag)
{
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
52 RAJESH KUMAR(14001003908)
Serial.println("AT");
while(Serial.available()>0)
{
if(Serial.find("OK"))
at_flag=0;
}
delay(1000);
}
lcd.clear();
lcd.print("Module Connected..");
delay(1000);
lcd.clear();
lcd.print("Disabling ECHO");
booleanecho_flag=1;
while(echo_flag)
{
Serial.println("ATE0");
while(Serial.available()>0)
{
if(Serial.find("OK"))
echo_flag=0;
}
delay(1000);
}
lcd.clear();
lcd.print("Echo OFF");
delay(1000);
lcd.clear();
lcd.print("Finding Network..");
booleannet_flag=1;
while(net_flag)
{
Serial.println("AT+CPIN?");
while(Serial.available()>0)
{
if(Serial.find("+CPIN: READY"))
net_flag=0;
}
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
53 RAJESH KUMAR(14001003908)
delay(1000);
}
lcd.clear();
lcd.print("Network Found..");
delay(1000);
lcd.clear();
}
void get_gps()
{
gps_status=0;
int x=0;
while(gps_status==0)
{
gpsEvent();
intstr_lenth=i;
latitude="";
longitude="";
int comma=0;
while(x<str_lenth)
{
if(gpsString[x]==',')
comma++;
if(comma==2) //extract latitude from string
latitude+=gpsString[x+1];
else if(comma==4) //extract longitude from string
longitude+=gpsString[x+1];
x++;
}
int l1=latitude.length();
latitude[l1-1]=' ';
l1=longitude.length();
longitude[l1-1]=' ';
lcd.clear();
lcd.print("Lat:");
lcd.print(latitude);
lcd.setCursor(0,1);
lcd.print("Long:");
lcd.print(longitude);
i=0;x=0;
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
54 RAJESH KUMAR(14001003908)
str_lenth=0;
delay(2000);
}
}
void init_sms()
{
Serial.println("AT+CMGF=1");
delay(400);
Serial.println("AT+CMGS="+91**********""); // use your 10 digit cell no.
here
delay(400);
}
voidsend_data(String message)
{
Serial.println(message);
delay(200);
}
voidsend_sms()
{
Serial.write(26);
}
void lcd_status()
{
lcd.clear();
lcd.print("Message Sent");
delay(2000);
lcd.clear();
lcd.print("System Ready");
return;
}
void tracking()
{
init_sms();
send_data("Vehicle Tracking Alert:");
send_data("YourVehicle Current Location is:");
Serial.print("Latitude:");
send_data(latitude);
Serial.print("Longitude:");
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
55 RAJESH KUMAR(14001003908)
send_data(longitude);
send_data("Please take some action soon..nThankyou");
send_sms();
delay(2000);
lcd_status();
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT
56 RAJESH KUMAR(14001003908)
REFERENCES
 https://www.arduino.cc/en/Main/ArduinoBoardUno
 https://datasheets.maximintegrated.com/en/ds/MAX7400-MAX7407.pdf
 https://reference.digilentinc.com/reference/instrumentation/analog-
discovery-2/reference-manual
 http://www.gps.gov/students/

More Related Content

What's hot

Ppt on six month training on embedded system & IOT
Ppt on six month training on embedded system & IOTPpt on six month training on embedded system & IOT
Ppt on six month training on embedded system & IOT
preetigill309
 
Hardware Software Codesign
Hardware Software CodesignHardware Software Codesign
Hardware Software Codesign
destruck
 
Seminar on night vision technology ppt
Seminar on night vision technology pptSeminar on night vision technology ppt
Seminar on night vision technology ppt
deepakmarndi
 
HAND GESTURE CONTROLLED WHEEL CHAIR
HAND GESTURE CONTROLLED WHEEL CHAIRHAND GESTURE CONTROLLED WHEEL CHAIR
HAND GESTURE CONTROLLED WHEEL CHAIR
Noufal Nechiyan
 
Embedded Systems - Training ppt
Embedded Systems - Training pptEmbedded Systems - Training ppt
Embedded Systems - Training ppt
Nishant Kayal
 
Voice and touchscreen operated wheelchair ppt
Voice and touchscreen operated wheelchair pptVoice and touchscreen operated wheelchair ppt
Voice and touchscreen operated wheelchair ppt
Syed Saleem Ahmed
 
Smart glove hand gesture vocalizer final year report
Smart glove hand gesture vocalizer final year reportSmart glove hand gesture vocalizer final year report
Smart glove hand gesture vocalizer final year report
MUHAMMAD NOMAN KHAN
 
Led display
Led displayLed display
Led display
Kundan Parmar
 
wireless electronic notice board using GSM
wireless electronic notice board using GSMwireless electronic notice board using GSM
wireless electronic notice board using GSM
Vijeeth Anitha
 
Final year project presentation IOT Based home security system
Final year project presentation IOT Based home security systemFinal year project presentation IOT Based home security system
Final year project presentation IOT Based home security system
SarmadMalik18
 
Bharat Electronics Limited (BEL) : Training Report
Bharat Electronics Limited (BEL) : Training ReportBharat Electronics Limited (BEL) : Training Report
Bharat Electronics Limited (BEL) : Training Report
Amber Bhaumik
 
Smart Gloves for Blind
Smart Gloves for BlindSmart Gloves for Blind
Smart Gloves for Blind
IRJET Journal
 
Heart attack and alcohol detection sensor using internet of things
Heart attack and alcohol detection sensor using internet of thingsHeart attack and alcohol detection sensor using internet of things
Heart attack and alcohol detection sensor using internet of things
EditorIJAERD
 
Architectural support for High Level Language
Architectural support for High Level LanguageArchitectural support for High Level Language
Architectural support for High Level Language
Sudhanshu Janwadkar
 
Wireless E-Notice Board Using Bluetooth Report.docx
Wireless E-Notice Board Using Bluetooth Report.docxWireless E-Notice Board Using Bluetooth Report.docx
Wireless E-Notice Board Using Bluetooth Report.docx
AbhishekGM10
 
Metal detector robot
Metal detector robotMetal detector robot
Metal detector robot
f114n
 
Li-Fi technology
Li-Fi technologyLi-Fi technology
Li-Fi technology
R.V college of engineering
 
Embedded Systems Training Report
Embedded Systems Training ReportEmbedded Systems Training Report
Embedded Systems Training Report
Akhil Garg
 
Arduino based health monitoring system
Arduino based health monitoring systemArduino based health monitoring system
Arduino based health monitoring system
Yousuf Shaikh
 
X-Max Technology ppt
X-Max Technology pptX-Max Technology ppt

What's hot (20)

Ppt on six month training on embedded system & IOT
Ppt on six month training on embedded system & IOTPpt on six month training on embedded system & IOT
Ppt on six month training on embedded system & IOT
 
Hardware Software Codesign
Hardware Software CodesignHardware Software Codesign
Hardware Software Codesign
 
Seminar on night vision technology ppt
Seminar on night vision technology pptSeminar on night vision technology ppt
Seminar on night vision technology ppt
 
HAND GESTURE CONTROLLED WHEEL CHAIR
HAND GESTURE CONTROLLED WHEEL CHAIRHAND GESTURE CONTROLLED WHEEL CHAIR
HAND GESTURE CONTROLLED WHEEL CHAIR
 
Embedded Systems - Training ppt
Embedded Systems - Training pptEmbedded Systems - Training ppt
Embedded Systems - Training ppt
 
Voice and touchscreen operated wheelchair ppt
Voice and touchscreen operated wheelchair pptVoice and touchscreen operated wheelchair ppt
Voice and touchscreen operated wheelchair ppt
 
Smart glove hand gesture vocalizer final year report
Smart glove hand gesture vocalizer final year reportSmart glove hand gesture vocalizer final year report
Smart glove hand gesture vocalizer final year report
 
Led display
Led displayLed display
Led display
 
wireless electronic notice board using GSM
wireless electronic notice board using GSMwireless electronic notice board using GSM
wireless electronic notice board using GSM
 
Final year project presentation IOT Based home security system
Final year project presentation IOT Based home security systemFinal year project presentation IOT Based home security system
Final year project presentation IOT Based home security system
 
Bharat Electronics Limited (BEL) : Training Report
Bharat Electronics Limited (BEL) : Training ReportBharat Electronics Limited (BEL) : Training Report
Bharat Electronics Limited (BEL) : Training Report
 
Smart Gloves for Blind
Smart Gloves for BlindSmart Gloves for Blind
Smart Gloves for Blind
 
Heart attack and alcohol detection sensor using internet of things
Heart attack and alcohol detection sensor using internet of thingsHeart attack and alcohol detection sensor using internet of things
Heart attack and alcohol detection sensor using internet of things
 
Architectural support for High Level Language
Architectural support for High Level LanguageArchitectural support for High Level Language
Architectural support for High Level Language
 
Wireless E-Notice Board Using Bluetooth Report.docx
Wireless E-Notice Board Using Bluetooth Report.docxWireless E-Notice Board Using Bluetooth Report.docx
Wireless E-Notice Board Using Bluetooth Report.docx
 
Metal detector robot
Metal detector robotMetal detector robot
Metal detector robot
 
Li-Fi technology
Li-Fi technologyLi-Fi technology
Li-Fi technology
 
Embedded Systems Training Report
Embedded Systems Training ReportEmbedded Systems Training Report
Embedded Systems Training Report
 
Arduino based health monitoring system
Arduino based health monitoring systemArduino based health monitoring system
Arduino based health monitoring system
 
X-Max Technology ppt
X-Max Technology pptX-Max Technology ppt
X-Max Technology ppt
 

Viewers also liked

Cla 03 nov
Cla 03 novCla 03 nov
Cla 03 nov
Drezt B
 
Tares 10 4 b
Tares 10 4 bTares 10 4 b
Tares 10 4 b
Emi Guada Esp
 
O F O R M A T O P D F
O  F O R M A T O  P D FO  F O R M A T O  P D F
O F O R M A T O P D F
Rosete Figueira
 
Efemérides
EfeméridesEfemérides
Efemérides
Pastoral Salud
 
Filters and cognitive bias
Filters and cognitive biasFilters and cognitive bias
Filters and cognitive bias
CEST
 
Características de la redes sociales. intranet versus internet
Características de la redes sociales. intranet versus internetCaracterísticas de la redes sociales. intranet versus internet
Características de la redes sociales. intranet versus internetJaime10_2B
 
Teoría del desarrollo cognoscitivo de Piaget
Teoría del desarrollo cognoscitivo de PiagetTeoría del desarrollo cognoscitivo de Piaget
Teoría del desarrollo cognoscitivo de Piaget
jenyfercastellanos
 
俄俄
Clipping cnc 05032015 versão de impressão
Clipping cnc 05032015   versão de impressãoClipping cnc 05032015   versão de impressão
Clipping cnc 05032015 versão de impressão
Paulo André Colucci Kawasaki
 
Carcasa, torres, chasis o caja
Carcasa, torres, chasis o cajaCarcasa, torres, chasis o caja
Carcasa, torres, chasis o caja
Andrea Melenje Buesaquillo
 

Viewers also liked (12)

DSC_0000758[1].jpg
DSC_0000758[1].jpgDSC_0000758[1].jpg
DSC_0000758[1].jpg
 
Cla 03 nov
Cla 03 novCla 03 nov
Cla 03 nov
 
Tares 10 4 b
Tares 10 4 bTares 10 4 b
Tares 10 4 b
 
O F O R M A T O P D F
O  F O R M A T O  P D FO  F O R M A T O  P D F
O F O R M A T O P D F
 
Efemérides
EfeméridesEfemérides
Efemérides
 
Filters and cognitive bias
Filters and cognitive biasFilters and cognitive bias
Filters and cognitive bias
 
Características de la redes sociales. intranet versus internet
Características de la redes sociales. intranet versus internetCaracterísticas de la redes sociales. intranet versus internet
Características de la redes sociales. intranet versus internet
 
Teoría del desarrollo cognoscitivo de Piaget
Teoría del desarrollo cognoscitivo de PiagetTeoría del desarrollo cognoscitivo de Piaget
Teoría del desarrollo cognoscitivo de Piaget
 
俄俄
 
Clipping cnc 05032015 versão de impressão
Clipping cnc 05032015   versão de impressãoClipping cnc 05032015   versão de impressão
Clipping cnc 05032015 versão de impressão
 
Arti in bhoj.jpg
Arti in bhoj.jpgArti in bhoj.jpg
Arti in bhoj.jpg
 
Carcasa, torres, chasis o caja
Carcasa, torres, chasis o cajaCarcasa, torres, chasis o caja
Carcasa, torres, chasis o caja
 

Similar to FINAL CORRECT Report

Real time heart monitoring system
Real time heart monitoring systemReal time heart monitoring system
Real time heart monitoring system
Shashank Kapoor
 
REAL TIME HEART BEAT MONITORING SYSTEM USING PIC16F876 MICROCONTROLLER
REAL TIME HEART BEAT MONITORING SYSTEM USING PIC16F876 MICROCONTROLLERREAL TIME HEART BEAT MONITORING SYSTEM USING PIC16F876 MICROCONTROLLER
REAL TIME HEART BEAT MONITORING SYSTEM USING PIC16F876 MICROCONTROLLER
Venkata Sai Kalyan Routhu
 
Bagasse Level Monitoring System
Bagasse Level Monitoring SystemBagasse Level Monitoring System
Bagasse Level Monitoring System
ijtsrd
 
FINAL DOC
FINAL DOCFINAL DOC
REPORT ON INDUSTRIAL AUTOMATION
REPORT ON INDUSTRIAL AUTOMATIONREPORT ON INDUSTRIAL AUTOMATION
REPORT ON INDUSTRIAL AUTOMATION
Arnab Podder
 
Seminar Report on Airport Authority of India [AAI]
Seminar Report on Airport Authority of India [AAI]Seminar Report on Airport Authority of India [AAI]
Seminar Report on Airport Authority of India [AAI]
Aditya Gupta
 
Skinput
SkinputSkinput
Io t internship
Io t internship Io t internship
Io t internship
manishareddy677467
 
WIRELESS ROBOT
WIRELESS ROBOTWIRELESS ROBOT
WIRELESS ROBOT
AIRTEL
 
IRJET- Air and Sound Pollution Monitoring System using IoT
IRJET- Air and Sound Pollution Monitoring System using IoTIRJET- Air and Sound Pollution Monitoring System using IoT
IRJET- Air and Sound Pollution Monitoring System using IoT
IRJET Journal
 
Industrial automation using internet of things
Industrial automation using internet of thingsIndustrial automation using internet of things
Industrial automation using internet of things
DeepakKumarMahanta2
 
IRJET- Public Garden Automation System
IRJET-  	  Public Garden Automation SystemIRJET-  	  Public Garden Automation System
IRJET- Public Garden Automation System
IRJET Journal
 
sss_CV_2014
sss_CV_2014sss_CV_2014
COAL MINE SAFETY INTELLIGENT MONITORING BASED ON WIRELESS SENSOR NETWORK
COAL MINE SAFETY INTELLIGENT MONITORING BASED ON WIRELESS SENSOR NETWORKCOAL MINE SAFETY INTELLIGENT MONITORING BASED ON WIRELESS SENSOR NETWORK
COAL MINE SAFETY INTELLIGENT MONITORING BASED ON WIRELESS SENSOR NETWORK
IRJET Journal
 
IRJET- Smart Ambulance with Traffic Control Ability
IRJET- Smart Ambulance with Traffic Control AbilityIRJET- Smart Ambulance with Traffic Control Ability
IRJET- Smart Ambulance with Traffic Control Ability
IRJET Journal
 
IRJET- Level Loop Measurement using IoT
IRJET-  	  Level Loop Measurement using IoTIRJET-  	  Level Loop Measurement using IoT
IRJET- Level Loop Measurement using IoT
IRJET Journal
 
Vibration Analysis for condition Monitoring & Predictive Maintenance using Em...
Vibration Analysis for condition Monitoring & Predictive Maintenance using Em...Vibration Analysis for condition Monitoring & Predictive Maintenance using Em...
Vibration Analysis for condition Monitoring & Predictive Maintenance using Em...
IRJET Journal
 
Artificial nose
Artificial nose Artificial nose
Artificial nose
Zorays Solar Pakistan
 
Autonomous sensor nodes for Structural Health Monitoring of bridges
Autonomous sensor nodes for Structural Health Monitoring of bridgesAutonomous sensor nodes for Structural Health Monitoring of bridges
Autonomous sensor nodes for Structural Health Monitoring of bridges
IRJET Journal
 
Design and fabrication of automated earthquake rescue machine
Design and fabrication of automated earthquake rescue machineDesign and fabrication of automated earthquake rescue machine
Design and fabrication of automated earthquake rescue machine
IRJET Journal
 

Similar to FINAL CORRECT Report (20)

Real time heart monitoring system
Real time heart monitoring systemReal time heart monitoring system
Real time heart monitoring system
 
REAL TIME HEART BEAT MONITORING SYSTEM USING PIC16F876 MICROCONTROLLER
REAL TIME HEART BEAT MONITORING SYSTEM USING PIC16F876 MICROCONTROLLERREAL TIME HEART BEAT MONITORING SYSTEM USING PIC16F876 MICROCONTROLLER
REAL TIME HEART BEAT MONITORING SYSTEM USING PIC16F876 MICROCONTROLLER
 
Bagasse Level Monitoring System
Bagasse Level Monitoring SystemBagasse Level Monitoring System
Bagasse Level Monitoring System
 
FINAL DOC
FINAL DOCFINAL DOC
FINAL DOC
 
REPORT ON INDUSTRIAL AUTOMATION
REPORT ON INDUSTRIAL AUTOMATIONREPORT ON INDUSTRIAL AUTOMATION
REPORT ON INDUSTRIAL AUTOMATION
 
Seminar Report on Airport Authority of India [AAI]
Seminar Report on Airport Authority of India [AAI]Seminar Report on Airport Authority of India [AAI]
Seminar Report on Airport Authority of India [AAI]
 
Skinput
SkinputSkinput
Skinput
 
Io t internship
Io t internship Io t internship
Io t internship
 
WIRELESS ROBOT
WIRELESS ROBOTWIRELESS ROBOT
WIRELESS ROBOT
 
IRJET- Air and Sound Pollution Monitoring System using IoT
IRJET- Air and Sound Pollution Monitoring System using IoTIRJET- Air and Sound Pollution Monitoring System using IoT
IRJET- Air and Sound Pollution Monitoring System using IoT
 
Industrial automation using internet of things
Industrial automation using internet of thingsIndustrial automation using internet of things
Industrial automation using internet of things
 
IRJET- Public Garden Automation System
IRJET-  	  Public Garden Automation SystemIRJET-  	  Public Garden Automation System
IRJET- Public Garden Automation System
 
sss_CV_2014
sss_CV_2014sss_CV_2014
sss_CV_2014
 
COAL MINE SAFETY INTELLIGENT MONITORING BASED ON WIRELESS SENSOR NETWORK
COAL MINE SAFETY INTELLIGENT MONITORING BASED ON WIRELESS SENSOR NETWORKCOAL MINE SAFETY INTELLIGENT MONITORING BASED ON WIRELESS SENSOR NETWORK
COAL MINE SAFETY INTELLIGENT MONITORING BASED ON WIRELESS SENSOR NETWORK
 
IRJET- Smart Ambulance with Traffic Control Ability
IRJET- Smart Ambulance with Traffic Control AbilityIRJET- Smart Ambulance with Traffic Control Ability
IRJET- Smart Ambulance with Traffic Control Ability
 
IRJET- Level Loop Measurement using IoT
IRJET-  	  Level Loop Measurement using IoTIRJET-  	  Level Loop Measurement using IoT
IRJET- Level Loop Measurement using IoT
 
Vibration Analysis for condition Monitoring & Predictive Maintenance using Em...
Vibration Analysis for condition Monitoring & Predictive Maintenance using Em...Vibration Analysis for condition Monitoring & Predictive Maintenance using Em...
Vibration Analysis for condition Monitoring & Predictive Maintenance using Em...
 
Artificial nose
Artificial nose Artificial nose
Artificial nose
 
Autonomous sensor nodes for Structural Health Monitoring of bridges
Autonomous sensor nodes for Structural Health Monitoring of bridgesAutonomous sensor nodes for Structural Health Monitoring of bridges
Autonomous sensor nodes for Structural Health Monitoring of bridges
 
Design and fabrication of automated earthquake rescue machine
Design and fabrication of automated earthquake rescue machineDesign and fabrication of automated earthquake rescue machine
Design and fabrication of automated earthquake rescue machine
 

FINAL CORRECT Report

  • 1. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 1 RAJESH KUMAR(14001003908) DECLARATION I hereby declare that the work presented in this Report entitled “Advanced Material and sensors Laboratory work with CSIO division”, in partial fulfillment of the requirements for the award of degree of Bachelor of Technology in Electronics and Communication Engineering, submitted to Deenbandhu Chhotu Ram University of Science and technology, Murthal, is an authentic record of my own work carried out during the period from 13 June, 2016 to 28nd July, 2016 under the guidance of Industrial guide Mr. Satish Kumar and academic guide Mr.Charanjeet Singh, A.P. in ECE Department. RajeshKumar
  • 2. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 2 RAJESH KUMAR(14001003908) ACKNOWLEDGEMENT This report gives the details of the study work done in one and half months of the industrial training after sixth semester for partial fulfillment of the requirements for the degree of Bachelor of Technology (B.Tech) ,under the supervision of Mr. Satish Kumar. I have take efforts in this report. However , it would not have been possible without the kind support and help of many individuals and organizations. I would like to extend our sincere thanks to all of them. I am highly indebted for their guidance and constant supervision as well as for providing necessary information regarding the project and also for their support in completing the project. I would also like to express our gratitude towards our parents for their kind co-operation and encouragement which help us in completion of this industrial training Rajesh Kumar
  • 3. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 3 RAJESH KUMAR(14001003908) Introduction CSIO was established in October 1959 as a laboratory which works on the research, design, and development of scientific and industrial instruments. It was located in New Delhi, and then moved to Chandigarh in 1962. The first Director was Piara Singh Gill.[3] CSIO campus (spread over an area of approximately 120 acres) comprises office buildings, R&D laboratories, Indo-Swiss Training Centre and a housing complex. A building and the accompanying workshops were inaugurated in December 1967. Another block was added in 1976 for housing the R&D Divisions and library. During the mid-1980s the laboratory buildings and infrastructural facilities were modernized. An Administration Block was inaugurated in September 1994. With a view to meeting the demand for instrument technologists, the Indo-Swiss Training Centre (ISTC) was started in December 1963 with the co-operation of Swiss Foundation for Technical Assistance, Zurich, Switzerland. CSIO is under the Physical Sciences Cluster of CSIR. CSIR-CSIO has signed anMoU with CSIR-IMTECH Chandigarh on April 28, 2012 for collaborative research work. CSIO has infrastructural facilities in the areas of microelectronics, optics, applied physics, electronics, and mechanical engineering. R&D programmes are in food & agriculture, health and rehabilitation, avionics, snow and seismic monitoring in strategic sector, landslide and structure health monitoring for public safety, and bio and nano sciences. A large number of instruments have been developed by the Institute and their know- how have been passed on to the industry for commercial exploitation. The laboratory provides a two-year postgraduate research programme in Engineering (PGRPE) in 'Advanced Instrumentation Engineering' the only such program in India. The students are designated as Quick Hire Scientist Trainee QHS(T). The areas of research are Optics and Photonics, Bio-Medical Instrumentation and Agrionics. After the completion of 1-year course work taught by the senior scientists of the organization they are given a one-year project work as their thesis. Major R&D areas  Strategic and Defence Applications  Optics &Opto-Electronics  Computational Instrumentation  Geo-Scientific Instrumentation  Medical Instrumentation  Analytical Instrumentation  Advanced Materials & Science  Agri-Electronic Instrumentation  Energy Management, Condition Monitoring & Quality Control  Environmental Monitoring Instrumentation  Microelectro Mechanical Systems (MEMS) and Sensors  Biomolecular Electronics and Nanotechnology
  • 4. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 4 RAJESH KUMAR(14001003908) Live Projects Portable Reading Machine for Blind Laboratory Name CSIR-Central Scientific Instruments Organisation, Chandigarh Brief Profile of  Portable Reading Machine (PRM) is an assistive Technology/Produc device for visually impaired that helps them reading t printed documents, e-books, or recorded speech. It is based on the principle of contact scanning of a printed document and converting it into speech.  The device is stand-alone, portable, completely wireless and uses open source hardware and software. The device can analyze a multi-column document and provide seamless reading. It is capable of page, sentence and word level navigation while reading. Returns/Benefits  It helps visually impaired to read print media as well as electronic files such as eBooks.  It has support for speaking Hindi, English and is further compatible for other Indian languages such as Bengali, Kannada, Malayalam, Marathi, Punjabi, Tamil, Telugu, etc. The device may also be readily configured for major foreign languages.
  • 5. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 5 RAJESH KUMAR(14001003908) Validation Level Prototype of the Reading Machine has been tested at Institute for the Blind Sec 26, Chandigarh and Saksham, New Delhi. IPR Status [also Copyright under process indicating the status of the patent (if any) End product price Rs. 10,000/ (approx.) (if not available, estimated price) Technology/Produc BEL, Panchkula under Corporate Social Responsibility t Collaborator Relevance of Available technologies are very expensive and does not Technology in cater multi-functionality as available in this developed present times technology. Also similar technology is not available in Indian market, hence not cater the need for Indian users. Similar Commercial available technology: technology/product SARA developed ReadEasy+
  • 6. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 6 RAJESH KUMAR(14001003908) CSIR Developed Earthquake Warning System alerted Delhi Metro about the recent earthquake in real time CSIR-Central Scientific Instruments Organization (CSIR-CSIO), Chandigarh developed an Earthquake Warning System (EqWS). It senses and records the event and generates SMS to the concerned action points, in real time. In the case of the earthquake of magnitude 6.8 on the Richter scale with the epicentre at Hindukush region, Afghanistan occurred on Sunday, the 10th April 2016, as reported by India Meteorological Department on its website the following figure show the earthquake data from the node at Huda City Centre, recorded at 16:01:08 (IST) and a report is generated by the system. The earthquake took place at 15:58:57 (IST) origin time at epicentre. Tremors of this earthquake were felt at various parts of North India including Delhi-NCR region. The distance from the epicentre to Delhi is approximately 1000 km. The CSIR-CSIO developed EqWS, consists of five seismic sensing nodes at different locations in Delhi and is in operation for Delhi Metro Rail Corporation since August 2015. This is an outcome of a sponsored project. This network of five seismic sensing nodes consisting of seismic sensors, communication module, processing units is devised for regional notification of a substantial earthquake while it is in progress. The five nodes are strategically located to gather information about seismic activity and communicate it to the central control located at Operation Control Centre (DMRC-OCC) regarding potential earthquake incidence. The central control takes a final decision based on the response of all the individual nodes and generates an audio visual alarm and sends the event details via email and SMS to the registered users. CSIR-CSIO has established this network of five nodes at Mundka, Botanical Garden, Huda City Centre, Metro Bhawan and Faridabad, comprising seismic warning systems with LAN connectivity with the DMRC network for generation of alarm signal on major earthquake.
  • 7. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 7 RAJESH KUMAR(14001003908) Automatic Target Reorganization Projects (DRDO Project) This Project detect any unwanted motion which is coming towards the base camp by using sensors placing on the ground. When any motion detected, the output of sensor goes to receiving section in which it first apply to the input of anti-alising filter which pass some range of frequency and rejects all other frequency. The signal output from anti-alising filter converted to digital signal and applied to the input of microcontroller. The microcontroller process the output signal and output is plotting on display in the camp. The receiving section is shown below: Anti-Alising filter The MAX7400/MAX7403/MAX7404/MAX7407 8th-order, lowpass, elliptic, switched-capacitor filters (SCFs) oper-ate from a single +5V (MAX7400/MAX7403) or +3V (MAX7404/MAX7407) supply. These devices draw 2mA of supply current and allow corner frequencies from 1Hz to 10kHz, making them ideal for low-power anti-aliasing and post-DAC filtering applications. They fea-ture a shutdown mode that reduces the supply current to 0.2µA. Two clocking options are available: self-clocking (through the use of an external capacitor) or external clocking for tighter cutoff-frequency control. In addition, an offset adjustment pin (OS) allows for the adjustment of the DC output level. The MAX7400/MAX7404 provide 82dB of stopband rejection and a sharp rolloff with a transition ratio of 1.5. The MAX7403/MAX7407 provide a sharper rolloff with a transition ratio of 1.2, while still delivering 60dB of stop-band rejection. The fixed response of these devices simplifies the design task to corner-frequency selection by setting a clock frequency. The MAX7400/ MAX7403/MAX7404/MAX7407 are available in 8-pin SO and DIP packages. Applications ADC Anti-Aliasing Speech Processing Post-DAC Filtering Air-Bag Electronics CT2 Base Stations Anti-Aliasing Filter ADC converter Microcontroller Real time Plotting of Data
  • 8. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 8 RAJESH KUMAR(14001003908) A technique known as oversampling is commonly used in audio ADCs. The idea is to use a higher intermediate digital sample rate, so that a nearly-ideal digital filter can sharply cut off aliasing near the original low Nyquist frequency, while a much simpler analog filter can stop frequencies above the new higher Nyquist frequency. Because analog filters have relatively high cost and limited performance, relaxing the demands on the analog filter can greatly reduce both aliasing and cost. Furthermore, because some noise is averaged out, the higher sampling rate can moderately improve SNR. Alternatively, a signal may be intentionally oversampled without an intermediate frequency to reduce the requirements on the anti-alias filter. For example, CD audio typically extends up to 20 kHz, but is sampled with a 22.05 kHz Nyquist rate. By oversampling by 2.05 kHz, both aliasing and attenuation of higher audio frequencies can be prevented even with less than ideal filters.
  • 9. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 9 RAJESH KUMAR(14001003908) Introduction Arduino is an open-source prototyping platform based on easy-to-use hardware and software. Arduino boards are able to read inputs - light on a sensor, a finger on a button, or a Twitter message - and turn it into an output - activating a motor, turning on an LED, publishing something online. You can tell your board what to do by sending a set of instructions to the microcontroller on the board. To do so you use the Arduino programming language (based on Wiring), and the Arduino Software (IDE),based on Processing. Over the years Arduino has been the brain of thousands of projects, from everyday objects to complex scientific instruments. A worldwide community of makers - students, hobbyists, artists, programmers, and professionals - has gathered around this open-source platform, their contributions have added up to an incredible amount of accessible knowledge that can be of great help to novices and experts alike. Arduino was born at the Ivrea Interaction Design Institute as an easy tool for fast prototyping, aimed at students without a background in electronics and programming. As soon as it reached a wider community, the Arduino board started changing to adapt to new needs and challenges, differentiating its offer from simple 8-bit boards to products for IOT applications, wearable, 3D printing, and embedded environments. All Arduino boards are completely open-source, empowering users to build them independently and eventually adapt them to their particular needs. The software, too, is open-source, and it is growing through the contributions of users worldwide.
  • 10. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 10 RAJESH KUMAR(14001003908) Why Arduino? Thanks to its simple and accessible user experience, Arduino has been used in thousands of different projects and applications. The Arduino software is easy-to-use for beginners, yet flexible enough for advanced users. It runs on Mac, Windows, and Linux. Teachers and students use it to build low cost scientific instruments, to prove chemistry and physics principles, or to get started with programming and robotics. Designers and architects build interactive prototypes, musicians and artists use it for installations and to experiment with new musical instruments. Makers, of course, use it to build many of the projects exhibited at the Maker Faire, for example. Arduino is a key tool to learn new things. Anyone - children, hobbyists, artists, programmers - can start tinkering just following the step by step instructions of a kit, or sharing ideas online with other members of the Arduino community. There are many other microcontrollers and microcontroller platforms available for physical computing. Parallax Basic Stamp, Netmedia's BX-24, Phidgets, MIT's Handyboard, and many others offer similar functionality. All of these tools take the messy details of microcontroller programming and wrap it up in an easy-to-use package. Arduino also simplifies the process of working with microcontrollers, but it offers some advantage for teachers, students, and interested amateurs over other systems: 1. Inexpensive - Arduino boards are relatively inexpensive compared to other microcontroller platforms. The least expensive version of the Arduino module can be assembled by hand, and even the pre-assembled Arduino modules cost less than $50 2. Cross-platform - The Arduino Software (IDE) runs on Windows, Macintosh OSX, and Linux operating systems. Most microcontroller systems are limited to Windows. 3. Simple, clear programming environment - The Arduino Software (IDE) is easy-to-use for beginners, yet flexible enough for advanced users to take advantage of as well. For teachers, it's conveniently based on the Processing programming environment, so students learning to program in that environment will be familiar with how the Arduino IDE works. 4. Open source and extensible software - The Arduino software is published as open source tools, available for extension by experienced programmers. The language can be expanded through C++ libraries, and people wanting to understand the technical details can make the leap from Arduino to the AVR C programming language on which it's based. Similarly, you can add AVR- C code directly into your Arduino programs if you want to.
  • 11. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 11 RAJESH KUMAR(14001003908) The Arduino-Uno Board The Arduino-uno board features an Atmel ATmega328 microcontroller operating at 5 V with 2 Kb of RAM, 32 Kb of flash memory for storing programs and 1 Kb of EEPROM for storing parameters. The clock speed is 16 MHz, which translates to about executing about 300,000 lines of C source code per second. The board has 14 digital I/O pins and 6 analog input pins. There is a USB connector for talking to the host computer and a DC power jack for connecting an external 6-20 V power source, for example a 9 V battery, when running a program while not connected to the host computer. Headers are provided for interfacing to the I/O pins using 22 g solid wire or header connectors. For additional information on the hardware, see http://arduino.cc/en/Main/ArduinoBoardUno. The Arduino programming language is a simplified version of C/C++. If you know C, programming the Arduino will be familiar. If you do not know C, no need to worry as only a few commands are needed to perform useful functions. An important feature of the Arduino is that you can create a control program on the host PC, download it to the Arduino and it will run automatically. Remove the USB cable connection to the PC, and the program will still run from the top each time you push the reset button. Remove the battery and put the Arduino board in a closet for six months. When you reconnect the battery, the last program you stored will run. This means that you connect the board to the host PC to develop and debug your program, but once that is done, you no longer need the PC to run the program.  What You Needfor a Working System  Arduino Uno Development board  USB programming cable (A to B)  9V battery or external power supply (for stand-alone operation)  Solderless breadboard for external circuits, and 22 g solid wire for connections  Host PC running the Arduino development environment. Versions exist for Windows, Mac and Linux  1.3 Installing the Software Follow the instructions on the Getting Started section of the Arduino web site, http://arduino.cc/en/Guide/HomePage.Go all the way through the steps to where you see the pin13 LED blinking. This is the indication that you have all software and drivers successfully installed and can start exploring with your own programs.  1.4 Connecting a Battery For stand-alone operation, the board is powered by a battery rather than through the USB connection to the computer. While the external power can be anywhere in the range of 6 to 24 V (for example, you could use a car battery), a standard 9 V battery is convenient. While you could jam the leads of a battery snap into the Vin and Gnd connections on the board, it is better to solder the battery snap leads to a DC power plug and connect to the power jack on the board. Here is what this looks like.
  • 12. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 12 RAJESH KUMAR(14001003908) CONTENTS  Introduction  Realtime or Recentlycompleted Projects.  Automatic TargetRecognization (DRDO Project)  Anti-Alising Filter(Max7400 IC)  A/D converter  Microcontroller(Arduino-uno)  Realtime Plotting  Arduino-uno microcontroller  Introduction  Specifications  Advantages and Applications  Programming concepts  Interfacing with I/O devices.  Introduction to GPS and their interfacing with arduino.  Tracking systemusing Ardiuno-uno development board  Introduction  Circuit Diagram  Working Operation  Programming Structure  References
  • 13. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 13 RAJESH KUMAR(14001003908) Warning: Watch the polarity as you connect your battery to the snap as reverse orientationcould blow out your board. Disconnect your Arduino from the computer. Connect a 9 V battery to the Arduino power jack using the battery snap adapter. Confirm that the blinking program runs. This shows that you can power the Arduino from a battery and that the program you download runs without needing a connection to the host PC  Moving On Connect your Arduino to the computer with the USB cable. You do not need the battery for now. The green PWR LED will light. If there was already a program burned into the Arduino, it will run. Warning: Do not put your board down on a conductive surface; you will short out the pins onthe back! Start the Arduino development environment. In Arduino-speak, programs are called “sketches”, but here we will just call them programs. In the editing window that comes up, enter the following program, paying attention to where semi-colons appear at the end of command lines. void setup() { Serial.begin(9600); Serial.println("Hello World"); } void loop() {} Your window will look something like this
  • 14. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 14 RAJESH KUMAR(14001003908) Click the Upload button or Ctrl-U to compile the program and load on the Arduino board. Click the Serial Monitor button . If all has gone well, the monitor window will show your message and look something like this Congratulations; you have created and run your first Arduino program!
  • 15. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 15 RAJESH KUMAR(14001003908) Push the Arduino reset button a few times and see what happens. Hint: If you want to check code syntax without an Arduino board connected, click the Verify button or Ctrl-R. Hint: If you want to see how much memory your program takes up, Verify then look at the message at the bottom of the programming window.  Troubleshooting If there is a syntax error in the program caused by a mistake in typing, an error message will appear in the bottom of the program window. Generally, staring at the error will reveal the problem. If you continue to have problems, try these ideas Run the Arduino program again Check that the USB cable is secure at both ends. Reboot your PC because sometimes the serial port can lock up If a “Serial port…already in use” error appears when uploading Ask a friend for help  Solderless Breadboards A solderless breadboard is an essential tool for rapidly prototyping electronic circuits. Components and wire push into breadboard holes. Rows and columns of holes are internally connected to make connections easy. Wires run from the breadboard to the I/O pins on the Arduino board. Make connections using short lengths of 22 g solid wire stripped of insulation about 0.25” at each end. Here is a photo of a breadboard showing which runs are connected internally. The pairs of horizontal runs at the top and bottom are useful for running power and ground. Convention is to make the red colored run +5 V and the blue colored run Gnd. The power runs are sometimes called “power busses”. Horizontal runs connected Vertical runs
  • 16. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 16 RAJESH KUMAR(14001003908) Warning: Only use solid wire on the breadboard. Strands of stranded wire can break off and fill the holes permanently. Hint: Trim wires and component leads so that wires and components lie close to the board. To keep the Arduino board and breadboard together, you can secure both to a piece of fom- core, cardboard or wood using double-stick foam tape or other means. 2 Flashing an LED Light emitting diodes (LED's) are handy for checking out what the Arduino can do.. For this task, you need an LED, a 330 ohm resistor, and some short pieces of 22 or 24 g wire. The figure to the right is a sketch of an LED and its symbol used in electronic schematics Using 22 g solid wire, connect the 5V power pin on the Arduino to the bottom red power bus on the breadboard and the Gnd pin on the Arduino to the bottom blue power buss on the breadboard. Connect the notched or flat side of the LED (the notch or flat is on the rim that surrounds the LED base; look carefully because it can be hard to find) to the Gnd bus and the other side to a free hole in main area of the breadboard Place the resistor so that one end is in the same column as the LED and the other end is in a free column. From that column, connect a wire to digital pin 2 on the Arduino board. Your setup will look something like this
  • 17. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 17 RAJESH KUMAR(14001003908) To test whether the LED works, temporarily disconnect the wire from pin 2 on the Arduino board and touch to the 5V power bus. The LED should light up. If not, try changing the orientation of the LED. Place the wire back in pin 2. On the LED, current runs from the anode (+) to the cathode (-) which is marked by the notch. The circuit you just wired up is represented in schematic form in the figure to the right. Create and run this Arduino program void setup() { pinMode(2,OUTPUT); digitalWrite(2,HIGH); delay(1000); digitalWrite(2,LOW); } void loop() {} Gnd PIN 2 330
  • 18. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 18 RAJESH KUMAR(14001003908) Did the LED light up for one second? Push the Arduino reset button to run the program again. Now try this program, which will flash the LED at 1.0 Hz. Everything after the // on a line is a comment, as is the text between „/*‟ and „*/‟ at the top. It is always good to add comments to a program. /*--------------------------- Blinking LED, 1.0 Hz on pin 2 ----------------------------*/ void setup() // one-time actions { pinMode(2,OUTPUT); // define pin 2 as an output } void loop() // loop forever { digitalWrite(2,HIGH); // pin 2 high (LED on) delay(500); // wait 500 ms digitalWrite(2,LOW); // pin 2 low (LED off) delay(500); // wait 500 ms } The pinMode command sets the LED pin to be an output. The first digitalWrite command says to set pin 2 of the Arduino to HIGH, or +5 volts. This sends current from the pin, through the resistor, through the LED (which lights it) and to ground. The delay(500) command waits for 500 msec. The second digitalWrite command sets pin 2 to LOW or 0 V stopping the current thereby turning the LED off. Code within the brackets defining the loop() function is repeated forever, which is why the LED blinks. This exercise shows how the Arduino can control the outside world. With proper interface circuitry the same code can turn on and off motors, relays, solenoids, electromagnets, pneumatic valves or any other on-off type device. 3 Reading a switch The LED exercise shows how the Arduino can control the outside world. Many applications require reading the state of sensors, including switches. The figure to the right shows a picture of a pushbutton switch and its schematic symbol. Note that the symbol represents a switch whose contacts are normally open, but then are shorted when the button is pushed. If you have a switch, use the continuity (beeper) function of a digital multi-meter (DMM) to understand when the leads are open and when they are connected as the button is pushed. For this exercise, the Arduino will read the state of a normally-open push button switch and display the results on the PC using the serial.println() command. You will need a switch, a 10 kohm resistor and some pieces of 22 g hookup wire. If you don't have a switch, substitute two wires and manually connect their free ends to simulate a switch closure. The figure below shows the schematic for the circuit on the left and a realization on the right.
  • 19. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 19 RAJESH KUMAR(14001003908) +5 V 10K PIN 3 Gnd Create and run this Arduino program void setup() { Serial.begin(9600); } void loop() { Serial.println(digitalRead(3)); delay(250); } Open the Serial Monitor window. When the switch is open, you should see a train of 1's on the screen. When closed, the 1's change to 0's. On the hardware side, when the switch is open, no current flows through the resistor. When no current flows through a resistor, there is no voltage drop across the resistor, which means the voltage on each side is the same. In your circuit, when the switch is open, pin 3 is at 5 volts which the computer reads as a 1 state. When the switch is closed, pin 3 is directly connected to ground, which is at 0 volts. The computer reads this as a 0 state. Now try this program which is an example of how you can have the computer sit and wait for a sensor to change state. void setup() { Serial.begin(9600); } void loop() { while (digitalRead(3) == HIGH) ; Serial.println("Somebody closed the switch!");
  • 20. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 20 RAJESH KUMAR(14001003908) while (digitalRead(3) == LOW) ; Serial.println("The switch is now open!"); } Watch the activity in the Serial Monitor window as you press and release the switch. 4 Controlling a Small DC Motor The Arduino can control a small DC motor through a transistor switch. You will need a TIP120 transistor, a 1K resistor a 9V battery with battery snap and a motor. The TIP120 pins look like this and on a schematic the pins are like this Here is the schematic diagram for how to connect the motor And here is a pictorial diagram for how to connect the components. The connections can be soldered or they can be made through a solderless breadboard.
  • 21. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 21 RAJESH KUMAR(14001003908) Pin 2 Gnd Pin 2 can be any digital I/O pin on your Arduino. Connect the minus of the battery to the emitter of the transistor (E pin) and also connect the emitter of the transistor to Gnd on the Arduino board. To check if things are working, take a jumper wire and short the collector to the emitter pins of the transistor. The motor should turn on. Next, disconnect the 1K resistor from pin 2 and jumper it to +5V. The motor should turn on. Put the resistor back into pin 2 and run the following test program: void setup() { pinMode(2,OUTPUT); digitalWrite(2,HIGH); delay(1000); digitalWrite(2,LOW); } void loop() {} The motor should turn on for 1 second. 5 Arduino Hardware
  • 22. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 22 RAJESH KUMAR(14001003908) The power of the Arduino is not its ability to crunch code, but rather its ability to interact with the outside world through its input-output (I/O) pins. The Arduino has 14 digital I/O pins labeled 0 to 13 that can be used to turn motors and lights on and off and read the state of switches. Each digital pin can sink or source about 40 mA of current. This is more than adequate for interfacing to most devices, but does mean that interface circuits are needed to control devices other than simple LED's. In other words, you cannot run a motor directly using the current available from an Arduino pin, but rather must have the pin drive an interface circuit that in turn drives the motor. A later section of this document shows how to interface to a small motor. To interact with the outside world, the program sets digital pins to a high or low value using C code instructions, which corresponds to +5 V or 0 V at the pin. The pin is connected to external interface electronics and then to the device being switched on and off. The sequence of events is shown in this figure. Program sets pin digitalWrite(4,HIGH); high/low (1/0) digitalWrite(4,LOW); +5V 0V Board pin set to +5V/0V +12 V Interface electronics use signal voltages and 1K power supply to PIN 4 TIP120 switch motor on/off To determine the state of switches and other sensors, the Arduino is able to read the voltage value applied to its pins as a binary number. The interface circuitry translates the sensor signal into a 0 or +5 V signal applied to the digital I/O pin. Through a program command, the Ardiunp interrogates the state of the pin. If the pin is at 0 V, the program will read it as a 0 or LOW. If it is at +5 V, the program will read it as a 1 or HIGH. If more than +5 V is applied, you may blow out your board, so be careful. The sequence of events to read a pin is shown in this figure.
  • 23. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 23 RAJESH KUMAR(14001003908) Interacting with the world has two sides. First, the designer must create electronic interface circuits that allow motors and other devices to be controlled by a low (1-10 mA) current signal that switches between 0 and 5 V, and other circuits that convert sensor readings into a switched 0 or 5 V signal. Second, the designer must write a program using the set of Arduino commands that set and read the I/O pins. Examples of both can be found in the Arduino resources section of the ME2011 web site. When reading inputs, pins must have either 0 or 5V applied. If a pin is left open or "floating", it will read random voltages and cause erratic results. This is why switches always have a 10K pull up resistor connected when interfacing to an Arduino pin. Note: The reason to avoid using pins 0 and 1 is because those pins are used for the serial communications between the Arduino and the host computer. The Arduino also has six analog input pins for reading continuous voltages in the range of 0 to 5 V from sensors such as potentiometers. 6 Programming Concepts This chapter covers some basic concepts of computer programming, going under the assumption that the reader is a complete novice. A computer program is a sequence of step-by-step instructions for the computer to follow. The computer will do exactly what you tell it to do, no more no less. The computer only knows what's in the program, not what you intended. Thus the origin of the phrase, "Garbage in, garbage out". The set of valid instructions comes from the particular programming language used. There are many languages, including C, C++, Java, Ada, Lisp, Fortran, Basic, Pascal, Perl, and a thousand others. The Arduino uses a simplified variation of the C programming language. For any programming language, the instructions must be entered in a specific syntax in order for the computer to interpret them properly. Typically, the interpretation is a two step process. A compiler takes the language specific text you enter for the program and converts it into a machine readable form that is downloaded into the processor. When the program executes, the processor executes the machine code line by line. 6.1 Basics of Programming Languages All sequential programming languages have four categories of instructions. First are operation commands that evaluate an expression, perform arithmetic, toggle states of I/O lines, and many other operations. Second are jump commands that cause the program to jump immediately to another part of the program that is tagged with a label. Jumps are one way to break out of the normal line-by-line processing mode. For example, if you want a program to repeat over and over without stopping, have the last line of the program be a jump command that takes the program back to its first line. Third are branch commands that evaluate a condition and jump if the condition is true. For example, you might want to jump only if a number is greater than zero. Or, you might want to jump only if the state of an i/o line is low. Fourth are loop commands that repeat a section of code a specified number of times. For example, with a loop you can have a
  • 24. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 24 RAJESH KUMAR(14001003908) light flash on and off exactly six times. Most programming languages contain a relatively small number of commands. The complexity of computers comes from combining and repeating the instructions several million times a second. Here's a generic program. 1. Do this 2. Do that 3. Jump to instruction 6 4. Do the other thing 5. All done, sleep 6. If switch closed, do that thing you do 7. Jump to instruction 4 The computer will execute this line by line. The art of programming is simply a matter of translating your intent into a sequence of instructions that match. Here is an example of a for loop command followed by a branch command that uses an IF statement for (i=0;i<6,i++) { instructions } if (j > 4) gotolabelinstructions The commands inside the loop will be repeated six times. Following this, if the value of the variable j is greater than 4, the program will skip to the instruction tagged with the specified label, and if not, the line following the if statement will be executed. In addition to the basic commands, languages have the ability to call functions which are independent sections of code that perform a specific task. Functions are a way of calling a section of code from a number of different places in the program and then returning from that section to the line that follows the calling line. Here's an example apples(); instructions apples(); more instructions void apples(){ instructions } The function apples is everything between the set of braces that follows “apples()”. When the function completes, the program jumps back to the line following the line that called the
  • 25. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 25 RAJESH KUMAR(14001003908) function. 6.2 Digital Numbers When working with a microcontroller that interacts with the real world, you have to dig a little below the surface to understand numbering systems and data sizes. A binary (base 2) variable has two states, off and on, or 0 and 1, or low and high. At their core, all computers work in binary since their internal transistors can only be off or on and nothing between. Numbers are built up from many digits of binary numbers, in much the same way that in the base 10 system we create numbers greater than 9 by using multiple digits. A bit is one binary digit that can take on values of either 0 or 1. A byte is a number comprised of 8 bits, or 8 binary digits. By convention, the bits that make up a byte are labeled right to left with bit 0 being the rightmost or least significant bit as shown below b7 b6 b5 b4 b3 b2 b1 b0 Thus, in the binary number 011, bits 0 and 1 are 1 while bit 2 is 0. In the binary number 1000001, bits 0 and 7 are 1 and the rest are zero. Here are a few binary to decimal conversions for byte size numbers. Binary Decimal 00000011 3 00000111 7 11111111 255 In a computer, variables are used to store numbers. A bit variable can take on two values, 0 and 1, and is typically used as a true/false flag in a program. A byte variable can take on integer values 0-255 decimal while a 16-bit word variable can take on integer values 0-65,535. Variables can be either signed (positive and negative values) or unsigned (positive only). 7 Arduino Programming Language The Arduino runs a simplified version of the C programming language, with some extensions for accessing the hardware. In this guide, we will cover the subset of the programming language that is most useful to the novice Arduino designer. For more information on the Arduino language, see the Language Reference section of the Arduino web site, http://arduino.cc/en/Reference/HomePage. All Arduino instructions are one line. The board can hold a program hundreds of lines long and has space for about 1,000 two-byte variables. The Arduino executes programs at about 300,000 source code lines per sec. 7.1 Creating a Program Programs are created in the Arduino development environment and then downloaded to the Arduino board. Code must be entered in the proper syntax which means using valid
  • 26. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 26 RAJESH KUMAR(14001003908) command names and a valid grammar for each code line. The compiler will catch and flag syntax errors before download. Sometimes the error message can be cryptic and you have to do a bit of hunting because the actual error occurred before what was flagged. Although your program may pass cleanly through the syntax checker, it still might not do what you wanted it to. Here is where you have to hone your skills at code debugging. The Arduino did what you told it to do rather than what you wanted it to do. The best way to catch these errors is to read the code line by line and be the computer. Having another person go through your code also helps. Skilled debugging takes practice. 7.2 Program Formatting and Syntax Programs are entered line by line. Code is case sensitive which means "myvariable" is different than "MyVariable". Statements are any command. Statements are terminated with a semi-colon. A classic mistake isto forget the semi-colon so if your program does not compile, examine the error text and see if you forgot to enter a colon. Comments are any text that follows “//” on a line. For multi-line block comments, begin with“/*” and end with “*/” Constants are fixed numbers and can be entered as ordinary decimal numbers (integer only) orin hexadecimal (base 16) or in binary (base 2) as shown in the table below Decimal Hex Binary 100 0x64 B01100100 Labels are used to reference locations in your program. They can be any combination of letters,numbers and underscore (_), but the first character must be a letter. When used to mark a location, follow the label with a colon. When referring to an address label in an instruction line, don't use the colon. Here's an example repeat:digitalWrite(2,HIGH); delay(1000); digitalWrite(2,LOW); delay(1000); goto repeat; Use labels sparingly as they can actually make a program difficult to follow and challenging to debug. In fact, some C programmers will tell you to never use labels. Variables are allocated by declaring them in the program. Every variable must be declared. If avariable is declared outside the braces of a function, it can be seen everywhere in the program. If it is declared inside the braces of a function, the variable can only be seen within that function. Variables come in several flavors including byte (8-bit, unsigned, 0 to 255), word (16-bit, unsigned, 0 to 65,536), int (16-bit, signed, -32,768 to 32,767), and long (32-bit, signed, -2,147,483,648 to 2,147,483,647). Use byte variables unless you need negative numbers or numbers larger than 255, then use int variables. Using larger sizes than needed fills up precious memory space.
  • 27. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 27 RAJESH KUMAR(14001003908) Variable declarations generally appear at the top of the program byte i; word k; int length; int width; Variable names can be any combination of letters and numbers but must start with a letter. Names reserved for programming instructions cannot be used for variable names and will give you an error message Symbols are used to redefine how something is named and can be handy for making the codemore readable. Symbols are defined with the "#define" command and lines defining symbols should go at the beginning of your program. Here's an example without symbols for the case where an LED is connected to pin 2. void setup() { pinMode(2,OUTPUT); } void loop() { digitalWrite(2,HIGH); // turn LED on delay(1000); digitalWrite(2,LOW); // turn LED off delay(1000); } Here is the same using a symbol to define "LED" #define LED 2 // define the LED pin void setup() { pinMode(LED,OUTPUT); } void loop() { digitalWrite(LED,HIGH); delay(500); digitalWrite(LED,LOW); delay(500); } Note how the use of symbols reduces the need for comments. Symbols are extremely useful to define for devices connected to pins because if you have to change the pin that the device connects to, you only have to change the single symbol definition rather than going through the whole program looking for references to that pin. 7.3 Program Structure
  • 28. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 28 RAJESH KUMAR(14001003908) All Arduino programs have two functions, setup() and loop(). The instructions you place in the startup() function are executed once when the program begins and are used to initialize. Use it to set directions of pins or to initialize variables. The instructions placed in loop are executed repeatedly and form the main tasks of the program. Therefore every program has this structure void setup() { // commands to initialize go here } void loop() { // commands to run yourmachine go here } The absolute, bare-minimum, do-nothing program that you can compile and run is void setup(){} void loop() {} The program performs no function, but is useful for clearing out any old program. Note that the compiler does not care about line returns, which is why this program works if typed all on one line. 7.4 Math The Arduino can do standard mathematical operations. While floating point (e.g. 23.2) numbers are allowed if declared as floats, operations on floats are very slow so integer variables and integer math is recommended. If you have byte variables, no number, nor the result of any math operation can fall outside the range of 0 to 255. You can divide numbers, but the result will be truncated (not rounded) to the nearest integer. Thus in integer arithmetic, 17/3 = 5, and not 5.666 and not 6. Math operations are performed strictly in a left-to-right order. You can add parenthesis to group operations. The table below shows some of the valid math operators. Full details of their use can be found in the Arduino Language Reference. Symbol Description + addition - subtraction * multiplication / division % modulus (division remainder) << left bit shift >> right bit shift & bitwise AND | bitwise OR 8 The Simple Commands This section covers the small set of commands you need to make the Arduino do something useful. These commands appear in order of priority. You can make a great machine using only digital read, digital write and delay commands. Learning all the commands here will take you to the next level.
  • 29. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 29 RAJESH KUMAR(14001003908) If you need more, consult the Arduino language reference page at h http://arduino.cc/en/Reference/HomePage. pinMode This command, which goes in the setup() function, is used to set the direction of a digital I/O pin. Set the pin to OUTPUT if the pin is driving and LED, motor or other device. Set the pin to INPUT if the pin is reading a switch or other sensor. On power up or reset, all pins default to inputs. This example sets pin 2 to an output and pin 3 to an input. void setup() { pinMode(2,OUTPUT); pinMode(3,INPUT); } void loop() {} Serial.print The Serial.print command lets you see what's going on inside the Arduino from your computer. For example, you can see the result of a math operation to determine if you are getting the right number. Or, you can see the state of a digital input pin to see if the Arduino is a sensor or switch properly. When your interface circuits or program does not seem to be working, use the Serial.print command to shed a little light on the situation. For this command to show anything, you need to have the Arduino connected to the host computer with the USB cable. For the command to work, the command Serial.begin(9600) must be placed in the setup() function. After the program is uploaded, you must open the Serial Monitor window to see the response. There are two forms of the print command. Serial.print() prints on the same line while Serial.println() starts the print on a new line. Here is a brief program to check if your board is alive and connected to the PC void setup() { Serial.begin(9600); Serial.println("Hello World"); } void loop() {} Here is a program that loops in place, displaying the value of an I/O pin. This is useful for checking the state of sensors or switches and to see if the Arduino is reading the sensor properly. Try it out on your Arduino. After uploading the program, use a jumper wire to alternately connect pin 2 to +5V and to Gnd. void setup() { Serial.begin(9600); }
  • 30. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 30 RAJESH KUMAR(14001003908) void loop() { Serial.println(digitalRead(2)); delay(100); } If you wanted to see the states of pins 2 and 3 at the same time, you can chain a few print commands, noting that the last command is a println to start a new line. void setup() { Serial.begin(9600); } void loop() { Serial.print("pin 2 = "); Serial.print(digitalRead(2)); Serial.print(" pin 3 = "); Serial.println(digitalRead(3)); delay(100); } You may have noticed when trying this out that if you leave one of the pins disconnected, its state follows the other. This is because a pin left floating has an undefined value and will wander from high to low. So, use two jumper wires when trying out this example. Here's one that checks the value of a variable after an addition. Because the calculation is done just once, all the code is in the setup() function. The Serial.flush() inti,j,k; void setup() { Serial.begin(9600); i=21; j=20; k=i+j; Serial.flush(); Serial.print(k); } void loop() {} digitalWrite This command sets an I/O pin high (+5V) or low (0V) and is the workhorse for commanding the outside world of lights, motors, and anything else interfaced to your board. Use the pinMode() command in the setup() function to set the pin to an output. digitalWrite(2,HIGH); // sets pin 2 to +5 volts digitalWrite(2,LOW); // sets pin 2 to zero volts delay
  • 31. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 31 RAJESH KUMAR(14001003908) Delay pauses the program for a specified number of milliseconds. Since most interactions with the world involve timing, this is an essential instruction. The delay can be for 0 to 4,294,967,295 msec. This code snippet turn on pin 2 for 1 second. digitalWrite(2,HIGH); // pin 2 high (LED on) delay(1000); // wait 500 ms digitalWrite(2,LOW); // pin 2 low (LED off) if This is the basic conditional branch instruction that allows your program to do two different things depending on whether a specified condition is true or false. Here is one way to have your program wait in place until a switch is closed. Connect a switch to pin 3 as shown in Section 3. Upload this program then try closing the switch void setup() { Serial.begin(9600); } void loop() { if (digitalRead(3)== LOW) { Serial.println("Somebody closedthe switch!"); } } The if line reads the state of pin 3. If it is high, which it will be for this circuit when the switch is open, the code jumps over the Serial.println command and will repeat the loop. When you close the switch, 0V is applied to pin 3 and its state is now LOW. This means the if condition is true so this time around the code between the braces is executed and the message is printed The syntax for the if statement is if (condition) { //commands } If the condition is true, the program will execute the commands between the braces. If the condition is not true, the program will skip to the statement following the braces. The condition compares one thing to another. In the example above, the state of pin 1 was compared to LOW with ==, the equality condition. Other conditional operators are != (not equal to), > (greater than), < (less than), >= (greater than or equal to), and <= (less than or equal to). You can have the program branch depending on the value of a variable. For example, this program will print the value of i only when it is less than 30. int i; void setup() { Serial.begin(9600);
  • 32. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 32 RAJESH KUMAR(14001003908) i=0; } void loop() { i=i+1; if (i<30) { Serial.println(i); } }
  • 33. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 33 RAJESH KUMAR(14001003908) FOR The for statement is used to create program loops. Loops are useful when you want a chunk of code to be repeated a specified number of times. A variable is used to count the number of times the code is repeated. Here is an example that flashes an LED attached to pin 2 five times int i; void setup() { pinMode(2,OUTPUT); for (i=0;i<5;i++) { digitalWrite(2,HIGH); delay(250); digitalWrite(2,LOW); delay(250); } } void loop() {} The variable i is the loop counter. The for() statement has three parts: the initialization, the check and the increment. Variable i is initialized to zero. The check is to see if i is less then 5. If so, the commands between the braces are executed. If not, those commands are skipped. After the check, i is incremented by 1 (the i++ command). While the for statement could read for (i=1;i==5;i++), it is convention to start the counter variable at zero and use less than for the condition check. You can have the loop counter increment by two or by three or by any increment you want. For example, try this code fragment. int i; void setup() { Serial.begin(9600); for (i=0;i<15;i=i+3) { Serial.println(i); } } void loop() {} Loops can be nested within loops. This example will flash the LED 10 times because for each of the five outer loops counted by i, the program goes twice through the inner loop counted by j. inti,j; void setup() { pinMode(2,OUTPUT); for (i=0;i<5;i++) { for(j=0;j<2;j++) { digitalWrite(2,HIGH); delay(250); digitalWrite(2,LOW); delay(250); } } }
  • 34. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 34 RAJESH KUMAR(14001003908) void loop() {} while The while statement is another branch command that does continuous looping. If the condition following the while is true, the commands within the braces are executed continuously. Here is an example that continuously reads a switch on pin 3, and then when the switch is pressed, the condition is no longer true so the code escapes the while command and prints. void setup() { Serial.begin(9600); while(digitalRead(3) == HIGH) { } Serial.println("Switch was pressed"); } void loop() {} goto The goto statement commands the computer to jump immediately to another part of the program marked by an address label. The goto should be used sparingly because it makes the program hard to follow, but is handy for breaking out of nested loops or other complex control structures. Here is an example void setup() { Serial.begin(9600); while(true){ if (digitalRead(3) == LOW) { gotowrapup; } } wrapup: Serial.println("Switch was pressed"); } void loop() {} The while(true) statement runs continuously, checking the state of pin 3 each time. When pin 3 is low (pressed), the if condition is true and the goto statement executed, breaking out of the while loop. functions Functions are a powerful programming feature that are used when you want to set up an action that can be called from several places in the program. For example, let's say you wanted an LED connected to pin 2 to flash 3 times as an alert, but that you needed to execute the alert at three different places in the program. One solution would be to type in the flashing code at the three separate program locations. This uses up precious code space and also means that if you change the flash function, for example changing from 3 flashes to 4, you have to change the code in three places. A better solution is to write the flash function as a subroutine and to call it from the main body of the code. Here is an example int i; void setup()
  • 35. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 35 RAJESH KUMAR(14001003908) { pinMode(2,OUTPUT); Serial.begin(9600); Serial.println("Welcome to my program"); delay(1000); flasher(); // call flasher function Serial.println("I hope you like flashing"); delay(1000); flasher(); // call flasher again Serial.println("Here it is one more time"); delay(1000); flasher(); } void loop() {} void flasher() { for(i=0;i<3;i++) { digitalWrite(2,HIGH); delay(250); digitalWrite(2,LOW); delay(250); } } Several things should be noted here. The function flasher() is defined outside the setup() and loop() functions. When the main program encounters a flasher(); command, the program immediately jumps to the function and starts executing the code there. When it reaches the end of the function, the program returns to execute the command that immediately follows the flasher(); command. It is this feature that allows you to call the subroutine from several different places in the code. Parameters can be passed to and returned from functions, but that feature is for the advanced programmer. This concludes the section on basic program commands. You can write some awesome programs using just what was described here. There is much more that the Arduino can do and you are urged to read through the complete Arduino Language Reference page on-line 9 Coding Style Style refers to your own particular style for creating code and includes layout, conventions for using case, headers, and use of comments. All code must follow correct syntax, but there are many different styles you can use. Here are some suggestions: Start every program with a comment header that has the program name and perhaps a brief description of what the program does. Use indentation to line things up. Function name and braces are in column one, then use indents in multiples of 2 or 4 to mark code chunks, things inside loops and so on.
  • 36. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 36 RAJESH KUMAR(14001003908) Mark major sections or functions with a comment header line or two Have just the right number of comments, not too few and not too many. Assume the reader knows the programming language so have the comment be instructive. Here is an example of an instructive comment digitalWrite(4,HIGH) // turn on motor and here is a useless comment digitalWrite(4,HIGH) // set pin 4 HIGH You need not comment every line. In fact, commenting every line is generally bad practice. Add the comments when you create the code. If you tell yourself, "Oh, I'll add the comments when the code is finished", you will never do it. 10 Common Coding Errors Forgetting the semi-colon at the end of a statement Misspelling a command Omitting opening or closing braces
  • 37. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 37 RAJESH KUMAR(14001003908) How to find a position using GPS Orbiting the Earth are a number of Global Positioning System (GPS) satellites that can help determine your location on the planet. The concepts behind GPS positioning are very simple, but the application and implementation require amazing precision. GPS positioning works on two basic mathematical concepts. The first is called trilateration, which literally means positioning from three distances. The second concept is the relationship between distance traveled, rate (speed) of travel and amount of time spent traveling, or: Distance = Rate × Time The first concept, trilateration, is the focus of this activity. It centers around finding your position on the Earth by knowing the location of orbiting GPS satellites and the distance from those satellites to your location on the planet. However, there is no way to actually take a yardstick, tape measure, etc., and measure the distance from your location up to the satellites. So how can we use trilateration if we can't physically measure the distances? The answer lies in the second concept, relating distance, rate and time. The trick lies in the fact that GPS satellites are always sending out radio signals. In GPS positioning the rate is how fast the radio signal travels, which is equal to the speed of light (299,792,458 meters per second). Time is determined by how long it takes for a signal to travel from the GPS satellite to a GPS receiver on earth. With a known rate and a known time we can solve for the distance between satellite and receiver. Once we have the distance from at least 3 satellites, we can determine a 3 dimensional position on the surface of the earth. To teach you the basic concept of how GPS works, we will conduct an exercise to demonstrate trilateration. Trilateration is determining a position by knowing your distance from at least 3 known points. In GPS those known points are the satellites themselves. It is important to understand that this is a simple exercise in trilateration itself, and not an exact representation of how the process of GPS positioning works. We will be using a flat map and string, when in reality the earth is round and the satellites are in the sky, not on the ground. Also, one often can "see" many more than three GPS satellites in the sky at any time, so we are going to use four points instead of just 3, to exemplify some of the issues surrounding extra satellites. This exercise should give you and your students a good example of how GPS positioning works.
  • 38. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 38 RAJESH KUMAR(14001003908) This exercise is best done in groups of 3-4 people. Materials:  4 pieces of different color string (pre-cut)  Pencil or pen for marking the potential position of each signal  A large map (provided) Overview: In this exercise we are going to simulate GPS positioning using 4 satellites. You are going to pretend to be a GPS receiver somewhere on the map and will figure out where you are based on the 4 "signals" you receive. But for you (and for a GPS receiver) all those signals tell you is where the satellite was when it sent the signal, and how long it took for the signal to get from the satellite to you. In other words, you have the time elapsed from when the signal left the satellite to when it arrived at your location. You also know where the satellite was when it sent you the signal, since the positions of the satellites are shown on the map. You need to determine where you could be, based on that amount of time elapsed. Since we know the speed of the signal (R), and the elapsed time (T), we can figure out the distance (D). Distance = Rate × Time In true 3 dimensional GPS positioning, the signals from the satellites are represented by spheres. For this exercise, we are going to use circles since we are on a 2 dimensional map. So, as a GPS receiver you need to figure out just how far from each satellite you are. Keep in mind you could be anywhere! Directions: 1. Lay the provided map flat on your table and tape down all four corners. 2. Get 4 pieces of string, about 1/2 meter long,1 each of 4 colors. (We need to know how far away you are from 4 different points which are represented by the length of 4 different colors of string.) 3. Determine exactly how long each string is supposed to be by solving our D = R × T equation. The speed of light (R) is 299,792,458 m / s. Use the amount of time that it takes for each signal to get from the satellites to the receiver provided below to solve for D. Time for the Signals to reach the GPS receiver: 1. A = .00505783 seconds 2. B = .00423206 seconds
  • 39. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 39 RAJESH KUMAR(14001003908) 3. C = .00836090 seconds 4. D = .00712225 seconds Once you have figured out the distance each of our satellites is from our position on the ground, proceed to step 4 where you will calculate the scaled distances. SATELLITE A STRING COLOR SATELLITE B STRING COLOR SATELLITE C STRING COLOR SATELLITE D STRING COLOR TIME (IN SECONDS) .00505783 .00423206 .00836090 .00712225 DISTANCE (M) 1516299.2878 4614 1268739.6698 0348 2506534.7620 922 2135196.8339 905 SCALED DISTANCE (M) .07124 0.05961 0.11776 0.10032 SCALED DISTANCE (CM) 7.12 5.96 11.76 10.03 4. Now you know how long each string is supposed to be but the distances are a lot longer than the strings we cut. You need to account for the scale factor of the map. This map has a scale factor of 1:21,283,839. This means that 1 meter on the map equals 21,283,839 meters on the earth's surface. Using a simple proportion, figure out what the scaled version of your string should be. Convert the units to centimeters for easier measuring. [Note: In this shorter exercise, all the math has been done for you.] The single most important thing in this exercise is to make your string lengths as accurate as possible because you are going to be using your string to draw a circle showing all the possible places where the satellite signal could have gone in the given amount of time. In some cases, the circle may not fit on the paper and may just show up as an arc. You and your team should come up with a way to make those circles and arcs as precise as possible. Think about that for a minute before you cut your strings. Is there some inventive technique you can come up with to make your circles and arcs more precise? Cut your strings and get ready for the next step. 5. Now you have four different strings, representing the distances from 4 satellites. Using whatever technique you came up with, go ahead and draw your circles and arcs using the satellite as the center point. This arc is a representation of where the satellite signal would be given the elapsed time. Remember, our position could be anywhere along that arc since that signal is traveling in all directions. Repeat this for String B and Dot B. You should see that there are at least two places where you could be! What were those two places?
  • 40. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 40 RAJESH KUMAR(14001003908) Complete the process for Strings C and D. 6. Now you have a series of arcs and circles that overlap in a few places. But there should only be one place on the map where they all intersect each other. Where are you? Why didn't your lines all cross in exactly the same spot? Take a look at how close you came. What would you say your level of accuracy was? How does your accuracy compare to consumer grade GPS receivers? How does your accuracy compare to Survey grade GPS receivers? Wrap Up: Of course GPS positioning is not quite that simple. In order to know the distance from the satellite to the receiver you need to know exactly where the satellite was when it sent its signal. That positional information is included in the signal that travels from the satellites. Also, the rate is not exactly the speed of light (it's really close though), as there are a variety of things that can cause delays, such as atmospheric conditions. There is also the problem of multi-path (signals bouncing off the ground or off of buildings), dilution of precision (really bad distribution of satellites in the sky) and other potential sources of error that was covered in the lecture. But for the most part, it really is that simple.
  • 41. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 41 RAJESH KUMAR(14001003908) Project Based on Arduino-uno microcontroller Tracking of vehicle is a process in which we track the vehicle location in form of Latitude and Longitude (GPS coordinates). GPS Coordinates are the value of a location. This system is very efficient for outdoor application purpose. This kind of Vehicle Tracking System Project is widely in tracking Cabs/Taxis, stolen vehicles, school/colleges buses etc. Components Required:  Arduino-uno microcontroller  GSM Module  GPS Module  16x2 LCD  Power Supply  Connecting Wires  10 K POT GPS Module and Its Working: GPS stands for Global Positioning System and used to detect the Latitude and Longitude of any location on the Earth, with exact UTC time (Universal Time Coordinated). GPS module is the main component in our vehicle tracking system project. This device receives the coordinates from the satellite for each and every second, with time and date. Orbiting the Earth are a number of Global Positioning System (GPS) satellites that can help determine your location on the planet. The concepts behind GPS positioning are very simple, but the application and implementation require amazing precision. GPS positioning works on two basic mathematical concepts. The first is called trilateration, which literally means positioning from three distances. The second concept is the relationship between distance traveled, rate (speed) of travel and amount of time spent traveling, or: Distance = Rate × Time The first concept, trilateration, is the focus of this activity. It centers around finding your position on the Earth by knowing the location of orbiting GPS satellites and the distance from those satellites to your location on the planet. However, there is no way to actually take a yardstick, tape measure, etc., and measure the distance from your location up to the satellites. So how can we use trilateration if we can't physically measure the distances? The answer lies in the second concept, relating distance, rate and time. The trick lies in the fact that GPS satellites are always sending out radio signals.
  • 42. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 42 RAJESH KUMAR(14001003908) In GPS positioning the rate is how fast the radio signal travels, which is equal to the speed of light (299,792,458 meters per second). Time is determined by how long it takes for a signal to travel from the GPS satellite to a GPS receiver on earth. GPS module sends the data related to tracking position in real time, and it sends so many data in NMEA format (see the screenshot below). NMEA format consist several sentences, in which we only need one sentence. This sentence starts from $GPGGA and contains the coordinates, time and other useful information. This GPGGA is referred to Global Positioning System Fix Data. Know more about Reading GPS data and its strings here. We can extract coordinate from $GPGGA string by counting the commas in the string. Suppose you find $GPGGA string and stores it in an array, then Latitude can be found after two commas and Longitude can be found after four commas. Now these latitude and longitude can be put in other arrays.
  • 43. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 43 RAJESH KUMAR(14001003908) Below is the $GPGGA String, along with its description: $GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,,*47 $GPGGA,HHMMSS.SSS,latitude,N,longitude,E,FQ,NOS,HDP,altitude,M,height,M,,checksum data
  • 44. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 44 RAJESH KUMAR(14001003908) Identifier Description $GPGGA Global Positioning system fix data HHMMSS.SSS Time in hour minute seconds and milliseconds format. Latitude Latitude (Coordinate) N Direction N=North, S=South Longitude Longitude(Coordinate) E Direction E= East, W=West FQ Fix Quality Data NOS No. of Satellites being Used HPD Horizontal Dilution of Precision Altitude Altitude from sea level M Meter Height Height Checksum Checksum Data Circuit Explanation: Circuit Connections of this Vehicle Tracking System Project is simple. Here Tx pin of GPS module is directly connected to digital pin number 10 of Arduino. By using Software Serial Library here, we have allowed serial communication on pin 10 and 11, and made them Rx and Tx respectively and left the Rx pin of GPS Module open. By default Pin 0 and 1 of Arduino are used for serial communication but by using SoftwareSerial library, we can allow serial communication on other digital pins of the Arduino. 12 Volt supply is used to power the GPS Module.
  • 45. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 45 RAJESH KUMAR(14001003908) GSM module’s Tx and Rx pins of are directly connected to pin Rx and Tx of Arduino. GSM module is also powered by 12v supply. An optional LCD’s data pins D4, D5, D6 and D7 are connected to pin number 5, 4, 3, and 2 of Arduino. Command pin RS and EN of LCD are connected with pin number 2 and 3 of Arduino and RW pin is directly connected with ground. A Potentiometer is also used for setting contrast or brightness of LCD. Working Explanation: In this project, Arduino is used for controlling whole the process with a GPS Receiver and GSM module. GPS Receiver is used for detecting coordinates of the vehicle, GSM module is used for sending the coordinates to user by SMS. And an optional 16x2 LCD is also used for displaying status messages or
  • 46. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 46 RAJESH KUMAR(14001003908) coordinates. We have used GPS Module SKG13BL and GSM Module SIM900A. When we ready with our hardware after programming, we can install it in our vehicle and power it up. Then we just need to send a SMS, “Track Vehicle”, to the system that is placed in our vehicle. We can also use some prefix (#) or suffix (*) like #Track Vehicle*, to properly identify the starting and ending of the string, like we did in these projects: GSM Based Home Automation and Wireless Notice Board Sent message is received by GSM module which is connected to the system and sends message data to Arduino. Arduino reads it and extract main message from the whole message. And then compare it with predefined message in Arduino. If any match occurs then Arduino reads coordinates by extracting $GPGGA String from GPS module data (GPS working explained above) and send it to user by using GSM module. This message contains the coordinates of vehicle location. Programming Explanation: In programming part first we include libraries and define pins for LCD & software serial communication. Also define some variable with arrays for storing data. Software Serial Library is used to allow serial communication on pin 10 and 11.
  • 47. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 47 RAJESH KUMAR(14001003908) #include<LiquidCrystal.h> LiquidCrystallcd(7, 6, 5, 4, 3, 2); #include <SoftwareSerial.h> SoftwareSerialgps(10,11); // RX, TX charstr[70]; String gpsString=""; ... .... .... .... Here array str[70] is used for storing received message from GSM module and gpsString is used for storing GPS string. char *test=”$GPGGA” is used to compare the right string that we need for coordinates. After it we have initialized serial communication, LCD, GSM & GPS module in setup function and showed a welcome message on LCD. void setup() { lcd.begin(16,2); Serial.begin(9600); gps.begin(9600); lcd.print("Vehicle Tracking"); lcd.setCursor(0,1); ... .... .... .... In loop function we receive message and GPS string. void loop()
  • 48. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 48 RAJESH KUMAR(14001003908) { serialEvent(); if(temp) { get_gps(); tracking(); } } Functions void init_sms and void send_sms() are used to initialising and sending message. Use proper 10 digit Cell phone no, in init_sms function. Function void get_gps() has been used to extract the coordinates from the received string. Function void gpsEvent() is used for receiving GPS data into the Arduino. Function void serialEvent() is used for receiving message from GSM and comparing the received message with predefined message (Track Vehicle). voidserialEvent() { while(Serial.available()) { if(Serial.find("Track Vehicle")) { temp=1; break; } ... .... .... ...
  • 49. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 49 RAJESH KUMAR(14001003908) Initialization function ‘gsm_init()’ is used for initialising and configuring the GSM Module, where firstly, GSM module is checked whether it is connected or not by sending ‘AT’ command to GSM module. If response OK is received, means it is ready. System keeps checking for the module until it becomes ready or until ‘OK’ is received. Then ECHO is turned off by sending the ATE0 command, otherwise GSM module will echo all the commands. Then finally Network availability is checked through the ‘AT+CPIN?’ command, if inserted card is SIM card and PIN is present, it gives the response +CPIN: READY. This is also check repeatedly until the network is found. This can be clearly understood by the Video below. Check all the above functions in CodeSection below. Code: #include<LiquidCrystal.h> LiquidCrystallcd(7, 6, 5, 4, 3, 2); #include <SoftwareSerial.h> SoftwareSerialgps(10,11); // RX, TX //String str=""; char str[70]; String gpsString=""; char *test="$GPGGA"; String latitude="No Range "; String longitude="No Range "; int temp=0,i; booleangps_status=0; void setup() { lcd.begin(16,2); Serial.begin(9600); gps.begin(9600); lcd.print("Vehicle Tracking"); lcd.setCursor(0,1); lcd.print(" System "); delay(2000); gsm_init(); lcd.clear(); Serial.println("AT+CNMI=2,2,0,0,0");
  • 50. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 50 RAJESH KUMAR(14001003908) lcd.print("GPS Initializing"); lcd.setCursor(0,1); lcd.print(" No GPS Range "); get_gps(); delay(2000); lcd.clear(); lcd.print("GPS Range Found"); lcd.setCursor(0,1); lcd.print("GPS is Ready"); delay(2000); lcd.clear(); lcd.print("System Ready"); temp=0; } void loop() { serialEvent(); if(temp) { get_gps(); tracking(); } } void serialEvent() { while(Serial.available()) { if(Serial.find("Track Vehicle")) { temp=1; break; } else temp=0; } } void gpsEvent() { gpsString="";
  • 51. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 51 RAJESH KUMAR(14001003908) while(1) { while (gps.available()>0) //checking serial data from GPS { char inChar = (char)gps.read(); gpsString+= inChar; //store data from GPS into gpsString i++; if (i < 7) { if(gpsString[i-1] != test[i-1]) //checking for $GPGGAsentence { i=0; gpsString=""; } } if(inChar=='r') { if(i>65) { gps_status=1; break; } else { i=0; } } } if(gps_status) break; } } void gsm_init() { lcd.clear(); lcd.print("Finding Module.."); booleanat_flag=1; while(at_flag) {
  • 52. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 52 RAJESH KUMAR(14001003908) Serial.println("AT"); while(Serial.available()>0) { if(Serial.find("OK")) at_flag=0; } delay(1000); } lcd.clear(); lcd.print("Module Connected.."); delay(1000); lcd.clear(); lcd.print("Disabling ECHO"); booleanecho_flag=1; while(echo_flag) { Serial.println("ATE0"); while(Serial.available()>0) { if(Serial.find("OK")) echo_flag=0; } delay(1000); } lcd.clear(); lcd.print("Echo OFF"); delay(1000); lcd.clear(); lcd.print("Finding Network.."); booleannet_flag=1; while(net_flag) { Serial.println("AT+CPIN?"); while(Serial.available()>0) { if(Serial.find("+CPIN: READY")) net_flag=0; }
  • 53. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 53 RAJESH KUMAR(14001003908) delay(1000); } lcd.clear(); lcd.print("Network Found.."); delay(1000); lcd.clear(); } void get_gps() { gps_status=0; int x=0; while(gps_status==0) { gpsEvent(); intstr_lenth=i; latitude=""; longitude=""; int comma=0; while(x<str_lenth) { if(gpsString[x]==',') comma++; if(comma==2) //extract latitude from string latitude+=gpsString[x+1]; else if(comma==4) //extract longitude from string longitude+=gpsString[x+1]; x++; } int l1=latitude.length(); latitude[l1-1]=' '; l1=longitude.length(); longitude[l1-1]=' '; lcd.clear(); lcd.print("Lat:"); lcd.print(latitude); lcd.setCursor(0,1); lcd.print("Long:"); lcd.print(longitude); i=0;x=0;
  • 54. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 54 RAJESH KUMAR(14001003908) str_lenth=0; delay(2000); } } void init_sms() { Serial.println("AT+CMGF=1"); delay(400); Serial.println("AT+CMGS="+91**********""); // use your 10 digit cell no. here delay(400); } voidsend_data(String message) { Serial.println(message); delay(200); } voidsend_sms() { Serial.write(26); } void lcd_status() { lcd.clear(); lcd.print("Message Sent"); delay(2000); lcd.clear(); lcd.print("System Ready"); return; } void tracking() { init_sms(); send_data("Vehicle Tracking Alert:"); send_data("YourVehicle Current Location is:"); Serial.print("Latitude:"); send_data(latitude); Serial.print("Longitude:");
  • 55. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 55 RAJESH KUMAR(14001003908) send_data(longitude); send_data("Please take some action soon..nThankyou"); send_sms(); delay(2000); lcd_status();
  • 56. DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 56 RAJESH KUMAR(14001003908) REFERENCES  https://www.arduino.cc/en/Main/ArduinoBoardUno  https://datasheets.maximintegrated.com/en/ds/MAX7400-MAX7407.pdf  https://reference.digilentinc.com/reference/instrumentation/analog- discovery-2/reference-manual  http://www.gps.gov/students/