76
DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT 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. Rajesh Kumar 1 RAJESH KUMAR(14001003908)

FINAL CORRECT Report

Embed Size (px)

Citation preview

Page 1: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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.

Rajesh Kumar

ACKNOWLEDGEMENT

1 RAJESH KUMAR(14001003908)

Page 2: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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

2 RAJESH KUMAR(14001003908)

Page 3: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

IntroductionCSIO 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

3 RAJESH KUMAR(14001003908)

Page 4: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

Live Projects

Portable Reading Machine for Blind

Laboratory Name CSIR-Central Scientific Instruments Organisation,Chandigarh

Brief Profile of Portable Reading Machine (PRM) is an assistiveTechnology/Produc device for visually impaired that helps them readingt printed documents, e-books, or recorded speech. It is

based on the principle of contact scanning of a printeddocument and converting it into speech.

The device is stand-alone, portable, completelywireless and uses open source hardware andsoftware. The device can analyze a multi-columndocument and provide seamless reading. It is capableof page, sentence and word level navigation whilereading.

Returns/Benefits It helps visually impaired to read print media as wellas electronic files such as eBooks.

It has support for speaking Hindi, English and isfurther compatible for other Indian languages such asBengali, Kannada, Malayalam, Marathi, Punjabi,Tamil, Telugu, etc. The device may also be readilyconfigured for major foreign languages.

4 RAJESH KUMAR(14001003908)

Page 5: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

Validation Level Prototype of the Reading Machine has been tested atInstitute for the Blind Sec 26, Chandigarh and Saksham,New Delhi.

IPR Status [also Copyright under processindicating thestatus of the patent(if any)End product price Rs. 10,000/ (approx.)(if not available,estimated price)

Technology/Produc BEL, Panchkula under Corporate Social Responsibilityt Collaborator

Relevance of Available technologies are very expensive and does notTechnology in cater multi-functionality as available in this developedpresent 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 SARAdeveloped ReadEasy+

5 RAJESH KUMAR(14001003908)

Page 6: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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. 

6 RAJESH KUMAR(14001003908)

Page 7: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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 filterThe 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.

ApplicationsADC Anti-Aliasing Speech Processing

Post-DAC Filtering Air-Bag Electronics

CT2 Base Stations

7 RAJESH KUMAR(14001003908)

Anti-Aliasing Filter ADC converter Microcontroller Real time

Plotting of Data

Page 8: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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.

8 RAJESH KUMAR(14001003908)

Page 9: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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.

9 RAJESH KUMAR(14001003908)

Page 10: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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.

10 RAJESH KUMAR(14001003908)

Page 11: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

The Arduino-Uno BoardThe 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 Need for 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 SoftwareFollow 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 BatteryFor 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.

11 RAJESH KUMAR(14001003908)

Page 12: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

CONTENTS

Introduction

Real time or Recently completed Projects.

Automatic Target Recognization (DRDO Project)

Anti-Alising Filter(Max7400 IC) A/D converter Microcontroller(Arduino-uno) Real time 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 system using Ardiuno-uno development board Introduction Circuit Diagram Working Operation Programming Structure

References

12 RAJESH KUMAR(14001003908)

Page 13: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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

13 RAJESH KUMAR(14001003908)

Page 14: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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!

14 RAJESH KUMAR(14001003908)

Page 15: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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

15 RAJESH KUMAR(14001003908)

Page 16: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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 LEDLight 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 shortpieces 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 busson 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

16 RAJESH KUMAR(14001003908)

Page 17: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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

17 RAJESH KUMAR(14001003908)

PIN 2 330

Page 18: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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 msdigitalWrite(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 switchThe 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.

18 RAJESH KUMAR(14001003908)

Page 19: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

+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!");

19 RAJESH KUMAR(14001003908)

Page 20: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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 MotorThe 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.

20 RAJESH KUMAR(14001003908)

Page 21: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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 HardwareThe power of the Arduino is not its ability to crunch code, but rather its ability to interact with the

21 RAJESH KUMAR(14001003908)

Page 22: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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

+5V0V

Board pinset to +5V/0V

+12 V

Interfaceelectronics use

signal voltages and1K

power supply to PIN 4TIP120

switch motoron/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.

22 RAJESH KUMAR(14001003908)

Page 23: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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 ConceptsThis 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

23 RAJESH KUMAR(14001003908)

Page 24: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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

24 RAJESH KUMAR(14001003908)

Page 25: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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 Decimal00000011 300000111 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 LanguageThe 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

25 RAJESH KUMAR(14001003908)

Page 26: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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.

26 RAJESH KUMAR(14001003908)

Page 27: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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

27 RAJESH KUMAR(14001003908)

Page 28: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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 your machine 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 CommandsThis 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.

28 RAJESH KUMAR(14001003908)

Page 29: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

If you need more, consult the Arduino language reference page at hhttp://arduino.cc/en/Reference/HomePage.

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

29 RAJESH KUMAR(14001003908)

Page 30: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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() {}

digitalWriteThis 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 voltsdigitalWrite(2,LOW); // sets pin 2 to zero volts

delay30 RAJESH KUMAR(14001003908)

Page 31: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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 msdigitalWrite(2,LOW); // pin 2 low (LED off)

ifThis 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 closed the 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 printedThe 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);

31 RAJESH KUMAR(14001003908)

Page 32: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

i=0;}

