How to make electronics of a homemade CNC

How to make electronics of a homemade CNC

Hi everyone !
Many of you have asked me how to make the electronics for your homemade CNC so this is what we will see in this article.

This article completes / resumes a YouTube video I made on this subject. (English subtitle avaible)
I invite you to watch it but you don't have to watch it to follow this article, I repeat all the steps.



Small precision before starting, we will only see here the bases to make the electronics of its CNC. 
I know that there is more recent, more powerful material which allows more functionality etc ... But there, I will show you the main lines with simple material and without going into the detail of all the deep settings.

1 - MATERIAL

For the electronics that I am going to present to you, we will use an Arduino Uno card (on the left) which is simple to handle, equipped with a CNC Shield V3 from Protoneer (on the right):









We could have done without CNC Shield, but already:

- it's long, tedious.
- it's not resistant neither to dust nor to vibrations, it's a blow to have short circuits everywhere.
it's very complicated to integrate neatly in a box because it takes up space and because of point 2) it must be well protected.

Here is the type of assembly that the CNC Shield avoids:


For the motorization we will use Nema17 motors, which are stepper motors, 200 steps per revolution. These motors are used in 99% of 3D printer and desktop CNC that can be found almost everywhere on Amazon or other.

The stepper motors are not conventional motors which are plugged into a power supply and which start to rotate as if by magic.

They perform a series of steps, to turn, which allows precise control of their speed, their direction of rotation and especially their position.

In our case the Nema17 take 200 steps to make a complete turn. This means that we can control their position to 360/200 = 1.8 ° close!

To make them take a step, we must sent them an electrical impulse. So, to rotate them, you need to send them a series of pulses:

- By controlling the number of pulses sent, we control their position 
By controlling the fréquency of pulses, we control their vitesse

Now you think it's more complicated than expected to drive a stepper motor, but in fact not. There is an electronic component that will manage for us the pulses to send to the motor. We call it a motor driver.

The motor driver will receive the orders of speed, direction of rotation and position from the control electronics, in our case the Arduino then transform these orders into a series of electrical pulses which it will send to the motor.

There are 2 references of motor driver which are very famous :
- The DRV8825 (left)
- The A4988 (right)









(Again I know that there is more reference of motor driver, more efficient with more advanced features etc ... but here I stay on simple things)

These two motor drivers are protected against overheating (within a certain limit obviously) but they have 2 big important differences:
- the maximum current that the driver can send to the motor
the number of "micro-stepping" divisions

Here are the values ​​for its two drivers :
- DRV8825 : Current admitted up to 1.5A without cooling, 2.2A with very efficient cooling (radiator + fan). Maximum division of 1/32 for  micro-stepping.

- A4988 : Current admitted 1.2A with cooling, and 2A with efficient cooling (radiator). Maximum division of 1/16 for micro-stepping.

A higher current will make it possible to put larger motors therefore more greedy and / or to be able to force the motors a little more. Here the DRV8825 accepts more current so it allows more range to choose our motors.

Micro-stepping consists of dividing the steps of a motor into even smaller steps therefore multiplying the total number of steps of the motor to make 1 revolution.

For example, our Nema17 - 200pas motor per revolution, with a micro-stepping of 1/2, will take 200 x 2 = 400 steps to do a revolution.
So following the logic the DRV8825 is able to multiply by 32 the number of steps of our motor, while the A4988 multiplies it by a maximum of 16.

I naturally prefer the DRV8825 because it accepts more current and has a much finer micro-stepping, the only "negative" point is that is a little more expensive (over time the price difference is reduced).

And finally, to power all of this, we need a power supply powerful enough mainly to support the load of the motors. Each motor consumes about 5W, which gives us 20W on a 4-motor assembly.

I personally use a 12V 5A power supply (about 60W) which is more than enough for my use:




2 - SOFTWARE

Now that we have done a little tour of the hardware we will see the software necessary to program, configure and control a CNC.

The first software we will need is the Arduino IDE which is the Arduino development environment. It is completely free and will allow us to program in our Arduino board the embedded software, also called firmware.
To install it nothing complicated, just download it and follow a classic "Next Next ...".

Here is the link to download it: Arduino IDE - Sofware

Once you installed it, launch it to verify that it was correctly installed, you should have this window:

