Top Banner
Peripherals Autonomous – 4 Workshop India Wilson Wingston Sharon [email protected]
37

04 Arduino Peripheral Interfacing

May 14, 2015

Download

Business

Wingston

Work with some simple arduino interfacing projects
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 04   Arduino Peripheral Interfacing

PeripheralsAutonomous – 4Workshop IndiaWilson Wingston [email protected]

Page 2: 04   Arduino Peripheral Interfacing

Temperature sensors

0 Gives a Vout propotional to ambient room temperature.

0 Concept : as temperature increases, voltage across a p-n junction increases at a known rate. (in this case Vbe)

0 Voltage at Anlg.Pin in Volts = (reading from ADC) * (5/1024) V

0 Centigrade temperature = [(analog voltage in V) – 0.5] * 100

Page 3: 04   Arduino Peripheral Interfacing

Before: Writing the code

0Review:0 How does the lm35 work?0 Read datasheet of lm35.0 How to connect it to arduino?0 What reference to use?0 What sort of noises will be present?0 What does the analogue input signify?

Page 4: 04   Arduino Peripheral Interfacing

Datasheet of LM35

Page 5: 04   Arduino Peripheral Interfacing

Circuit connection diagram

Page 6: 04   Arduino Peripheral Interfacing

Temp sensor code

0Connect lm35 as per circuit diagram in 7. Temp Sensor folder.

0We’re giving AREF as 3.3V to reduce noise from the LM35 and give more accurate readings.

0Upload code onto Arduino and Output is seen in the Serial monitor of the Arduino.

Page 7: 04   Arduino Peripheral Interfacing

Write the code

1. Decide which analogue pin you’re going to and assign it to a global variable

2. in setup() { }, initialize serial port to 9600 baud rate to send temp reading out to PC.

3. In loop() { }, take the analogue reading from a pin and store it in a temp float variable.

4. Multiply reading by 5.0 and then divide by 1024 to get voltage value read by the port. Store this is a float variable called volt.

5. Print out this value to the serial port and check.

Page 8: 04   Arduino Peripheral Interfacing

Keep Writing the code

0To get temp in centigrade, (volt – 0.5) * 100

0This is the ambient temperature recognized by the LM35 in Celsius.

0Send it to the serial port and check your code.

0To convert to fahrenheight, mult by 9 then divide by 5 then add 32 to that result. Send it to serial port too.

0 Congratulate yourself please.

Page 9: 04   Arduino Peripheral Interfacing

Improvements?

0 Use 3.3V as reference to increase resolution since datasheet says that resolution of lm35 ~ 10mV.

0 Put in on PCB to avoid noise by breadboard internal resistance,

0 DO NOT LIGHT THE LM35 OR IMMERSE IT IN WATER.

0 Make a waterproof casing for the lm35 to test temp of liquids.

0 Any other applications?

Page 10: 04   Arduino Peripheral Interfacing

LDR

0An LDR is a Light Dependent Resistor. 0As in the resistance offered by this device to an

electrical circuit is dependent on the amount of light falling on the circuit.

0Also called photocells because they convert light energy to an electrical response.

0Useful for on-when-light/off-when-dark.

Page 11: 04   Arduino Peripheral Interfacing
Page 12: 04   Arduino Peripheral Interfacing

How to connect the LDR

0 LDR is basically a resistor, so it can be connected anyway.

0 You need a pull-down resistor to avoid sinking all the current onto the arduino pin.

0 Circuit is GND-10kohn-LDR-VCC.

0 This circuit will only work if between 0-5V. If light is too bright, it will saturate at 5V.

0 putting a variable resistor in place of 10k allows for controlling saturation with too bright/too dark light.

Page 13: 04   Arduino Peripheral Interfacing

Ambient light like…

Ambient light (lux)

Photocell resistance ( )Ω

LDR + R ( )Ω

Current thru LDR +R

Voltage across R

Dim hallway

0.1 lux 600KΩ 610 KΩ 0.008 mA 0.1 V

