Microcontroller Programming Beginning with Arduino Charlie Mooney - - PowerPoint PPT Presentation

microcontroller programming beginning with arduino
SMART_READER_LITE
LIVE PREVIEW

Microcontroller Programming Beginning with Arduino Charlie Mooney - - PowerPoint PPT Presentation

Microcontroller Programming Beginning with Arduino Charlie Mooney Microcontrollers Tiny, self-contained computers in an IC Often contain peripherals Different packages availible Vast array of size and power availible Sensory


slide-1
SLIDE 1

Microcontroller Programming Beginning with Arduino

Charlie Mooney

slide-2
SLIDE 2

Microcontrollers

 Tiny, self-contained computers in an IC  Often contain peripherals  Different packages availible  Vast array of size and power availible

slide-3
SLIDE 3
slide-4
SLIDE 4
slide-5
SLIDE 5
slide-6
SLIDE 6

Sensory Input

 Robots need to be able to recieve input from the

world in the form of sensory input.

 Microcontrollers handle this input.  Thousands of sophisticated sensors availiable

slide-7
SLIDE 7

Pressure/Force Sensors

slide-8
SLIDE 8

GPS Locators

slide-9
SLIDE 9

Gyroscopes

slide-10
SLIDE 10

Wheel Encoders

slide-11
SLIDE 11

Infared Proximity Detectors

slide-12
SLIDE 12

Accelerometers

slide-13
SLIDE 13

Ultrasonic Rangefinders

slide-14
SLIDE 14

Alcohol Vapor Density Detectors

slide-15
SLIDE 15

Arduino

 Development board for the ATMega328  Inludes

 Programmer,  Voltage Regulators  Seral to USB Converter

 CHEAP -- $30! Has everything you need!

slide-16
SLIDE 16

Arduino C Template

void setup() { // Setup stuff to only run once at the beginning } void loop() { // This function gets called indefinatly }

slide-17
SLIDE 17

Peripherals

 Analog to Digital Converters (ADC)  Counters/Timers (TMRx)  PWM Modules (CCP/PWM)  Serial Ports (UART)  Many, many more....

slide-18
SLIDE 18

Digital I/O

 Only HIGH and LOW values  Each pin configurable to do input or output

 pinMode(pinNumber, pinState)  pinMode(13, INPUT)  pinMode(13, OUTPUT)

slide-19
SLIDE 19

Digital I/O (Part II)

 Output

 digitalWrite(pinNumber, HIGH/LOW)

 Input

 int val = digitalRead(pinNumber)

slide-20
SLIDE 20

Arduino Digital I/O Example

int ledPin = 13; void setup() { // Set the digital pin as output: pinMode(ledPin, OUTPUT); } void loop() { // Bring the pin high (1) digitalWrite(ledPin, HIGH); }

slide-21
SLIDE 21

Serial Interface (UART)

 Communicate with other microcontrollers or PC's  Asynch. communication  Arduino libraries make it extremely easy

 Serial.begin(baudRate)  Serial.println(”String To Send”)  int bytesWaiting = Serial.Availible()  Char incomingData = Serial.read()

slide-22
SLIDE 22

Arduino Serial Example

void setup() { Serial.begin(9600); // Setup baud rate } void loop() { Serial.println(”Give me input”); // output data while(Serial.availible() < 1) { // if there's data waiting char input = Serial.read(); // get a byte of data } }

slide-23
SLIDE 23

Analog to Digital Converter (ADC)

 Take analog voltage as input on one of the pins  Return digital representation to program  Different numbers of bits change precision.

slide-24
SLIDE 24
slide-25
SLIDE 25
slide-26
SLIDE 26

Light Sensors

 Photoresistors  Extremely Simple to Use  Resistance changes with light  Measure voltage over the sensor with

an ADC, and you're done

 Many more complicated sensors

simulate this behavior for simplicity

slide-27
SLIDE 27

Arduino ADC Example

int sensorPin = 0; void setup() { Serial.begin(9600); // Turn on Serial Connection } void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // Print sensor value to the Serial Serial.println(sensorValue); }

slide-28
SLIDE 28

PWM Modules (CCP)

 Create PWM signals on output pins  Measure PWM signals on input pins  CCP stands for Capture/Compare  What is PWM, anyway?

slide-29
SLIDE 29

Pulse Width Modulation (PWM)

 Transmit analog values using a single digital input/

  • utput pin through careful timing.

 A PWM signal consists of two values

 Period: how long before the signal repeats  Pulse Width: how long the signal is HIGH before it

goes LOW.

 Duty Cycle: % of time the signal is HIGH, or

(Pulse Width / Period)

slide-30
SLIDE 30
slide-31
SLIDE 31

PWM In Robotics

 The average voltage (Duty Cycle * Voltage) can be

used to control the speed of DC motors.

 Innaccurate, poor strength, braking, and other

problems exist.

 Servo Motors and Speed Controllers.

slide-32
SLIDE 32

Servo Motors

 DC Motor with gears allow for high torque  Embedded microcontroller monitors PWM input

and motor position.

 Vary pulse width to change position of motor

slide-33
SLIDE 33

Speed Controllers

 Embedded microcontroller varies voltage on output

lines based on PWM input.

 Results in constant voltage to motors rather than

intermittent.

 Allow a second, more powerful, power supply to

drive large motors.

 Alter pusle width to change the speed of the motor

slide-34
SLIDE 34

Arduino PWM Command

 AnalogWrite(Pin, DutyCycle)

 DutyCycle = 0

0%, 127 50%, 255 100% → → →

 Pin can be 3, 5, 6, 9, 10, or 11

 Frequency of about 490Htz

 Other periods are possible, but not with AnalogWrite

slide-35
SLIDE 35

Arduino PWM Example

int Pin = 9; void setup() { pinMode(Pin, OUTPUT); } void loop() { analogWrite(Pin, 127); // Generate 50% duty cycle on ”Pin” }

slide-36
SLIDE 36

Useful Resources

 Robot Parts and Excellent Forums

www.TrossenRobotics.com

 Electrical parts, sensors, and microcontrollers

www.Sparkfun.com

 Arduino Development Platform

www.ardiono.cc