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

You might also like