Moonlit night

1 lux 70 KΩ 80 KΩ 0.07 mA 0.6 V

Room 10 lux 10 KΩ 20 KΩ 0.25 mA 2.5 V

Dark overcast day / Bright room

100 lux 1.5 KΩ 11.5 KΩ 0.43 mA 4.3 V

Overcast day

1000 lux 300 Ω 10.03 KΩ 0.5 mA 5V

Page 14: 04   Arduino Peripheral Interfacing
Page 15: 04   Arduino Peripheral Interfacing

Writing code!

0 decide analoge pin used as input to LDR.

0 In setup(){ }, initialize serial port with 9600.

0 In loop(){ }, first do an analogueread(pin) and store it in an int variable called reading.

0 This value represents illumination received by LDR.0 Send it to Serial Port.

0 Allow delay of some time to let the ADC settle.

Page 16: 04   Arduino Peripheral Interfacing

Application 1

0Make thresholds and determine the brightness received and send it via serial port.

if (reading < 10) { Serial.println(" - Dark"); } else if (reading < 200) { Serial.println(" - Dim"); }else if (reading < 500) { Serial.println(" - Light"); } else if (reading < 800) { Serial.println(" - Bright"); }else { Serial.println(" - Very bright"); }

Page 17: 04   Arduino Peripheral Interfacing

Application 2

0Take the analogue reading and use it as the delay amount in an LED blinking scenario. Use ledpin = 13.

void loop() {

val = analogRead(LDR); digitalWrite(ledPin, HIGH); delay(val); digitalWrite(ledPin, LOW); delay(val);

}

Page 18: 04   Arduino Peripheral Interfacing

Another Application

0 Put three LEDs around the LDR. Red, Green and Blue.

0 Put an object of a particular color in front of the LDR.

0 Light up RED LED and measure LDR value0 Light up GREEN LED and measure LDR value0 Light up BLUE LED and measure LDR value

0 From these three analogue values you can determine the color of object being sensed.

Page 19: 04   Arduino Peripheral Interfacing

Sensor Data on PC

0Reading and plotting sensor data on PC is very simple on the arduino.

0Send data continuously to the computer over the serial port.

0Data can be viewed by any program capable of viewing this data

Page 20: 04   Arduino Peripheral Interfacing

Send sensor data to serial port

0 Open the folder Sensor data graph

0 Upload the arduino code onto the arduino and close arduino IDE after checking serial monitor.

0 In softwares folder extract the processing folder.

0 Open processing and copy the processing code onto it and run.

0 Make sure serial port number in the processing sketch matches arduino

Page 21: 04   Arduino Peripheral Interfacing

The motor shield1. DC Motor InterfaceDrives 2 motors with L293D DC Motor Driver IC.

2. IR paired sensorsFor line sensing, 4 IR sensor pairs can be attached and controlled.

3. The Buzzer or Servo MotorSelectable via jumper

4. The Switch or Servo MotorSelectable via jumper

5. Two LEDs

The motor shield goes on top of the arduino neatly.

There are loads of shields for the arduino that provide different functionality.

Be careful removing the shield, if you bend the pins, you cant put the shield in again.

Page 22: 04   Arduino Peripheral Interfacing
Page 23: 04   Arduino Peripheral Interfacing
Page 24: 04   Arduino Peripheral Interfacing

IR TX RX Pair

0 An IR transmitter (TX) is a LED that emits light in the infrared spectrum.

0 (most cameras see IR, light up the IR LED and point a camera at it to check)

0 An IR Receiver (RX) is a transistor with the base exposed.

0 The base voltage depends on the amount of IR received and it controls the amount of current passing through the C-E junction (leads).

Page 25: 04   Arduino Peripheral Interfacing

IR schematic

0The IR TX LED is connected through a current limiting resisto

0The IR RX is connected via a variable potentiometer to a voltage comparator to give a digital output.

0The pot is used to adjust For ambient light intensity.

Page 26: 04   Arduino Peripheral Interfacing

Remember

