A phone controlled remote for hopper drier, time saver for 3d print filament production


 


Summary

All manufacturers of polymer parts, whether plastic injection or extrusion, dehumidify the resin with a hopper dryer before starting production. For ABS polymer, the material must be dehumidified for 4 hours at 70 to 75 ° C before production of the 3D printer filament. This means that we had to turn on the hopper dryer every day as we entered the production line and wasted a lot of time.
In this project, I designed a gadget that, by phone call, can activate a timer so that the resin is ready for production before business hours begin and save time.


Introduction

Polymeric materials used in the production of filaments tend to absorb moisture. Over time and moisture absorption, there are problems with filament quality and print quality. The moisture absorbed in the resin, during extrusion, due to the process temperature, forms air bubbles and void.
Other problems with wet filament, which occur during printing, include gaps in the print, brittleness of the filament, and drooling of the nozzle. In other words, wet filament causes buildup in the nozzle and makes it dirty.
The ability to absorb moisture in each resin varies depending on the type of polymer and some polymers do not require special degassing. But in terms of ABS and PLA it is definitely necessary.
The resin dehumidification process is almost simple. As the resin gently absorbs the material, we must gently remove moisture from it and dry it. To increase the speed, we increase the temperature. But in order not to degrade the resin, the heat must be less than a certain temperature. To increase efficiency, hot air is blown through the resin into the hopper to make more contact, and the entire resin, which is heated in granular form, also removes the separated moisture.
The best way to produce filament is to always gasp the material for 4 to 6 hours immediately before production begins. We had to turn on the dryer every day when we went to the production line and waste time, or gasp for just one hour instead of 4 hours, both of which were impossible.
So I decided to design a gadget that I could control with a mobile phone and turn on the hopper dryer before business hours. This gadget is patched to a mobile phone and after the call, after receiving the code, its 2 or 4 hour timer is activated and then it turns itself off.


I have to answer a question first. The hopper dryer tank has a capacity of 25 kg. It can be completely jumped and used for several days. Why didn't I do this?
The answer is that materials should be gassed as much as their daily consumption. Otherwise, we have to bite the material several times and it degrade in this way. Secondly, gassing the material, just before producing the most ideal state possible.

Designing


My first decision for this purpose was to design an advanced timer, so that every day when the work is finished, we set the time to turn on the dryer for the next day. But certainly our work in the company may be accompanied by uncertainties. Remote control of the gadget will definitely be more flexible.
This gadget connects to a mobile phone with a hands-free circuit and checks the sound signal using Arduino ADC. When we call the mobile, the ringing detection routine is activated and answers the call. After that, it waits for sending an order that the operator can turn on the drier by dialing the number and sending the tone.
Sending the command is done by dialing the number and sending the tone. The first tone activates the hopper dryer and the second tone hangs the line up.
I also created a timeout feature for when the phone picks up, that if the call fails or the operator terminates the call without any command, the program hangs up after 30 seconds. The timeout feature is enabled for all situations where a call is made.
When the dryer is turned on by sending a command, a 2 or 4 hour adjustable timer is activated.
To filter out unwanted calls and promotional messages, I set the default ringtone to silent, and only the set ringtone for certain numbers. So as long as the caller person is not on the whitelist, a silent ringtone will play and the Arduino will not pick up the phone.
I also used a push button in the design to set the timer time. two periods of tow and four hours are available.
In addition, I created a feature that can only use the timer without the need for a call. By long pressing the push button, the dryer turns on and the timer is activated.
There are four LED  to show the remaining time. Each LED is indicates one hour.
I also used a status LED. Flashes when the program is running and the device is ready. So with a glance at the LED indicator we see that it is ready to receive the call.
In any case, you can turn off the dryer over the phone. In this case, the timer is also reset.
Picking up the phone is done by short-circuiting the microphone for a moment. One more thing! On the other side of the line I can hear if the dryer is really on or not for extra confidence.

timeout watch

What if the operator makes the call and do not complete the procedure? There are several different scenarios out there, if we want an assured remote. 

Let's say the remote opens the line after valid ringing,unexpectedly, operator hangs up. So the remote waits endlessly for next command to toggle the heater. Then the operator calls again. micro controller assumes it as a command, turns the heater on against the will of operator, and every thing will go corrupt. 

Again, there are several scenarios in which the code shouldn't show any flaw. I considered all of them. timeout watch is an example that I anticipated. after 20 seconds of inactivity, remote device hangs up the line and assumes no call has been made. 