Connect your Arduino board to the computer and check in the "Tools" tab if the software is able to recognize your board correctly.

You can select the communication port (which should appear) and the type of card. Check that everything is detected, otherwise choose the right card type.

At this point, you are able to program your Arduino but the question is: With which firmware?
We will use here the GRBL firmware which is OpenSource (free) and widely used in public CNCs. 

It is even used enough for well-known software like Fusion360 which integrates the export of machining paths in GRBL format.

Here is the link to download it: GRBL - Last Release

You will have to download the zip "Source code (zip)"

Then just extract it, you should have a folder and file tree, the only folder that will interest us is "grbl".

This folder is a library for the Arduino IDE software, so we will return to the software and include this folder by clicking on "Add ZIP library" in the "Sketch > Include library" tab.

There, you navigate to the place where you extracted the folder and you select the "grbl" folder (this is not a zip folder but it still works)

After that, going back to the sketch tab, you should have the grbl library which appeared in the same tab:


Now you got GRBL ready! We just have to program the Arduino board with it.

To do this, we will simply open the ArduinoIDE project provided with GRBL. As we added GRBL as a library we just have to go to "File> Examples> grbl> grblUpload", and the project will open in a new window!

It only remains to "upload" the program on the Arduino board by clicking on this small arrow button at the top left of the window:


in the black console at the bottom of the window, you should see things, compilation and upload information, you are programming GRBL in your Arduino!

Wait a bit until programming is complete, the console should look like this, displaying "Upload complete" if all is ok:

