experiment title: controlling a fischertechnik conveyor … · experiment title: controlling a...

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

Upload: leduong

Post on 12-Aug-2018

232 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: EXPERIMENT TITLE: Controlling a fischertechnik Conveyor … · EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board PRODUCTS USED: CHALLENGE: Interface

© 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

Page 2: EXPERIMENT TITLE: Controlling a fischertechnik Conveyor … · EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board PRODUCTS USED: CHALLENGE: Interface

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

Page 3: EXPERIMENT TITLE: Controlling a fischertechnik Conveyor … · EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board PRODUCTS USED: CHALLENGE: Interface

© 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:

Page 4: EXPERIMENT TITLE: Controlling a fischertechnik Conveyor … · EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board PRODUCTS USED: CHALLENGE: Interface

© 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!

Page 5: EXPERIMENT TITLE: Controlling a fischertechnik Conveyor … · EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board PRODUCTS USED: CHALLENGE: Interface

© Media Direct srl – Italy

5/12

THE CHALLENGE

The fischertechnik model requires 24V, since it’s 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!

It’s 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:

Page 6: EXPERIMENT TITLE: Controlling a fischertechnik Conveyor … · EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board PRODUCTS USED: CHALLENGE: Interface

© 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 ;-).

Page 7: EXPERIMENT TITLE: Controlling a fischertechnik Conveyor … · EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board PRODUCTS USED: CHALLENGE: Interface

© Media Direct srl – Italy

7/12

HOW THE MODEL WORKS: ALGORITHM’S DESCRIPTION

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

light barriers.

I developed a program and then I’ve 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: 0…1023 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");

Page 8: EXPERIMENT TITLE: Controlling a fischertechnik Conveyor … · EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board PRODUCTS USED: CHALLENGE: Interface

© 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: 0…1023 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

Page 9: EXPERIMENT TITLE: Controlling a fischertechnik Conveyor … · EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board PRODUCTS USED: CHALLENGE: Interface

© 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.

Page 10: EXPERIMENT TITLE: Controlling a fischertechnik Conveyor … · EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board PRODUCTS USED: CHALLENGE: Interface

© 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: I’ve

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

Page 11: EXPERIMENT TITLE: Controlling a fischertechnik Conveyor … · EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board PRODUCTS USED: CHALLENGE: Interface

© 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 …

Page 12: EXPERIMENT TITLE: Controlling a fischertechnik Conveyor … · EXPERIMENT TITLE: Controlling a fischertechnik Conveyor Belt with Arduino board PRODUCTS USED: CHALLENGE: Interface

© 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.