Você está na página 1de 36

Microcontroller

Programming Beginning
with Arduino
CharlieMooney

Microcontrollers

Tiny,selfcontainedcomputersinanIC

Oftencontainperipherals

Differentpackagesavailible

Vastarrayofsizeandpoweravailible

Sensory Input

Robotsneedtobeabletorecieveinputfromthe
worldintheformofsensoryinput.

Microcontrollershandlethisinput.

Thousandsofsophisticatedsensorsavailiable

Pressure/Force Sensors

GPS Locators

Gyroscopes

Wheel Encoders

Infared Proximity Detectors

Accelerometers

Ultrasonic Rangefinders

Alcohol Vapor Density


Detectors

Arduino

DevelopmentboardfortheATMega328

Inludes

Programmer,

VoltageRegulators

SeraltoUSBConverter

CHEAP$30!Haseverythingyouneed!

Arduino C Template
voidsetup(){
//Setupstufftoonlyrunonceatthebeginning
}

voidloop()
{
//Thisfunctiongetscalledindefinatly
}

Peripherals

AnalogtoDigitalConverters(ADC)

Counters/Timers(TMRx)

PWMModules(CCP/PWM)

SerialPorts(UART)

Many,manymore....

Digital I/O

OnlyHIGHandLOWvalues

Eachpinconfigurabletodoinputoroutput

pinMode(pinNumber,pinState)

pinMode(13,INPUT)

pinMode(13,OUTPUT)

Digital I/O (Part II)

Output

Input

digitalWrite(pinNumber,HIGH/LOW)
intval=digitalRead(pinNumber)

Arduino Digital I/O Example


intledPin=13;
voidsetup(){
//Setthedigitalpinasoutput:
pinMode(ledPin,OUTPUT);
}
voidloop()
{
//Bringthepinhigh(1)
digitalWrite(ledPin,HIGH);
}

Serial Interface (UART)

CommunicatewithothermicrocontrollersorPC's

Asynch.communication

Arduinolibrariesmakeitextremelyeasy

Serial.begin(baudRate)

Serial.println(StringToSend)

intbytesWaiting=Serial.Availible()

CharincomingData=Serial.read()

Arduino Serial Example


voidsetup(){
Serial.begin(9600);//Setupbaudrate
}
voidloop(){
Serial.println(Givemeinput);//outputdata
while(Serial.availible()<1){//ifthere'sdatawaiting
charinput=Serial.read();//getabyteofdata
}
}

Analog to Digital Converter


(ADC)

Takeanalogvoltageasinputononeofthepins

Returndigitalrepresentationtoprogram

Differentnumbersofbitschangeprecision.

Light Sensors

Photoresistors

ExtremelySimpletoUse

Resistancechangeswithlight

Measurevoltageoverthesensorwith
anADC,andyou'redone
Manymorecomplicatedsensors
simulatethisbehaviorforsimplicity

Arduino ADC Example


intsensorPin=0;
voidsetup(){
Serial.begin(9600);//TurnonSerialConnection
}
voidloop(){
//readthevaluefromthesensor:
sensorValue=analogRead(sensorPin);

//PrintsensorvaluetotheSerial
Serial.println(sensorValue);
}

PWM Modules (CCP)

CreatePWMsignalsonoutputpins

MeasurePWMsignalsoninputpins

CCPstandsforCapture/Compare

WhatisPWM,anyway?

Pulse Width Modulation


(PWM)

Transmitanalogvaluesusingasingledigitalinput/
outputpinthroughcarefultiming.
APWMsignalconsistsoftwovalues

Period:howlongbeforethesignalrepeats
PulseWidth:howlongthesignalisHIGHbeforeit
goesLOW.

DutyCycle:%oftimethesignalisHIGH,or
(PulseWidth/Period)

PWM In Robotics

Theaveragevoltage(DutyCycle*Voltage)canbe
usedtocontrolthespeedofDCmotors.

Innaccurate,poorstrength,braking,andother
problemsexist.

ServoMotorsandSpeedControllers.

Servo Motors

DCMotorwithgearsallowforhightorque
EmbeddedmicrocontrollermonitorsPWMinput
andmotorposition.
Varypulsewidthtochangepositionofmotor

Speed Controllers

Embeddedmicrocontrollervariesvoltageonoutput
linesbasedonPWMinput.
Resultsinconstantvoltagetomotorsratherthan
intermittent.
Allowasecond,morepowerful,powersupplyto
drivelargemotors.
Alterpuslewidthtochangethespeedofthemotor

Arduino PWM Command

AnalogWrite(Pin,DutyCycle)

DutyCycle=00%,12750%,255100%

Pincanbe3,5,6,9,10,or11

Frequencyofabout490Htz

Otherperiodsarepossible,butnotwithAnalogWrite

Arduino PWM Example


intPin=9;
voidsetup()
{
pinMode(Pin,OUTPUT);
}
voidloop()
{
analogWrite(Pin,127);//Generate50%dutycycleonPin
}

Useful Resources

RobotPartsandExcellentForums
www.TrossenRobotics.com
Electricalparts,sensors,andmicrocontrollers
www.Sparkfun.com
ArduinoDevelopmentPlatform
www.ardiono.cc

Você também pode gostar