• Aucun résultat trouvé

Microcontroller Programming Beginning with Arduino

N/A
N/A
Protected

Academic year: 2022

Partager "Microcontroller Programming Beginning with Arduino"

Copied!
36
0
0

Texte intégral

(1)

   

Microcontroller

Programming Beginning with Arduino

Charlie Mooney

(2)

   

Microcontrollers

Tiny, self­contained computers in an IC

Often contain peripherals

Different packages availible

Vast array of size and power availible

(3)

   

(4)

   

(5)

   

(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

(7)

   

Pressure/Force Sensors

(8)

   

GPS Locators

(9)

   

Gyroscopes

(10)

   

Wheel Encoders

(11)

   

Infared Proximity Detectors

(12)

   

Accelerometers

(13)

   

Ultrasonic Rangefinders

(14)

   

Alcohol Vapor Density

Detectors

(15)

   

Arduino

Development board for the ATMega328

Inludes

Programmer,

Voltage Regulators

Seral to USB Converter

CHEAP ­­ $30! Has everything you need!

(16)

   

Arduino C Template

void setup() {

  // Setup stuff to only run once at the beginning    }

void loop() {

  // This function gets called indefinatly }

(17)

   

Peripherals

Analog to Digital Converters (ADC)

Counters/Timers (TMRx)

PWM Modules (CCP/PWM)

Serial Ports (UART)

Many, many more....

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

(19)

   

Digital I/O (Part II)

Output

digitalWrite(pinNumber, HIGH/LOW)

Input

int val = digitalRead(pinNumber)

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

}

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

(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

} }

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

(24)

   

(25)

   

(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

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

}

(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?

(29)

   

Pulse Width Modulation (PWM)

Transmit analog values using a single digital input/

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

(30)

   

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

(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

(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

(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

(35)

   

Arduino PWM Example

int Pin = 9;

void setup() {

  pinMode(Pin, OUTPUT);

}

void loop() {

  analogWrite(Pin, 127);  // Generate 50% duty cycle on ”Pin”

}

(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

Références

Documents relatifs

As inputs, Port I pins that are externally being pulled low will source current (IlL, on the data sheet) because of the internal pullups. The Port 2 output

In addition, the HPC16400 also contains an on- chip serial decoder which allows the HDLC channels to be time multiplexed onto common transmit and receive lines as used by the

During this stage, various tests check the relia- bility and other speCial features of the production prototype at the mass production factory level. After confirming

Note that a directory stream uses a low-level file descriptor to access the directory itself, so opendir could fail with too many open

This means running the server as a nonprivileged user and using a firewall to limit any remote calls of the method or methods being served by the SOAP server. If the server does

MOVC instructions executed from external program memory are disabled from fetching code bytes from internal memory, EA is sampled and latched on reset, and further programming of

Serial memory devices offer significant advantages over parallel devices in applications where lower data transfer rates are A.. In addition to requiring less board space,

Resistance range: 200 K dark to 10 K 10 lux brightness Sensitivity range: CdS cells respond to light between 400 nm violet and 600 nm orange wavelengths, peaking at about 520 nm