Using arduino and raspberry pi for internet of things
The document introduces Arduino and Raspberry Pi for internet of things applications. It discusses the basics of both platforms, including components, programming, and interfacing with sensors and actuators. It provides examples of blinking LEDs, reading button input, and controlling an LED based on light level. Finally, it compares Arduino and Raspberry Pi, concluding they are best used together to take advantage of their complementary capabilities.
Using arduino and raspberry pi for internet of things
1.
Using Arduino andRaspberry Pi
for Internet of Things
Sudar Muthu (@sudarmuthu)
http://hardwarefun.com/
http://github.com/sudar
2.
Who am I?
Research Engineer by profession
I build robots as a hobby
Playing with Arduino for more than 4 years
Blogger about Arduino at http://hardwarefun.com
Moderator for Arduino India forum
http://hardwarefun.com 2
3.
Objective
IntroduceArduino
Introduce Raspberry Pi
Emphasis on IoT
See how both can be used for IoT
http://hardwarefun.com 3
What is Arduino?
Visual Basic for hardware
Includes both Hardware and software
http://hardwarefun.com 5
Photo credit Arduino team
6.
Different Arduino types
Arduino Uno (The one I am going to use today)
Arduino Mega
Arduino Due
Lillypad
Arduino BT
Arduino Ethernet
.. and clones
http://hardwarefun.com 6
Specs (Uno, Leonardo)
Type Value
Microcontroller ATmega328
Operating Voltage 5v
Digital I/O Pins 14 (of which 6 provide PWM output)
Analog Input Pins 6
Flash Memory 32 KB (ATmega328) of which 0.5 KB used
by bootloader
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Clock Speed 16 MHz
http://hardwarefun.com 8
9.
Identify these componentsin
Microcontroller
Power jacket
USB jacket
Digital pins
Analog pins
Reset button
Arduino
http://hardwarefun.com 9
10.
Identify these componentsin
Arduino
Voltage Regulator
Power Pins (how many are there?)
Ground Pins (how many are there?)
Vin Pin
Rx and Tx Pins
ICSP Headers
http://hardwarefun.com 10
11.
Identify these componentsin
Power Led
Rx and Tx Led’s
Test Led
Crystal
Anything else?
Arduino
http://hardwarefun.com 11
Different ways topower up Arduino
Using USB cable
Using DC power jacket
Giving voltage directly into Vin pin
Giving regulated voltage directly into 5V pin
http://hardwarefun.com 13
Making a LEDblink
Insert a LED in pin 13
Open File->Examples->Basics->Blink
Select Tools->Boards->Arduino Uno
Select File->Upload (or press ctrl+u)
You should get the message “Done upload”
Your Led should blink
Congrats you can program Arduino now
http://hardwarefun.com 17
People with electronicsbackground
Did I miss anything?
Hint: Ohm’s Law
http://hardwarefun.com 19
20.
Anatomy of anArduino sketch
http://hardwarefun.com 20
21.
Printing values throughSerial
Uno has one UART hardware port, using which we
can exchange information with computer
Very useful for debugging
Works at a specified baud rate
Use Serial Monitor to read values
SoftwareSerial is also available
http://hardwarefun.com 21
How to usea breadboard
The first two and the last two rows are connected
In all the other rows, columns are connected
Connect the first and last row to power
Connect the second and second last row to ground
http://hardwarefun.com 23
Reading Analog valuesfrom sensors
Connect the LDR on pin A0 and Gnd
LDR’s resistance varies based on the amount of light
present
Read the current value using analogRead()
Print the value in Serial Monitor
http://hardwarefun.com 28
29.
Control an LEDbased on light
void setup(){
pinMode(13, OUTPUT);
}
void loop(){
int val = analogRead(A0);
if (val > 50) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
}
http://hardwarefun.com 29
Analog Output
What is PWM?
Analog like behavior using digital output
Works by switching the LED on and off regularly
Changing the brightness of a Led
http://hardwarefun.com 31
32.
This is justthe tip of an
iceberg
http://hardwarefun.com 32
There are tons of other
features to Arduino which I
have not talked about
LoT is anoverloaded term
But I like this definition…
“The Internet of Things is the interconnection of
uniquely identifiable embedded computing devices
within the existing Internet infrastructure”
http://hardwarefun.com 35
36.
Connecting Arduino toInternet
Ethernet Shield
WIFI Shield
3G Shield
Using another intermediate component
http://hardwarefun.com 36
37.
Demo of networkconnectivity
using Arduino
http://hardwarefun.com 37
Set the statusof GPIO Pins
https://github.com/sudar/r http://hardwarefun.com asp4b3erry-pi-sketches/blob/master/led-blink/led-blink.py
44.
Set the statusof GPIO Pins
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
try:
while True:
GPIO.output(12, GPIO.HIGH)
time.sleep(1)
GPIO.output(12, GPIO.LOW)
time.sleep(1)
finally:
GPIO.cleanup()
https://github.com/sudar/raspberry-http://hardwarefun.com 44 pi-sketches/blob/master/led-blink/led-blink.py
45.
Demo
Let therebe Light
https://github.com/sudar/r http://hardwarefun.com 45aspberry-pi-sketches/blob/master/led-blink/led-blink.py
46.
Changing the brightnessof the LED
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
p = GPIO.PWM(12, 50) # channel=12 frequency=50Hz
p.start(0)
try:
while True:
for dc in range(0, 101, 5):
p.ChangeDutyCycle(dc)
time.sleep(0.1)
for dc in range(100, -1, -5):
p.ChangeDutyCycle(dc)
time.sleep(0.1)
finally:
p.stop()
GPIO.cleanup()
http://hardwarefun.com 46
https://github.com/sudar/raspberry-pi-sketches/blob/master/led-blink/pwm.py
47.
Demo
Can yousee the brightness changing?
https://github.com/sudar/raspberry-http://hardwarefun.com 47 pi-sketches/blob/master/led-blink/pwm.py
48.
Reading the statusof the Pin
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
try:
while True:
if GPIO.input(11):
print "Button is on"
else:
print "Button is off"
time.sleep(0.1)
finally:
GPIO.cleanup()
http://hardwarefun.com 48
https://github.com/sudar/raspberry-pi-sketches/blob/master/button-input/button-input.py
49.
Reading the statusof the Pin
http://hardwarefun.com 49
https://github.com/sudar/raspberry-pi-sketches/blob/master/button-input/button-input.py
50.
Demo
What happenswhen the button is pressed?
http://hardwarefun.com 50
https://github.com/sudar/raspberry-pi-sketches/blob/master/button-input/button-input.py
51.
Combining Input andOutput
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(12, GPIO.OUT)
try:
while True:
if GPIO.input(11):
print "Button is on"
GPIO.output(12, 1)
else:
GPIO.output(12, 0)
time.sleep(0.1)
finally:
GPIO.cleanup()
http://hardwarefun.com 51
https://github.com/sudar/raspberry-pi-sketches/blob/master/button-and-led/button-and-led.py
Demo
Let’s controlthe LED by pressing the button
http://hardwarefun.com 53
https://github.com/sudar/raspberry-pi-sketches/blob/master/button-and-led/button-and-led.py
Interacting with webcam
“PyGame” provides easy interface
Can get fancy using “opencv”
Both USB and GPIO interface are supported
http://hardwarefun.com 56
57.
Distributed Computing
Each Pi can be used as cheap node
Form grids using a cluster of Pi’s
Can share CPU, memory and disk space
http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/
distributed-computing/
http://hardwarefun.com 57
58.
Limitations
Nobuilt-in Analog to Digital support
Can’t run Inductive load (motors)
Is not real-time (CPU might be busy)
No “safe circuits” present
Operates at 3.3V and is not directly compatible with
Arduino voltage
http://hardwarefun.com 58
Advantages of RaspberryPi
Entire Linux software stack is available
It is very easy to connect to internet
Can be programmed using variety of programming
languages
http://hardwarefun.com 60
61.
Disadvantage of RaspberryPi
Accessing hardware is not real-time. If the CPU is
busy, then interfacing with hardware can be delayed
No built-in Analog to Digital converter available
Does not have enough power to drive inductive loads
The hardware design is not open source. Even though
it is not a big deal, for some people it might a deal
breaker
http://hardwarefun.com 61
62.
Advantages of Arduino
Very easy to get started
Very easy to extend it and has tons of user
contributed shields and libraries. Shields are available
to do pretty much anything
Can be used to for real-time applications
Everything (both hardware, software and IDE) are
open source
Not much programming knowledge needed to do
basic stuff
http://hardwarefun.com 62
63.
Disadvantages of Arduino
Not very powerful when compared with Raspberry Pi
(Micro processor vs Micro controller)
You need to program using either Arduino or C/C++
(or assembly if you really want to)
Connecting to internet is slightly difficult (you have
shields and libraries, but is not straight forward), but
not impossible.
http://hardwarefun.com 63
64.
In Short..
FeatureRaspberry Pi Arduino
Processor Speed 700 MHz 16 MHz
Programming Language No limit Arduino, C/C++
Real-time Hardware No real-time In real-time
Analog to Digital Convertor No Yes
Hardware Design Closed source Open source
Internet Connection Very easy Not easy, but doable
http://hardwarefun.com 64
Use both together
Best of both worlds
http://hardwarefun.com 66
http://learn.adafruit.com/assets/3199 http://learn.adafruit.com/assets/2123
67.
Links
Sourcecode - https://github.com/sudar/raspberry-pi-sketches/
My blog - http://hardwarefun.com
Python GPIO - https://code.google.com/p/raspberry-gpio-
python/
Distributed computing using Pi -
http://www.cl.cam.ac.uk/projects/raspberrypi/tutorial
s/distributed-computing/
http://hardwarefun.com 67
68.
Links
Arduino– http://arduino.cc
Asimi – A simple bot using Arduino
http://hardwarefun.com/project/asimi
Getting started with hardware programming
http://hardwarefun.com/tutorials/getting-started-with-hardware-
programming
Getting started with Arduino
http://hardwarefun.com/tutorials/getting-started-with-arduino-
and-avr
http://hardwarefun.com 68
#35 "Internet of Things" by Wilgengebroed on Flickr - Cropped and sign removed from Internet of things signed by the author.jpg. Licensed under Creative Commons Attribution 2.0 via Wikimedia Commons - http://commons.wikimedia.org/wiki/File:Internet_of_Things.jpg#mediaviewer/File:Internet_of_Things.jpg