(There are warning messages in terms of available memory, this is normal, GRBL uses almost all of the space available on the Arduino's memory)

And There you go ! you have programmed your Arduino board, with GRBL, Arduino IDE tells you that the upload is OK, but we cant verify that GRBL itself is working well ...

So it's time to introduce the third and last software we will need, named: CNC JS!

CNC JS will allow us to communicate with GRBL. We will be able to configure it but also and above all, control our CNC!

As for the other software, we will download and install CNCJS, here is the link: CNCJS - Last release

Once installed, you can launch it, you should have this window:

You can see on the left a section called "Connection". Select the communication port of your Arduino (the same as in ArduinoIDE), set the transmission speed to 115200 (I will not go into details) then click on "Open".

The "Console" section just below should open and display a bunch of white parameters on a nice black background:

These parameters are sent by GRBL, which means that GRBL is correctly executed. Going up a little in the console, you should even find the version number of GRBL that you just installed.

We just finished installing the software and programming the arduino. We also checked that GRBL has been properly installed and that it responds, we will now proceed to the assembly of the components.


3 - ASSEMBLY


The assembly is pretty simple, it's like lego!

To start, we are going to mount the CNC Shield board on the arduino, at this level we can't really go wrong

Then we will place the micro-stepping jumpers, there are 3 possible locations under each motor driver location


Depending on how the jumpers are positioned, we select the micro-stepping division mode, here is the correspondence table for each driver reference:

"aucun micro-stepping" = No micro-stepping

Remember which mode you selected, it will be very important in the future!

Personally I put all the jumpers on the DRV8825. I am in 1/32 micro-stepping mode.

Then, we glue the radiators often delivered with the drivers. If, like me, you have a fairly large machine, I advise you to buy much larger radiators which will permit better cooling of your drivers

(on the left the driver without radiator / in the middle the driver with the original radiator / on the right the driver with a more efficient radiator)

We can now place the drivers in their respective locations, on the CNC Shield.

WARNING : Here, you have to watch and position the "Enable" pin (or "En") of the driver on the Enable pin of the CNC Shield, otherwise you can be sure to burn them all.


Once you have put all your drivers paying attention to the Enable pin, we will focus on the 4th location of motor driver.

On the CNC Shield, next to each motor driver location, there is the name of the axis that this driver will drive (X, Y or Z), but there is also a 4th driver titled 'A'.

This 4th driver will be able to copy all the movements of one of the 3 other axes, as desired. If like me, you have a CNC with 2 motors for 1 axis, you will have to use this axis duplication feature. (in my case it is the Y axis which have 2 motors)

On the side of the CNC Shield, you have places for jumpers with the names of the axis, you will have to place 2 jumpers side by side to select the axis you want to replicate


We just have to connect the power supply and the 4 motors. For power it is simple, there is a terminal block on the CNC Shield, we put the + on the red wire, the - on the black wire ...

Be careful though, do not connect the power supply to the Arduino directly but to the terminal block of the CNC Shield, the Arduino will simply be powered by the USB port.

To connect the motors there is a 4 pin connector next to each driver. There is no particular direction because by turning over the connector, we simply reverse the direction of rotation of the motor.

 


The assembly is finished! We can now go on to setting up GRBL


4 - CONFIGURATION

For the configuration we will reconnect our Arduino via USB to the computer and we will supply the CNC Shield with the power supply connected just before.

Once everything is connected we can return to CNCJS, open the communication and open the console section.

You should have all the above displayed :

CNCjs 1.9.20 [Grbl]
Connected to COM7 with a baud rate of 115200
Grbl 1.1h ['$' for help]
client> $$
$0=10 (Step pulse time, microseconds)
$1=25 (Step idle delay, milliseconds)
$2=0 (Step pulse invert, mask)
$3=0 (Step direction invert, mask)
$4=0 (Invert step enable pin, boolean)
$5=0 (Invert limit pins, boolean)
$6=0 (Invert probe pin, boolean)
$10=3 (Status report options, mask)
$11=0.010 (Junction deviation, millimeters)
$12=0.002 (Arc tolerance, millimeters)
$13=0 (Report in inches, boolean)
$20=0 (Soft limits enable, boolean)
$21=1 (Hard limits enable, boolean)
$22=0 (Homing cycle enable, boolean)
$23=0 (Homing direction invert, mask)
$24=25.000 (Homing locate feed rate, mm/min)
$25=500.000 (Homing search seek rate, mm/min)
$26=250 (Homing switch debounce delay, milliseconds)
$27=1.000 (Homing switch pull-off distance, millimeters)
$30=17000 (Maximum spindle speed, RPM)
$31=3000 (Minimum spindle speed, RPM)
$32=0 (Laser-mode enable, boolean)
$100=50.000 (X-axis travel resolution, step/mm)
$101=50.000 (Y-axis travel resolution, step/mm)
$102=50.000 (Z-axis travel resolution, step/mm)
$110=500.000 (X-axis maximum rate, mm/min)
$111=500.000 (Y-axis maximum rate, mm/min)
$112=500.000 (Z-axis maximum rate, mm/min)
$120=50.000 (X-axis acceleration, mm/sec^2)
$121=50.000 (Y-axis acceleration, mm/sec^2)
$122=50.000 (Z-axis acceleration, mm/sec^2)
$130=400.000 (X-axis maximum travel, millimeters)
$131=400.000 (Y-axis maximum travel, millimeters)
$132=150.000 (Z-axis maximum travel, millimeters)
ok
>


We will only focus on the 4 most important parameters.


First the parameter "$ 1 = 25", this is the parameter which will indicate to GRBL after how long it has to shut down (de-energized) the motor after a movement. The unit of this parameter is the millisecond.
By default, after a movement, the motor is switched off after 25ms.

A powered motor will force to keep its current position, if it is switched off, it will exert no force to keep its position and can turn very easily.

Take the example of the Z axis which raises / bring down the router. When cutting a wood sheet, the Z axis motor will bring down the cutter into the wood, then will remain in its position throughout the cut. This is where we begin to understand the problem.

If the motor go down to the right position and then turns off, since it does not apply any force to maintain its position, it will most likely "slide" lower due to the vibrations during milling!

To correct this problem, just set 255 to the $1 parameter. GRBL considers 255 to be an infinite time so it will never switch off the motors even after a movement. Warning, from 1 to 254, GRBL will take the parameter as milliseconds, only the value 255 is considered to be infinity.

So we will simply type this line in the console:

$1=255


The second parameter is the group "$100", "$101" and "$102". This is the displacement resolution for each axis (X Y and Z in order).

The displacement resolution is expressed in steps per millimeter, it is the number of steps that the motor must do to move our machine by 1mm.

To calculate the resolution, we need:
- The number of steps of our motor (in our case it is 200)
- The micro-stepping mode chosen, this is where it is very important (in my case 1/32)
- The machine guidance system (in my case trapezoidal leadscrews, 8mm per revolution)

On my machine I use DRV8825 and trapezoidal screws making 8mm nut displacement each time the screw makes 1 turn.

Here is an example of calculation of the resolution based on the values ​​of my machine:

(200steps (Nema17) x 32 (micro-stepping)) / 8 (trapezoidal leadscrew) = (200 x 32) / 8 = 800 steps / millimeter

We will make a second example for a GT2 belt machine. These are the classic belts used in 3D printing, they have a pitch of 2mm per tooth. We will also say that the engine is equipped with a 20-tooth pulley and that we use an A4988 in 1/16 microstepping.

So here is the calculation:
(200steps (Nema17) x 16 (micro-stepping)) / (2 (belt pitch) x 20 (number of pulley teeth)) = (200 x 16) / (2 x 20) = 80 steps / millimeter

We will therefore enter this value at GRBL (in my case 800):

$100=800
$101=800
$102=800

With this value that we can calculate the accuracy achievable (theoretical) by our machine by dividing 1 millimeter by the number of steps:1mm / 800steps = 0,00125‬mm

1mm / 80steps = 0.0125mm



The third parameter is the group "$110", "$111" and "$112". It is the maximum displacement speed for each axis (X Y and Z in order).

The fourth parameter is the group "$120", "$121" and "$122". It is the acceleration for each axis (X Y and Z in order).

The speed is expressed in mm / min, literally "how many millimeters will the machine travel in 1 minute"

The acceleration is expressed in mm / sec², roughly the greater is the value entered here, the greater will be the acceleration.

These two values ​​will depend a lot on your machine, its weight, its size and the type of machining you were going to perform (a laser engraving accept higher acceleration and a speed much higher than a wood cut for example)

So I cannot give you the perfect values ​​for your machine ... You will have to experiment!

I can still give you an example to have starting parameters for your tests:

On my machine which is large, heavy and which cuts mainly wood, I have 2000mm / min in speed, and 200mm / sec² in acceleration:

$110=2000
$111=2000
$112=2000
$120=200
$121=200
$122=200



And here this is the end ! I will soon make a new article on "how to generate a machining file for a CNC under GRBL." stay tuned and tell me in comment what you think about this article and which article you would like for the next time !


See you next time !







Comments

13/02/2020

Merci pour ces explications claires et précises. Pour ma première CNC cela me conforte sur le choix du matériel et son fonctionnement.

14/02/2020

Avec plaisir c'est la pour ça !

26/08/2020

merci pour tout, j avance dans mon projet ! mais je n arrive pas a régler les driver !! ! je tourne dans un sens dans l autre !! doucement ! !rien y fait !!! le moteur ronchonne ,mais n avance pas !!!

14/02/2020

good!

14/02/2020

Thanks !

15/02/2020

Help! My French isnt as good as it once was, so please pardon me if i type in English. I have followed you on Thingiverse since your first cnc build, and i finally got everything printed, and assembled. I am in the process of getting the lectronic portion done, and i can not seem to get the Arduino/cncshield to operate or even turn on the nema17 motors. I've uploaded grbl correctly, ive checked all the settings on my computer, its recognized by the device manager, drivers are up to date. the board powers up correctly, the LED's are on/flashing. I've changed all parameters in the CNCjs coding, but my motors will not turn on. Have i missed something? Any help would be greatly appreciated RIck

19/02/2020

I will made a help forum for this I have a lot of demands, plz let me a bit of time ^^'

26/02/2020

Merci!

19/02/2020

Very nice article. I'm just starting and this helped a LOT!!

19/02/2020

Thank you !

23/02/2020

Hi Topsie. Thanks for this fantastic job and explications. Two questions: how long are the aluminium bars that you use in the video (not the big CNC)? Did you do some work with aluminium? Thanks Marco

27/02/2020

60 cm for the aluminium bars, and yes i cut some aluminium :)

