Using arduino and raspberry pi for internet of things

Post on 25-Jun-2015

1.338 views 6 download

Tags:

description

Guest lecture about using Arduino and Raspberry Pi for Internet of Things, that I gave at Anna University.

Transcript of Using arduino and raspberry pi for internet of things

Using Arduino and Raspberry Pi for Internet of Things

Sudar Muthu (@sudarmuthu)http://hardwarefun.com/http://github.com/sudar

2

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

Who am I?

http://hardwarefun.com

http://hardwarefun.com 3

Introduce Arduino Introduce Raspberry Pi Emphasis on IoT See how both can be used for IoT

Objective

http://hardwarefun.com 4

Arduino

http://hardwarefun.com 5

What is Arduino? Visual Basic for hardware Includes both Hardware and software

Photo credit Arduino team

http://hardwarefun.com 6

Arduino Uno (The one I am going to use today)

Arduino Mega Arduino Due Lillypad Arduino BT Arduino Ethernet .. and clones

Different Arduino types

http://hardwarefun.com 7

Getting to know the Arduino

http://hardwarefun.com 8

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 9

Microcontroller Power jacket USB jacket Digital pins Analog pins Reset button

Identify these components in Arduino

http://hardwarefun.com 10

Voltage Regulator Power Pins (how many are there?) Ground Pins (how many are there?) Vin Pin Rx and Tx Pins ICSP Headers

Identify these components in Arduino

http://hardwarefun.com 11

Power Led Rx and Tx Led’s Test Led Crystal Anything else?

Identify these components in Arduino

http://hardwarefun.com 12

Powering up Arduino

http://hardwarefun.com 13

Using USB cable Using DC power jacket Giving voltage directly into Vin pin Giving regulated voltage directly into 5V pin

Different ways to power up Arduino

http://hardwarefun.com 14

Setting up Arduino

http://hardwarefun.com 15

Testing the setup with a “Hello World” program

http://hardwarefun.com 16

Blinking LED

http://hardwarefun.com 17

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

Making a LED blink

http://hardwarefun.com 18

Did I miss anything?People with electronics background

http://hardwarefun.com 19

Did I miss anything?People with electronics background

Hint: Ohm’s Law

http://hardwarefun.com 20

Anatomy of an Arduino sketch

http://hardwarefun.com 21

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

Printing values through Serial

http://hardwarefun.com 22

Breadboard Basics

http://hardwarefun.com 23

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

How to use a breadboard

http://hardwarefun.com 24

Digital Input and Output

http://hardwarefun.com 25

Digital Input

http://hardwarefun.com 26

The LED blink that we did at “setting up Arduino” is Digital output

Digital Output

http://hardwarefun.com 27

Analog Input

http://hardwarefun.com 28

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

Reading Analog values from sensors

http://hardwarefun.com 29

Control an LED based 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 30

Analog Output

http://hardwarefun.com 31

What is PWM? Analog like behavior using digital output Works by switching the LED on and off

regularly Changing the brightness of a Led

Analog Output

http://hardwarefun.com 32

This is just the tip of an iceberg

There are tons of other features to Arduino which I have not talked about

http://hardwarefun.com 33

Internet of Things

http://hardwarefun.com 34

"Internet of Things" by Wilgengebroed on Flickr

http://hardwarefun.com 35

But I like this definition…

“The Internet of Things is the interconnection of

uniquely identifiable embedded computing devices within the existing Internet

infrastructure”

LoT is an overloaded term

http://hardwarefun.com 36

Ethernet Shield WIFI Shield 3G Shield Using another intermediate component

Connecting Arduino to Internet

http://hardwarefun.com 37

Demo of network connectivity using Arduino

http://hardwarefun.com 38

Let’s take a break

Raspberry Pi

http://hardwarefun.com 40

Credit Card Sized

Computer

http://hardwarefun.com 41

GPIO Pins

http://learn.adafruit.com/assets/3052

http://hardwarefun.com 42

Setup Python

sudo apt-get install python-dev

sudo apt-get install python-rpi.gpio

http://hardwarefun.com 43

Set the status of GPIO Pins

https://github.com/sudar/raspberry-pi-sketches/blob/master/led-blink/led-blink.py

44

Set the status of GPIO Pins

import RPi.GPIO as GPIOimport 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-pi-sketches/blob/master/led-blink/led-blink.pyhttp://hardwarefun.com

http://hardwarefun.com 45

Demo

Let there be Light

https://github.com/sudar/raspberry-pi-sketches/blob/master/led-blink/led-blink.py

http://hardwarefun.com 46

Changing the brightness of the LED

import RPi.GPIO as GPIOimport time

GPIO.setmode(GPIO.BOARD)GPIO.setup(12, GPIO.OUT)p = GPIO.PWM(12, 50) # channel=12 frequency=50Hzp.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()

https://github.com/sudar/raspberry-pi-sketches/blob/master/led-blink/pwm.py

http://hardwarefun.com 47

Demo

Can you see the brightness changing?

https://github.com/sudar/raspberry-pi-sketches/blob/master/led-blink/pwm.py

http://hardwarefun.com 48

Reading the status of the Pin

import RPi.GPIO as GPIOimport 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()

https://github.com/sudar/raspberry-pi-sketches/blob/master/button-input/button-input.py

http://hardwarefun.com 49

Reading the status of the Pin

https://github.com/sudar/raspberry-pi-sketches/blob/master/button-input/button-input.py

http://hardwarefun.com 50

Demo

What happens when the button is pressed?

https://github.com/sudar/raspberry-pi-sketches/blob/master/button-input/button-input.py

http://hardwarefun.com 51

Combining Input and Output

import RPi.GPIO as GPIOimport 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()

https://github.com/sudar/raspberry-pi-sketches/blob/master/button-and-led/button-and-led.py

http://hardwarefun.com 52

Combining Input and Output

https://github.com/sudar/raspberry-pi-sketches/blob/master/button-and-led/button-and-led.py

http://hardwarefun.com 53

Let’s control the LED by pressing the button

Demo

https://github.com/sudar/raspberry-pi-sketches/blob/master/button-and-led/button-and-led.py

http://hardwarefun.com 54

What more can be done?

http://hardwarefun.com 55

More protocols

I2C SPI Serial

http://hardwarefun.com 56

Interacting with webcam

“PyGame” provides easy interface Can get fancy using “opencv” Both USB and GPIO interface are supported

http://hardwarefun.com 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 58

Limitations

No built-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 59

Arduino vs Raspberry Pi for IoT

http://hardwarefun.com 60

Entire Linux software stack is available It is very easy to connect to internet Can be programmed using variety of

programming languages

Advantages of Raspberry Pi

http://hardwarefun.com 61

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

Disadvantage of Raspberry Pi

http://hardwarefun.com 62

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

Advantages of Arduino

http://hardwarefun.com 63

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.

Disadvantages of Arduino

http://hardwarefun.com 64

Feature Raspberry 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

In Short..

http://hardwarefun.com 65

My Solution?

http://hardwarefun.com 66

Use both together

http://learn.adafruit.com/assets/3199 http://learn.adafruit.com/assets/2123

Best of both worlds

http://hardwarefun.com 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 69

Questions

Thank You

Sudar Muthu (@sudarmuthu)http://hardwarefun.com/

https://github.com/sudar/arduino-robotics-workshophttps://github.com/sudar/raspberry-pi-sketches