WHY???
Admittedly, the idea of constructing a cigarette stuffing machine may sound rather special. The inspiration for it came to me during my wanderings through the internet. I’m always on the lookout for challenging projects, and this one undoubtedly represents one of my most challenging yet. Building a machine like this requires a considerable amount of expertise. Over hundreds of hours I have devoted to design, 3D printing, building, testing, programming, creating schematics, and many other aspects.
In the end, we now have a fully automatic cigarette stuffing machine that was realized using 3D printing. However, it is important to mention that this is a prototype. The machine is not yet perfect in its functionality. It still needs some customization work to make it fully work. However, with enough effort and the right approach, it is entirely possible to develop a fully functional machine.
You can download all the necessary files here: Printables, Cults
There was a HACKADAY article published about it.
My first experiments
My first attempts at stuffing tobacco into pre-made tubes were quite simple in design. I made a brass sleeve on which I could place a cigarette tube. I operated the pusher manually.
The learning curve during these experiments was quite steep. It became apparent that considerable force was required to press the tobacco into a uniform shape. In addition, it became clear that the tobacco must be pressed so that its diameter is slightly smaller than that of the cigarette tube. This makes it much easier to insert into the tube. If the pressed tobacco has the same thickness as the cigarette tube, insertion becomes extremely difficult.
Based on the aforementioned findings, the following design, known as the „toggle lever design,“ was developed. This design makes it possible to exert a significantly higher pressing force on the tobacco with comparatively little effort. The point at which the two levers are in a straight line to each other generates the maximum pressing force. Here, only a minimum force is needed to push the levers through. If this design is calculated mechanically, an infinitely large force is produced at this point.
As already mentioned, the tobacco is compressed in diameter slightly smaller than the diameter of the cigarette tube. When the knee lever is pushed through, the tobacco press is moved back again slightly, loosening the compressed tobacco somewhat. This allows for easier insertion with the pusher into the tube.
There are many different systems for plugging tobacco, but the solution with the toggle lever design seems to be technically the most effective.
It is important to deburr the brass sleeves cleanly and preferably polish the interior. Any resistance that could prevent the tobacco from smoothly sliding into the cigarette tube must be avoided.
The press
In all my tests I used a 12V gear motor with 166 RPM. The performance of this motor is very marginal. Here you should go to a more powerful model in any case. Either you reduce the speed -> thereby you achieve a higher torque, or you increase the electrical voltage of the motor.
Basically, I would advise to 24V motors. But you have to be careful not to exceed the maximum currents of the L293D Motor Driver Shield.
To drive the toggle, my first approach was to use a conventional M6 threaded rod. Unfortunately, this solution proved to be less efficient. The occurring friction losses were considerable and due to the low pitch of the threaded rod, the speed was very slow. In view of these shortcomings, I looked for alternatives.
In my research, I came across the company Igus, which offers trapezoidal threaded spindles with steep threads. In combination with the matching nut made of iglidur J material, an extremely effective solution resulted. This comparison and the clear improvements can also be seen very well in my video. By using the Igus trapezoidal lead screw in combination with the matching nut, the friction losses were reduced considerably, and the system now functions with low friction and efficiently.
The tamper pusher
The tamper pusher from the cigarette stuffing machine has the task of conveying the pressed tobacco into the tobacco tube. Due to this function, this operation requires considerable force. The tamper pusher is made of half-shell-shaped brass and is equipped with driving teeth to move the tobacco safely through the sleeve.
The same motor is used to drive the tamper pusher as for the press. Again, I would advise a 24V motor. Brass bearings were used as plain bearings for low friction movement.
The sleeve magazine
The tube magazine from the cigarette stuffing machine performs the task of storing empty cigarette tubes. It was constructed from acrylic sheets. The bottom of the magazine is mounted on pivoting bearings, which allows it to be shaken by means of a small DC motor. This shaking is essential to ensure that the tubes can align themselves neatly. Once aligned, the cigarette tubes slide down a chute. At this point, they are picked up by a rotating drum magazine.
The drum magazine takes over the task of conveying the tubes to the position for insertion. Here they are pinned onto the tobacco press by a pin driven by a model building servo. After the tamping process, the magazine rotates to the next position and the finished cigarette is ejected.
Before the machine starts, the drum is referenced by means of a slot sensor and brought into an initial position.
The tobacco magazine
The tobacco magazine from the cigarette stuffing machine performs the important task of storing the tobacco. Due to the inherent difficulties in dosing tobacco precisely – as the tobacco threads tend to stick to each other – a pivoting vertical wall was installed
The vertical wall of the magazine is mounted on pivoting bearings. Movement by means of a servo motor causes the wall to move back and forth. This action causes the tobacco to slide evenly down the chute. The initial position of the servo, that is, the position of the vertical wall, can be adjusted by means of a thread. This allows relatively good feeding to the press.
An additional step was required to allow the tobacco to now slide into the recess of the press. This was achieved by using a magnetic linear cylinder I use an acrylic wall from above to stuff the tobacco into the press.
The electronics
The circuit diagrams and electronic information presented on this website are for illustrative purposes only and are based on my own experience and procedures. I assume no responsibility for the accuracy, completeness or timeliness of the content provided. Any use or implementation of the information presented here is at the user’s own risk. I expressly exclude any liability for damages that may arise from the use of this information. It is recommended that you consult a specialist before implementing any electronic projects and take appropriate safety precautions.
Electronics may seem complex at first glance. But if you connect everything step by step, it is actually quite simple to understand.
The whole cigarette stuffing machine is controlled by an Arduino Uno and a L293D Motor Driver Shield. In the attached photo („Circuit diagram of the motorshield“), the Motorshield can be seen from above. On the right side you can see the two DC motors for the tobacco press and the tamper pusher. In addition, the servo for attaching the empty cigarette tubes and the servo for the tobacco magazine are shown here. On the left side you can see the stepper motor for the drum magazine. Optionally a button can be connected to the D2 connector of the Arduino. With this you can have a cigarette plugged by pressing a button.
In the picture „Initiators circuit diagram“ you can see on the left side the connections to the Arduino. A0-A2 are connected to the analog inputs of the Arduino. These inputs are then configured as digital inputs in the program.
At the top you can see the power supply of the initiators. Unfortunately they do not work with the 5V of the Arduino. Therefore a 12V power supply must be provided. On the right side the initiators are connected.
The two relays are connected via A3 and A4 of the Arduino.
On the right side of the photo „Relay and 12V distributor“ you can see a simple 12V and GND distributor.
Arduino code
To breathe life into the machine, of course, you still need the code for the Arduino. To describe a code in words is usually not very easy. I tried to comment everything as good as possible. However, if there are any questions or ambiguities, I’m happy to answer them.
#include AFMotor.h #include Servo.h int INI_press = A0; int INI_push_front = A1; int INI_push_rear = A2; int magazin_sensor = A5; int Ecylinder = A3; int vibro = A4; int button = 2; //Settings int press_back_time = 1000;//how long should press slide retract int eject_drive_time = 1000;//Time how long is ejected int knocking = 8; //How often to knock int plug_on_rear = 85;//Plug-on servo rear position int plug_on_front = 5;//Plug-on servo front position int tobacco_servo_rear = 140;//Tobacco magazine servo rear position int tobacco_servo_front = 80;//Tobacco magazine front rear position long eject_start_time; long press_start_time; int pusher_home = 0; int press_home = 0; String progress = "knocking"; //Initial state String mode = ""; //Button mode AF_DCMotor motor_press(1); // Motor pressing AF_DCMotor motor_push(2); // Motor pushing AF_Stepper motor_magazin(200, 2); Servo Servo_tobacco_magazine; Servo Servo_plug_on; void setup() { Serial.begin(9600); pinMode(INI_press, INPUT); pinMode(INI_push_front, INPUT); pinMode(INI_push_rear, INPUT); pinMode(Ecylinder, OUTPUT); digitalWrite(Ecylinder,LOW); pinMode(vibro, OUTPUT); motor_press.setSpeed(255); motor_press.run(RELEASE); motor_push.setSpeed(255); motor_push.run(RELEASE); Servo_tobacco_magazine.attach(9); Servo_plug_on.attach(plug_on_rear); pinMode(button, INPUT); reference_drive(); } void loop() { //---------------------------------------------------------------------------------- if (digitalRead(button) == HIGH){ //Request button buttonread(); } if (mode == "one_piece"){ if (progress == "knocking"){ //Start knocking for (int i = 0; i <= knocking; i++) { Servo_tobacco_magazine.write(tobacco_servo_front); digitalWrite(vibro,HIGH); digitalWrite(Ecylinder,HIGH); delay(100); Servo_tobacco_magazine.write(tobacco_servo_rear); digitalWrite(Ecylinder,LOW); delay(100); } motor_magazin.setSpeed(30); //Plug on tubes motor_magazin.step(25, FORWARD, SINGLE); delay(200); Servo_plug_on.write(plug_on_front); delay(200); Servo_plug_on.write(plug_on_rear); delay(100); motor_press.run(FORWARD); //Start press motor progress = "pressing"; } //---------------------------------------------------------------------------------- if (progress == "pressing"){ //Press cigarette if (digitalRead(INI_press) == LOW){ motor_press.run(RELEASE); motor_push.run(FORWARD); //Motor push start forward progress = "stuffing"; } } //---------------------------------------------------------------------------------- if (progress == "stuffing"){ //Stuff cigarette if (digitalRead(INI_push_front) == LOW){ motor_push.run(BACKWARD); //Start retract delay(700); press_start_time = millis(); motor_press.run(BACKWARD); //Press retract progress = "retract"; } } //---------------------------------------------------------------------------------- if (progress == "retract"){ //Retract slider+press if (digitalRead(INI_push_rear) == LOW){ motor_push.run(RELEASE); pusher_home = 1; } if (millis() >= press_start_time + press_back_time){ //Stop press motor_press.run(RELEASE); press_home = 1; } if ((pusher_home == 1) && (press_home == 1)){ eject_start_time = millis(); motor_push.run(FORWARD); //Start ejection delay(200); progress = "eject"; pusher_home = 0; press_home = 0; } } //---------------------------------------------------------------------------------- if (progress == "eject"){ //Eject if (millis() >= eject_start_time + eject_drive_time){ motor_push.run(BACKWARD); } if (digitalRead(INI_push_rear) == LOW){ motor_push.run(RELEASE); progress = "knocking"; mode = ""; digitalWrite(vibro,LOW); //Cycle starts from the beginning } } } } //_____________________________________________________________________________________________ void buttonread(){ //Here you can code different long press_start = millis(); //operating modes (one cigarette, automatic) while(digitalRead(button) == HIGH){ //do nothing } if (millis() >= press_start + 500){ //How long is button pressed mode = "one_piece"; } } //_____________________________________________________________________________________________ void reference_drive(){ //Tobacco Servo Reference Servo_tobacco_magazine.write(tobacco_servo_rear); //Reference magazine Servo_plug_on.write(plug_on_rear); delay(1000); motor_magazin.setSpeed(10); while (analogRead(magazin_sensor) < 100){ motor_magazin.step(1, FORWARD, SINGLE); } delay(6000); //Stuff slider reference if (digitalRead(INI_push_front) == LOW){ while (digitalRead(INI_push_rear) == HIGH) { motor_push.run(BACKWARD); } motor_push.run(RELEASE); } else if (digitalRead(INI_push_rear) == LOW){ motor_push.run(FORWARD); delay(800); while (digitalRead(INI_push_rear) == HIGH) { motor_push.run(BACKWARD); } motor_push.run(RELEASE); } else{ while (digitalRead(INI_push_rear) == HIGH) { motor_push.run(BACKWARD); } } //Press slider reference if (digitalRead(INI_press) == LOW){ motor_press.run(RELEASE); } else{ while (digitalRead(INI_press) == HIGH) { motor_press.run(FORWARD); } motor_press.run(RELEASE); } //Empty the bale chamber while (digitalRead(INI_push_front) == HIGH) { motor_push.run(FORWARD); } while (digitalRead(INI_push_rear) == HIGH) { motor_push.run(BACKWARD); } motor_push.run(RELEASE); motor_press.run(BACKWARD);//Presse zurückfahren delay(press_back_time); motor_press.run(RELEASE); //delay(10000); }
You can download the building plan here:
You will get the following digital files:
- All .stl files you need to print the machine.
- Assembly drawing in .dxf, .jpg, .pdf -format.
- The complete 3D model of the machine in .step – format.
- The cut-out drawing of the base plate and acrylic plates in .jpg, .pdf, .dxf – format.
- A drawing of all metal parts to be manufactured in .dxf, .jpg, .pdf – format.
- A detailed parts list of all installed parts including internet links to the supplier.
- The circuit diagram
- The Ardino Code
- An instruction video with all building steps.
- I will do my best to help you with any problems or questions.