2009 11 17 Arduino Basics PDF

You might also like

Download as pdf or txt
Download as pdf or txt
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