27/02/2020

Thanks for the answers

24/02/2020

Another question: is there a list of all material (mechanical and electronic) that you bought? Thanks

27/02/2020

Yes on the design page on my website ^^

27/02/2020

Thanks. I saw now. But , in my case, I started with your previous one CNC. Exist a list this?

25/02/2020

bonjour tout d abord merci pour tes videos, j aimerai savoir quel logiciel tu utilise pour faire les gcode de tes pieces a fabriquer merci

27/02/2020

Bonjour, merci a toi :) J'utilise Fusion360, je tourne une vidéo sur le sujet dans le weekend

26/02/2020

Bonjour , Quel serait votre matériel pour le Nema 23 car les drv8825 ne serait surement pas assez puissant ( ampérage ) . arduino -grbl . Et encore Merci pour ces explications claires et précises.

27/02/2020

Bonjour, il faudra des drivers externe avec un adaptateur, je me renseigne sur le sujet

04/03/2020

Thank you for your valuable knowledge sharing. It would be kind of you if you search while you are, for the appropriate electronic hadware for a nema 34 motor too.

10/03/2020

Mercie pour les idee de construire une CNC . J ai construire le CNC proposee , mais la calibrasione ne fonctionner pas : je regler 100 mm et le cnc fait 25 mm.La meme GRBL 1.1h, leadscruw T8x2, 800 step/mm, CNCJs. Je vous merci en avante.

