Banda transportadora con Arduino

12
© Media Direct srl – Italy 1/12 EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board PRODUCTS USED: CHALLENGE: Interface and control a conveyor belt model (24 Volts, fischertechnik) with an Arduino board (5 Volts) AUTHOR: Pietro Alberti (Media Direct srl, Italia) – [email protected] CREDITS: Wohlfarth Laurenz (fischertechnik GmbH, Germany) Dedicated to my family: Marco, Luca, Chiara, Francesco and Maria 10 th January, 2013: Final version

description

Conveyor Belt whith Arduino

Transcript of Banda transportadora con Arduino

  • Media Direct srl Italy

    1/12

    EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board

    PRODUCTS USED:

    CHALLENGE: Interface and control a conveyor belt model (24 Volts, fischertechnik)

    with an Arduino board (5 Volts)

    AUTHOR: Pietro Alberti (Media Direct srl, Italia) [email protected]

    CREDITS: Wohlfarth Laurenz (fischertechnik GmbH, Germany)

    Dedicated to my family:

    Marco, Luca, Chiara, Francesco and Maria

    10th January, 2013: Final version

  • Media Direct srl Italy

    2/12

    fischertechnik: MODEL DESCRIPTION

    This fischertechnik conveyor belt is preassembled and mounted on a base plate.

    - several conveyor belts can be connected to each other to form a conveyor belt of any length.

    Technichal specifications:

    - Power supply required: 24V DC (not included)

    - Dimensions: about 275 x 210 x 70 mm (LxWxH)

    - Length: 275 mm

    - 1 Output, 24 V DC (1 motor to drive the conveyor belt forward and backward)

    - 3 Digital Inputs, 24 V: 2 light barriers (consisting of phototransistor and lens tip bulb (which

    can be connected together to an output for the control or directly to the power

    supply) and 1 pulse counter coupled to the motor axle (can be used as an encoder to get the

    distance traveled)

    - 1 workpiece diameter 29 mm, h = 25 mm (it's possible to use workpieces with diameter up

    to 29 mm)

  • Media Direct srl Italy

    3/12

    The fischertechnik model comes with a detailed pinout description:

    This fischertechnik model works with 24 Volts!

    24 V motor:

    24 V lamp:

    24 V phototransistor:

  • Media Direct srl Italy

    4/12

    ESCRIPTION

    Arduino: COMPONENTS

    1 Arduino Duemilanove board

    ... but you can use any of the similar board

    (Arduino Uno Rev3, Arduino Leonardo, ...):

    the important thing is to have at least 3

    analog inputs and 2 digital outputs.

    1 TinkerKit Sensor Shield module:

    only to simplify me the wiring (optional)

    2 TinkerKit relays module:

    to drive the motor (forward and backward)

    2 potentiometers (10 kOhm)

    to reduce 24V 5V (from light barriers)

    Power supply (for Arduino) It comes from a USB cable connected to the

    computer. When programmed, you can use a

    9V battery.

    Arduino works with 5 Volts!

  • Media Direct srl Italy

    5/12

    THE CHALLENGE

    The fischertechnik model requires 24V, since its used as a TRAINING MODEL to be controlled

    from real life device like PLC from Siemens. So the motor and the lamps needs 24 V.

    Arduino can drive the 24V motor without problem: I used 2 relays.

    Fischertechnik now offers two outputs for the driving motor: Q1 to drive forward; Q2 to drive

    backward: great!

    But the signal coming from the light barrier is 24 V, too!

    Arduino accepts only 5 V, not 24 V.

    The challenge is reading the light barriers signal with Arduino!

    Its a problem of signal conditioning (max: 5V, 40 mA).

    I used a very simple circuit with a 10 KOhm potentiometer.

    Warning: I connected the ground from fischertechnik (-) to Arduino's ground: without a

    common ground, the ADC input is just going to read noise.

    Before connecting the wires to Arduino I manually tuned the potentiometer with a multimeter:

    I stopped when I arrived at 5 V.

    From an maths point of view:

    Vout = Vin *R2/( R1 + R2)

    V R1+R2 R2 Vout = Vin *R2/( R1 + R2) IMAX

    0 V 10.000 - 0 V 0 24 V 10.000 2.000 5 V 3 mA

    So now the voltage is about 5V and the current is about few mA.

    I used some fischertechnik plugs to avoid using soldering:

  • Media Direct srl Italy

    6/12

    ELECTRICAL CONNECTION DIAGRAM

    I enclose the wiring diagram. Might be useful.

    I prefer to use pen and paper ... though I might have been faster with computer ;-).

  • Media Direct srl Italy

    7/12

    HOW THE MODEL WORKS: ALGORITHMS DESCRIPTION

    My goal is to move forward and backward a small black cylinder between the two

    light barriers.

    I developed a program and then Ive uploaded it to Arduino (when I give power to Arduino via

    USB cable or with an external 9V battery, the program starts automatically).

    I implemented the following actions 1-3, repeated indefinitely (default):

    1) Motor forward (from light barrier 1 to the light barrier 2): the workpiece must be placed in

    the middle of the conveyor belt, only once ;-)

    2) when the workpiece arrives on the light barrier 2: stop the motor, wait 3 s, reverse motor

    backward

    3) when the workpiece arrives back on the light barrier 1: stop the motor, wait 3 s, reverse

    motor backward for 1.5 s, (enough to place the workpiece about in the middle position)

    4) repeat cycle from point 1)

    PROGRAMMING ARDUINO (Processing)

    I used Processing to program Arduino, in C language.

    The program is very simple, just to test the system.

    More improvements can be done and in more different ways.

    I programmed the system by defining a variable state (stato), to understand where we are.

    stato = 0: workpiece in the middle of the conveyor belt and motor forward

    stato = 1: workpiece arrived on the light barrier 2 (stop motor, wait 5 s, reverse motor)

    stato = 2: workpiece arrived back on the light barrier 1 (stop motor, wait 5 s, reverse motor)

    I used the Serial Monitor tool of Processing to show messages on the computer about the state

    of the system (debug/informations).

    /* Outputs: pin 10: motor backward (digital output: HIGH/LOW) pin 11: motor forward (digital output: HIGH/LOW) Inputs: pin A0: light barrier 2 (-> analog input to Arduino 0-5V) pin A1: light barrier 1 (-> analog input to Arduino 0-5V) 0V = object present (phototransistor not illuminated) 5V = object not present (phototransistor illuminated) I decide for a threshold about 2.5V to decide if the object is present or not. */ const int MotAvantiPin = 11; const int MotIndietroPin = 10; int stato; // state of the system int sensorValue; // sensor readings: 0...1023 float voltage; // sensor readings in voltage: 0...5 Volt // 'setup' runs once void setup() { Serial.begin(9600); // start serial communication @ 9600 bps (to debug) digitalWrite(MotIndietroPin, LOW); // Motor backward off digitalWrite(MotAvantiPin, HIGH); // Motor forward on Serial.println("Conveyor forward"); Serial.println("Place the cylinder in middle position"); stato=0; // 0 = initial state } // 'loop' runs forever void loop() { if (stato==0) { sensorValue = analogRead(A0); // light barrier 2 readings: 01023 voltage = sensorValue * (5.0 / 1023.0); // convert analog reading from 0...1023 0...5V if (voltage < 2.5) { // cylinder arrived at light barrier 2 stato=1; // update variable state digitalWrite(MotAvantiPin, LOW); // Motor stop Serial.println("Arrived at FC2: stop 3 s, then go back");

  • Media Direct srl Italy

    8/12

    delay(3000); //pause 3 s Serial.println("Conveyor backward"); digitalWrite(MotIndietroPin, HIGH); // Motor backward on } } if (stato==1) // waiting for light barrier 1 signal { sensorValue = analogRead(A1); // light barrier 1 readings: 01023 voltage = sensorValue * (5.0 / 1023.0); // convert analog reading from 0...1023 0...5V if (voltage < 2.5) { // cylinder arrived at light barrier 1 stato=2; // update variable state digitalWrite(MotIndietroPin, LOW); // Motor stop Serial.println("Arrived at FC1: stop 3 s, then go forward"); delay(3000); //pause 3 s digitalWrite(MotAvantiPin, HIGH); // Motor forward on for 1.5 middle position delay(1500); //pause 1.5 s Serial.println("---- STARTING POSITION ----"); digitalWrite(MotAvantiPin, LOW); // Motor stop delay(5000); //pause 5 s digitalWrite(MotAvantiPin, HIGH); // Motor forward on stato=0; // initial state } } }

  • Media Direct srl Italy

    9/12

    PHOTOS AND NOTES

    1st release:

    fischertechnik conveyor belt + Arduino

    Duemilanove

    Wires connected without planning, very alpha

    stage, but very bright.

    Wires connected to the spring contact on the

    fischertechnik board.

    2nd release:

    Using a flat cable (26 pin) for a better wiring

    and making easy to unplug the fischertechnik

    model from the Arduino world.

    The 24 V comes from a Siemens LOGO power

    supply I already used in the past to interface

    Siemens PLCs with fischertechnik Training

    Models.

    Focus on Arduino section: watch the 10 kOhm

    potentiometer I used to reduce the signal

    coming from the light barrier pin (24 V).

    Final release:

    I built an interface box between Arduino and

    fischertechnik:

    - soldering breadboard

    - 3 trimmer, 10 Kohm

    - 2 relays, tinkerkit

    - 1 header, 8 pin (Arduino side)

    - 1 header, 8 pin (fischertechnikside)

    - 1 terminals block (for 24V power supply)

    I also implemented a pulses counter coming

    from the switch I3 coupled to the motor shaft

    (it acts like an encoder), displaying this data in

    serial.

    Finally I interfaced the system with the

    Processing environment, synchronizing

    information via serial transmission.

  • Media Direct srl Italy

    10/12

    LAST UPDATE: 10 January 2013

    I decided to close the project attempting to build a system as clear as possible.

    I built an interface box between

    Arduino and fischertechnik:

    - soldering breadboard

    - 3 trimmer, 10 Kohm

    - 2 relays, tinkerkit

    - 1 header, 8 pin (Arduino side)

    - 1 header, 8 pin (fischertechnikside)

    - 1 terminals block (for 24V power

    supply)

    In management software Arduino I

    implemented a counter of impulses

    coming from the switch I3 coupled to

    the motor shaft (encoder type),

    displaying this data in the serial.

    Interesting is the software solution to

    avoid the rebound effect when switching

    the digital inputs.

    State: 0,1,2,3

    Pulses: 100 + nr_of_real_pulses

    Finally I interfaced the system with the

    Processing environment: Ive

    dynamically synchronized the motion of

    a green circle (virtual) with the (real)

    workpiece. Idem for the light barriers

    (I1 and I2), with red LEDs on/off.

    Processing receives Arduino via serial

    digital data representing the state

    (values: 0,1,2,3,4) or the number of

    pulses counted (increased by 100).

  • Media Direct srl Italy

    11/12

    SCREENSHOTS WITH SOFTWARE PROCESSING

    STATUS SCREENSHOT

    0:

    The piece (green circle) moves from

    left to right

    1:

    The piece (green circle) has reached

    the stroke end on the right:

    - LED sensor on right

    - Display Number of Pulses

    2:

    The piece (green circle) moves from

    right to left

    3:

    The piece (green circle) has reached

    the stroke end on the left:

    - LED sensor on left

    - Display Number of Pulses

    The cycle starts again from status

    = 0

  • Media Direct srl Italy

    12/12

    FINAL COMMENTS

    I thought it was a project too simple (only 3 inputs and 2 outputs). Then instead turned out to

    be very interesting and full of technical hardware/software and ideas for improvements to be

    implemented later.

    Here are some ideas.

    Hardware: - Adaptation electric 24 5 Volts. Note that my solution is probably the simplest and

    cheapest. Surely you can improve the circuit using operational amplifiers, diodes, etc..

    - Number of Inputs/Outputs: you could increase the number of inputs/outputs (thus using

    more relays, perhaps smaller) and therefore be able to handle even the most complex models

    of fischertechnik 24V (robotic arm, conveyor, pneumatic station, ... )

    -

    Software:

    The software I've realized is "essential" right to operate the system. But many ideas came to

    me as possible additions and/or variations:

    - Insert buttons on the screen to start/stop of the model (using serial communication)

    - Insert sound/animations correlated to the state of the system

    - Use another development environment, maybe Visual Basic / C

    - Control the system via the Web, using an Arduino Ethernet (there is even an appropriate

    shield) and using it as a Web server

    -

    Thank you for your attention!

    Pietro Alberti

    [email protected] 10th January, 2013

    Disclaimer: the undersigned disclaims any liability for any damage to people and/or things

    resulting from the use of this document.