You are on page 1of 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

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

Input

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

You might also like