0 The IR TX RX pairs should be spaced 1/4th of an inch apart for optimal detection.

0 Calibration of IR sensors is important to adjust the sensors for ambient light.

0 The output of this circuit is DIGITAL and read by a digital pin. 1 – obstruction; 0 – No obstruction.

0 If you have to use IR sensors in the sun, use electrical tape to provide adequate shielding.

Page 27: 04   Arduino Peripheral Interfacing

Using the IR sensors

0 The motor shield has 4 IR sensors and 4 pots.0 Connect the IR dongles to the placeholders. They go in only

one way0 There are status LEDs just next to each IR socket, if the

comparator goes HIGH, the LED lights. This is for calibration.

0 Keep the IR sensor pointed at nothing (no obstruction).0 Use a screwdriver and GENTLY turn the appropriate POT

until the respective IR sensors status LED turns dark.0 Check with your hand if LED lights, if not readjust as you

like.

Page 28: 04   Arduino Peripheral Interfacing

PINS

0The table below shows the pin arrangement for the 4 sensors on the shield.

0 If the shield is mounted, then these 4 pins provide the output of the comparator.

0Use digitalread(pin) to see the state of the pin at any time.

Page 29: 04   Arduino Peripheral Interfacing

Try

0Connect all four IR sensors and calibrate them.

0Write a program to output which of the 4 IR sensors has gone HIGH to the serial port.

0CHALLENGE: Try and make sure that the message on the serial port doesn’t repeat until the IR sensor has gone LOW again (obstruction removed). It shouldn't continuously output the message if the IR sensor is obstructed,

Page 30: 04   Arduino Peripheral Interfacing

DC motors

0 Motors are devices that convert electrical energy to mechanical energy.

0 Motors come in different varieties: AC, DC, Servo, Stepper etc

0 If motor draws less than 40mA of current, it can be directlu wired to an arduino pin.

0 Current drawn by a DC motor is propotional to speed and torque. To avoid burning out the arduino, we use motor drivers to control DC motors.

Page 31: 04   Arduino Peripheral Interfacing

The L293 driver

0 This chip isolates logic level voltages and the motor supply voltages.

0 It as also called a H-bridge.

0 It uses the transistors as a switch concept to electrically switch a DC power supply onto the terminals of the motor.

0 The driver can control two motors independently from the same supply.

Page 32: 04   Arduino Peripheral Interfacing

Motor Driver

Page 33: 04   Arduino Peripheral Interfacing

The Motor Shield

0 The motor driver is present on the shield which also contains a wire block for easy connection of the wires.

0 The supply will have terminals marked on the board. Do not reverse these connections.

0 Motor can be connected in anyway. The direction might have to be calibrated by testing if the terminals are reversed.

+

-

Page 34: 04   Arduino Peripheral Interfacing

Arduino shield to Motor Driver Pinout

0 To use a motor, set the enable pin to high in the setup() { }

0 Motor movement is done in loop() { }0 If l1 is HIGH and l2 is LOW, motor turn in one direction.0 If l1 is LOW and l2 is HIGH, the motor turns in the other direction.

0 If both l1 and l2 are set to HIGH or LOW, then motor is stopped.

Page 35: 04   Arduino Peripheral Interfacing

Wiring motors

0Attach the arduino shield onto the arduino.

0Take a 9V battery cap and screw it onto the motor supply terminals. Take care of polarity. 0 Red >> + and Black >> -

0Wire up the motors and connect them to the terminals.

Page 36: 04   Arduino Peripheral Interfacing

TRY

0Move both motors in same direction.

0Reverse both motors.

0Stop one and turn the other.0Stop the other and turn the one.

0Make each motor turn in a different direction.

Page 37: 04   Arduino Peripheral Interfacing

Exercise

0Combine the functionality of 2 IR sensors and the motors to make an obstacle avoider bot.

0Algorith:0 Move forward, left and right randomly.0 If IR sensors detect an obstruction, move a little back in

the opposite side of the obstruction0 Continue.