13/03/2020

Bonsoir Topsie, je me permet de revenir sur le réglage $102 (l'axe Z ), dans votre explication vous dite : ( 200pas (Nema17) x 16 (micro-stepping) ) / ( 2 (pas de la courroie) x 20 (nombre de dent de la poulie) ) = (200 x 16) / (2 x 20) = 80 pas / millimètre. Mais vous ne tenez pas compte de la vis T8/2/8, après avoir fait les essais sur ma TopCNC, les 80pas/mm ne sont pas bon (pour moi). J'ai donc réfléchi, et j'ai compris ceci = c'est que enfin de compte les poulies et la courroie s'annule, je m'explique, les 2 poulies: 1 sur le moteur et l'autre sur la vis sans fin, sont identique : pas de 2mm et 20 dents, donc quand le première fait 1 tour, la deuxième aussi...1 tour complet du moteur=1 tour de la vis - - - donc déplacement de 8mm du chariot. Je pense que la bonne formule est = 200pas (Nema17) x 16 (micro-stepping) / 8 (pour une T8/2/8 le ''lead'' de la vis, soit le déplacement en mm du chariot) = 200x16 / 8 = 400 pas/mm. Si j'ai commis une erreur, toute mes excuses par avance....

16/03/2020

Oui je sais bien c'est juste que pour ceux qui ont une machine entrainé a courroie et pas a vis. Sur la topscnc les deux poulies utilisée sont des 20dents, donc 1 tour moteur correspond a 1 tour T8. Cest comme si on avait le moteur directement couplé a la vis, il est juste déporté vers l'arrière ^^

01/04/2020

Hello, tout d'abord bravo pour tout ce superbe travail! je savais pas comment te contacter pour te parler de mon soucis : j'ai moi même construit ta CNC (version non heavy), et tout va bien, elle fonctionne 'à vide' : j'arrive à envoyer des commandes via g-code sender, à la déplacer sur tous les axes et à envoyer mon g-code. Cependant, quand je lance l'exécution du g-code, ça le lance normalement mais à environ 2-3 cm de hauteur en +; du coup à aucun moment la fraise ne vient toucher l'objet à usiner.... As-tu une idée de où ça peut venir? Le g-code est généré à partir de fusion 360, et la simulation semble tout à fait OK (la fraise rentre bien dans le matériau). Voici le début du g-code généré : (T1 D=5 CR=0 - ZMIN=0 - flat end mill) G90 G94 G17 G21 G28 G91 Z0 G90 (2D Pocket1) T1 M6 S5000 M3 G54 G0 X34.851 Y19.725 Z30 Z20 G1 Z18 F500 X34.845 Y19.724 Z17.925 F166.7 Si tu as des idées et/ou conseils je suis preneur... Merci d'avance

03/04/2020

Hello, tu as surement oublié de mettre la fraise en contact avec ta pièce et remettre a 0 au niveau de CNCJS

09/04/2020

merci pour tout je finalise les test de ma machine . elle fonctionne très bien le seul truc que j ai changer c est cncjs contre estlcam j ai pour ma part plus facile ps il y il moyen d installer des fin de course ? merci

10/04/2020

Bonjour et bravo pour cet excellent tutoriel, tout est clair, précis, de plus vous donnez les liens ce qui facilite le travail mais surtout évite les erreurs, donc BRAVO ! Bien, j’attends avec impatience votre tutoriel sur les « fin de course », car j’ai ma machine qui se met en alarme dès que je veux faire un HOME, sitôt touché un fin de course elle s’arrête et il me faut faire un reset. Si vous avez la solution aussi pour le Z probe sur arduino ce serait le TOP pour beaucoup je pense. Merci pour votre excellent travail et bonne santé à vous et votre famille en ces temps difficiles

23/04/2020

Merci a vous !

17/04/2020

I found your cnc on thing and really like the lead screw over belt approach. I also am designating a laser engraver so i found your article on this to be incredibly helpful. A big thank you from Maine USA

23/04/2020

Thanks !

17/04/2020

Bonjour. Super boulot. Je projette de réaliser cette machine en suivant vos instructions. Serait-il possible de réaliser sur le même principe une imprimante 3D en "Arduino". C’est un projet qui m'interesserait. Michel

23/04/2020

Avec un Arduino Mega oui ça se fait beaucoup ! Avec une Carte RAMP 1.4

01/05/2020

Bonjour, votre travail est remarquable et encore Merci !!!! Petite question : est-il possible de piloter un 4ème axe plutôt que d'en répliquer un ? Merci à vous

01/05/2020

Bonjour, je suis admiratif d'un tel travail.....non seulement très bien fait, mais vous faites en plus un partage de connaissance...Vous êtes un génie ! Bravo et surtout MERCI !!!

15/05/2020

Bonjour, je vais me lancer dans la réalisation de cette CNC. Par contre, je ne connais pas la makita peut elle découper des matériaux type DEPRON de 5 mm mais d'une façon assez fine et précise. Je réalise des avions de modélisme et il faut que les découpes sois propre. Merci encore pour tout le boulot que vous effectué. Vraiment génial.

19/05/2020

Hi. Please tell me, How to read CAD drawing and run the Arduino and stepper motor accordingly. Can we use Arduino instead of CNC controller which are used in Industrial Applications like CNC laser cutting machine.

08/06/2020

Bonjour Topsie J'ai scrupuleusement suivi le tuto électronique pour brancher ma CNC mais rien ne bouge quand j'essaye d'actioner les moteurs via la console CNC.JS. Un conseil à me donner ? Merci d'avance ! PS : j'utilise ce matériel : https://www.amazon.fr/gp/product/B07YWSDK87/ref=ppx_yo_dt_b_asin_title_o01_s01?ie=UTF8&psc=1 https://www.amazon.fr/gp/product/B07ZCRYWCV/ref=ppx_yo_dt_b_asin_title_o01_s01?ie=UTF8&psc=1 https://fr.aliexpress.com/item/4000592680339.html?spm=a2g0s.9042311.0.0.27426c37ASwnHV

16/07/2020

Hello, Topsie, je vais bientôt me lancer dans la création d'une CNC, mais pour le moment je bloque sur un point qui doit être tout bête mais je ne trouve pas à quoi et comment raccorder la fraiseuse pour que GRBL puisse la piloter (et faire varier sa vitesse) et quel module de puissance mettre en sortie du CNC shield. Donc pour le moment mon installation à vide pilote bien les 3 axes mais pas la fraiseuse, pourrais-tu m'aiguiller ? Merci d'avance pour ton aide et pour le super travail que tu fais.

21/08/2020

Merci pour vos efforts je vais commencer mon aventure j'espère qu'elle aboutira.

27/08/2020

merci pour tout, j avance dans mon projet ! mais je n arrive pas a régler les driver !! ! je tourne dans un sens dans l autre !! doucement ! !rien y fait !!! le moteur ronchonne ,mais n avance pas !!! l alim est une 60 watts un peu comme la tienne ! cdl

30/08/2020

Bonjour, trop belle présentation. je voulais vous poser une question par rapport ma carte arduino due et la rampes 1.4 pour 6 moteurs : existe-t-est il un autre programme que le grbl pour pouvoir faire fonctionner mes moteurs. merci

14/09/2020

Bonjour, quelqu'un a déjà acheter le matériel listé ? je suis un peu perdu, il y as tellement de model différent que j'ai peur de ne pas acheter le bon :( je suis novice en CNC. Si vous avez des liens pour les achats je suis preneur et merci J'ai récupéré une CNC3018 chez un ami mais je doute que la carte et les moteur soit bon pour en faire une plus grande (environ 60x40) Quand on voit les tutos vidéo sa l'air simple mais plus on essaie plus sa ce complique :) Merci.

Post a comment