Arduino Tutorial
Arduino Tutorial
Arduino is a project, open-source hardware, and software platform used to design and build
electronic devices. It designs and manufactures microcontroller kits and single-board interfaces
for building electronics projects.
The Arduino boards were initially created to help the students with the non-technical
background.
The Arduino board consists of sets of analog and digital I/O (Input / Output) pins, which are
further interfaced to breadboard, expansion boards, and other circuits. Such boards feature the
model, Universal Serial Bus (USB), and serial communication interfaces, which are used for
loading programs from the computers.
It also provides an IDE (Integrated Development Environment) project, which is based on the
Processing Language to upload the code to the physical board.
The projects are authorized under the GPL and LGPL. The GPL is named as GNU General Public
License. The licensed LGPL is named as GNU Lesser General Public License. It allows the use
of Arduino boards, it's software distribution, and can be manufactured by anyone.
o Finger button
o Button for motor activation
o Light as a sensors
o LED button
o Designing
o The Building of electronic devices
What is Arduino?
Arduino is a software as well as hardware platform that helps in making electronic projects. It is
an open source platform and has a variety of controllers and microprocessors. There are
various types of Arduino boards used for various purposes.
The Arduino is a single circuit board, which consists of different interfaces or parts. The board
consists of the set of digital and analog pins that are used to connect various devices and
components, which we want to use for the functioning of the electronic devices.
The analog pins in Arduino are mostly useful for fine-grained control. The pins in the Arduino
board are arranged in a specific pattern. The other devices on the Arduino board are USB port,
small components (voltage regulator or oscillator), microcontroller, power connector, etc.
Features
The features of Arduino are listed below:
o Arduino programming is a simplified version of C++, which makes the learning process
easy.
o The Arduino IDE is used to control the functions of boards. It further sends the set of
specifications to the microcontroller.
o Arduino does not need an extra board or piece to load new code.
o Arduino can read analog and digital input signals.
o The hardware and software platform is easy to use and implement.
History
The project began in the Interaction Design Institute in Ivrea, Italy. Under the supervision of
Casey Reas and Massimo Banzi, the Hernando Bar in 2003 created the Wiring (a development
platform). It was considered as the master thesis project at IDII. The Wiring platform includes
the PCB (Printed Circuit Board). The PCB is operated with the ATmega168 Microcontroller.
The ATmega168 Microcontroller was an IDE. It was based on the library and processing
functions, which are used to easily program the microcontroller.
In 2005, Massimo Banzi, David Cuartielles, David Mellis, and another IDII student supported the
ATmega168 to the Wiring platform. They further named the project as Arduino.
The project of Arduino was started in 2005 for students in Ivrea, Italy. It aimed to provide an
easy and low-cost method for hobbyists and professionals to interact with the environment
using the actuators and the sensors. The beginner devices were simple motion detectors,
robots, and thermostats.
In mid-2011, the estimated production of Arduino commercially was 300,000. In 2013, the
Arduino boards in use were about 700,000.
Around April 2017, Massimo Banzi introduced the foundation of Arduino as the "new beginning
for Arduino". In July 2017, Musto continued to pull many Open Source licenses and the code
from the websites of the Arduino. In October 2017, Arduino introduced its collaboration with the
ARM Holdings. The Arduino continues to work with architectures and technology vendors.
Microcontroller
The most essential part of the Arduino is the Microcontroller, which is shown below:
o Microcontroller is small and low power computer. Most of the microcontrollers have a
RAM (Random Access Memory), CPU (Central Processing Unit), and a memory storage
like other computer systems.
o It has very small memory of 2KB (two Kilobytes). Due to less memory, some
microcontrollers are capable of running only one program at a time.
o It is a single chip that includes memory, Input/Output (I/O) peripherals, and a processor.
o The GPIO (General Purpose Input Output) pins present on the chip help us to control
other electronics or circuitry from the program.
o Microcontroller present in Microwave Oven accepts the user input and controls the
magnet run that generate microwave rays to cook the food and displays the output timer.
o Modern cars also contain dozens of microcontrollers working in tandem (one after
another) to control functions like lighting, radio interface, etc.
Projects
Let's consider a simple project of LED blink.
We need software to install our sketch or code to the Arduino board. The LED will blink after the
successful uploading of code. The software is called as Arduino IDE (Integrated Development
Environment).
There are various projects created with the help of the Arduino. Some of the projects are listed
below:
Some projects require a list of components. So, for easy convenience and hands-on projects,
the Arduino kits are available easily in market.
Arduino Kits
We can easily start with our electronics projects using the complete kit. It also helps us to
create hand-on and engaging projects.
Arduino IDE
The IDE makes the traditional projects even easier and simpler. The USB cable is used to load
the program or sketch on the specific Arduino board.
The IDE application is suitable for Windows, Mac OS X, and Linux. It supports the programming
language C and C++. We need to connect the Genuino and Arduino board with the IDE to upload
the sketch written in the Arduino IDE software.
Many other companies including Sparkfun Electronics, also make their own boards that are
compatible with Arduino IDE.
Arduino Boards
There are variety of Arduino board used for different purposes. The board varies in I/O pins, size,
etc. The various components present on the Arduino boards are Microcontroller, Digital
Input/Output pins, USB Interface and Connector, Analog Pins, Reset Button, Power button, LED's,
Crystal Oscillator, and Voltage Regulator. Some components may differ depending on the type
of board.
o Arduino UNO
o Arduino Nano
o Arduino Mega
o Arduino Due
o Arduino Bluetooth
Shields
o Shields are defined as the hardware device that can be mounted over the board to
increase the capabilities of the projects.
o The shield is shown below:
o The shield together with Arduino can make the projects even smarter and simpler. For
example, Ethernet shields are used to connect the Arduino board to the Internet.
o The shields can be easily attached and detached from the Arduino board. It does not
require any complex wiring.
Prerequisite
The requirement to learn Arduino is the basic knowledge of C and C++ programming language.
A basic understanding of circuits, Microcontrollers, and Electronics is also essential.
Audience
The Arduino is intended for use by students, engineers, and hobbyists. The basic knowledge of
electronic components and programming is required before beginning with the Arduino
Tutorials.
Problem
We assure you that you will not find any problem with this Arduino Tutorial. But if there is any
mistake, please post the problem in the contact form.
Arduino Download
The Arduino software (IDE) is open-source software. We are required to write the code and
upload the code to the board to perform some task.
The Arduino IDE software can be used with any type of Arduino boards. The software is
available for various operating system such as, Windows, Linux, and Mac OS X.
The steps to download the Arduino software are listed below:
1. Go to the official website of Arduino (https://www.arduino.cc/) > Click on SOFTWARE < click
on DOWNLOADS, as shown below:
Or
4. Click on the 'Windows Installer' as we are operating with the Windows. We can select
the Linux or Mac OS X, accordingly.
5. A contribution window will appear. We can contribute according to our choice and click on the
'CONTRIBUTE &DOWNLOAD' option. Otherwise, click on the 'JUST DOWNLOAD' option, as
shown below:
6. The downloading process will start. The downloading file will look like the below image:
10. Accept the license by clicking on 'I Agree' button, as shown below:
11. Click on the 'Next' button. It is shown below:
12. The window specifying the location of the installed folder will appear.
14. Now, we have to accept the security for the installation. We are required to accept the
security Installation three times.
17. The installation process is now completed. The window will now appear as:
18. Click on the 'Close' button at the bottom.
The Arduino IDE software will appear on your desktop, as shown below:
20. The Arduino IDE environment is written in the programming language named as Java. So,
we need to allow access to the Java Platform.
As soon we open the Arduino software, a license window will appear, as shown below:
Accept the license by clicking on the 'Allow access' button.
1. Go to the File Manager and right-click on the This PC option, as shown below:
2. Click on the Manage
3. First, we need to connect the Arduino board to our computer.
4. A window will appear, as shown below:
Arduino IDE
The Arduino IDE is an open-source software, which is used to write and upload code to the
Arduino boards. The IDE application is suitable for different operating systems such
as Windows, Mac OS X, and Linux. It supports the programming languages C and C++. Here,
IDE stands for Integrated Development Environment.
The program or code written in the Arduino IDE is often called as sketching. We need to connect
the Genuino and Arduino board with the IDE to upload the sketch written in the Arduino IDE
software. The sketch is saved with the extension '.ino.'
Toolbar Button
The icons displayed on the toolbar are New, Open, Save, Upload, and Verify.
It is shown below:
Upload
The Upload button compiles and runs our code written on the screen. It further uploads the
code to the connected board. Before uploading the sketch, we need to make sure that the
correct board and ports are selected.
We also need a USB connection to connect the board and the computer. Once all the above
measures are done, click on the Upload button present on the toolbar.
The latest Arduino boards can be reset automatically before beginning with Upload. In the older
boards, we need to press the Reset button present on it. As soon as the uploading is done
successfully, we can notice the blink of the Tx and Rx LED.
If the uploading is failed, it will display the message in the error window.
We do not require any additional hardware to upload our sketch using the Arduino Bootloader.
A Bootloader is defined as a small program, which is loaded in the microcontroller present on
the board. The LED will blink on PIN 13.
Open
The Open button is used to open the already created file. The selected file will be opened in the
current window.
Save
The save button is used to save the current sketch or code.
New
It is used to create a new sketch or opens a new window.
Verify
The Verify button is used to check the compilation error of the sketch or the written code.
Serial Monitor
The serial monitor button is present on the right corner of the toolbar. It opens the serial
monitor.
It is shown below:
When we connect the serial monitor, the board will reset on the operating system Windows,
Linux, and Mac OS X. If we want to process the control characters in our sketch, we need to use
an external terminal program. The terminal program should be connected to the COM port,
which will be assigned when we connect the board to the computer.
Menu Bar
o File
When we click on the File button on the Menu bar, a drop-down list will appear. It is shown
below:
Let's discuss each option in detail.
New
The New button opens the new window. It does not remove the sketch which is already present.
Open
It allows opening the sketch, which can be browsed from the folders and computer drivers.
Open Recent
The Open Recent button contains the list of the recent sketches.
Sketchbook
It stores the current sketches created in the Arduino IDE software. It opens the selected sketch
or code in a new editor at an instance.
Examples
It shows the different examples of small projects for a better understanding of the IDE and the
board. The IDE provides examples of self-practice.
Close
The Close button closes the window from which the button is clicked.
Save
The save button is used to save the current sketch. It also saves the changes made to the
current sketch. If we have not specified the name of the file, it will open the 'Save As...' window.
Save As...
We can save the sketch with a different name using the 'Save As...' button. We can also change
the name accordingly.
Page Setup
It allows setting the page margins, orientation, and size for printing. The 'Page Setup' window
will appear as:
Print
According to the settings specified in the 'Page Setup', it prepares the current sketch for printing.
Preferences
Quit
The Quit button is used to close all the IDE windows. The same closed sketch will be reopened
when we will open the Arduino IDE.
o Edit
When we click on the Edit button on the Menu bar, a drop-down list appears. It is shown below:
Let's discuss each option in detail.
Undo
The Undo button is used to reverse the last modification done to the sketch while editing.
Redo
The Redo button is used to repeat the last modification done to the sketch while editing.
Cut
It allows us to remove the selected text from the written code. The text is further placed to the
clipboard. We can also paste that text anywhere in our sketch.
Copy
It creates a duplicate copy of the selected text. The text is further placed on the clipboard.
Copy for Forum
The 'Copy for Forum' button is used to copy the selected text to the clipboard, which is also
suitable for posting to the forum.
Copy as HTML
The 'Copy for Forum' button is used to copy the selected text as HTML to the clipboard. It is
desirable for embedding in web pages.
Paste
The Paste button is used to paste the selected text of the clipboard to the specified position of
the cursor.
Select All
Go to line...
Comment/Decomment
The Comment/ Decomment button is used to put or remove the comment mark (//) at the
beginning of the specified line.
Increase Indent
It is used to add the space at the starting of the specified line. The spacing moves the text
towards the right.
Decrease Indent
It is used to subtract or remove the space at the starting of the specified line. The spacing
moves the text towards the left.
Increase Font Size
Find...
It is used to find the specified text. We can also replace the text. It highlights the text in the
sketch.
Find Next
It highlights the next word, which has specified in the 'Find...' window. If there is no such word, it
will not show any highlighted text.
Find Previous
It highlights the previous word, which has specified in the 'Find...' window. If there is no such
word, it will not show any highlighted text.
o Sketch
When we click on the Sketch button on the Menu bar, a drop-down list appears. It is shown
below:
Let's discuss each option in detail.
Verify/Compile
It will check for the errors in the code while compiling. The memory in the console area is also
reported by the IDE.
Upload
The Upload button is used to configure the code to the specified board through the port.
It is used to override the Bootloader that is present on the board. We can utilize the full capacity
of the Flash memory using the 'Upload Using Programmer' option. To implement this, we need
to restore the Bootloader using the Tools-> Burn Bootloader option to upload it to the USB serial
port.
It allows saving a .hex file and can be kept archived. Using other tools, .hex file can also be sent
to the board.
Include Library
Include Library includes various Arduino libraries. The libraries are inserted into our code at the
beginning of the code starting with the #. We can also import the libraries from .zip file.
Add File...
The Add File... button is used to add the created file in a new tab on the existing file.
For example, let's add 'Blink' file to the 'Javatpoint' file. The tab will now appear as:
We can also delete the corresponding file from the tab by clicking on the small triangle
-> Delete option.
Tools
When we click on the Tools button on the Menu bar, a drop-down list appears. It is shown below:
Auto Format
The Auto Format button is used to format the written code. For example, lining the open and
closed curly brackets in the code.
Archive Sketch
The copy of the current sketch or code is archived in the .zip format. The directory of the
archived is same as the sketch.
This button is used to fix the inconsistency between the operating system char maps and editor
char map encoding.
Manage Libraries...
It shows the updated list of all the installed libraries. We can also use this option to install a new
library into the Arduino IDE.
Serial Monitor
It allows the exchange of data with the connected board on the port.
Serial Plotter
The Serial Plotter button is used to display the serial data in a plot. It comes preinstalled in the
Arduino IDE.
It is used to check and update the Wi-Fi Firmware of the connected board.
Board
We are required to select the board from the list of boards. The selected board must be similar
to the board connected to the computer.
Processor
It displays the processor according to the selected board. It refreshes every time during the
selection of the board.
Port
It consists of the virtual and real serial devices present on our machine.
It gives the information about the selected board. We need to select the appropriate port before
getting information about the board.
Programmer
We need to select the hardware programmer while programming the board. It is required when
we are not using the onboard USB serial connection. It is also required during the burning of the
Bootloader.
Burn Bootloader
The Bootloader is present on the board onto the microcontroller. The option is useful when we
have purchased the microcontroller without the bootloader. Before burning the bootloader, we
need to make sure about the correct selected board and port.
Help
When we click on the Help button on the Menu bar, a drop-down list will appear. It is shown
below:
The Help section includes several documents that are easy to access, which comes along with
the Arduino IDE. It consists of the number of options such as Getting Started, Environment,
Troubleshooting, Reference, etc. We can also consider the image shown above, which includes
all the options under the Help section.
Some documents like Getting started, Reference, etc., can be accessed without the internet
connection as well. It will directly link us to the official website of Arduino.
Arduino Kit
The Arduino Kit consists of all the components used for building digital or electronic devices.
The Arduino boards are also available in the form of DIY kits. Here, DIY specifies Do It Yourself.
The DIY kits are created for teaching and as a practice tool for students. The non-engineering
students can also use such kits for their projects.
We can easily start with our electronics projects using the complete kit. It also helps us to
create hand-on and engaging projects. The kit helps in understanding the fundamentals of
programming, voltage, current, and digital logic. The concept of digital and analog signals can
be understood by the implementation of actuators and sensors in the projects.
Some of the Arduino projects are the Spaceship Interface (designing the control panel for
spaceship), Keyboard Instrument, Knock Lock (a secret code, which is used to open the door),
etc.
There are various types of Arduino kits available in the market. Let's discuss some of the
Arduino kits:
Unit: 1
The Arduino UNO is a standard board of Arduino. Arduino UNO is based on an ATmega328P
Microcontroller. It is easy to use compared to other boards, such as the Arduino Mega board,
etc. The components on the Arduino board are ATmega328P Microcontroller, ICSP pin, power
LED indicator, Digital I/O pins, Analog pins, AREF pin, 16 MHz crystal oscillator, GND pins, Vin
pin, voltage regulator, Tx and Rx LED, USB, and a reset button.
Breadboard
Unit: 1 (400 points)
A breadboard is defined as a rectangular shape board, which is made of plastic. It has tiny holes
on it that are used to insert the wires of the electronic components, such as LED, resistor, etc.
It does not require any soldering to attach the electronic components to the board. We need to
join the components using wire to allow electricity to move from one component to another.
When electrons combine with holes in the semiconductor, energy is released in the form of
photons, which produces light.
Green LED
Unit: 8
The Green LED (Light Emitting Diode) produces the green light when electricity is passed
through its terminals. The process is called electroluminescence.
Red LED
Unit: 8
The Red LED produces the red light when electricity is passed through its terminals.
Yellow LED
Unit: 8
The Yellow LED produces the yellow light when electricity is passed through its terminals.
Blue LED
Unit: 3
The Blue LED produces blue light when electricity is passed through its terminals.
RGB LED
Unit: 1
The RGB LED uses the combination of three colors (Red, Green, and Blue) to produce the light.
The millions of hue of lights can be created from the combination of these three universal
colors.
The colors are generated by adjusting the brightness of each of the three colors by using the
PWM pin.
LCD Alphanumeric
Unit: 1
The LCD (Liquid Crystal Display) is a digital display, which gives information in the form of
letters or numbers. It is the basic component in a kit.
The function of the resistor is to manage the current flow. It controls the current flowing to the
other components. The other functions are dividing voltages, adjusting the signal levels, etc.
It is shown below:
Red, Blue, and Green Transparent Gels
Unit: 3
The colored gels act as a filter for the sensors, which allows the specific colored light to pass
through that gel.
Diodes (1N4007)
Unit: 5
A diode conducts the current in one direction. The diode is an electronic component that has
two terminals. The diodes can be used as the signal modulators, and demodulators, switches,
voltage regulators, etc.
Piezo Capsule
Unit: 1
The piezo in Arduino is defined as an electronic device, which produces a voltage when
deformed by some mechanical strain, sound wave, or a vibration.
Push Buttons
Unit: 10
The push buttons are used as a switch. We can power ON the board supply or the connection by
pressing the push button.
Tilt Sensor
Unit: 1
The tilt sensor is used to measure the tilt with respect to the reference plain. It is also used to
detect the inclination of the plane.
Potentiometer (10kOhms)
Unit: 3
The potentiometer acts as a knob, which is used to provide variable resistance. It can also be
used to alter its resistance. The amount of resistance is measured as an analog value.
Phototransistor
Unit: 6
The phototransistor uses the NPN transistors to sense the light level and convert it into the
current.
Temperature Sensor
Unit: 1
The temperature sensors are used to record the surrounding temperature. It converts the input
data to the electronic data.
Mosfet Transistors
Unit: 2
We can control the high voltage Arduino projects using the Mosfet Transistors. One terminal is
used as a power source, and the other two terminals are used onboard.
USB Cable
Unit: 1
The Universal Serial Bus (USB) is a cable that is used to connect the Arduino board with the
computer. We can further program the Arduino board through the Arduino IDE on our computer.
It includes a CD, which consist of a PDF explaining about the specifications of the kit. It consists
of some additional components, such as a joystick, Infrared Receiver, and Remote. The
beginners may face some difficulty while using such kit.
o Elegoo Mega 2560 Starter Kit
It is the ultimate kit intended for professionals. Beginners with advanced knowledge can use it.
Arduino Uno R3, Temperature Sensor TMP36, USB Cable, Shift Register, Arduino, Breadboard &
its Holder, NPN Transistors, Small Servo motor, 5V Relay, Jumper Wires, DC Motor with wires,
Piezo Buzzer, 12 units of Big 12mm Buttons, Photocell, LEDs (1x RGB, 10 x Red, 10 x Yellow),
10K Trimpot, Resistors (45 x 330Ω and 45 x 10KΩ), and 2 units of 1N4148 Diodes.
It includes a vast collection of components. The components in the kit are listed below:
MEGA2560 Controller Board, IR Receiver, Button (small) (5), Power Supply Module, Stepper
Motor, Humiture Sensor, 4-Digit 7-Segment Display, Dupont wire (Female to Male) (10), 5V Relay,
Remote Control, Servo Motor (SG90), USB Cable (5), Stepper Motor Driver, Jumper Wire (Male to
Male) (65), 9V Battery Clip Connector, Joystick PS2, Breadboard, Thermistor, Capacitor Ceramic
100nF, Photoresistor, Tilt Switch, Active Buzzer, LCD1602 Character Display LEDs(5 x Yellow, 5
x Red, 5 x Green, 5 x Blue, 5 x White, 1 x RGB, Resistors (10 each 10Ω, 100Ω, 220Ω, 330Ω, 1KΩ,
2KΩ, 5.1KΩ, 10KΩ, 100KΩ, 1MΩ), Potentiometer, NPN Transistor, Small Motor, Fan, and
Ultrasonic Sensor Module.
Arduino Shields
What is Arduino Shields?
Arduino shields are the boards, which are plugged over the Arduino board to expand its
functionalities. There are different varieties of shields used for various tasks, such as Arduino
motor shields, Arduino communication shields, etc.
Shield is defined as the hardware device that can be mounted over the board to increase the
capabilities of the projects. It also makes our work easy. For example, Ethernet shields are used
to connect the Arduino board to the Internet.
The pin position of the shields is similar to the Arduino boards. We can also connect the
modules and sensors to the shields with the help of the connection cable.
Arduino motor shields help us to control the motors with the Arduino board.
Types of Shields
The popular Arduino shields are listed below:
o Ethernet shield
o Xbee Shield
o Proto shield
o Relay shield
o Motor shield
o LCD shield
o Bluetooth shield
o Capacitive Touchpad Shield
o We can also connect another shield on the top of the Ethernet shield. It means that we
can also mount two shields on the top of the Arduino board.
Xbee Shield
o We can communicate wirelessly with the Arduino board by using the Xbee Shield with
Zigbee.
o It reduces the hassle of the cable, which makes Xbee a wireless communication model.
o The Xbee wireless module allows us to communicate outdoor upto 300 feet and indoor
upto 100 feet.
o The Xbee shield is shown below:
o It can also be used with different models of Xbee.
Proto shield
o Proto shields are designed for custom circuits.
o We can solder electronic circuits directly on the shield.
o The shield consists of two LED pads, two power lines, and SPI signal pads.
o The IOREF (Input Output voltage REFerence) and GND (Ground) are the two power lines
on the board.
o We can also solder the SMD (Surface Mount Device) ICs on the prototyping area. A
maximum of 24 pins can be integrated onto the SMD area.
Relay shield
o The Arduino digital I/O pins cannot bear the high current due to its voltage and current
limits. The relay shield is used to overcome such situation. It provides a solution for
controlling the devices carrying high current and voltage.
o The shield consists of four relays and four LED indicators.
o It also provides NO/NC interfaces and a shield form factor for the simple connection to
the Arduino board.
o The LED indicators depicts the ON/OFF condition of each relay.
o The relay used in the structure is of high quality.
o The NO (Normally Open), NC (Normally Closed), and COM pins are present on each relay.
o The relay shield is shown below:
Motor shield
o The motor shield helps us to control the motor using the Arduino board.
o It controls the direction and working speed of the motor. We can power the motor shield
either by the external power supply through the input terminal or directly by the Arduino.
o We can also measure the absorption current of each motor with the help of the motor
shield.
o The motor shield is based on the L298 chip that can drive a step motor or two DC
motors. L298 chip is a full bridge IC. It also consists of the heat sinker, which increases
the performance of the motor shield.
o It can drive inductive loads, such as solenoids, etc.
o The operating voltage is from 5V to 12V.
LCD shield
o The keypad of LCD (Liquid Crystal Display) shield includes five buttons called as up,
down, left, right, and select.
o There are 6 push buttons present on the shield that can be used as a custom menu
control panel.
o It consists of the 1602 white characters, which are displayed on the blue backlight LCD.
o The LED present on the board indicates the power ON.
o The five keys present on the board helps us to make the selection on menus and from
board to our project.
o The LCD shield is popularly designed for the classic boards such as Duemilanove, UNO,
etc.
Bluetooth shield
o The Bluetooth shield can be used as a wireless module for transparent serial
communication.
o It includes a serial Bluetooth module. D0 and D1 are the serial hardware ports in the
Bluetooth shield, which can be used to communicate with the two serial ports (from D0
to D7) of the Arduino board.
o We can install Groves through the two serial ports of the Bluetooth shield called a Grove
connector. One Grove connector is digital, while the other is analog.
o The communication distance of the Bluetooth shield is upto 10m at home without any
obstacle in between.
Arduino Boards
Arduino is an easy-to-use open platform to create electronics projects. Arduino boards play a
vital role in creating different projects. It makes electronics accessible to non-engineers,
hobbyists, etc.
The various components present on the Arduino boards are Microcontroller, Digital
Input/output pins, USB Interface and Connector, Analog Pins, Reset Button, Power button,
LED's, Crystal Oscillator, and Voltage Regulator. Some components may differ depending on
the type of board.
The most standard and popular board used over time is Arduino UNO. The ATmega328
Microcontroller present on the UNO board makes it rather powerful than other boards. There are
various types of Arduino boards used for different purposes and projects. The Arduino Boards
are organized using the Arduino (IDE), which can run on various platforms. Here, IDE stands for
Integrated Development Environment.
It is the most used and of standard form from the list of all available Arduino Boards. It is also
recommended for beginners as it is easy to use.
o Arduino Nano
The Nano board is defined as a sustainable, small, consistent, and flexible microcontroller board.
It is small in size compared to the UNO board. The devices required to start our projects using
the Arduino Nano board are Arduino IDE and mini USB.
The Arduino Nano includes an I/O pin set of 14 digital pins and 8 analog pins. It also includes 6
Power pins and 2 Reset pins.
o Arduino Mega
o Arduino Micro
The Arduino Micro is based on the ATmega32U4 Microcontroller. It consists of 20 sets of pins.
The 7 pins from the set are PWM (Pulse Width Modulation) pins, while 12 pins are analog input
pins. The other components on board are reset button, 16MHz crystal oscillator, ICSP header,
and a micro USB connection.
The Arduino Micro is also called as the shrunk version of Arduino Leonardo.
o Arduino Leonardo
The basic specification of the Arduino Leonardo is the same as the Arduino Micro. It is also
based on ATmega32U4 Microcontroller. The components present on the board are 20 analog
and digital pins, reset button, 16MHz crystal oscillator, ICSP header, and a micro USB
connection.
o Arduino Due
The Arduino Due is based on the 32- bit ARM core. It is the first Arduino board that has
developed based on the ARM Microcontroller. It consists of 54 Digital Input/Output pins and 12
Analog pins. The Microcontroller present on the board is the Atmel SAM3X8E ARM Cortex-M3
CPU.
It has two ports, namely, native USB port and Programming port. The micro side of the USB
cable should be attached to the programming port.
o Arduino Shields
The Arduino shields are the boards, which can be plugged on the top of the PCB. The shields
further extend the potential of the PCB's. The production of shields is cheap. It is also easy to
use. There are various types of Arduino shields that can be used for different purposes. For
example, the Xbee shield.
The Xbee shield can be used for wireless communication between multiple Arduino boards over
distances upto 300 feet using the Zigbee Module.
o Arduino Lilypad
The Arduino LilyPad was initially created for wearable projects and e-textiles. It is based on the
ATmega168 Microcontroller. The functionality of Lilypad is the same as other Arduino Boards. It
is a round, light-weight board with a minimal number of components to keep the size of board
small.
The Arduino Lilypad board was designed by Sparkfun and Leah. It was developed by Leah
Buechley. It has 9 digital I/O pins.
o Arduino Bluetooth
The Arduino Bluetooth Microcontroller board can be programmed over the Bluetooth as a
wireless connection.
o Arduino Diecimila
The Arduino Diecimila is also based on ATmeg628 Microcontroller. The board consists of 6
analog pin inputs, 14 digital Input/Output pins, a USB connector, a power jack, an ICSP (In-Circuit
Serial Programming) header, and a reset button.
We can connect the board to the computer using the USB, and can power-on the board with the
help of AC to DC adapter. The Diecimila was initially developed to mark the 10000 delivered
boards of Arduino. Here, Diecimila means 10,000 in Italian.
o Arduino Robot
The Arduino Robot is called as the tiny computer. It is widely used in robotics. The board
comprises of the speaker, five-button, color screen, two motors, an SD card reader, a digital
compass, two potentiometers, and five floor sensors.
The Robot Library can be used to control the actuators and the sensors.
o Arduino Ethernet
The Arduino Ethernet is based on the ATmega328 Microcontroller. The board consists of 6
analog pins, 14 digital I/O pins, crystal oscillator, reset button, ICSP header, a power jack, and an
RJ45 connection.
With the help of the Ethernet shield, we can connect our Arduino board to the internet.
o Arduino Zero
The Arduino Zero is generally called as the 32-bit extension of the Arduino UNO. It is based on
ATmel's SAM21 MCU. The board consists of 6 analog pin inputs, 14 digital Input/Output pins, a
USB connector, a power jack, and an ICSP (In-Circuit Serial Programming) header, UART port
pins, a power header, and AREF button.
The Embedded debugger of Atmel is also supported by the Arduino Zero. The function of
Debugger is to provide a full debug interface, which does not require additional hardware.
o Arduino Esplora
The Arduino Esplora boards allow easy interfacing of sensors and actuators. The outputs and
inputs connected on the Esplora board make it unique from other types of Arduino boards. The
board includes outputs, inputs, a small microcontroller, a microphone, a sensor, a joystick, an
accelerometer, a temperature sensor, four buttons, and a slider.
The structure of Arduino Pro Micro is similar to the Arduino Mini board, except the
Microcontroller ATmega32U4. The board consists of 12 digital Input/output pins, 5 PWM (Pulse
Width Modulation) pins, Tx and Rx serial connections, and 10-bit ADC (Analog to Digital
Converter).
List of available boards in Arduino software
The list of boards that we can see in the Arduino software is shown below:
Here, the dot represents the select Arduino board in the Arduino IDE.
Arduino UNO
The Arduino UNO is a standard board of Arduino. Here UNO means 'one' in Italian. It was named
as UNO to label the first release of Arduino Software. It was also the first USB board released by
Arduino. It is considered as the powerful board used in various projects. Arduino.cc developed
the Arduino UNO board.
The Arduino UNO includes 6 analog pin inputs, 14 digital pins, a USB connector, a power jack,
and an ICSP (In-Circuit Serial Programming) header. It is programmed based on IDE, which
stands for Integrated Development Environment. It can run on both online and offline platforms.
What is the main difference between Arduino UNO and Arduino Nano?
The Arduino Nano has a compact size and mini USB cable than the Arduino UNO.
What is the main difference between Arduino UNO and Arduino Mega?
The Arduino UNO is a standard board recommended to beginners, while Arduino Mega is used
for complex projects due to its greater memory space.
Memory
The memory structure is shown in the below image:
The preinstalled flash has a bootloader, which takes the memory of 0.5 Kb.
Here, SRAM stands for Static Random Access Memory, and EEPROM stands for Electrically
Erasable Programmable Read-Only Memory.
o There are 20 Input/Output pins present on the Arduino UNO board. These 20 pis include
6 PWM pins, 6 analog pins, and 8 digital I/O pins.
o The PWM pins are Pulse Width Modulation capable pins.
o The crystal oscillator present in Arduino UNO comes with a frequency of 16MHz.
o It also has a Arduino integrated WiFi module. Such Arduino UNO board is based on the
Integrated WiFi ESP8266 Module and ATmega328P microcontroller.
o The input voltage of the UNO board varies from 7V to 20V.
o Arduino UNO automatically draws power from the external power supply. It can also
draw power from the USB.
We can also use Arduino Web Editor, which allows us to upload sketches and write the code
from our web browser (Google Chrome recommended) to any Arduino Board. It is an online
platform.
The USB connection is essential to connect the computer with the board. After the connection,
the PWR pins will light in green. It is a green power LED.
The steps to get started with Arduino UNO are listed below:
As soon we connect the board to the computer, Windows from XP to 10 will automatically
install the board drivers.
But, if you have expanded or downloaded the zip package, follow the below steps:
o Select the port. Click on the Tools -> Port (select the port). The port likely will
be COM3 or higher. For example, COM6, etc. The COM1 and COM2 ports will not appear,
because these two ports are reserved for the hardware serial ports.
o Now, upload and run the written code or sketch.
To upload and run, click on the button present on the top panel of the Arduino display, as shown
below:
Within the few seconds after the compile and run of code or sketch, the RX and TX light present
on the Arduino board will flash.
The 'Done Uploading' message will appear after the code is successfully uploaded. The
message will be visible in the status bar.
The Arduino UNO Board, with the specification of pins, is shown below:
Let's discuss each pin in detail.
The voltage regulator converts the input voltage to 5V. The primary function of voltage regulator
is to regulate the voltage level in the Arduino board. For any changes in the input voltage of the
regulator, the output voltage is constant and steady.
o GND - Ground pins. The ground pins are used to ground the circuit.
o TXD and RXD
TXD and RXD pins are used for serial communication. The TXD is used for transmitting the data,
and RXD is used for receiving the data. It also represents the successful flow of data.
o USB Interface
The USB Interface is used to plug-in the USB cable. It allows the board to connect to the
computer. It is essential for the programming of the Arduino UNO board.
o RESET
o SCK
It stands for Serial Clock. These are the clock pulses, which are used to synchronize the
transmission of data.
o MISO
It stands for Master Input/ Slave Output. The save line in the MISO pin is used to send the data
to the master.
o VCC
It is the modulated DC supply voltage, which is used to regulate the IC's used in the connection.
It is also called as the primary voltage for IC's present on the Arduino board. The Vcc voltage
value can be negative or positive with respect to the GND pin.
o Crystal Oscillator- The Crystal oscillator has a frequency of 16MHz, which makes the
Arduino UNO a powerful board.
o ICSP
It stands for In-Circuit Serial Programming. The users can program the Arduino board's
firmware using the ICSP pins.
The program or firmware with the advanced functionalities is received by microcontroller with
the help of the ICSP header.
o SDA
It stands for Serial Data. It is a line used by the slave and master to send and receive data. It is
called as a data line, while SCL is called as a clock line.
o SCL
It stands for Serial Clock. It is defined as the line that carries the clock data. It is used to
synchronize the transfer of data between the two devices. The Serial Clock is generated by the
device and it is called as master.
o SPI
o MOSI
o SS
It stands for Slave Select. It is the Slave Select line, which is used by the master. It acts as the
enable line.
o I2C
It is the two-wire serial communication protocol. It stands for Inter Integrated Circuits. The I2C
is a serial communication protocol that uses SCL (Serial Clock) and SDA (Serial Data) to receive
and send data between two devices.
The initial step to start with Arduino is the IDE download and installation.
Brackets
There are two types of brackets used in the Arduino coding, which are listed below:
o Parentheses ( )
o Curly Brackets { }
Parentheses ( )
The parentheses brackets are the group of the arguments, such as method, function, or a code
statement. These are also used to group the math equations.
Curly Brackets { }
The statements in the code are enclosed in the curly brackets. We always require closed curly
brackets to match the open curly bracket in the code or sketch.
Line Comment
There are two types of line comments, which are listed below:
The text that is written after the two forward slashes are considered as a single line comment.
The compiler ignores the code written after the two forward slashes. The comment will not be
displayed in the output. Such text is specified for a better understanding of the code or for the
explanation of any code statement.
The // (two forward slashes) are also used to ignore some extra lines of code without deleting it.
The Multi-line comment is written to group the information for clear understanding. It starts with
the single forward slash and an asterisk symbol (/ *). It also ends with the / *. It is commonly
used to write the larger text. It is a comment, which is also ignored by the compiler.
Coding Screen
The coding screen is divided into two blocks. The setup is considered as the preparation block,
while the loop is considered as the execution block. It is shown below:
The set of statements in the setup and loop blocks are enclosed with the curly brackets. We can
write multiple statements depending on the coding requirements for a particular project.
For example:
1. void setup ( )
2. {
3. Coding statement 1;
4. Coding statement 2;
5. .
6. .
7. .
8. Coding statement n;
9. }
10. void loop ( )
11. {
12. Coding statement 1;
13. Coding statement 2;
14. .
15. .
16. .
17. Coding statement n;
18. }
It contains an initial part of the code to be executed. The pin modes, libraries, variables, etc., are
initialized in the setup section. It is executed only once during the uploading of the program and
after reset or power up of the Arduino board.
Zero setup () resides at the top of each sketch. As soon as the program starts running, the code
inside the curly bracket is executed in the setup and it executes only once.
The loop contains statements that are executed repeatedly. The section of code inside the curly
brackets is repeated depending on the value of variables.
Time in Arduino
The time in Arduino programming is measured in a millisecond.
Where, 1 sec = 1000 milliseconds
For example, for a 5-second delay, the time displayed will be 5000 milliseconds.
Example:
pinMode ( )
The specific pin number is set as the INPUT or OUTPUT in the pinMode () function.
Where,
pin: It is the pin number. We can select the pin number according to the requirements.
Mode: We can set the mode as INPUT or OUTPUT according to the corresponding pin number.
Code:
The OUTPUT mode of a specific pin number provides a considerable amount of current to other
circuits, which is enough to run a sensor or to light the LED brightly. The output state of a pin is
considered as the low-impedance state.
The high current and short circuit of a pin can damage the ATmel chip. So, it is recommended to
set the mode as OUTPUT.
The digitalWrite () will disable the LOW during the INPUT mode. The output pin will be
considered as HIGH.
We can use the INPUT mode to use the external pull-down resistor. We are required to set the
pinMode as INPUT_PULLUP. It is used to reverse the nature of the INPUT mode.
The sufficient amount of current is provided by the pull-up mode to dimly light an LED, which is
connected to the pin in the INPUT mode. If the LED is working dimly, it means this condition is
working out.
o The void loop () would include digitalWrite( ) and delay ( ) as the main function.
digitalWrite( )
The digitalWrite ( ) function is used to set the value of a pin as HIGH or LOW.
Where,
HIGH: It sets the value of the voltage. For the 5V board, it will set the value of 5V, while for 3.3V,
it will set the value of 3.3V.
If we do not set the pinMode as OUTPUT, the LED may light dim.
The syntax is: digitalWrite( pin, value HIGH/LOW)
Example:
The HIGH will ON the LED and LOW will OFF the LED connected to pin number 13.
The digitalRead () function will read the HIGH/LOW value from the digital pin, and the
digitalWrite () function is used to set the HIGH/LOW value of the digital pin.
delay ( )
The delay () function is a blocking function to pause a program from doing a task during the
specified duration in milliseconds.
Code:
Here, the LED connected to pin number 13 will be ON for 2 seconds and OFF for 1 second. The
task will repeatedly execute as it is in the void loop ().
Example: To light the LED connected to pin number 13. We want to ON the LED for 4 seconds
and OFF the LED for 1.5 seconds.
Code:
1. void setup ()
2. {
3. pinMode ( 13, OUTPUT); // to set the OUTPUT mode of pin number 13.
4. }
5. void loop ()
6. {
7. digitalWrite (13, HIGH);
8. delay (4000); // 4 seconds = 4 x 1000 milliseconds
9. digitalWrite (13, LOW);
10. delay (1500); // 1.5 seconds = 1.5 x 1000 milliseconds
11. }
As we open the Arduino IDE, the display will look like the below image:
The two functions that encapsulate the pieces of code in the Arduino program are shown below:
1. void setup ( )
2. void loop ( )
Functions
o The functions in Arduino combine many pieces of lines of code into one.
o The functions usually return a value after finishing execution. But here, the function does
not return any value due to the presence of void.
o The setup and loop function have void keyword present in front of their function name.
o The multiple lines of code that a function encapsulates are written inside curly brackets.
o Every closing curly bracket ' } ' must match the opening curly bracket '{ ' in the code.
o We can also write our own functions, which will be discussed later in this tutorial.
Spaces
o Arduino ignores the white spaces and tabs before the coding statements.
o The coding statements in the code are intent (empty spacing at the starting) for the easy
reading.
o In the function definition, loop, and conditional statements, 1 intent = 2 spaces.
o The compiler of Arduino also ignores the spaces in the parentheses, commas, blank
lines, etc.
Tools Tab
o The verify icon present on the tool tab only compiles the code. It is a quick method to
check that whether the syntax of our program is correct or not.
o To compile, run, and upload the code to the board, we need to click on the Upload button.
Uses of Parentheses ( )
o It denotes the function like void setup ( ) and void loop ( ).
o The parameter's inputs to the function are enclosed within the parentheses.
o It is also used to change the order of operations in mathematical operations.
Semicolon ;
o It is the statement terminator in the C as well as C++.
o A statement is a command given to the Arduino, which instructs it to take some kind of
action. Hence, the terminator is essential to signify the end of a statement.
o We can write one or more statements in a single line, but with semicolon indicating the
end of each statement.
o The compiler will indicate an error if a semicolon is absent in any of the statements.
o It is recommended to write each statement with semicolon in a different line, which
makes the code easier to read.
o We are not required to place a semicolon after the curly braces of the setup and loop
function.
Arduino processes each statement sequentially. It executes one statement at a time before
moving to the next statement.
Program Flow
The program flow in Arduino is similar to the flowcharts. It represents the execution of a
program in order.
We recommend to draw the flowchart before writing the code. It helps us to understand the
concept of code, which makes it the coding simpler and easier.
Flow Charts
A flowchart uses shapes and arrows to represent the information or sequence of actions.
An oval ellipse shows the Start of the sequence, and a square shows the action or processes
that need to be performed.
The Arduino coding process in the form of the flowchart is shown below:
Here, the processor enters our code, and the execution of code begins. After the setup, the
execution of the statement in the loop begins.
Every message sent on the UART is in the form of 8 bits or 1 byte, where 1 byte = 8 bits.
The messages sent to the computer from Arduino are sent from PIN 1 of the Arduino board,
called Tx (Transmitter). The messages being sent to the Arduino from the computer
are received on PIN 0, called Rx (Receiver).
These two pins on the Arduino UNO board look like the below image:
When we initialize the pins for serial communication in our code, we cannot use these two pins
(Rx and Tx) for any purpose. The Tx and Rx pins are also connected directly to the computer.
The pins are connected to the serial Tx and Rx chip, which acts as a serial to USB translator. It
acts as a medium for the computer to talk to the Microcontroller.
The Serial.begin( ) is a part of the serial object in the Arduino. It tells the serial object to perform
initialization steps to send and receive data on the Rx and Tx (pins 1 and 0).
Arduino Mega has four serial ports. The Tx pins on the Mega board are listed below:
o 1 (TX)
o 18 (TX)
o 16 (TX)
o 14 (TX)
o 0 (RX)
o 19 (RX)
o 17 (RX)
o 15 (RX)
The communication with the Tx and Rx pins would cause interference and failed uploads to the
particular board.
If we require a serial port for communication, we need to use a USB-to serial adapter. It is a mini
USB connector, which converts the USB connection to the Serial RX and TX. We can directly
connect the adapter to the board.
There are five pins present on the USB-to serial adapter, including RX, TX, reset button, and GND
(Ground).
Serial.begin ( )
The serial.begin( ) sets the baud rate for serial data communication. The baud rate signifies the
data rate in bits per second.
The default baud rate in Arduino is 9600 bps (bits per second). We can specify other baud rates
as well, such as 4800, 14400, 38400, 28800, etc.
o begin( speed )
o begin( speed, config)
Where,
speed: It signifies the baud rate or bps (bits per second) rate. It allows long data types.
Example 1:
1. void setup ( )
2. {
3. Serial.begin(4800);
4. }
5. void loop ( )
6. {
7. }
The serial.begin (4800 ) open the serial port and set the bits per rate to 4800. The messages in
Arduino are interchanged with the serial monitor at a rate of 4800 bits per second.
Example 2:
It is shown below:
Arduino Serial.print ( )
The serial.print ( ) in Arduino prints the data to the serial port. The printed data is stored in the
ASCII (American Standard Code for Information Interchange) format, which is a human-readable
text.
The printed data will be visible in the serial monitor, which is present on the right corner on the
toolbar.
o print( value )
o print( value, format)
Note: In Serial.print( ), S must be written in uppercase.
Where,
value: It signifies the value to print, which includes any data type value.
format: It consists of number base, such as OCT (Octal), BIN (Binary), HEX (Hexadecimal), etc.
for the integral data types. It also specifies the number of decimal places.
Serial.print( value )
The serial.print ( ) accepts the number using the ASCII character per digit and value upto two
decimal places for floating point numbers.
Example 1:
1. Serial.print(15.452732)
Output:
15.45
It sends bytes to the printer as a single character. In Arduino, the strings and characters using
the Serial.print( ) are sent as it is.
Example 2:
1. Serial.print("Hello Arduino")
Output:
"Hello Arduino"
Example 1:
1. Serial.print(25, BIN)
Output:
11001
Example 2:
1. Serial.print(58, HEX)
Output:
3A
Example 3:
1. Serial.print(58, OCT)
Output:
72
Example 4:
1. Serial.print(25, DEC)
Output:
25
The conversion is from decimal to decimal. So, the output will be the same.
If we want to pass the flash memory in Serial.print ( ) based on string, we need to wrap the
function statement with F.
For example,
1. void setup ( )
2. {
3. Serial.begin ( 4800);
4. }
5. void loop ( )
6. {
7. Serial.print(" Hello Arduino" );
8. Serial.print(" \ t '');
9. }
Here, Serial.print(" \ t '') is used to print the tab in the output program.
Serial.println ( )
The Serial.println ( ) means print line, which sends the string followed by the carriage return ('\r'
or ASCII 13) and newline ('\n' or ASCII 10) characters. It has a similar effect as pressing the
Enter or Return key on the keyboard when typing with the Text Editor.
The Serial.println( ) is also declared in two formats, which are shown below:
o println( value )
o println( value, format)
What is the difference between Serial.print( ) and Serial.println( )?
The text written inside the open and closed parentheses in the Serial.println( ) moves in a new
line. With the help of Serial.print( ) and Serial.println( ), we can figure the order and execution of
certain things in our code.
1. void setup ( )
2. {
3. Serial.begin ( 4800);
4. }
5. void loop ( )
6. {
7. Serial.print(" Hello");
8. delay(1000);
9. Serial.println("Arduino"); // It will print Arduino followed by a new line.
10. delay ( 1500); // delay of 1.5 seconds between each printed line.
11. }
In the output, the word Hello will appear followed by the word Arduino 1 second later. After 1.5
second, another line will be printed.
Output
1. Hello Arduino
2. Hello Arduino // The next line will be printed after the specified duration.
3. .
4. .
5. .
6. .
7. The output will be printed repeatedly.
Arduino Mega
The Arduino Mega board (type of Arduino board) has four serial ports. While programming the
Mega, we need to declare all the four serial ports. The baud rates of all the four serial ports
should be different.
It is shown below:
1. void setup() {
2. Serial.begin(4800);
3. Serial1.begin(28800);
4. Serial2.begin(38400);
5. Serial3.begin(9600);
6.
7. Serial.println("Serial port");
8. Serial1.println("Serial port 1");
9. Serial2.println("Serial port 2");
10. Serial3.println("Serial port 3");
11. }
12. void loop()
13. {
14. }
Serial.available( )
The Serial.available( ) function in Arduino gets the stored bytes from the serial port that are
available for reading. It is the data, which is already stored and arrived in the serial buffer. The
serial buffer in Arduino holds the 64 bytes.
Serial.available( ) function inherits from the utility class called stream. The stream is only
invoked when the function relying on it is called. The stream class is considered as the base
class for binary and character-based streams.
9. {
10. arrivingdatabyte = Serial.read( ); // It will read the incoming or arriving data byte
11. Serial.print("data byte received:");
12. Serial.println(arrivingdatabyte, DEC); // here, DEC means Decimal
13. }
14. }
Serial1.available( )
Serial2.available( )
Serial3.available( )
In this example, the data will be read and sent from one port to another.
It will read data from port 0 and will then send the data to port 1.
1. void setup( )
2. {
3. Serial.begin(4800);
4. Serial1.begin(4800);
5. }
6. // two if conditions will be used.
7. //In first, if the data is available in the port 0, it will send to the port 1. In second, if the da
ta is available in the port 1, it will send to the port 0.
8. void loop( )
9. {
10. // Now,the data will be read from port 0 and will be sent to the port 1.
11. if( Serial.available( ) )
12. {
13. int incomingdatabyte = Serial.read( );
14. Serial1.print('incomingdatabyte, byte');
15. }
16. // Now,the data will be read from port 1 and will be sent to the port 0.
17. if( Serial1.available( ) )
18. {
19. int incomingdatabyte = Serial1.read( );
20. Serial.print('incomingdatabyte, byte');
21. }
22. }
We can also check the errors in our code by compiling. For that, click on the Verify button.
Note: With the help of the Arduino board, we cannot connect the serial device to our computer.
int arrivingdatabyte;
void setup( )
{
Serial.begin(9600);
}
void loop( )
{
if(Serial.available( ) > 0)
{
arrivingdatabyte = Serial.read( ); // It will read the incoming or arriving data byte
Serial.print("data byte received:");
Serial.println(arrivingdatabyte);
}
}
The above code clearly explains that the Serial.available( ) is used to get the available number of
bytes if it is greater than 0. The Serial.read( ) function will read the data from the data byte and
print a message if the data is received. The data is sent from the serial monitor to the Arduino.
Serial.readString( )
It reads the incoming serial data from the serial buffer in the string. The String data type is used
here.
String b;
void setup( )
{
Serial.begin(4800);
}
void loop( )
{
while( Serial.available( ) )
{
b = Serial.readString( );
Serial.println(b);
}
}
The above code clearly explains that the Serial.readString( ) is used to read the serial data into the
string. The string specified here is b.
The data in the Serial function is read as a string in the above code.
The Serial.read( ) function reads the data in terms of bytes, while the Serial.readString( ) reads the
data in the term of string.
Serial.write( )
It sends the binary data to the serial port in Arduino. The data through Serial.write is sent as a
series of bytes or a single byte. The data type is size_t.
If we want to send the digits of numbers represented by the characters, we need to use the
Serial.print( ) function instead of Serial.write( ).
o write( str )
o write( value )
Where,
str: The str means string, which sends the data as a series of bytes.
len: It signifies the number of bytes, which can be sent from the array.
void setup( )
{
Serial.begin(14400);
}
void loop( )
{
Serial.write(55); // the specified value is 55.
// Serial.write( ) send the data as a byte with this value (55).
int Bytestosend = Serial.write( " Arduino" );
// It sends the Arduino string.
//The length of the string is a return parameter in this function.
}
Arduino analogRead ( )
The analogRead( ) function reads the value from the specified analog pin present on the
particular Arduino board.
The ADC (Analog to Digital Converter) on the Arduino board is a multichannel converter. It maps
the input voltage and the operating voltage between the values 0 and 1023. The operating
voltage can be 5V or 3.3V.
The values from 0 to 1023 are the integer values. It can also be written as 0 to (2^10) -1.
The time duration to read an analog input signal on the boards (UNO, Mega, Mini, and Nano) is
about 100 microseconds or 0.0001 seconds.
Hence, the maximum reading rate of analog input is about 10000 times per second.
o The Operating voltage of Arduino UNO, Mini, Mega, Nano, Leonardo, and Micro is 5V, and
resolution is 10 bits.
o The Operating voltage of MKR family boards, Arduino Due, and Zero is 3 V, and
resolution is 12 bits.
analogReference( )
The reference voltage used for the analog input is configured by the analogReference( ).
1. analogReference (type)
Note: The external reference voltage on the AREF pin should not exceed greater than 5V or less than
0V. We need to set the analog Reference as External while working on the AREF pin.
Otherwise, it can damage the microcontroller present on the Arduino board.
o We can change the resolution only for the MKR Family, Zero, and Due board using the
analogReadResolution( ) function.
analogReadResolution( )
The MKR Family, Zero, and Due have the ADC resolution of 12 bits.
The analogReadResolution( ) will return the integer values between 0 and 4095 from the
analogRead( ) function.
1. analogReadResolution (bits)
where,
bits: It signifies the resolution bits returned by the analogRead( ) function. We can set the value
of bits between 1 and 32.
Note: If the resolution bits higher than the board capabilities are specified, the Arduino will pad the
extra bits with zeroes.
For example, analogReadResolution (14)
The above function will give a 14-bit approximated number with the first two 12 bits (that includes
ADC reading) and the last two padded bits.
Syntax of analogRead ( )
The syntax is:
1. analogRead(pin)
where,
pin: It includes the name of the particular analog pin to read from.
A not-connected analog pin can also return some value. Such value depends on the position of
our hand on the board and other nearby analog inputs.
Code Example
Let's understand the concept of analogRead with an example.
The above code reads the voltage from the specified analog pin (AnaPin) and displays it.
Arduino Functions
The functions allow a programmer to divide a specific code into various sections, and each
section performs a particular task. The functions are created to perform a task multiple times in
a program.
The function is a type of procedure that returns the area of code from which it is called.
For example, to repeat a task multiple times in code, we can use the same set of statements
every time the task is performed.
The Arduino has two common functions setup() and loop(), which are called automatically in
the background. The code to be executed is written inside the curly braces within these
functions.
void setup() - It includes the initial part of the code, which is executed only once. It is called as
the preparation block.
void loop() - It includes the statements, which are executed repeatedly. It is called the execution
block.
Function Declaration
The method to declare a function is listed below:
We need a return type for a function. For example, we can store the return value of a function in
a variable.
We can use any data type as a return type, such as float, char, etc.
o Function name
It consists of a name specified to the function. It represents the real body of the function.
o Function parameter
It includes the parameters passed to the function. The parameters are defined as the special
variables, which are used to pass data to a function.
Example 1:
Consider the below image:
1. void setup()
2. {
3. Serial.begin(9600);
4. }
5. void loop() {
6. int a = 5; // initialization of values to the variables a and b
7. int b = 4;
8. int c;
9. c = myAddfunction(a, b); // c will now contains the value 9
10. Serial.println(c); // to print the resulted value
11. delay(1000); // time delay of 1 second or 1000 milliseconds
12. }
13. int myAddfunction(int i, int j)
14. {
15. int sum;
16. sum = i + j;
17. return sum;
18. }
Example 3:
Here, we will create a function that determines if a number is even or odd.
1. int a= 0;
2. int b;
3. void setup()
4. {
5. Serial.begin(9600);
6. }
7. void loop()
8. {
9. b = Evenfunction(a); // we can store the function return value in variable b
10. Serial.print(a);
11. Serial.print(" : "); // to separate even or odd text
12. if (b==1)
13. {
14. Serial.println( " Number is even");
15. }
16. else
17. {
18. Serial.println("Number is odd");
19. }
20.
21. a++; // the function will increment and will again run
22. delay(1000);
23. }
24.
25. int Evenfunction(int d)
26. {
27. if (d% 2==0)
28. {
29. return 1;
30. }
31. else
32. {
33. return 0;
34. }
35. }
Output:
The data types that we will use in the Arduino are listed below:
1. int a = 3;
2. void setup( )
3. {
4. . //
5. }
6. void loop ( )
7. {
8. .
9. .
10. }
In the ATmega and Arduino UNO boards, the int data types store the value of 2 bytes.
On the boards like Arduino Zero and MKR1000 (SAMD boards), and Arduino Due, the int data
type stores the value of 4 bytes or 32 bits. The Minimal range in such case would be - (2^ 31) to
((2 ^ 31) - 1) or -2,147,483,648 to 2,147,483,647.
The negative numbers are stored in the form of 2's complement, where the sign bit or the
highest bit is flagged as the negative number.
where,
var= variable
For example,
1. int a;
2. int b = 3;
Any variable or identifier becomes an integer variable and can hold only integer values.
1. int Sum = 0;
2. void setup( )
3. {
4. Serial.begin(9600);
5. }
6. void loop ( )
7. {
8. Sum++; // on every loop, it adds 1 to the Sum int
9. Serial.println ( Sum); // it prints the current state of the Sum variable
10. delay(1500); // delay of 1.5 seconds
11. }
The char type is often said to be an integer type. It is because, symbols, letters, etc., are
represented in memory by associated number codes and that are only integers.
The size of character data type is minimum of 8 bits. We can use the byte data type for an
unsigned char data type of 8 bits or 1 byte.
For example, character ' A ' has the ASCII value of 65.
where,
var= variable
Floating point numbers can also be written in the exponent form. The numbers can be as large
as 3.4028235E+38 and as small as -3.4028235E+38. The size of float data types is 4 bytes or
32 bits.
where,
var= variable
1. int a ;
2. int b ;
3. float c ;
4. void setup ( )
5. {
6. Serial.begin (9600);
7. }
8. void loop ( )
9. {
10. a=3;
11. b = a/2 ; // b is an integer. It cannot hold fractions. The output will be 1.
12. c = (float) a / 2.0 ; // c now contains 1.5.
13. // Here, we have to use 2.0 instead of 2.
14. }
Note: We need to add a decimal point to a number. Otherwise, it will be considered as an integer. For
example, 14.0 is considered as a float number, while 14 is an integer.
1. float a = 3.6 ;
2. int b = a + 0.6 ; // output = 4
It occupies 4 bytes in ATmega and UNO boards, while 8 bytes on Arduino Due.
The syntax is:
where,
var= variable
The difference between Unsigned and signed data type is the sign bit. The int type in Arduino is
the signed int. In a 16-bit number, 15 bits are interpreted with the 2's complement, while the high
bit is interpreted as the positive or negative number. If the high bit is '1', it is considered as a
negative number.
where,
var= variable
For example,
The range of short data types is from -32768 to 32767 or - (2^ 15) to ((2 ^ 15) - 1). The ARM and
ATmega based Arduino's usually stores the data value of 2 bytes.
where,
var= variable
For example,
1. short pinofLED = 8 ;
While using integer numbers, at least one of the numbers should be followed by L, which forces
the number to be a long data type.
where,
var= variable
For example,
where,
var= variable
For example
byte
1 byte = 8 bits.
where,
var= variable
For example,
1. byte c = 20;
word
It is considered as an unsigned number of 16 bits or 2 bytes, which stores values from 0 to
65535.
where,
var= variable
For example,
1. word c = 2000;
Arduino Variables
The variables are defined as the place to store the data and values. It consists of a name, value,
and type.
The variables can belong to any data type such as int, float, char, etc. Consider the url - Arduino
data types for detailed information.
1. int pin = 8;
Here, the int data type is used to create a variable named pin that stores the value 8. It also
means that value 8 is initialized to the variable pin.
We can modify the name of the variable according to our choice. For example,
1. int LEDpin = 8;
For example,
1. pinMode(LEDpin, OUTPUT);
Here, the value stored (8) in the declared variable (LEDpin) will be passed to the pinMode()
function.
If we have not declared the variable, the value can also be directly passed to the function.
For example:
1. pinMode( 8, OUTPUT);
Advantages of Variables
The advantages of the variables are listed below:
1. pin = 7;
We can easily change the variables by copying its value to another variable.
For example,
1. int LEDpin = 7;
2. int pin1 = LEDpin;
3. LEDpin = 13;
The LEDpin now contains the value 13 instead of 7. But, value of pin1 is still 7.
1. void setup()
2. {
3. Serial.begin(9600);
4. int pinLED = 7;
5. Serial.println(pinLED); // value 7 will be printed
6. int pin1 = pinLED;
7. pinLED = 13;
8. Serial.println(pinLED); // value is now changed
9. // now, value 13 will be printed
10. }
11. void loop()
12. {
13. }
Output:
We can notice in the output that the value of LEDpin is changed from 7 to 13. Similarly, we can
change the values of variables.
Variables Scope
It means that in how many ways the variables can be declared.
The variables can be declared in two ways in Arduino, which are listed below:
o Local variables
o Global variables
Local Variables
The local variables are declared within the function. The variables have scope only within the
function. These variables can be used only by the statements that lie within that function.
For example,
1. void setup()
2. {
3. Serial.begin(9600);
4. }
5. void loop()
6. {
7. int x = 3;
8. int b = 4;
9. int sum = 0;
10. sum = x + b;
11. Serial.println(sum);
12. }
Global Variables
The global variables can be accessed anywhere in the program. The global variable is declared
outside the setup() and loop() function.
For example,
1. int LEDpin = 8;
2. void setup()
3. {
4. pinMode(LEDpin, OUTPUT);
5. }
6. void loop()
7. {
8. digitalWrite(LEDpin, HIGH);
9. }
We can notice that the LEDpin is used both in the loop() and setup() functions.
The value is used in both functions, so, changing the value in one function will reflect in the
other. For example,
1. int LEDpin = 8;
2. void setup()
3. {
4. LEDpin = 13;
5. pinMode(LEDpin, OUTPUT);
6. }
7. void loop()
8. {
9. digitalWrite(LEDpin, HIGH);
10. }
The value of true and false are defined as 1 and 0. Any non-zero integer is determined as true in
terms of Boolean language. The true and false constants are type in lowercase rather than
uppercase (such as HIGH, LOW, etc.).
In Arduino, the pin is configured as INPUT or OUTPUT using the pinMode() function. The pin is
further made HIGH or LOW using the digitalWrite() function.
HIGH
The board includes two types of voltage pins to provide HIGH value, which are listed below:
o 5V
o 3V
Some boards consist of both 5V and 3.3V pins. For example, Arduino UNO R3.
LOW
The pin configured as LOW is set at 0 Volts.
LED_BUILTIN Constant
The Arduino boards have built-in LED connected in series with the resistor. The particular pin
number is defined with the constant name called LED_BUILTIN.
Most Arduino boards have the LED_BUILTIN connected to Pin number 13.
Constant Keyword
The name const represents the constant keyword. It modifies the behavior of the variables in
our program. It further makes the variable as 'read-only'.
The variable will remain the same as other variables, but its value cannot be changed.
The const keyword is considered superior compared to the #define keyword because it obeys
the rules of the variable scope.
For example,
Output: 11.36
Note: We can either use const or #define in the case of strings and numeric constants. But we can
only use const for arrays.
#define
The #define in Arduino is used to give a name to the constant value. It does not take any
memory space on the chip.
At the compile time, the compiler will replace the predefined value in the program to the
constants with the defined value.
where,
For example,
1. #define LEDpin 12
2. // It is the correct representation of #define
Note: The #define does not require any semicolon. Hence, we do not need to specify any semicolon
after the #define. Otherwise, the compiler will show errors.
1. #define LEDpin = 12
2. #define LEDpin 12;
Arduino Operators
The operators are widely used in Arduino programming from basics to advanced levels. It plays
a crucial role in every programming concept like C, C++, Java, etc.
The operators are used to solve logical and mathematical problems. For example, to calculate
the temperature given by the sensor based on some analog voltage.
1. Arithmetic Operators
2. Compound Operators
3. Boolean Operators
4. Comparison Operators
5. Bitwise Operators
Arithmetic Operators
There are six basic operators responsible for performing mathematical operations in Arduino,
which are listed below:
o Assignment Operator ( = )
The Assignment operator in Arduino is used to set the variable's value. It is quite different from
the equal symbol (=) normally used in mathematics.
o Addition ( + )
The addition operator is used for the addition of two numbers. For example, P + Q.
o Subtraction ( - )
Subtraction is used to subtract one value from the another. For example, P - Q.
o Multiplication ( * )
o Division ( / )
The division is used to determine the result of one number divided with another. For example,
P/Q.
o Modulo ( % )
The Modulo operator is used to calculate the remainder after the division of one number by
another number.
Most of the operators are similar to the usual operator used in mathematics.
Example 1:
1. int b;
2. void setup ( )
3. {
4. Serial.begin( 9600 );
5. }
6. void loop ( )
7. {
8. b = 5 + 2;
9. Serial.println(b);
10. }
In the above code, we have assigned the result of the addition of two numbers to b before
printing it to the console.
For output, click on the Upload and Serial Monitor button present on the toolbar.
Output: 7
Example 2:
1. int d;
2. void setup ( )
3. {
4. Serial.begin( 9600 );
5. }
6. void loop ( )
7. {
8. d = 5 - 2;
9. Serial.println(d);
10. d = d + 3;
11. Serial.println(d);
12. }
Output:
3
6
Similarly, we can perform multiplication, modulo, and division. The int variable will store the
integer values. For example, 20/3 = 6.
If we want decimal values to be printed, we need to use the float instead of int.
For example,
1. int b;
2. void setup ( )
3. {
4. Serial.begin( 9600 );
5. }
6. void loop ( )
7. {
8. b = 20.0 / 3; // decimal value is used to force the compiler to print decimal value.
9. Serial.println(b);
10. }
Output: 6.66
1. Parentheses ( )
2. Multiplication, division, and modulo
3. Addition and subtraction
If there are multiple operations next to each other, they will be computed from left to right.
1. int c;
2. void setup ( )
3. {
4. Serial.begin( 9600 );
5. }
6. void loop ( )
7. {
8. c = 2 * 3 / (2 + 1) + 4;
9. Serial.println(c);
10. }
Output:
Let's understand how the above output occurred. Consider the below image:
Compound Operators
The compound operators perform two or more calculations at once.
The result of the right operand is assigned to the left operand, as already discussed above. The
same condition will apply to all the compound operators, which are listed below:
o b++
o b+=
o b--
o b-=
For example, b - = 3. It means, b = b - 3.
o b*=
o b/=
o b%=
Now, let's use the above operators with two variables, b and c.
o b + = c ( b = b + c)
o b - = c ( b = b - c)
o b * = c ( b = b * c)
o b / = c ( b = b / c)
o b % = c ( b = b % c)
Boolean Operators
The Boolean Operators are NOT ( ! ), Logical AND ( & & ), and Logical OR ( | | ).
The result of the condition is true if both the operands in the condition are true.
1. if ( a = = b & & b = = c )
Above statement is true if both conditions are true. If any of the conditions is false, the
statement will be false.
o Logical OR ( | | )
The result of the condition is true, if either of the variables in the condition is true.
1. if ( a > 0 | | b > 0 )
The above statement is true, if either of the above condition ( a> 0 or b > 0 ) is true.
o NOT ( ! )
For example, a ! = 2.
The NOT operator returns the value 1 or TRUE when the specified operand is FALSE. It also
reverses the value of the specified expression.
Comparison Operators
The comparison operators are used to compare the value of one variable with the other.
The less than operator checks that the value of the left operand is less than the right operand.
The statement is true if the condition is satisfied.
1. int b;
2. int c ;
3. void setup ( )
4. {
5. Serial.begin( 9600 );
6. }
7. void loop ( )
8. {
9. b = 3;
10. c = 5;
11. if ( b < 4 )
12. Serial.println(b);
13. if ( c < 4)
14. Serial.println( c);
15. }
Output: 3
In the above code, if any of the two statement is correct, the corresponding value of the variable
will be printed. Here, only first condition is correct. Hence, the value of b will be printed.
The less than operator checks that the value of the left side of a statement is greater than the
right side. The statement is true if the condition is satisfied.
o equal to ( = = )
It checks the value of two operands. If the values are equal, the condition is satisfied.
For example, a = = b.
o not equal to ( ! = )
It checks the value of two specified variables. If the values are not equal, the condition will be
correct and satisfied.
For example, a ! = b.
The less or equal than operator checks that the value of left side of a statement is less or equal
to the value on right side. The statement is true if either of the condition is satisfied.
The greater or equal than operator checks that the value of the left side of a statement is
greater or equal to the value on the right side of that statement. The statement is true if the
condition is satisfied.
It checks the value of a is greater or equal than b. If either of the condition satisfies, the
statement is true.
Bitwise Operators
The Bitwise operators operate at the binary level. These operators are quite easy to use.
There are various bitwise operators. Some of the popular operators are listed below:
o bitwise NOT ( ~ )
The bitwise NOT operator acts as a complement for reversing the bits.
The output is 0 if both the inputs are same, and it is 1 if the two input bits are different.
For example,
For example,
1. 1 0 0 1 // input 1 or operand 1
2. 0 1 0 1 // input 2
3. 1 1 0 0 // Output ( resultant - XOR)
o bitwise OR ( | )
The output is 0 if both of the inputs in the OR operation are 0. Otherwise, the output is 1. The
two input patterns are of 4 bits.
For example,
1. 1 1 0 0 // input 1 or operand 1
2. 0 0 0 1 // input 2
3. 1 1 0 1 // Output ( resultant - OR)
o bitwise AND ( & )
The output is 1 if both the inputs in the AND operation are 1. Otherwise, the output is 0. The two
input patterns are of 4 bits.
For example,
1. 1 1 0 0 // input 1 or operand 1
2. 0 1 0 1 // input 2
3. 0 1 0 0 // Output ( resultant - AND)
o bitwise left shift ( < < )
The left operator is shifted by the number of bits defined by the right operator.
The right operator is shifted by the number of bits defined by the left operator.
Arduino Array
What are Arrays?
The arrays are defined as the data structures that allow multiple values to be grouped together
in a simple way. This is an easily access method.
The array is normally built from the data types like integer, reals, characters, and boolean. It
refers to a named list of finite number (n) of similar data elements.
The set of consecutive numbers usually represent the elements in the array, which are 0, 1, 2, 3,
4, 5, 6,.......n.
For example, if the name of an array of 5 elements is AR, the elements will be referenced as
shown below:
Arrays in Arduino
The array in Arduino is declared with the integer data type.
It is also defined as the collection of variables, which is acquired with an index number.
The array is represented as:
We can specify any name according to our choice. The array name is the individual name of an
element.
Array Declaration
There are different methods to declare an array in Arduino, which are listed below:
For example,
1. int myarray[ ] = { 1, 4, 6, 7 } ;
o We can declare the array without initializing its elements.
For example,
Features of Array
For example,
For example,
1. myvalue[0] = = 1, myvalue[1] = = 2, . . . .
Example 1:
Let's take an array (ARarduino) of 6 elements. The elements of the array are shown below:
and ARarduino[5].
The last element of the array will be n-1, where n is the declared size of an array.
Example 1: Sum
Let's consider an array (AR) with 4 elements. The elements are: AR[0], AR[1], AR[2], and AR[3].
The sum of values assigned to the elements within an array will be printed.
Example 2: Division
We will divide the value assigned to the element AR[4] with 2. The resulting value will be
assigned to the variable 'z.' Consider the below code:
1. z = AR[4] / 2;
2. Serial.println ( x );
We need to be careful while assigning value to the array. The index number greater than the size
of the array may yield invalid data. Such data is saved to random memory locations, which can
cause the program malfunction or a difficult bug to find.
Note: C++ does not check the legally bound size of the declared array, while JAVA and BASIC do
check.
1. myArray[0] = 5;
2. // we can assign any value depending on the requirements.
Example of project: We will also discuss a project to light LED using arrays in the Basic projects
-> Blinking various LEDs using Arrays.
Loop Arrays
We can also use arrays inside the loop. For each element of an array, the loop counter acts as
an index element for that array.
In this example, the element over the serial port will be printed.
Code Examples
Let's understand arrays with some examples.
Example 1: Printing the sum of all elements
Consider the below code:
Output
In the above code, we have used the const variable. The compiler reserves the memory
in Arduino. We need to use the const integer greater than zero. For detail- go to the URL Arduino
Variables.
Output
Arduino Delay
Here, Arduino Delay specifies the delay( ) function used in the Arduino programming. Let's
discuss the delay( ) function in detail.
delay( ) function
The delay( ) function pauses the program or task for a specified duration of time. The time is
specified inside the open and closed parentheses in milliseconds.
Where,
Example 1:
delay(500)
It is shown below:
The program waits for a specified duration before proceeding onto the next line of the code.
The delay( ) function allows the unsigned long data type in the code.
We can create many sketches using the short and long delays depending on the requirements in
the project. It does not disable any interrupts. But, the delay( ) function has some drawbacks.
Let's understand the delay() function with the help of two examples.
Example 1:
Example 2:
1. void setup ( )
2. {
3. Serial.begin ( 4800); //opens the serial port and set the bits per rate to 4800
4. }
5. void loop ( )
6. {
7. Serial.print(" Welcome");
8. delay(1000);
9. Serial.println("to delay"); // It will print 'to delay' followed by a new line.
10. delay ( 500); // delay of 0.5 seconds between each printed line.
11. }
In the output, the word Welcome will appear followed by the word to delay 1 second later. After
0.5 seconds, another line will be printed.
Output:
Welcome to delay
Welcome to delay
Arduino If statement
The if ( ) statement is the conditional statement, which is the basis for all types of programming
languages.
If the condition in the code is true, the corresponding task or function is performed accordingly.
It returns one value if the condition in a program is true. It further returns another value if the
condition is false.
It means that if ( ) statement checks for the condition and then executes a statement or a set of
statements.
It clearly explains the process of execution of a statement. If the condition is False, it comes out
of the if ( ) statement. If the condition is true, the function is performed.
1. if ( condition)
2. {
3. // include statements
4. // if the condition is true
5. // then performs the function or task specified inside the curly braces
6. }
Here,
The comparison operators that can be used as a condition inside the parentheses are listed
below:
o a ! = b ( a not equal to b )
o a < b ( a less than b )
o a > b ( a greater than b )
o a = = b ( a equal to b )
o a < = b ( a less than or equal to b )
o a > = b ( a greater than or equal to b )
where,
Code Examples
Let's understand with the help of two coding examples.
Example 1:
The code shows the initialization of values to the two variables a and b. In this example, the first
condition is True. Hence the corresponding information is printed.
Example 2:
In the above example, we have initialized the value of x. Since the value of x is less than 100, the
second condition is true. Hence, LED2 will light up.
If else
The if-else condition includes if ( ) statement and else ( ) statement. The condition in the else
statement is executed if the result of the If ( ) statement is false.
1. if (condition)
2. {
3. // statements
4. }
5. else
6. {
7. //statements
8. }
The else( ) statement can also include other if statements. Due to this, we can run multiple
statements in a single program.
Code Example
Let's understand if else statement with the help of two examples.
Example 1:
1. int a = 5;
2. int b= 6;
3. void setup ( )
4. {
5. Serial.begin ( 9600 );
6. }
7. void loop ( )
8. {
9. if ( a > b )
10. {
11. Serial.println ( " a is greater " );
12. }
13. else
14. {
15. Serial.println ( " a is smaller " );
16. }
17. }
In the above example, the values are initialized to the variables a and b. The message
concerning the satisfied condition will be printed.
Example 2:
If the initialized value of x is less than 100, the message ' LED1 will not light ' will be printed in
the output.
Else if
The else if statement can be used with or without the else ( ) statement. We can include
multiple else if statements in a program.
1. if (condition)
2. {
3. // statements
4. }
5. else if ( condition)
6. {
7. // statements
8. // only if the first condition is false and the second is true
9. }
10. else
11. {
12. //statements
13. }
Code Example
Let's understand else-if statement with the help of an example.
Example 1:
Consider the below code.
1. int i = 2;
2. int j = 3;
3. void setup ( )
4. {
5. Serial.begin(9600);
6. }
7. void loop ( )
8. {
9. if ( i > j )
10. {
11. Serial.println( " I is greater ");
12. }
13. else if ( i < j )
14. {
15. Serial.println( " J is greater " );
16. }
17. else
18. {
19. Serial.println( " Both are equal " );
20. }
21. }
Output: J is greater
The else if ( ) statement will stop the flow once its execution is true.
where,
For example,
1. for ( i = 0 ; i < 5 ; i + +)
The above statement will execute the loop for five times. The values of i will be from 0 to 4.
1. for ( i = 0 ; i < = 5 ; i + +)
The above statement will execute the loop six times. The values of i will be from 0 to 5.
Note: If we do not want to execute the for loop again and again. Then, we can insert the for loop in
the void setup( ) function.
Example 1:
To print a message 'Arduino' 15 times.
To print a message 15 times or more is quite complicated using Serial.println ( ), as the code
will become too lengthy.
To overcome this, programmers prefer to use for loop to execute a task multiple times, while
using a single statement.
Output:
Example 2:
To use a multiplication increment
The multiplication increment in the for loop will generate a logarithmic progression.
1. int x;
2. void setup ( )
3. {
4. Serial.begin(9600);
5. for (x = 2; x < 100; x = x * 2)
6. {
7. Serial.println(x);
8. }
9. }
10. void loop ( ) {
11. }
Output:
We can also declare the int data type directly in the for loop.
For example,
1. const int pinPWM = 11; // here, we have initialized the PWM pin.
2. void setup ( )
3. {
4. Serial.begin(9600);
5. }
6. void loop ( )
7. {
8. int x = 1;
9. for (int i = 0; i > -1; i = i + x)
10. {
11. analogWrite(pinPWM, i);
12. if (i == 255)
13. {
14. x = -1; // It will switch the direction at peak
15. }
16. delay(10); // It is delay time of 10 milliseconds
17. // the lesser the time, the more fading effect can be seen clearly
18. }
19. }
For the connection, we will connect the positive terminal of the LED in series with the resistor to
PIN 11 (PWM pin), and the negative terminal of the LED to GND.
Note: The for loops in C++ programming language is much more flexible than other types of
programming languages.
Example 4:
Consider the below code:
1. void setup ( )
2. {
3. int i;
4. Serial.begin(9600);
5. for (i = 0; i < 4; i = i + 1)
6. {
7. Serial.println( "Hello Arduino" );
8. }
9. Serial.println( " DONE");
10. }
11. void loop ( )
12. {
13. }
The above code will print 'Hello Arduino' four times. After that the condition becomes false,
control comes out of the loop, and 'DONE' is printed.
Output:
Similarly, we can create any program using for loop accordingly.
The while loop will never exit until the tested condition is changed or made to stop. The
common use of a while loop in Arduino includes sensor testing, calibration (calibrating the
input of sensor), variable increment, etc.
1. while (condition)
2. {
3. // code or set of statements
4. }
where,
condition: It specifies the boolean expression, which determines the condition to be true or
false.
For example,
1. variable = 0;
2. while (variable < 100) {
3. // performs the specified task 100 times repeatedly
4. variable++ ; // increments after every execution
5. }
The above code inside the curly braces in while loop will execute continuously and repeatedly as
long as the variable is less than 100.
Flowchart
The flowchart is shown below:
Code Example
In order to change the flow of the program, we need to change the specified condition inside the
parentheses of while loop. The process is much like the if statement.
Example 1:
1. int a = 0;
2. void setup()
3. {
4. Serial.begin(9600);
5. while( a < 5)
6. {
7. Serial.println("Welcome to Arduino");
8. a = a + 1;
9. }
10. }
11. void loop()
12. {
13. }
Output:
The message inside the loop will be printed five times, as shown below:
Explanation: At first, we have defined the variable a as 0, and initialized the serial monitor as
usual (means Serial.begin()). The loop first checks the condition specified within the
parentheses. At first, a =0. The condition is true (0 < 5). The code inside the curly braces will
execute, and the message is printed.
Now, the value of a is incremented (added 1 to a), and the loop executes again.
Similarly, five times the condition remains true. When a =5, the condition becomes false, and the
loop exits and drops. The code outside the loop is executed.
Example 2:
The code is similar to the above example. We will only add some statements outside the loop.
1. int a = 0;
2. void setup()
3. {
4. Serial.begin(9600);
5. while( a < 5)
6. {
7. Serial.println("Welcome to Arduino");
8. a = a + 1;
9. }
10. Serial.println("DONE");
11. Serial.println("Welcome to the code outside the loop");
12. }
13. void loop()
14. {
15. }
Output:
We can notice that as soon as the condition in the loop becomes false, the message specified
outside the loop is printed.
do...while
The working of the do-while loop is similar to the while loop. The condition inside the do-while
will execute at least once. It is because the condition is tested at the end of the loop instead of
the beginning.
1. do
2. {
3. // code or set of statements
4. } while (condition);
where,
condition: It specifies the boolean expression, which determines the condition to be true or
false.
For example,
1. int b = 0;
2. do {
3. delay(100); // wait for stabilization of the sensors
4. b = readSensors(); // It checks the sensors
5. } while (x < 100); // specified condition
Flowchart
The flowchart is shown below:
Code Example
Let's understand the concept of the do-while loop with an example.
Example 1:
Consider the below code:
1. int a = 0;
2. void setup()
3. {
4. Serial.begin(9600);
5. do
6. {
7. Serial.println("Welcome to the do while loop");
8. a = a + 1;
9. } while( a < 3);
10. }
11. void loop()
12. {
13. }
Output:
The break keyword is used at the end of each case. For example, if there are five cases, the
break statements will also be five. The break statement exits the switch case.
The switch statement without a break will continue to execute all the cases until the end. Hence,
it is essential to include a break statement at the end of each case.
1. switch(variable)
2. {
3. case 1:
4. // statements related to case1
5. break;
6. case 2:
7. // statements related to case2
8. break;
9. .
10. .
11. case n:
12. // statements related to case n
13. break;
14. default:
15. // it contains the optional code
16. //if nothing matches in the above cases, the default statement runs
17. break;
18. }
where,
variable: It includes the variables whose value will be compared with the multiple cases
value: It consists of a value to compare. These values are constants. The allowed data types
are int and char.
But for some cases, implementing a switch case is somewhat easier than if statements.
The if statement allows us to choose between the two options, TRUE or FALSE. We can also use
multiple if statements for more than two cases. The switch case allows us to choose between
various discrete options.
Code Example
We will include the switch case in the setup() function, as we do not require the repeated
execution.
Output:
Arduino String
The string is a data type that stores text rather than the integer values. It is similar to other data
types such as integer, float, etc., in Arduino.
o char StrA[10];
o char StringA[8] = {'w', 'e', 'l', 'c', 'o', 'm', 'e'};
o char StringB[8] = {'w', 'e', 'l', 'c', 'o', 'm', 'e', '\0'};
We can also declare an array with extra space for a string constant StrA.
The data type is char. Each character is an element in string. For example, Arduino contains
seven characters. So, we need to declare an array atleast of size 8 (1 extra to store the null
character at the end of the string).
When we create a string using the double quotes like the word "text" specified above, the
compiler automatically creates an element out of each character. It further appends the null
character to the end.
The null character has the value 0 in the ASCII table. It is defined using two characters ( \ and
\0). The backslash (\) represents the special character when used in conjunction with other
characters. The backslash is also known as an escape character. The null character is added by
the compiler to terminate the string.
Note: Strings are always declared inside the double quotes, while characters are declared inside
single quotes.
Let's start.
The code will print Hello Arduino multiple times, as shown below:
Output:
Array of Strings
We can specify the array of strings while working with large projects, such as LCD display, etc.
The array names are also considered as pointers. The data type marked with an asterisk is
defined as pointers.
1. char *StrAB[] = {"Welcome to string A to G in Arduino", "Here is string A", "Here is string B
", "Here is string C", "Here is string D", "Here is string E",
2. "Here is string F", "Here is string G" };
3. void setup() {
4. Serial.begin(9600);
5. }
6. void loop() {
7. for (int i = 0; i < 8; i++)
8. {
9. Serial.println(StrAB[i]);
10. delay(1000);
11. }
12. }
Output:
Arduino String Object
What are objects in Arduino?
An object is like a variable, which points to a memory location that holds some data. The
functions associated with the object are called member functions. As a result, we can make the
objects to perform some actions.
For example,
The begin(), print(), and println() are the functions that are declared using the serial object. The
period after the Serial (print(), etc.) specifies that we are accessing some members within the
serial object. The members can be either a function or a variable.
The parentheses after the print() and println() function determines the function being called in
the serial. These functions cannot be declared alone in the global scope in the code. Thus, they
are declared with the serial object as Serial.print() and Serial.println().
String Object
The String object allows us to store and perform actions on an array of characters. The String
object takes more memory than the regular String.
The String object is always displayed with the uppercase 'S'. It produces an instance of the
String class.
It can be constructed from different data types, which are listed below:
It creates a string that consists of the ASCII representation of the number 15.
To specify a number with base other than 10, the String can be created as:
It will give us the String ''F''. It signifies the hexadecimal conversion of the decimal number 15.
It will give us the String ''1111''. It signifies the hexadecimal conversion of the decimal number
15.
1. String(value)
2. String(value, base)
3. String(value, PlacesofaDecimal)
where,
The data types are byte, unsigned int, char, float, double, unsigned long, long, int, and string.
base: It signifies the base, which is required to format the integer value. For example, HEX, BIN,
etc.
PlacesofaDecimal: It specifies the desired decimal places, which is only needed if the value is
double or float.
o charAT()
It is used to access a specific character.
1. thisString.charAT(n)
where,
n is also a variable
The above syntax will return the nth character of the specified string.
o compareTo()
It is used to compare the two Strings. The specified Strings are compared using the ASCII
values of the characters.
1. thisString.compareTo(myString)
where,
The above syntax will return a negative number if thisString comes before myString.
o endsWith()
It tests that if a String ends with the characters of other String or not.
1. thisString.endsWith(myString)
where,
It will return true if thisString ends with the characters of myString. Otherwise, it will return false.
o startsWith()
It tests that if a String starts with the characters of other String or not.
1. thisString.startsWith(myString)
where,
It will return true if thisString starts with the characters of myString. Otherwise, it will
return false.
o toLowerCase()
1. thisString.toLowerCase()
where,
o toUpperCase()
1. thisString.toUpperCase()
where,
o equals()
It compares the equality of the Two Strings. The comparison is quite sensitive, where String
"Arduino" is not equal to the String "ARDUINO".
where,
It will return true if thisString equals to myString. Otherwise, it will return false.
o getBytes()
1. thisString.getBytes(buffer, length)
where,
buffer: The characters are copied into the buffer. The required data type is the byte.
length: It signifies the size of the buffer. The required data type is unsigned int.
o lastIndexOf()
1. thisString.lastIndexOf(value)
2. thisString.lastIndexOf(value, from)
where,
value: It includes the particular value to search for. The required data types are String and char.
o substring()
1. thisString.substring(from)
2. thisString.substring(from, to)
where,
from: It is defined as the index, from where the substring will start
o toInt()
1. thisString.toInt()
where,
The required data type is long. It returns zero if the conversation is invalid or a String does not
start with an integer number.
o toFloat()
1. thisString.toFloat()
where,
The required data type is float. It returns zero if the conversation is invalid or a String does not
start with a digit.
o trim()
It modifies the String by removing the extra whitespaces.
1. thisString.trim()
where,
Code Example
Let's understand the String Object with two examples.
Example 1:
1. void setup()
2. {
3. Serial.begin(9600);
4. String thisString = "Welcome to Arduino";
5. Serial.println(thisString.charAt(8));
6. }
7. void loop()
8. {
9. }
Output: t
Example 2:
1. void setup()
2. {
3. Serial.begin(9600);
4. String thisString = "Welcome to Arduino";
5.
6. thisString.concat("String Object");
7.
8. Serial.println(thisString);
9. }
10. void loop()
11. {
12. }
Output
Blinking an LED
It is the simple basic project created using Arduino. LED (Light Emitting Diode) is an electronic
device, which emits light when the current passes through its terminals. LED's are used in
various applications. It is also used as an ON/OFF indicator in different electronic devices.
In this project, we will connect the LED to the digital pin on the Arduino board. The LED will work
as a simple light that can be turned ON and OFF for a specified duration.
Structure of LED
An LED is a two-terminal device. The two terminals are called as Cathode and Anode.
It is shown below:
The long terminal is called Anode, and the shorter terminal is called Cathode. Here, cathode is
the negative terminal and anode is the positive terminal.
We can use a resistor of any value upto 470 Ohms. We can use other value of resistors as well,
depending on our circuit requirements. Usually, the value should not exceed the allowable
forward current.
It is shown below:
Sketch
We need to install the Arduino IDE, to begin with the coding, which is already discussed.
Open the IDE and start with the coding, which is given below:
1. void setup ()
2. {
3. pinMode ( 8, OUTPUT); // to set the OUTPUT mode of pin number 8.
4. }
5. void loop ()
6. {
7. digitalWrite (8, HIGH);
8. delay(1000); // 1 second = 1 x 1000 milliseconds
9. digitalWrite (8, LOW);
10. delay(500); // 0.5 second = 0.5 x 1000 milliseconds
11. }
We can modify the delay duration according to our choice or as per the requirements.
Every statement of coding is explained in Arduino coding basics. You can open the URL for clear
understanding.
The sketch will be uploaded to the board after the correct compiling, as shown below:
We are required to click on the Verify button to compile the code.
The RX and TX LED on the board will light up after the successful uploading of the code.
Procedure
The procedure to join the components of the project is shown below:
o Attach an LED on the breadboard. We need to plug-in the two terminals of an LED into
the holes of the breadboard.
o Connect the left leg of the resistor (connected in series with red LED) to the digital
output pin of the UNO board, i.e., PIN 8.
o Connect the negative/shorter terminal (Cathode) of the LED to the GND pin of the UNO
board using the wire, as shown below:
Here, the orange wire is connected to the PIN 8, and the blue wire is connected to the GND.
The shorter terminal indicates the negative. So, we will connect the shorter terminal to the
Ground (GND).
Important points
The resistor prevents the excess current from reaching the LED. The excess current in the
connection can burn the LED. Hence, a resistor in series with the LED is used in the connection.
o We can use any pin as the OUTPUT pin. For example, 8, 13, 7, 4, and 3. The other pins are
PWM and analog pins.
o One terminal of the LED is connected to the Ground while the other terminal is
connected to the digital pin. The digital pin has only two values 0 or 1.
o HIGH = 1
o LOW = 0
o Arduino UNO board is recommended for all basic projects because it is easy to
understand and implement. It is also the standard Arduino board from all types of
boards used. It supplies power and also acts as a serial port.
The concept of blinking two LED's is similar to the blinking of a single LED. As we know, we can
use the resistance of any value, so let's take the resistors of 470 Ohms. The resistors reduce the
amount of current reaching the LED, which saves the LED from being burnt.
We can also use other resistors depending on the circuit limit and requirements.
The long terminal is called Anode (positive charged), and the short terminal is called Cathode
(negative charged).
Components
The components used in the project are listed below:
Similarly, the positive terminal (cathode) of the green LED is connected to PIN 7 and the
negative terminal is connected to the ground.
As mentioned, two resistors each of 470 Ohms, will be connected in series to the two LEDs in
the project.
The structure will represent the pinout diagram of the project. It is shown below:
Sketch
Open the Arduino IDE (Integrated Development Environment) and start with the coding, which is
given below:
1. void setup ()
2. {
3. pinMode ( 13, OUTPUT); // to set the OUTPUT mode of pin number 13.
4. pinMode ( 7, OUTPUT); // to set the OUTPUT mode of pin number 7.
5. }
6. void loop ()
7. {
8. digitalWrite (13, HIGH);
9. digitalWrite (7, LOW);
10. delay(1500); // 1.5 second = 1.5 x 1000 milliseconds
11. digitalWrite (13, LOW);
12. digitalWrite (7, HIGH);
13. delay(1000); // 1 second = 1 x 1000 milliseconds
14. }
We can modify the delay duration according to our choice or as per the requirements.
The sketch will be uploaded to the board after the correct compiling, as shown below:
Click on the Verify button present on the toolbar to compile the code.
The RX and TX LED on the board will light up after the successful uploading of the code.
Procedure
The procedure to join the components of the project is shown below:
We need to check that the plug-in is performed correctly, as shown above. For any confusion,
check the pin diagram shown above in the heading- Structure of project.
o Connect the left leg of the resistor (connected in series with red LED) to the digital
output pin of the UNO board, i.e., PIN 13.
o Connect the left leg of the resistor (connected in series with green LED) to the digital
output pin of the UNO board, i.e., PIN 7.
o Connect the negative/shorter terminal (Cathode) of the red and green LED to
the GND pin of the UNO board using the wire, as shown below:
Here, the red wire is connected to the PIN 13, and the blue wire is connected to the GND.
Similarly, the green wire is connected to the PIN 7, and the orange wire is connected to the GND.
Note: The different colors of wire are used only for a better understanding.
The shorter terminal indicates the ground. So, we will connect the shorter terminal to the
Ground (GND).
It means when the red LED will be ON, the green LED will be OFF and vice versa.
Hardware Required
The components required for the project are listed below:
o 5 x red LED
o 5 x 220 Ohm Resistors
o Arduino UNO R3 board
o Jump wires
Principle
We will connect the five LEDs to pins 13, 12, 8, 4, and 2 of the Arduino board. The required
resistance of the resistors is enough to light up an LED without damaging the board and other
components.
The LED arranged one after another will light up. We can also change or rearrange the LEDs
connected to the specified pin number on the board.
It is shown below:
Connection
The connection of the above project is discussed below:
o Connect the resistor of 220 Ohm in series with the five LEDs. Now connect it to the pin
number 13, 12, 8, 4, and 2 of the Arduino board.
o Connect the negative terminal of the five LEDs to the GND (Ground).
Sketch
The code to light the five LEDs is given below:
In this project, we will discuss the process to blink three LEDs using for loop. The three LEDs
will light up one after the other.
Hardware Required
The components required for the project are listed below:
o 3 x red LED
o 3 x 220 Ohm Resistors
o Arduino UNO R3 board
o Jump wires
Principle
We will connect the three LEDs to pins 13, 8, and 4 of the Arduino board. The limiting value of
resistance should be between 220 and 330 ohms to set the optimal current through the LEDs.
The required resistance is enough to light up an LED without damaging the board and the LED.
We will turn the LED ON/OFF individually.
It is shown below:
Procedure
The connection of the above project is discussed below:
o Connect the resistor of 220 Ohm in series with the three LEDs. Now connect it to the pin
number 13, 8, and 4 of the Arduino board.
o Connect the negative terminal of the three LEDs to the GND (Ground).
Sketch
Open the Arduino IDE and start with the coding, which is given below:
1. /*
2. This program blinks LED connection to the pin number 13, 8, and 4
3. */
4. void setup()
5. {
6. pinMode(13, OUTPUT);
7. pinMode(8, OUTPUT);
8. pinMode(4, OUTPUT);
9. }
10. void loop()
11. {
12. // the first LED is made to blink one time
13. digitalWrite(13, HIGH);
14. delay(1000); // delay time in milliseconds
15. digitalWrite(13, LOW);
16. delay(1000);
17. // the second LED will blink two times
18. digitalWrite(8, HIGH);
19. delay(500); // the duration is 0.5 seconds
20. digitalWrite(8, LOW);
21. delay(500);
22. digitalWrite(8, HIGH);
23. delay(500);
24. digitalWrite(8, LOW);
25. delay(500);
26. // the third LED will blink three times
27. for( int i = 0; i < 3; i = i +1 )
28. {
29. digitalWrite(4, HIGH);
30. delay(500);
31. digitalWrite(4, LOW);
32. delay(500);
33. // We can adjust the delay time accordingly
34. }
35. }
Connection Diagram
We will show the connection using the Simulator because the connections become clearer and
more precise.
Hardware Required
The components required for the project are listed below:
o 4 x red LED
o 4 x 220 Ohm Resistors
o Arduino UNO R3 board
o Jump wires
The switch statement will compare the declared value of a variable with statements in other
cases. The code associated with the matching case will run.
We will also change or rearrange the LEDs connected to the specified pin number on the board.
It is shown below:
Connection
The connection of the above project is discussed below:
o Connect the resistor of 220 Ohm in series with the four LEDs. Now connect it to the pin
number 12, 11, 8, and 6 of the Arduino board.
o Connect the negative terminal of the five LEDs to the GND (Ground).
Sketch
Consider the below code:
1. void setup()
2. {
3. // initialize serial communication:
4. Serial.begin(9600);
5. // initializing the LED pins:
6. for (int LEDpin = 6; LEDpin <13 ; LEDpin++) {
7. pinMode(LEDpin, OUTPUT);
8. // here, we have used for loop for initialization
9. }
10. }
11. void loop()
12. {
13. int a = 3; // we can specify any variable name
14. switch (a)
15. {
16. case 1:
17. digitalWrite(6, HIGH);
18. break;
19. case 2:
20. digitalWrite(8, HIGH);
21. break;
22. case 3:
23. digitalWrite(11, HIGH);
24. break;
25. case 4:
26. digitalWrite(12, HIGH);
27. break;
28. default:
29. // turn all the LEDs off if all the above cases does not matches:
30. for (int LEDpin = 6; LEDpin <13; LEDpin++)
31. {
32. digitalWrite(LEDpin, LOW);
33. }
34. }
35. }
In the above code, the specified value of variable matches with case 3. Hence, the LED
connected to pin number 11 will light up.
Connection Diagram
We will show the connection using the Simulator because the connections become clearer and
more precise.
The LED connected to the PIN 11 will light up, as shown below:
Arduino Simulator
The Arduino simulator is a virtual portrayal of the circuits of Arduino in the real world. We can
create many projects using a simulator without the need for any hardware.
The Simulator helps beginner and professional designers to learn, program, and create their
projects without wasting time on collecting hardware equipments.
o It saves money, because there is no need to buy hardware equipments to make a project.
o The task to create and learn Arduino is easy for beginners.
o We need not to worry about the damage of board and related equipments.
o No messy wire structure required.
o It helps students to eliminate their mistakes and errors using simulator.
o It supports line to line debugging, and helps to find out the errors easily.
o We can learn the code and build projects anywhere with our computer and internet
connection.
o We can also share our design with others.
Types of Simulator
There are various simulators available. Some are available for free, while some require a license
to access the simulators.
o Autodesk Tinkercad
o Emulator Arduino Simulator
o Autodesk Eagle
o Proteus Simulator
o Virtronics Arduino Simulator
o ArduinoSim
Autodesk Eagle is an advanced simulator, which is used to design 2D and 3D models of PCB,
modular designs, multi-sheet schematics, real-time synchronization, etc.
Example Code
Let's write a simple code to blink an LED.
Arduino Switch
Switches are used to turn ON/OFF devices and to connect different parts of a circuit. The slide-
switch in Arduino moves the slider of the switch from the open position (ON) to the closed
position (OFF).
It allows the flow of current in the circuit without the need for splice wire. The slide switches are
widely used in small circuits applications.
o Closed circuits
The closed circuits have closed loop. Electrons can easily flow in a closed circuit and light up
an LED.
o Open circuits
The open circuits have open ends, due to which electrons cannot flow through the circuit.
We can use an electronic component switch, to open and close circuits without the need to
disconnect the wires by hand again and again.
Types of Switches
There are major four types of switches in Arduino, which are listed below:
It is a switch that has one input and one output. The circuit is ON when the switch is closed and
vice versa.
It is a three-terminal switch. It has a single input, which can switch between two outputs.
It is a switch with one input and three outputs, where each input corresponds to any of the
output in a circuit.
It is a switch with two inputs and four outputs. Each input of a switch in Arduino can be
connected to either of the two outputs.
where,
Throw: It signifies the number of positions in which each pole of the switch can connect to it.
Code Example
Let's discuss an example to light an LED using a Switch. Here, we will use the SPDT (Single Pole
Double Throw) Switch.
If we leave one side of the switch, it can work as SPST (Single Pole Single Throw) switch.
Components Required
5. Connect the positive terminal of LED in series with the resistor to PIN 8.
6. Connect the common terminal or the middle terminal to pin number 3. It is because the
middle terminal is the input terminal.
7. Connect one end of slide switch to Ground and another end to 5V.
Arduino button
The buttons are similar to switches that create and break electrical connections in the circuits.
The button plays a transition between ON and OFF state. A single press turns the state ON,
while another press turns the state OFF. It means that the button connects the two points in a
circuit when we press them.
o NO (Normally Open)
We mostly use NO types of buttons. In such type, the state of the button is in rest. It means that
a terminal in such a condition is not connected.
It is shown below:
o NC (Normally Closed)
It is defined as the working state of the button. It connects the terminals of the circuit and
allows current to flow through the load.
It is shown below:
Due to the open ends of the circuit, the current cannot flow through it. The state of the circuit is
in rest.
Another type of button is pushbutton, which is widely used in projects and circuits.
Structure of pushbutton
Let's understand the structure of pushbutton.
The pushbutton is a square shape button with four terminals, as shown below:
The two pins are next to each other on one side and another two pins on the other side. The
pins across to each other are connected. The pins next to each other can only be connected,
when we press the button.
We can also connect two opposite terminals of the pushbutton, as shown below:
Code Example
Here, we will light an LED by pressing the pushbutton. When we press the push button, it turns
ON the LED connected to the PIN 13 on the Arduino UNO board.
Components Required
Code
The code for the upper circuit is shown below:
1. const int ledpin = 2; // initializing pin number 2 to the LED
2. const int buttonpin = 4; // initializing pin number 4 to the button
3. int buttonState = 0;
4. void setup()
5. {
6. Serial.begin(9600);
7. pinMode(buttonpin, INPUT);
8. pinMode(ledpin, OUTPUT);
9. }
10. void loop()
11. {
12. // read the state of the pushbutton value
13. buttonState = digitalRead(buttonpin);
14. // check if pushbutton is pressed. if it is, the
15. // buttonState is HIGH
16. if (buttonState == HIGH) {
17. // turn LED on
18. digitalWrite(ledpin, HIGH);
19. Serial.println("LED is ON");
20. //When we press the button, it will print LED is ON.
21. delay ( 500);
22. }
23. else
24. {
25. // turn LED off
26. digitalWrite(ledpin, LOW);
27. Serial.println("LED is OFF"); // When we press the button, it will print LED is OFF.
28. }
29. delay ( 500);
30. }
Output
When we continuously press the button, LED will light. The message 'LED is ON' will print on the
Serial Monitor after every 500 milliseconds.
Arduino PWM
The PWM (Pulse Width Modulation) is a method of controlling the average voltage. It is
a stream of voltage pulses that reduces the electric power supplied by the electrical signal. The
effective voltage is controlled by the width of individual pulses in a stream of voltage pulses of a
PWM signal.
The common use of PWM pins includes controlling LEDs and DC Motors.
The PWM in LED controls the frequency of the light. It means the LED will be ON/OFF at a
frequency detectable by our eyes.
The PWM in DC Motors acts like a pulse train of a DC signal. The DC motors receive a high or
low electrical power input based on the width of the PWM pulses.
We can also use PWM for voltage regulation, audio signal generation, devices control (pump,
hydraulics, etc.), servo motor, etc.
Principle of PWM
The state of the Digital Input/Output pins in Arduino is either HIGH ( 1 ) or LOW ( 0).
Here,
Here,
tc: It is the total duration of the signal as the sum of HIGH and LOW.
We can control the effective voltage of the DC motor in Arduino by regulating the PWM duty
cycle.
For example,
Arduino UNO
Arduino UNO board consists of 14 digital Input/Output pins, where pin 11, 10, 9, 6, 5, and 3 are
PWM pins. The pinMode(), digitalRead(), digitalWrite() functions control the operation of non-
PWM pins.
The pinMode() function is used to declare the specific pin as input/output. The digitalRead is
used to read the HIGH or LOW state of a pin.
We need to use the analogWrite() to set the duty cycle of a PWM (Pulse Width Modulation)
pulse.
analogWrite()
It writes a PWM value or analog value to a pin. We can light an LED with varying brightness with
the help of analogWrite(). It is also used to drive a motor at varying speeds.
When an analogWrite() function is called, a stable rectangular wave of particular duty cycle is
generated by the specified PWM pin until the next analogWrite() is called on that same pin.
The PWM pins are present on every Arduino Board. The frequency can also vary for some PWM
pins present on the particular board.
For example,
The PWM pins on the Arduino Leonardo/Micro are 3, 5, 6, 9, 10, 11, and 13. The frequency on pin
3 and 11 will be 980Hz, while other PWM pins have 490Hz of frequency.
1. analogWrite(pin, value)
where,
value: It determines the value of the duty cycle between 0 and 255.
Note: The analogWrite( ) function is not related to the analogRead() or analog pins.
o The analogRead() is used to read the analog value, while analogWrite() function is used
to write the PWM value.
o The value of analogRead() ranges from 0 to 1023, while analogWrite() ranges from 0 to
255.
Let's understand with an example.
In the case of the PWM pin, we will specify the value instead of HIGH or LOW.
For example,
HIGH = 255
LOW = 0
1. void setup()
2. {
3. pinMode(10, OUTPUT); // the declared pin must be among the PWM pins.
4. }
5. void loop()
6. {
7. analogWrite(10, 255); // 255 is the highest value.
8. //We can modify the value as per the required brightness.
9. delay(1000);
10. analogWrite(10, 0);
11. delay(1000); // time delay of 1 second or 1000 milliseconds
12. }
The value associated with the analog signal is from 0 to 255. It means 256 levels of values.
We can determine the output PWM voltage by using the below formula:
1. void setup()
2. {
3. pinMode(6, OUTPUT); // the declared pin must be among the PWM pins.
4. }
5. void loop()
6. {
7. analogWrite(6, 255); // brightness increases as value increases
8. delay(1000);
9. analogWrite(6, 180);// brightness level
10. delay(1000);
11. analogWrite(6, 80);
12. delay(1000);
13. analogWrite(6, 20); // brightness decreases as value decreases
14. delay(1000);
15. }
In the above example, the brightness of the LED will decrease according to the specified value
of brightness.
Arduino Library
The Library is considered as the advanced feature, which extends the capabilities of the Arduino
IDE. It means that the libraries provide extra functionality to the programming platform of
Arduino.
The libraries in Arduino are written in C or C++ (.cpp). These libraries allow us to manipulate
data and work with the hardware.
To implement any Library in the Arduino IDE, go to the Sketch -> Import Library.
There are several libraries available for download. We can also create our own library.
Standard Libraries
The standard libraries are listed below:
EEPROM
It stands for Electronic Erasable Programmable Read Only Memory. The EEPROM is
associated with the microcontroller present on the AVR or Arduino Boards. The EEPROM library
allows us to read the bytes stored in the memory when the power of the board is off.
The size of EEPROM varies in different boards, such as 1KB or 1024 bytes on the ATmega328P.
It can also be of 4KB or 4096 bytes on the Microcontroller ATmega2560, etc.
1. #include <EEPROM.h>
For example, EEPROM Read, EEPROM Clear, EEPROM Write, EEPROM Get, EEPROM Update,
EEPROM Put, EEPROM Iteration, etc.
Ethernet Library
The Ethernet library works with the Arduino Ethernet shield and other related devices. The
Ethernet library allows us to connect the Arduino board to the Internet.
The SPI bus acts as an intermediate between the board and the shield.
1. #include <Ethernet.h>
2. #include <SPI.h>
It is used to implement the firmware protocol, which communicates with the software on the
host computer.
1. #include <Firmata.h>
GSM Library
The GSM library exists on the IDE version 1.0.4 and up.
The GSM library allows us to perform the operations on the Arduino board similar to the GSM
phone, such as internet connection, send and receive messages, and to place voice calls.
1. #include <GSM.h>
1. #include <LiquidCrystal.h>
SD Library
It allows writing to or reading from SD cards. For example, Arduino Ethernet Shield. The file
names include the paths separated by the forward slashes, which are passed to the SD Library.
But, SPI is used for the communication between the SD card and the Arduino.
1. #include <SPI.h>
2. #include <SD.h>
The examples are Dump files, List Files, Read Write, etc.
Servo Library
The Servo library permits Arduino to work with servo motors. It allows controlling the integrated
shaft and gears. We can also position shaft at different angles between 0 and 180 degrees. The
servo library on Arduino boards can support upto 12 motors, while on Arduino Mega board, it
can support upto 48 motors.
1. #include <Servo.h>
SPI Library
The SPI (Serial Peripheral Interface) is a serial data protocol. The microcontrollers use the
serial protocol to communicate over short distances with one or more peripheral devices
quickly.
The required connection of SPI is a full-duplex that allows devices to simultaneously sent and
receive data.
1. #include <SPI.h>
The examples are Dump files, List Files, Read Write, etc.
Stepper Library
The Stepper library in Arduino permits to control of bipolar or unipolar stepper motors.
1. #include <Stepper.h>
The Stepper includes stepper speed control, stepper one revolution, etc.
The SD card slot present on the onboard screen can be used by implementing the SD library.
The TFT library for communication depends on the SPI library with the SD card and screen.
1. #include <SPI.h>
2. #include <TFT.h>
WiFi Library
The WiFi library permits Arduino to establish a connection with the internet. It can either be a
server to receive the incoming connections or a client to perform outgoing connections.
The personal encryptions supported by the WiFi library are WPA2 and WEP except for WPA2
Enterprise. Arduino uses the SPI bus to communicate with the WiFi shield.
1. #include <WiFi.h>
Audio Library
The Audio library is compatible with the Arduino Due board only. It enables the board to
playback .wav files from the specific storage devices, such as the SD card.
1. #include <Audio.h>
Arduino Zero and MKR1000 board play sound by using the DAC0 pin.
1. #include <AudioZero.h>
1. #include <AudioSound.h>
We need to wait for the library to download. The downloading will depend on the connection
speed.
The 'INSTALLED' tag will appear in front of the library that is already installed on our computer.
It is shown below:
We can also recheck from the option Sketch -> Include library to see that the added libraries are
present or not on the list.
We are not required to unzip the downloaded library. The file will remain in the .zip format.
We can download the 3rd party libraries starting with the Arduino IDE version 1.0.5.
The library that allows us to control the LCD display is called Liquid Crystal Library, which is
discussed below:
1. #include <LiquidCrystal.h>
The library is based on a compatible chipset called Hitachi HD44780. It is found on most of the
LCDs that are based on text. It works with either an 8-bit mode or 4-bit mode. Here, the bit mode
signifies the data lines in addition to the enable, rs, and rw control lines (optional).
LCD Structure
The LCD display has a 16-pin interface.
The Liquid Crystal Display has a parallel interface. It means that the microcontroller operates
several pins at once to control the LCD display.
The 16-pins present on the LCD display are discussed below:
o RS
The Register Select (RS) pin controls the memory of the LCD in which we write the data. We can
select either the data register or the instruction register. The LCD looks for the upcoming
instruction, which is present in the instruction register.
o R/W
o E
The Enable (E) mode is used to enable the writing to the registers. It sends the data to the data
pins when the mode is HIGH.
o D0 to D7
These are eight data pins numbered as D0, D1, D3, D3, D4, D5, D6, and D7. We can set the state
of the data pin either HIGH or LOW.
Pin 1 of the LCD is the Ground pin, and pin 2 is the Vcc or the voltage source pin.
The pin 3 of the LCD is the VEE or the contrast pin. For example, we can connect the
potentiometer's output to the VEE and can adjust the contrast of the LCD.
The A and K pins are also called as Backlight pins (Bklt+ and Bklt-).
Principle of LCD
The process includes putting the data (to be displayed on the LCD screen) into the data
registers. The instructions in the Register Select are kept in the instruction register. The liquid
crystal library has simplified process to display the characters on the LCD.
The LCDs can be controlled in 4-bit or 8-bit modes, which requires 7 and 11 Input/Output pins
from the particular Arduino board.
Hardware Required
The components required for the project are listed below:
Procedure
The connection is explained below:
We need to first connect the data pins of LCD to the digital pins.
Sketch
The code to display the specified message on the LCD display is given below:
Output
The message 'Hello Arduino' will be printed on the LCD display, as shown below:
Arduino Potentiometer
The potentiometer is a device that is used to measure the voltage or electric potential. It
provides a variable resistance when the shaft of the device is turned.
Here, we will measure the amount of resistance as an analog value produced by the
potentiometer. We will connect the potentiometer to the Arduino UNO board and will measure
the state of the potentiometer. The required code will be uploaded from our computer to the
Arduino board.
The variable resistance measured by the potentiometer can be easily read as an analog value
into the Arduino board.
What is Potentiometer?
The potentiometer is a three-terminal device. It has a rotating contact that acts as an adjustable
voltage divider.
The potentiometer structure consists of a sliding contact (called wiper), a resistive element,
electrical terminals, and a housing.
The sliding contact moves along the resistive element, while the housing consists of the wiper
and the element.
Working: The fixed input voltage is applied across the two ends terminal of a potentiometer,
which further produces the adjustable output voltage at the wiper or slider.
As the slider moves from one end to another, the divider can vary the output voltage from
maximum to Ground.
The middle terminal of potentiometer is connected to the analog pin to read the analog data.
Hardware Required
o 1 x red LED
o Arduino UNO R3 board
o 10K Ohm Potentiometer
o Jump wires
o 220 Ohm resistor
Connection
o One outer pin of the potentiometer is connected to ground (GND), and other external pin
is connected to 5V of the Arduino board.
o The middle pin of the potentiometer is connected to the analog input pin A2 of the board.
o The positive terminal of the LED is connected in series with 220 Ohm resistor to pin
number 13 of the board, and the negative terminal is connected to the GND.
Procedure
The analog input will turn the LED ON and OFF, which is connected to the pin number 13 of the
Arduino UNO board. The time (delay time) at which LED is ON/OFF depends on the value
acquired by the analogread( ).
We have connected the potentiometer to the analog pin number 2 of the Arduino UNO board.
When the shaft is turned, the amount of resistance on either side of the potentiometer changes.
The distance between the pin connected to 5V and GND gives the analog input. We read input 0
when the shaft is turned in one direction, while we read input 1023 when the shaft is turned in
another direction.
In between the turning input between 0 and 1023, we get the desired value returned by the
analogRead( ). It is proportional to the voltage being applied to the pin.
Code
1. int potentiometerPIN = 2;
2. // It select the input pin connected to the middle terminal of the potentiometer
3. int LEDpin = 13; // It selects the LED pin
4. int value = 0; // value initialized to store the coming value from the sensor
5. void setup()
6. {
7. pinMode(LEDpin, OUTPUT); // The LED pin is declared as the output pin
8. }
9. void loop()
10. {
11. value = analogRead(potentiometerPIN); // It reads the value from the sensor
12. digitalWrite(LEDpin, HIGH); // turn the LEDpin ON
13. delay(value); // delay time in milliseconds
14. digitalWrite(LEDpin, LOW); // turn the LEDpin OFF
15. delay(value);
16. // the delay time depends on the value stored from the sensor
17. }
Connection diagram
Arduino Interrupt
The interrupts() in Arduino allows to certain essential tasks to be executed in the background,
and these are enabled by default.
The disabling of the interrupts() can interfere with the Arduino functions and may impact
communication. It means that some functions in Arduino will not work if the interrupts() is
disabled.
Interrupts can sometimes disturb the code timings. To prevent such disturbances, interrupts
can be disabled for a critical section of the code.
The syntax is:
1. interrupts()
1. void setup()
2. {
3. }
4. void loop()
5. {
6. interrupts();
7. // code is written here
8. nointerrupts();
9. // it includes sensitive code
10. // critical section of code
11. }
Features of Interrupts()
The features of interrupts() are listed below:
External Interrupts
The external interrupts are listed below:
o attachInterrupt()
o detachInterrupt()
attachInterrupt()
The first function to set the interrupt is: attachInterrupt( )
We are required to use the digitalPinToInterrupt(pin) to translate the real digital pin to the
interrupt number (a specified number).
For example,
1. digitalPinToInterrupt(5)
PIN- 2, 3
The pin number will be similar for all the boards based on 328 Microcontroller.
o Arduino Zero
PIN- 0, 1, 4, 5, 6, 7, 8, 9, A1, A2
o Arduino Due
Note: The variables modified within the attached function should be declared as volatile.
Here, the delay( ) function will not work inside the attached function. It needs an interrupt to work.
The syntax that is suitable for Due, Uno WiFi Rev2, Arduino SAMD Boards, and 101 is:
where,
ISR: It stands for Interrupt Service Routine. It is called when the interrupts arise. It does not
include any parameters.
o LOW
o FALLING
It is used to trigger the interrupt when the specified pin goes from high to low.
o CHANGE
It is used to trigger the interrupt when the specified pin changes the value.
o RISING
It is used to trigger the interrupt when the specified pin goes from low to high.
Code Example
Let's understand with an example.
detachInterrupt()
The detachInterrupt( ) is used to turn off the given or current interrupt.
1. detachInterrupt(digitalPinToInterrupt(pin))
1. detachInterrupt(interrupt)
The syntax that is suitable for Due, Uno WiFi Rev2, Arduino SAMD Boards, and 101 is:
1. detachInterrupt(pin)
where,
pin: It is the pin number of the Arduino board, which is used for the interrupt to disable.
Arduino SPI
The SPI (Serial Peripheral Interface) is a serial data protocol. The microcontrollers use the
serial protocol to communicate over short distances with one or more peripheral devices
quickly.
The required connection of SPI is a full-duplex that allows devices to simultaneously sent and
receive data. It uses four conductors for data receiving, data sending,
synchronization, and device selection for communication.
The SPI uses a master-slave architecture, where one Master device controls the peripheral
devices.
o MISO
It stands for Master Input/ Slave Output. The slave line in the MISO pin is used to send the data
to the master.
o MOSI
o SCK
It stands for Serial Clock. These are the clock pulses, which are used to synchronize the
transmission of data.
In slave, it works as the input of the clock generator. In master, it works as the output clock. The
data generated by the master is synchronized by the SCK.
o SS
It stands for Slave Select. It is the Slave Select line, which is used by the master. It acts as the
enable line.
When,
SS = LOW
SS = HIGH
The device does not notice the master. It allows us to share the same MISO, CLK, and MOSI
with the multiples SPI devices.
The SPI is a synchronous interface that has a structure of one master and multiple slave
communication.
Working of SPI
The SPI uses four lines for communication that are listed above (MISO, MOSI, CLK, and SS). A
master in the connection is popularly a microcontroller, and the slave can be a sensor, ADC
(Analog to Digital Converter), LCD (Liquid Crystal Display), DAC (Digital to Analog Converter), etc.
The arrow sign of MISO is in the opposite direction because it is a slave line that sends data to
the master.
Here, the SPI Master is communicating with two SPI slaves. The individual pins of the SPI
master are connected to SS of each slave.
SPI Pins
Let's discuss the SPI Master and Slave pins on the Arduino board.
MOSI - 4
MISO - 1
SCK - 3
Arduino UNO
MOSI - 11
MISO - 12
SCK - 13
Arduino Due
MOSI - 4
MISO - 1
SCK - 3
Arduino Zero
MOSI - 4
MISO - 1
SCK - 3
MOSI - 51
MISO - 50
SCK - 52
SPI Library
The library of SPI is:
1. # include <SPI.h>
The SPI library allows us to communicate as a master device with the Arduino and the SPI
devices.
SPI Modes
There are four modes of SPI, which combine the clock phase (CPHA), and clock polarity (CPOL).
These modes are called the four modes of transmission in SPI.
The clock phase is determined as the data clock signal and clock polarity determines the idle
state of the high or low signal.
The SPI modes control the shifted in and out state. The state lies on the rising and falling edge
of the clock polarity and clock phase.
Mode 0 - Here, the clock polarity is 0 (CPOL = 0), while the clock phase is 0 (CPHA = 0). The
data is captured at the Rising edge, and the output edge is Falling.
Mode 1- Here, the clock polarity is 0 (CPOL = 0), while the clock phase is 1 (CPHA = 1). The data
is captured at the Falling edge, and the output edge is Rising.
Mode 2- Here, the clock polarity is 1 (CPOL = 1), while clock phase is 0 (CPHA = 0). The data is
captured at the Falling edge, and the output edge is Rising.
Mode 3- Here, the clock polarity is 1 (CPOL = 1), while clock phase is 1 (CPHA = 1). The data is
captured at the Rising edge, and the output edge is Falling.
SPI Programming
We have to declare the SPI library before beginning with the SPI programming in Arduino.
SPI Speed
The SPI automatically uses the best speed, which is less or equal than the specified speed
number in the SPISettings. If we are using a chip rate of 15MHz, we can use the data speed of
15000000.
If we are using a chip rate of 20MHz, we can use the data speed of 20000000.
Functions
The functions used for SPI programming are given below:
o begin()
The SPI.begin() function is used to initialize the bus by setting the SS, SCK, and MOSI pins to the
outputs.
SS = High
It is the object that is used to configure the SPI port for the particular SPI device. It includes
three parameters, which are combined with this object.
The SPISettings can be directly declared inside the SPI.beginTransaction() function if the three
parameters are constant. We can create the SPISettings object if any of the settings are
variables.
where,
dataOrder= LSBFIRST (Least Significant Bit First) or MSBFIRST (Most Significant Bit First).
o beginTransaction()
The beginTransaction() function is used to initialize the SPI bus by using the defined
SPISettings.
1. SPI.beginTransaction(mysettings);
o end()
The end() function is used to disable the SPI bus without changing the pin modes.
1. SPI.end()
o transfer()
The transfer() function is used to transfer the data. We can call the function number of times.
o endTransaction()
1. SPI.endTransaction()
o setClockDivider()
The setClockDivider() function is used to set the clock divider with respect to the system clock.
The clock in AVR boards can be divided with the available divider value of 2, 4, 8, 16, 32, 64, and
128. The default value is 4, which is represented as SPI_CLOCK_DIV4 (for example, 5MHz for
the board at 20MHz). Similarly, other value will be represented.
The clock in Arduino due can be divided with the available divider values from 1 to 255, where
21 is the default value.
1. SPI.setClockDivider(divider value)
o setDataMode()
The setDataMode() function is used to set the data mode in the SPISettings.
1. SPI.setDataMode()
o setBitOrder()
The setBitOrder() function is used to set the order of the bits. These bits are shifted in and out
of the Serial Peripheral Interface Bus.
The order of bits is set either as LSBFirst (Least Significant Bit First) or MSBFirst (Most
Significant Bit First).
1. SPI.setBitOrder(order)
What are the Arduino sensors?
Arduino is the open-source platform used for making custom electronics projects. Before
learning about the Arduino Sensors, lets first understand the sensors as a general term.
A sensor and electronic devices always work together. The output signal is easily readable by
humans.
Nowadays, Sensors are used in daily lives. For example, controlling the brightness of the lamp
by touching its base, etc. The use of sensors is expanding with new technologies.
An example of sensors is Fire Alarm, a detector present on the fire alarm detects the smoke or
heat. The signal generated from the detector is sent to the alarming system, which produces an
alert in the form of alarm.
The types of detectors are smoke detectors, heat detectors, carbon monoxide detectors, multi-
sensors detectors, etc.
The light sensor is used to control the light. It is used with LDR (Light Dependent Resistor) in
Arduino.
o Ultrasonic sensor
The ultrasonic sensor is used to determine the distance of the object using SONAR.
o Temperature sensor
o Knock Sensor
The knock sensor is used to pick the vibrations of the knocking. It is a common category of a
vibration sensor.
It is used to detect the object by emitting infrared radiations, which are reflected or bounced
back by that object.
o Tracking Sensor
It allows the robots to follow a particular path specified by sensing the marking or lines on the
surface.
It is used to measure the water or the depth of the water level. It is also used to detect leaks in
containers.
o Vibration Sensor
It is commonly related to meteorology, biomedical fields. It looks like the below image:
o Pulse Sensor
The pulse sensor is used to measure the pulse rate. It looks like the below image:
o Microphone sensor
The microphone sensor in Arduino is used to detect the sound. The analog and digital are the
two outputs of this module. The digital output sends the high signal when the intensity of sound
reaches a certain threshold. We can adjust the sensitivity of a module with the help of a
potentiometer.
o humidity sensor
o Motion sensor
The motion sensor detects the movement and occupancy from the human body with the help of
Infrared radiation.
o Vibration sensor
o Sound sensor
o Pressure Sensor
The pressure sensor is used to measure the pressure. The sensor in Arduino measures the
pressure and displays it on the small LCD screen.
The magnetic field sensor measures the magnetic field strength and produces a varying voltage
as the output in Arduino.
Arduino LDR
Arduino LDR (Light Dependent Resistor) project uses the photoresistor to light an LED. The LED
will light up whenever there is dark or no light over the sensor.
What is photoresistor?
Hardware Required
The components required for the project are listed below:
o 1 x red LED
o 1 x 220 Ohm Resistor
o 1 x 10K Ohm Resistor
o Arduino UNO R3 board
o Jump wires
o 1 x photoresistor
where,
Vin = 5V
Here, R2 is the resistance connected in series with the photoresistor = 10K Ohm.
Note: The resistance decreases with increasing light. Hence, the output voltage will increase. It
means that the output voltage calculated at the light will be higher than the output voltage calculated
at dark.
Here, dark and light specify the light falling on the sensor.
Connection
The connection of the above project is discussed below:
o Connect the positive leg of the LED in series with the resistor to the pin number 12 of the
Arduino board.
o Connect the negative leg of the LED to the Ground.
o Connect one edge of the photoresistor to the 5V pin on the Arduino board.
o Attach a 10K ohm resistance in series with another edge of the photoresistor and
connect it to the GND.
o Connect the edge of the photoresistor to the analog pin A0.
Note: We have connected the LED only to enhance the project. We can also create the project
without using the LED. It will not impact the output.
Sketch
Consider the below code:
Connection Diagram
The connection diagram is shown below:
Output
We will use a three-axis accelerometer that gives acceleration for each Axis as an analog
voltage for separate pins.
We would be using the ADXL3xx accelerometer series. For example, ADXL320, ADXL322,
ADXL321, ADXL335, etc.
What is accelerometer?
The accelerometer is the device capable of detecting changes in motion in the form of
acceleration. It can also measure the vibration of a structure.
The acceleration (change in motion) or the vibration generates the force that causes the
piezoelectric material to be stressed. The microscopic crystals structure present in it creates
the voltage from the stress. The accelerometer interprets this voltage. The voltage is further
used to determine the orientation and velocity.
Usage of Accelerometer
ADXL335 Accelerometer
The structure of ADXL335 is shown below:
The position of the three axis (X-axis, Y-axis, and Z-axis) will change according to the ADXL335
accelerometer's position.
If we hold the board in a different position, the direction of the three-axis will also change.
Moving the board in a particular direction will cause a change in the voltage of the respective
axis. We can measure the changed voltage on the Arduino.
When we hold the board up and flat, the measured acceleration of 9.8m/s^2 will appear on the Z
-axis.
1.0G = of 9.8m/s^2
where,
s = 0.33V/G.
Note: Some accelerometers work at 5V while some at 3.3V. We need to make sure about the voltage
because the 3.3V accelerometer may be damaged with a 5V supply.
Hardware Required
The components required for the project are listed below:
o 1 x ADXL335 accelerometer
o 1 x Arduino UNO R3
Principle
We can directly plugged-in the accelerometer onto the Arduino. It is because the accelerometer
operates on minimal current.
The Arduino UNO has six analog pins. The three analog pins will be connected to the Vcc, Self-
Test, and the Ground pin. The other three analog pins will be used to read the analog output of
the accelerometer.
Structure
The structure of the project is shown below:
Connection
The connection for the above project is explained below:
It emits the Ultrasound at a frequency of 40KHZ or 40000 Hz. The frequency travels through the
air and strikes the object on its path. The rays bounce back from the object and reach back to
the module.
The four terminals of HC-SRO4 are VCC, TRIG, ECHO, and GND. The voltage supply or VCC is
+5V. We can connect the ECHO and TRIG terminal to any of the digital I/O pin on the specific
Arduino board.
The medium ranges of the sensor are 10cm to 3m. It works best at this duration.
o When samples strike the object, it bounces back from the object.
o The distance sensor reports the time it takes between the sending and receiving of the
samples.
Example
Let's consider an example.
An object is 40cm away from the Ultrasonic sensor. The speed of sound in air is 340m/s. We
need to calculate the time (in Microseconds).
Solution:
The speed of sound from the echo pin will double because the wave travels forward and
backward (bounces).
Hardware Required
The components required to create the project are listed below:
o Arduino UNO R3 board (We can also use any Arduino board)
o Jump wires
o Ultrasonic sensor HC-SRO4
o Breadboard
Principle
We need to first set the TRIG (triggered) pin at HIGH. It will send out the burst of 8 cycles called
the sonic burst, which will travel at the sound speed. It will be further received by the ECHO pin.
The time traveled by the sound wave is considered the ECHO pin's output time in microseconds.
We will use the PulseIn() function to read the time from the output of the ECHO pin. It will wait
for the specified pin to go HIGH and LOW. The function would return the timing at the end.
The TRIG pin is set LOW for 4 microseconds and then HIGH for 15 microseconds.
Procedure
The steps to connect the Ultrasonic sensor to the board are listed below:
Sketch
Consider the below code:
1. #define ECHOpin 5 // it defines the ECHO pin of the sensor to pin 5 of Arduino
2. #define TRIGpin 6
3. // we have defined the variable
4. long duration; // variable for the duration of sound wave travel
5. int distance; // variable for the distance measurement
6. void setup()
7. {
8. pinMode(TRIGpin, OUTPUT); // It sets the ECHO pin as OUTPUT
9. pinMode(ECHOpin, INPUT); // It sets the TRIG pin as INPUT
10. Serial.begin(9600); // // Serial Communication at the rate of 9600 bps
11. Serial.println("Test of the Ultrasonic Sensor HC-
SR04"); // It will appear on Serial Monitor
12. Serial.println("with the Arduino UNO R3 board");
13. }
14. void loop()
15. {
16. // It first sets the TRIG pin at LOW for 2 microseconds
17. digitalWrite(TRIGpin, LOW);
18. delayMicroseconds(4);
19. // It now sets TRIG pin at HIGH for 15 microseconds
20. digitalWrite(TRIGpin, HIGH);
21. delayMicroseconds(15);
22. digitalWrite(TRIGpin, LOW);
23. // It will read the ECHO pin and will return the time
24. duration = pulseIn(ECHOpin, HIGH);
25. // distance formula
26. distance = duration*(0.034/2); // (speed in microseconds)
27. // Speed of sound wave (340 m/s)divided by 2 (forward and backward bounce)
28. // To display the distance on Serial Monitor
29. Serial.print("Distance: ");
30. Serial.print(distance);
31. Serial.println(" cm"); //specified unit of distance
32. }
Connection Diagram
The connection diagram is shown below:
Output
It has three terminal GND (Ground), 5V, and SIG (signal). The process and the function of this
sensor is similar to the Ultrasonic Distance Sensor.
The frequency waves travel through the air and strike the object on its path. The waves bounce
back from the object and reach back to the module.
The Ultrasonic Range sensor pings the obstacles or objects with the ultrasound.
SEN136B5B
It is a sensor from SeedStudio. We need to switch the state between HIGH and LOW to notice
the output.
Hardware Required
The components required to create the project are listed below:
o Arduino UNO R3 board (We can also use any Arduino board)
o Jump wires
o Ultrasonic sensor
o Breadboard
Structure of the project
The structure of the project is shown below:
Procedure
The steps to connect the Ultrasonic sensor to the board are listed below:
Sketch
Consider the below code:
Connection Diagram
The connection diagram is shown below:
Output
We will use a temperature sensor (TMP 36) of low voltage. Such sensors are also stable while
dealing with large capacitive loads. It is also suitable for automotive applications.
The temperature sensors TMP 35, TMP 36, and TMP 37 are the sensors with the same features.
The operating voltage of the TMP 36 sensor ranges from 2.7V to 5.5V.
o Pin 1: DC voltage
Here, we will connect the DC voltage pin to 5V on the Arduino UNO board.
o Pin 3: GND
We will connect the GND pin to Ground on the Arduino UNO board.
Hardware Required
The components required for the project are listed below:
Principle
We will connect the LCD Display and TMP 36 temperature sensor with the Arduino UNO R3
board. The sensor detects the surrounding temperature and converts it into volts, to Celsius to
Fahrenheit, and displays Fahrenheit temperature on the LCD screen.
We need to open the URL: Arduino LCD display for details about LCD display.
Connection
The steps to set up the connection are listed below:
Sketch
1. #include <LiquidCrystal.h>
2. // initialize the library with the pins on the Arduino board
3. LiquidCrystal lcd(13, 12, 6, 4, 3, 2);
4. const int temperature = A0; //A0 is the analog pin
5. const int D = 8; // Vo of LCD is connected to pin 8 of the Arduino
6. void setup()
7. {
8. lcd.begin(16, 2);
9. Serial.begin(9600);
10. pinMode(D, OUTPUT);
11. }
12. void loop()
13. {
14. digitalWrite(D,LOW);
15. int Temp = analogRead(temperature);
16. float volts = (Temp / 965.0) * 5;
17. float celcius = (volts - 0.5) * 100;
18. float fahrenheit = (celcius * 9 / 5 + 32);
19. Serial.println(fahrenheit);
20. lcd.setCursor(5, 0);
21. lcd.print(fahrenheit);
22. delay(2000);
23. // time delay of 2000 microseconds or 2 seconds
24. }
We will show the connection using the Simulator because the connections become clearer and
more precise.
For better understanding, let's consider the output on the Serial Monitor.
o Inexpensive
o Adjustable module
o Efficient
o Small in size
o Less power consumption
o It can detect motion in the dark as well as light.
The PIR sensor has three terminals, which are listed below:
o VCC
o Digital Output
o GND (Ground)
We will connect the Vcc terminal of the sensor to the 5V on the Arduino board. The PIR's sensor
output can be connected to any of the digital pins on the Arduino board.
The applications of the PIR sensor are automation, security systems, etc. Such sensors work
great in detecting the entrance of a person in an area and leaving it.
The detection range of PIR sensors is from 5m to 12m.
The infrared radiations are detected by the crystalline material present at the center of the
sensor.
Consider a person passing in front of the background like a wall, etc. The temperature changes
from room to body temperature and vice-versa within the sensor field. Changes arising in the
arrival infrared radiations are converted by the sensor to the output voltage. It later detects the
human body or object.
A ball like a lens present on some sensors helps in enhancing the viewing angle.
The bottom part of the sensor contains many circuits mounted on it, which is shown below:
Let's start with the project.
Hardware Required
The components required for the project are listed below:
Principle
The movement of jumper present on the sensor on the L side will cause a change in the state of
the sensor whenever the motion is detected. Such a condition is defined as a single trigger
mode.
When the sensor resets the timer after every detection of motion, it is defined as repeated
trigger mode.
The two potentiometers present on the sensor are called as Sensitivity Potentiometer
and Time Potentiometer. We can adjust both the parameters (time and sensitivity) accordingly.
It should be restricted for atleast 15 seconds in front of the PIR sensor for proper calibration in
the output. After 15 seconds, the sensor can easily detect movements.
If any movement is detected, the LED will be HIGH. If there is no such movement, the output will
be LOW.
Connection
The steps to set up the connection are listed below:
o Connect the Vcc terminal of the PIR sensor to the 5V pin of the Arduino board.
o Connect the Output terminal of the PIR sensor to pin 8 of the Arduino board.
o Connect the GND terminal of the PIR sensor to the Ground pin of the Arduino board.
o Connect the positive leg of the LED in series with 220 Ohm resistor to pin 13 of the
Arduino board.
o Connect the negative terminal of the LED to the Ground pin of the Arduino board.
Sketch
Consider the below code:
Connection Diagram
We will show the connection using the Simulator so that the connections become clearer and
more precise.
The series of magnets mounted on the shaft of the stepper motor are controlled by the
electromagnetic coils. These coils are negatively and positively charged in a sequence, which
makes the shaft to move in forward and backward in little steps.
We can also hold the position of the motor at any step during rotation. It has a simple, accurate
open-loop system.
The Stepper is categorized into two types, which are listed below:
o Unipolar
o Bipolar
Unipolar
The Unipolar stepper motor consists of one winding that operates with a center tap per phase.
There are three leads per phase in the motor. For the regular two-phase stepper motor, there are
six leads per phase.
The Unipolar stepper motor has five leads when both the phases are joined internally.
Bipolar
The bipolar stepper motor consists of a single winding per phase. There are two leads per
phase in the motor.
The bipolar stepper motors do not have any center tape connections. Such devices are used
when we require high torque popularly at low speeds.
For example,
Consider a motor with six stator teeth and a rotor. It is shown below:
A stepper motor with six stator teeth can be triggered with three different DC power sources.
The rotor in the stepper motor is made up of a stack of steel laminations. It has different teeth
compared to the rotor, which is four.
It is done so that one pair of rotor teeth at a time can be aligned easily with the stator.
If we trigger or energize the coil A and B, the rotor would rotate. The above figure signifies the
step size is 30 degrees. We will energize coil B and C. After that, the coil A will energize again. It
means that the rotor moves to the position with the least reluctance.
The position of the rotor (moves 30 degrees), when coil B is energized is shown below:
When both the coils are excited, the position of the rotor (in between) is shown below:
The energizing of both the coils change the accuracy of the rotor from 30 degrees to 15 degrees.
In this project, we will use the hybrid motor type. It looks like the image shown below:
Hardware Required
The required components are listed below:
Connection diagram
We will show the connection using the Simulator so that the connections become clearer and
more precise.
Sketch
Consider the below code:
Procedure
The steps to establish the above connection are listed below:
o Connect the negative and positive terminal of the battery to the GND and 5V pin of the
Arduino board.
o One outer pin of the potentiometer is connected to ground (GND), and the other external
pin is connected to 5V of the Arduino board.
o The middle pin of the potentiometer is connected to the analog input pin A1 of the board.
o Connect the 8 to 11 digital pins of the Arduino board to the U2004 Darlington Array,
which is further connected to the motor.
o Connect other pins of the U2004 Darlington Array to the stepper motor, as shown in the
connection diagram.
The difference between Arduino and Raspberry Pi are listed in the below table:
Arduino
o The Arduino is defined as a simple microcontroller motherboard.
o The Arduino helps us to make the projects simpler.
o It was developed to create microcontroller kits, which was used to build electronic
devices.
o Most Arduinos come with an 8-bit Microcontroller.
o It has 32K bytes and 2K bytes of flash memory and SRAM. The flash memory consists
of a stored sketch of Arduino, while SRAM manipulates the processing variables.
o It promotes C++ as the primary programming language.
o It has no Operating system. The software platform requires Windows, Linux, and macOS
operating system to run the program.
o The types of Arduino are Started kits (for beginners), Arduino shields (printed circuit
expansion boards), Standard Arduino boards, and boards with advanced features.
o The Arduino runs a single piece of code over and over again. Due to this, it starts quickly
as soon as we ON the power.
o It is based on IDE (Integrated Development Environment), which is limited to the
programming interface.
o The connection to the Internet is quite complicated.
o The Arduino project was started in Italy.
o The design of the Arduino board consists of different controllers and microprocessors.
Some board also includes USB (Universal Serial Bus), models, and serial communication
interfaces.
o The processor speed in Arduino ranges from 8MHz to 400MHz. The average speed of
most of the types of Arduino is 16MHz.
o The projects of Arduino are connected to a computer using the USB port.
o The Analog to Digital converter is inbuilt in the Arduino.
o The Arduino UNO has 14 digital Input/Output pins, 6 analog pins, and power pins.
Raspberry Pi
o The Raspberry Pi is defined as the mini computer.
o It is considered superior at software applications.
o It was developed to encourage basic learning for computer science students and other
growing countries.
o It consists of a 64-bit quad-core processor or microprocessor.
o The Raspberry Pi has about 1GiB of RAM. Here, 1 GiB = 1024 x 1024 x 1024 bytes =
(1024)^3 bytes.
o It promotes Scratch and Python as the chief programming language.
o The foundation of Raspberry Pi provides an operating system such as Linux. It also
provides a non-Linux operating system, such as OpenBSD, NetBSD, HelenOS, etc.
o The types of Raspberry Pi are Raspberry Pi Alternatives, Raspberry Pi Zero W, and
Raspberry Pi 3 Model B+.
o We can run all types of applications in Raspberry Pi, including Microsoft Office, emails,
or specific code for an electronics project.
o We can run a single or different piece of code in Raspberry Pi.
o The Operating system in all the files is saved in the SD card. For one Raspberry Pi, we
can have multiple SD cards for the different operating system or file system.
o It is consistent in many programming languages.
o It can be easily connected to the Internet.
o The Raspberry Pi Foundation developed the Raspberry Pi in the United Kingdom.
o The design of Raspberry Pi board consists of CPU (Central Processing Unit), GPU
(Graphics Processing Unit), the graphics chip, RAM, Xbee port, Ethernet port, power
source connector, UART (Universal Asynchronous Reciever/Transmitter), and GPIO
(General-Purpose Input/Output) pins.
o The processor speed in Raspberry Pi ranges from 700MHz to 1.5GHz.
o The hard drive for the Raspberry Pi is the slot on the board, in which the SD card is
inserted.
o The Analog to Digital converter is attached externally to the Raspberry Pi.
o The Raspberry Pi3 has 40 Input/Output pins on board.