Professional Documents
Culture Documents
2009 11 17 Arduino Basics PDF
2009 11 17 Arduino Basics PDF
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