void loop(){

i=i+1;if (i<30) { Serial.println(i);}

}

32 RAJESH KUMAR(14001003908)

Page 33: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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

}}

}

33 RAJESH KUMAR(14001003908)

Page 34: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

void loop() {}

whileThe 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() {}

gotoThe 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.

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

34 RAJESH KUMAR(14001003908)

Page 35: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

{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 StyleStyle 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.

35 RAJESH KUMAR(14001003908)

Page 36: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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 motorand here is a useless comment

digitalWrite(4,HIGH) // set pin 4 HIGHYou 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

36 RAJESH KUMAR(14001003908)

Page 37: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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.

37 RAJESH KUMAR(14001003908)

Page 38: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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 seconds2. B = .00423206 seconds

38 RAJESH KUMAR(14001003908)

Page 39: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

3. C = .00836090 seconds4. 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 ASTRING COLOR

SATELLITE BSTRING COLOR

SATELLITE CSTRING COLOR

SATELLITE DSTRING COLOR

TIME (IN SECONDS)

.00505783 .00423206 .00836090 .00712225

DISTANCE (M) 1516299.28784614

1268739.66980348

2506534.7620922

2135196.8339905

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?

39 RAJESH KUMAR(14001003908)

Page 40: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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.

40 RAJESH KUMAR(14001003908)

Page 41: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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.

41 RAJESH KUMAR(14001003908)

Page 42: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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.

42 RAJESH KUMAR(14001003908)

Page 43: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

 

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

 

43 RAJESH KUMAR(14001003908)

Page 44: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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.

44 RAJESH KUMAR(14001003908)

Page 45: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

 

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

45 RAJESH KUMAR(14001003908)

Page 46: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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.

46 RAJESH KUMAR(14001003908)

Page 47: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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

47 RAJESH KUMAR(14001003908)

Page 48: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

{

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;

}

... ....

.... ...

48 RAJESH KUMAR(14001003908)

Page 49: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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 Code Section 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");

49 RAJESH KUMAR(14001003908)

Page 50: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

  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="";

50 RAJESH KUMAR(14001003908)

Page 51: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

  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 $GPGGA sentence      {        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)  {

51 RAJESH KUMAR(14001003908)

Page 52: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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

52 RAJESH KUMAR(14001003908)

Page 53: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

    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;

53 RAJESH KUMAR(14001003908)

Page 54: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

    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("Your Vehicle Current Location is:");    Serial.print("Latitude:");    send_data(latitude);    Serial.print("Longitude:");

54 RAJESH KUMAR(14001003908)

Page 55: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

    send_data(longitude);    send_data("Please take some action soon..\nThankyou");    send_sms();    delay(2000);    lcd_status();

55 RAJESH KUMAR(14001003908)

Page 56: FINAL CORRECT Report

DCRUST MURTHAL UNIVERSITY INDUSTRIAL TRAINING REPORT

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/

56 RAJESH KUMAR(14001003908)