while(analogRead(line)<signal_trigger) {delay(10);temp2++; if(temp2>=2000){temp2=0; goto START;}; };

Components

Components I used in this project:
Arduino for mini
4 channel relay module
5-volt switching
A simple cell phone


 

 Code 


#include <EEPROM.h>

#define led0 13
#define led1 A0
#define led2 A1
#define led3 A2
#define led4 A3

#define line A6
#define hang_up_relay 9
#define push_button 8
#define relay3 12
#define relay2 11
#define short_time 7200000
#define long_time 14400000
#define signal_trigger 30


unsigned long temp3;
long temp;
int setting;
boolean state = false;
int temp2;
void setup() {

EEPROM.get(0, setting);
temp = short_time;
if(setting)temp = long_time;
pinMode(line,INPUT_PULLUP);
pinMode(push_button,INPUT_PULLUP);
pinMode(hang_up_relay,OUTPUT);
pinMode(relay3,OUTPUT);
pinMode(relay2,OUTPUT);
pinMode(led0,OUTPUT);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
digitalWrite(hang_up_relay,HIGH);
digitalWrite(relay2,HIGH);
digitalWrite(relay3,HIGH);
digitalWrite(led1,HIGH);digitalWrite(led2,HIGH);digitalWrite(led3,HIGH);digitalWrite(led4,HIGH);
delay(2000);
if(!digitalRead(push_button)) {
state=true;
temp = short_time;if(setting == 1)temp = long_time;
temp3=millis()+temp;
delay(10);
digitalWrite(relay2, LOW);
delay(1500);
digitalWrite(relay3, LOW);
delay(2000);
};
}

void(* resetFunc) (void) = 0;

void loop() {

START:
if(!digitalRead(push_button)){setting=!setting; temp = short_time;if(setting == 1)temp = long_time; EEPROM.put(0, setting);delay(100); };

if(temp>= 3*3600000){digitalWrite(led1,HIGH);digitalWrite(led2,HIGH);digitalWrite(led3,HIGH);digitalWrite(led4,HIGH);}else
if(temp> 2*3600000){digitalWrite(led1,HIGH);digitalWrite(led2,HIGH);digitalWrite(led3,HIGH);digitalWrite(led4,LOW);}else
if(temp>= 1*3600000){digitalWrite(led1,HIGH);digitalWrite(led2,HIGH);digitalWrite(led3,LOW);digitalWrite(led4,LOW);}else
if(temp< 1*3600000){digitalWrite(led1,HIGH);digitalWrite(led2,LOW);digitalWrite(led3,LOW);digitalWrite(led4,LOW);};

for(char i = 0; i<=100; i++){
digitalWrite(led0,HIGH);
delay(10);
// Serial.println(analogRead(line));

if(analogRead(line)>signal_trigger)goto RR;

};

for(char i = 0; i<=100; i++){
digitalWrite(led0,LOW);
delay(10);
// Serial.println(analogRead(line));

if(analogRead(line)>signal_trigger)goto RR;

};

if(analogRead(line)>signal_trigger){
RR:
// Serial.println("phone ringing");
pick_or_hang_line();
while(analogRead(line)<signal_trigger) {delay(10);temp2++; if(temp2>=2000){temp2=0; goto START;}; };
digitalWrite(relay2, !digitalRead(relay2));
delay(1500);
digitalWrite(relay3, !digitalRead(relay3));
if(state){state=false;temp = short_time; if(setting == 1)temp = long_time;}else
if(!state){state=true;temp = short_time; if(setting == 1)temp = long_time; temp3=millis()+temp; };
// pick_or_hang_line();


};

if(state && temp>0 ){temp=temp3-millis();};

if(state && temp<0){ //-----sar reside timer ---- rele ha khamoosh -------
state= false;
temp = short_time; if(setting == 1)temp = long_time;
digitalWrite(relay2, HIGH); //relay off
delay(1500);
digitalWrite(relay3, HIGH); //relay off
};
}
void pick_or_hang_line(){
if(millis()>4200000000 && digitalRead(relay2)/*4280000000*/){delay(40);resetFunc();}; //reset arduino if millis is near to overflow
delay(1000);
digitalWrite(hang_up_relay,LOW);
delay(300);
digitalWrite(hang_up_relay,HIGH);
delay(2000);
}



No comments:

Post a Comment