# Συζήτηση Κυκλωμάτων > Παρουσίαση Ολοκληρωμένων Κατασκευών >  >  Soldering Station με Arduino Nano και 4x20 LCD οθόνη

## manolena

Πήρα την πρωτοβουλία να δημιουργήσω καινούριο νήμα (στην ουσία δύο νήματα) που είναι συνέχεια της σχεδίασης του SMD Soldering Station με AVR αλλά 
έχει πολύ πιο πρακτικό τρόπο ενημέρωσης και αναφοράς στην κατασκευή του ίδιου σταθμού αλλά στην μορφή με την LCD οθόνη των 4x20 χαρακτήρων και τον Arduino
Nano. 

Εδώ θα μπορούν να γράφουν οι ενδιαφερόμενοι, να αναλύονται ζητήματα κατασκευής στο HW, απορίες στο SW καθώς και πάσης φύσης οδηγίες και προτάσεις.
Νομίζω πως (και με τη σύμφωνη γνώμη των Διαχειριστών) θα μπορεί να "τρέχει" παράλληλα με το πρωτότυπο νήμα. Αν υπάρχει κάποιο ζήτημα σε αυτή την 
πρακτική, παρακαλώ να διαγραφεί και να συνεχιστεί η αρχική παρουσίαση.



Αυτό είναι το σχηματικό για το οποίο ο Κώστας (SeAfasia) παρήγαγε τελικές πλακέτες με μάσκα και τοπογραφικό. Η κατασκευή σχεδιάστηκε για υλικά ΤΗ, ώστε να 
είναι πιο εύκολο να κατασκευαστεί απο τον καθένα και με μεγάλη ευκολία. Η πλακέτα που κατασκευάστηκε για αυτό τον σκοπό είναι αυτή:

----------

agis68 (21-07-16), 

CLOCKMAN (30-05-16), 

Fire Doger (28-05-16), 

GeorgeVita (03-06-16), 

jimnaf (30-05-16), 

kioan (28-05-16), 

lepouras (02-06-16), 

michalism (06-06-16), 

navar (28-05-16), 

Nickolaos (30-05-16), 

sakisr (28-05-16), 

SeAfasia (28-05-16), 

spirakos (29-05-16), 

street (28-05-16), 

SV1EOR (12-06-16)

----------


## manolena

Ανεπτυγμένος εδώ για καλύτερο ψάξιμο, ο κατάλογος με τα υλικά. Συνημμένο και το αρχείο σε .xls

Bill of Materials
<Parameter Title not found>


Source Data From:

NANO STATION.PrjPcb



Project:

NANO STATION.PrjPcb



Variant:

None









Creation Date:
19/05/2016




Print Date:
28-May-16
















Footprint
Comment
Designator
Description
Quantity

SK 104 HEATSHINK
HEAT-S1
*1
SK 104 HEATSHINK
1

BUZZER
BUZZER
BUZ1

1

RAD0.2
47nF
C1
Capacitor, multilayer, 50V, 5%
1

RB-08
10uF/25V
C2
Polarized Capacitor (Radial)
1

RAD0.2
10nF
C3
'Capacitor, multilayer, 50V, 5%
1

RB5-10.5
2200uF/35V
C7
Polarized Capacitor (Radial)
1

LED0.3
HEAT
D1
LED, 5mm
1

LED0.3
PWR
D2
LED, 5mm
1

CON2
PTC+
J1
5.08mm 2 Pin Connect Terminal Screw Terminal Connector
1

CON2
+
J2
1

CON2
-
J3
1

CON2
PTC-
J4
1

CON2
STBY_SW
J5
1

CON2
GND
J6
1

POWER JACK
PWR2.5
J7
Low Voltage Power Supply Connector
1

CON2
-LED HEAT
J8
5.08mm 2 Pin Connect Terminal Screw Terminal Connector
1

CON2
+LED HEAT
J9
1

CON2
+PWR
J10
1

CON2
-PWR
J11
1

HDR1X4
LCD 4x20 SERIAL
LCD1
Header, 4-Pin, Male or Female
1

ARDUINO NANO
ARDUINO NANO
MDL1

1

STEP DOWN CONVERTER MINI
STEP DOWN CONVERTER
MDL2
 Mini DC Adjustable Power Supply Buck Module Step Down Module
1

DIP-4
PC814
OP1
AC OPTOCΟUPLER
1

HDR2X3
ISP
P1
Header, 3-Pin, Dual row
1

TO-220V
IRF9530
Q1
P-Channel Power MOSFET
1

T0-92
BC557
Q2
PNP Bipolar Transistor, General Purpose
1

T0-92
BS170
Q3
N-Channel Power MOSFET
1

T0-92
BC547
Q4
NPN Bipolar Transistor, General Purpose
1

AXIAL0.4
10K
R1, R3, R9
Resistor, Axial, 0.25W, 1%
3

VR6
5K
R2
Resistor, Trimmer, Multiturn
1

AXIAL0.4
15K
R4
Resistor, Axial, 0.25W, 1%
1

AXIAL0.4
1K
R5, R13, R14, R15
Resistor, Axial, 0.25W, 1%
4

AXIAL0.4
220R
R6
Resistor, Axial, 0.25W, 1%
1

AXIAL0.4
220K
R7
Resistor, Axial, 0.25W, 1%
1

AXIAL0.4
120K
R8
Resistor, Axial, 0.25W, 1%
1

VR6
100K
R10
Resistor, Trimmer, Multiturn
1

AXIAL0.4
2K2
R11
Resistor, Axial, 0.25W, 1%
1

AXIAL0.4
330R
R12
Resistor, Axial, 0.25W, 1%
1

AXIAL0.4
4K7
R16
Resistor, Axial, 0.25W, 1%
1

SPST-2
SW-SPST
S1
Single-Pole, Single-Throw Switch
1

HDR1X5
ENCODER
SW1
Header, 5-Pin, Male or Female
1

DIP-8
LT1013
U1
Dual Precision Operational Amplifier
1

Z03A
LM336Z-2.5
U2
Adjustable Micropower Voltage Reference
1

----------

SV1EOR (12-06-16)

----------


## liat

Έκανες τη σωστή κίνηση Μάνο.
Έτσι γίνεται πιο εύκολη η ανεύρεση πληροφοριών.
Επειδή έτυχε να έχω τέτοιου είδους ψήκτρα, δοκίμασα να την τοποθετήσω, αλλά δεν τα ποδαράκια είχαν απόσταση κατά 1 χιλ. από τα ανοίγματα.
Υπάρχει συγκεκριμένος τύπος;

*Edit*
Τώρα είδα τα υλικά και τον τύπο της.

----------


## manolena

Μερικές διευκρινήσεις τώρα:


Στη στήλη Footprint (τοπογραφικό εξαρτήματος), αναφέρονται τα CON2 ως 5.08mm 2 Pin Connect Terminal Screw Terminal Connector ανά μονάδα. Αυτό είναι η κλέμα καλωδίου 


για τυπωμένο: 



...η οποία είναι 2 πόλων. Αυτό σημαίνει πως ο συνολικός αριθμός των εξαρτημάτων CON2 πρέπει να διαιρεθεί / 2 για το συνολικό αριθμό κλεμών που πρέπει να προμηθευτείτε
(σύνολο τέτοιων 5).


Τα LED μπορούν να κολληθούν απ' ευθείας στην πλακέτα ή να παραληφθούν και να συνδεθούν στις κλέμες PWR και LED HEAT με την πολικότητα που αναφέρεται στο τυπωμένο.Όλες οι αντιστάσεις καλό θα είναι να έχουν ανοχή 1%.Ο encoder μπορεί να είναι οποιουδήποτε κατασκευαστή αρκεί να δίνει 5 pins: VCC, GND, ENCA, ENCB και ENCSWITCHΤο μικρό step down πλακετάκι, μπορεί να διαφέρει απο κατασκευαστή σε κατασκευαστή στις διαστάσεις. Αυτό δεν είναι κακό, ρυθμίζεται εύκολα. Πρέπει να ρυθμιστή η τάση
εξόδου του με ένα άλλο τροφοδοτικό σαν πάροχο και αφού γίνει αυτό, μπορείτε να ασφαλίσετε το τρίμμερ τάσης με μια σταγόνα κόλλας σπειρωμάτων ή μανό νυχιών απο τη γυναίκα σας!

----------

SV1EOR (12-06-16)

----------


## manolena

> ...
> Υπάρχει συγκεκριμένος τύπος;
> 
> *Edit*
> Τώρα είδα τα υλικά και τον τύπο της.



Είναι η κλασική μαύρου ανοδιωμένου αλουμινίου SK104. Εγώ είχα πάρει παλιά απο τον Μαρμαρά στη Θεσσαλονίκη μερικές και για αυτό έβαλα αυτήν.

----------

SV1EOR (12-06-16)

----------


## liat

Ο step down converter είναι ανεξάρτητος από τον πλακέτα, σωστά;
Πόσο πρέπει να είναι και τι τροφοδοτεί;

*Edit*
Για arduino nano παράγγειλα αυτόν http://www.ebay.com/itm/301662997743...%3AMEBIDX%3AIT

----------


## manolena

> Ο step down converter είναι ανεξάρτητος από τον πλακέτα, σωστά;



Σωστό είναι αυτό.





> Πόσο πρέπει να είναι και τι τροφοδοτεί;



Μιλάμε για κάτι τέτοιο:
http://www.ebay.com/itm/Mini-3A-DC-D...wAAOSwezVWxobW
Ρυθμίζεται στα 5V ακριβώς, με είσοδο απο 24V.





> Για arduino nano παράγγειλα αυτόν http://www.ebay.com/itm/301662997743...%3AMEBIDX%3AIT



Μια χαρά, είναι εντελώς συμβατός.

----------


## Fire Doger

> Σωστό είναι αυτό.
> Μιλάμε για κάτι τέτοιο:
> http://www.ebay.com/itm/Mini-3A-DC-D...wAAOSwezVWxobW
> Ρυθμίζεται στα 5V ακριβώς, με είσοδο απο 24V.



Ωπππ σε τσάκωσα, και εγώ έτσι *την πάτησα*. :Tongue2: 
Αυτό αν προσέξεις έχει 2 τρύπες σε κάθε γωνία σε σχέση με* αυτό* που έχει μία και έχουν αρκετά διαφορετικές διαστάσεις. Αυτό με τις 2 τρύπες δεν κάθετε με τίποτα πάνω στην πλακέτα, πρέπει να μπει ξεχωριστά με καλώδια ενώ αυτό με την μια είναι ίδιο με το footprint και κάθετε πάνω στην πλακέτα.

----------


## liat

> Αυτό με τις 2 τρύπες *δεν κάθετε με τίποτα πάνω στην πλακέτα*, ..



Πάλι μπερδεύτηκα! Οκ, κατάλαβα ότι είναι άσχετος με την κυρίως πλακέτα, αλλά "κουμπώνει" πάνω της, όπως και το arduino;
Επιπλέον, παρατήρησα Στέφανε, ότι αυτός που λες δέχεται μέχρι 23v είσοδο. Έχουμε πρόβλημα σ' αυτό.

----------


## SeAfasia

> Μερικές διευκρινήσεις τώρα:
> 
> 
> Στη στήλη Footprint (τοπογραφικό εξαρτήματος), αναφέρονται τα CON2 ως 5.08mm 2 Pin Connect Terminal Screw Terminal Connector ανά μονάδα. Αυτό είναι η κλέμα καλωδίου 
> 
> 
> για τυπωμένο: 
> 
> 
> ...



Τα 2 pin terminal blocks pluggable 5.08mm ταιριάζουν επίσης αρσενικό/θηλυκό:
*terminal blocks 5.8mm*

----------


## Fire Doger

> Πάλι μπερδεύτηκα! Οκ, κατάλαβα ότι είναι άσχετος με την κυρίως πλακέτα, αλλά "κουμπώνει" πάνω της, όπως και το arduino;



Το μικρό (1 τρύπα σε κάθε γωνία) ναι. Μια σταλιά σαν τον νύχι είναι.
Στο τετραγωνάκι αριστερά πάνω απ' την κλέμα μπαίνει.





> ιδού:
> 
> Συνημμένο Αρχείο 64764
> Συνημμένο Αρχείο 64766



Και στο DC plug μπορείτε να βάλετε κλέμες :Wink:

----------


## manolena

> Ωπππ σε τσάκωσα, και εγώ έτσι *την πάτησα*.
> Αυτό αν προσέξεις έχει 2 τρύπες σε κάθε γωνία σε σχέση με* αυτό* που έχει μία και έχουν αρκετά διαφορετικές διαστάσεις. Αυτό με τις 2 τρύπες δεν κάθετε με τίποτα πάνω στην πλακέτα, πρέπει να μπει ξεχωριστά με καλώδια ενώ αυτό με την μια είναι ίδιο με το footprint και κάθετε πάνω στην πλακέτα.



Παιδιά, συγχωρήστε μου το λάθος, επειδή κατά καιρούς είχα πάρει διάφορα τέτοια, μοντουλάκια, υπάρχουν διαφορές. Η αγορά για αυτό που ταιριάζει έγινε απο εδώ:

http://www.banggood.com/5Pcs-Mini-DC...-p-952402.html

...και όντως έχει (θεωρητικά) είσοδο για 23V αλλά στο πρωτότυπο εργάζεται με ένα τροφοδοτικό φορητού υπολογιστή στα 24 μια χαρά.

Για αυτό που ερωτά ο Γιάννης, όντως είναι καρφωτό στην μαμά πλακέτα και έχει μια τρύπα σε κάθε γωνία.

----------


## liat

> Το μικρό (1 τρύπα σε κάθε γωνία) ναι.



Οπότε τοποθετείται στο κίτρινο πλαίσιο.



Εμ, άμα βλέπεις ονομασίες για πρώτη φορά!!!!! Αφού το γράφει πάνω στην πλακέτα ... MDL2 και το διευκρινίζει ο Μάνος στον κατάλογο με τα υλικά.





> Η αγορά για αυτό που ταιριάζει έγινε απο εδώ:
> http://www.banggood.com/5Pcs-Mini-DC...-p-952402.html



Για μια ακόμα φορά, έφαγα πόρτα από banggood!
Κάνει αυτό που λέει ο Στέφανος;

*Edit*
Κι από ebay μια από τα ίδια!

----------


## manolena

Υπάρχει περίπτωση, άλλος κατασκευαστής (απο τα εκατομμύρια κινεζάκια...) να έχει το ίδιο footprint αλλά με τα +IN, -IN και +OUT, -OUT αντεστραμμένα (όπως στην φωτογραφία, αλλά τα πάνω-κάτω). 
Αυτό μην σας ανησυχεί, απλά ρυθμίστε την πλακέτα στα 5V και καρφώστε την ανάποδα. Ο Γιάννης ο Λέπουρας έδωσε και άλλη ιδέα, μπορεί η πλακετίτσα αυτή να καθίσει όρθια στο πλάϊ και να κολληθεί με σκληρό
μονόκλωνο στα 4 σημεία της. Ακόμα και αν είναι ανάποδο το τοπογραφικό της ή δεν ταιριάζει, μπορεί έτσι να κάνει τη δουλειά της άνετα.

 EDIT: *Αυτό* που λέει ο Στέφανος κάνει μια χαρά.

----------


## liat

> Υπάρχει περίπτωση, άλλος κατασκευαστής ...



Εννέα αρνήσεις ... Αναθεματισμένα CC!
Το arduino πως τους ξέφυγε;

----------


## manolena

Και σε Banggood αρνείται την συναλλαγή;

----------


## liat

> Και σε Banggood αρνείται την συναλλαγή;



Οοουυυυυ!!

----------


## vasilisd

Μάνο συγχαρητήρια και για την κατασκευή αλλά και την ολοκληρωμένη παρουσίαση, ακόμη και λίστα υλικών έδωσες, πόσο ποιο εύκολο να το κάνει κανείς.
Μια απορία μόνο, για ποιο λόγο στήριξες την κατασκευή σε πλατφόρμα arduino ενώ θα μπορούσες να χρησιμοποιήσεις κατευθείαν ενα πχ Atmega328;

----------


## SeAfasia

> Οοουυυυυ!!



rotary encorder,dc-dc module και connector για το στέλεχος του κολλητηριού τα έχεις από μένα Liat :Biggrin:

----------


## liat

> rotary encorder,dc-dc module και connector για το στέλεχος του κολλητηριού τα έχεις από μένα Liat



Πάλι με ξελάσπωσες φίλε!  :Bye:

----------


## manolena

> Μάνο συγχαρητήρια και για την κατασκευή αλλά και την ολοκληρωμένη παρουσίαση, ακόμη και λίστα υλικών έδωσες, πόσο ποιο εύκολο να το κάνει κανείς.
> Μια απορία μόνο, για ποιο λόγο στήριξες την κατασκευή σε πλατφόρμα arduino ενώ θα μπορούσες να χρησιμοποιήσεις κατευθείαν ενα πχ Atmega328;



Καλημέρα Βασίλη,

Ένας λόγος ήταν πως ήθελα να μπορεί ο οποιοσδήποτε να φτιάξει αυτή τη μονάδα χωρίς να μπλέξει με δύσκολες κολλήσεις σε κέλυφος TQFP (για μικρότερο τελικό εμβαδό και μέγεθος
πλακέτας), αλλά απλά καρφώνοντας ένα τέτοιο module να ξεμπερδεύει με μΕ, κρύσταλλους, διασυνδέσεις USB, μετατροπείς USB σε σειριακό για τον προγραμματισμό και άλλα τέτοια. 
Η μόνη ενασχόληση είναι για αντιστάσεις και πυκνωτές στην ουσία πάνω στην κύρια πλακέτα.

----------


## elektronio

Συγχαρητήρια και από μένα για την κατασκευή που είναι πολύ καλή και όμορφη όπως όλες σου οι κατασκευές.

Μόλις μου ήρθε μια ιδέα για επέκταση της κατασκευής. 
Στο φόρουμ έχουμε συζητήσει σε αρκετά θέματα ότι η χρήση ταυτόχρονα 2 ή 3 στελεχών (κολλητηριών) είναι χρήσιμη αντί να αλλάζουμε μύτες ή για κολλητήρια με διαφορετικά watt. (Π.χ. ο λέπουρας χρησιμοποιεί 3 με επιλογή από διακόπτη). Θα μπορούσε η κατασκευή για να ξεφύγει και από τα συνηθισμένα να μπορεί να χειριστεί 2 ή και 3 στελέχη ταυτόχρονα και να κάνει και κάποια κόλπα σχετικά με τον χειρισμό τους. Αν φανεί ενδιαφέρουσα η ιδέα μπορώ να πω περισσότερες λεπτομέρειες για το πως το φαντάζομαι.

Υποθέτω ότι η ιδέα είναι πρωτότυπη αν γνωρίζει κάποιος ότι υπάρχει κάτι τέτοιο έτοιμο ας ενημερώσει.

----------

manolena (31-05-16)

----------


## manolena

Σε ό,τι αφορά τον κώδικα, έχει χωριστεί σε δύο αρχεία .ino που ακολουθούν με τα ονόματα *IRON_NANO_6.ino* και *UTILITY_LCD.ino*. Θα επισυναφθούν σαν δύο ξεχωριστά
αρχεία, αλλά θα πρέπει να τα αποσυμπιέσετε στον ίδιο φάκελο με το όνομα *IRON_NANO_6*. Αν θέλετε να αλλάξετε το όνομα, πρέπει να αλλαχθεί και στο φάκελο και στο αρχείο
.ino

*IRON_NANO_6.ino
*



```
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <EEPROMEx.h>
#include <Encoder1.h>
#include <PinChangeInt.h>
#include <TimerOne.h>
#include <PID_v1.h>
#include <StopWatch.h>
//=======================================================
#define VERSION "v1.6"        
#define INTRO


#define LCD_I2C_ADDRESS      0x27
#define ROWS 4
#define COLUMNS 20


#define ADC_TO_TEMP_GAIN     1.8//0.99//2.50//0.53 //0.415
#define ADC_TO_TEMP_OFFSET      25.0
#define STANDBY_TEMP        175
#define MAX_TEMP        400
#define MIN_TEMP            25 // Minimum setpoint temperature
#define MAX_PWM_LOW        50//180
#define MAX_PWM_HI        255//210//240
#define PWM_DIV                 1024    


#define Encoder1ChnA          2
#define Encoder1ChnB          3
#define EncoderDetent         4


#define BUZZER_PIN            5
#define HEAT_LED              6
#define STANDBYin             7
#define TEMPin                   A0
#define PWMpin                   8


#define WILL_TEMP_EEPROM_ADDRESS 0x10
#define ENCODER_EEPROM_ADDRESS   0x20


#define DELAY_MAIN_LOOP     1//150
#define DELAY_MEASURE         2


#define SIZE_BAR (9 * 5)
#define TIMER_10MIN            10//0
#define TIMER_20MIN            20//0
//=======================================================
int pwm = 0; //pwm Out Val 0.. 255
unsigned int actual_temperature, will_temp = STANDBY_TEMP;
int MAX_PWM;
boolean standby_act = false;
int tempDIV;
int will_temp_tmp;
float encoderValue = 0;
volatile float encoderPos = 0;
volatile float encoderPosTemp = 0;
boolean memWrite = false;
boolean memNoWrite = true;
boolean state = false;
boolean heater = false;
boolean unplug = 0;
int t1,t2;
int p1;
static boolean rotating = false;
const int numReadings = 30;
int readings[numReadings];      // the readings from the analog input
int readIndex = 0;              // the index of the current reading
int total = 0;                  // the running total
float adcValue;


//PID parameters
double Setpoint, Input, Output;
double aggKp=8.00, aggKi=0.10, aggKd=4.00;
double consKp=4.00, consKi=0.05, consKd=2.00;


int seconds, minutes, hours = 0;
int secs, mins = 0;
//=======================================================
Encoder1 myEncoder = Encoder1(Encoder1ChnA,Encoder1ChnB,EncoderDetent);
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
LiquidCrystal_I2C lcd(LCD_I2C_ADDRESS, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
StopWatch sw_millis;    
StopWatch sw_countdownmillis;  
StopWatch sw_secs(StopWatch::SECONDS);
StopWatch sw_countdownsecs(StopWatch::SECONDS);
//LiquidCrystal_I2C lcd(LCD_I2C_ADDRESS, 5, 6, 7, 2, 3, 4, 1, 0, NEGATIVE);  // Set the LCD I2C address
//=======================================================================
void setup() 
{
  Wire.begin();
  lcd.begin(COLUMNS, ROWS); 
  lcd.setBacklight(HIGH);
  Serial.begin(9600);
  Serial.println("Sketch'es location:");
  Serial.println("C:\\Users\\Administrator\\Documents\\DXP\\AVR SOLDERING IRON\\FIRMWARE\\NANO\\IRON_NANO_1");


  byte newChar[8];
  int i; 


  for (i = 0; i < 8; i++)
    lcd.createChar(i, getChar(i, newChar));
  customChars();
  pinMode(Encoder1ChnA, INPUT); 
  digitalWrite(Encoder1ChnA, HIGH); //turn pullup resistor on
  pinMode(Encoder1ChnB, INPUT); 
  digitalWrite(Encoder1ChnB, HIGH); //turn pullup resistor on
  pinMode(EncoderDetent, INPUT); 
  digitalWrite(EncoderDetent, HIGH); //turn pullup resistor on 


  PCintPort::attachInterrupt(Encoder1ChnA, &updateEncoder_ISR, CHANGE); 
  PCintPort::attachInterrupt(Encoder1ChnB, &updateEncoder_ISR, CHANGE);
  PCintPort::attachInterrupt(EncoderDetent, &EncoderClick_ISR, FALLING);


  Timer1.initialize(150000); // set a timer of length 150000 microseconds (or 0.15 sec)
  Timer1.attachInterrupt(timer1_ISR); // attach the service routine here  


  pinMode(9, OUTPUT);
  digitalWrite(9,HIGH);  
  pinMode(10, OUTPUT);
  digitalWrite(10,LOW);  


  pinMode(13, OUTPUT);
  digitalWrite(13,HIGH);  


  pinMode(BUZZER_PIN, OUTPUT);
  digitalWrite(BUZZER_PIN,HIGH);


  pinMode(STANDBYin, INPUT_PULLUP);


  pinMode(TEMPin, INPUT);
  digitalWrite(TEMPin, LOW);


  pinMode(HEAT_LED, OUTPUT);
  digitalWrite(HEAT_LED, LOW);     


  myEncoder.setRate(1.0f);
  myEncoder.setMinMax(MIN_TEMP,MAX_TEMP);


  beepBuzzer(6250,80);
  splashScreen();
  sw_secs.start();
  sw_millis.start(); 
  sw_countdownmillis.start(); 


  will_temp = EEPROM.readInt(WILL_TEMP_EEPROM_ADDRESS);
  myEncoder.setPosition(will_temp); 
  if (will_temp == 4294967295) 
  {
    will_temp = STANDBY_TEMP;
  }
  encoderPos = EEPROM.readInt(ENCODER_EEPROM_ADDRESS);
  if (encoderPos == 4294967295) 
  {    
    myEncoder.setPosition(will_temp);
  }


  Input = getTemperature();
  Setpoint = will_temp;
  myPID.SetMode(AUTOMATIC);
  pwm = 0; 
  lcd.setCursor(10,3); 
  lcd.print("MEM=");   
  lcd.print(will_temp);
  lcd.write(223); 
  lcd.print("C ");  
}
//=======================================================================
void loop()
{  
  unsigned long now = millis();
  static boolean oneTime = false; 


  Input = getTemperature();


  if(standby_act == false)
  {    
    Setpoint = encoderPos;
  }
  else
  {
    Setpoint = STANDBY_TEMP;
  }    
  double gap = abs(Setpoint-Input); 
  if(gap < 10)
  {  
    myPID.SetTunings(consKp, consKi, consKd);
  }
  else
  {
    myPID.SetTunings(aggKp, aggKi, aggKd);
  }
  myPID.Compute();   


  will_temp = map(encoderPos, MIN_TEMP, MAX_TEMP, MIN_TEMP, MAX_TEMP);
  int tempWill = EEPROM.readInt(WILL_TEMP_EEPROM_ADDRESS);  


  if (digitalRead(STANDBYin) == HIGH)
  {
    standby_act = false;
    lcd.setCursor(19,0);
    if(oneTime)
    { 
      showCountdownTime(13,1); 
      will_temp = STANDBY_TEMP;
      lcd.print(" ");
      lcd.setCursor(19,1);
      lcd.print(" ");
      oneTime = false;
      lcd.setCursor(6,1);
      lcd.print("      ");
      lcd.setCursor(19,0);
      lcd.print(" ");
      seconds = 0;
      minutes = 0;
      sw_millis.reset();
      sw_millis.start();
    }     
    sw_countdownmillis.reset();
    sw_countdownmillis.start();
    secs = 0;
    mins = 0; 
    lcd.setCursor(13,1);
    lcd.print("     ");    
    lcd.setCursor(19,0);    
    showIron(19,0);         
  }  
  else
  {
    standby_act = true;
    sw_millis.stop();
    sw_millis.reset();
    seconds = 0;
    minutes = 0;
    lcd.setCursor(19,0);
    if(!oneTime)
    {
      sw_countdownmillis.reset();
      sw_countdownmillis.start();
      secs = 0;
      mins = 0;
      lcd.setCursor(13,1);
      lcd.print("     ");   
      showIron(19,0);
      oneTime = true;      
    }
    showCountdownTime(13,1); 
    will_temp = STANDBY_TEMP;
    lcd.print(" ");
    lcd.setCursor(19,1);
    lcd.print(" ");
    lcd.setCursor(6,1);
    lcd.print("      ");
    lcd.setCursor(19,0);
    lcd.print(" ");    
  }


  if((memNoWrite == true) && (memWrite = false))
  {       
    memNoWrite = true; 
    memWrite = false; 
  }  
  else if((memNoWrite == false) && (memWrite = true))
  {
    lcd.setCursor(14,3);
    lcd.print(tempWill);
  } 
  memNoWrite = true; 
  memWrite = false; 


  will_temp_tmp = will_temp;


  if ((standby_act && (will_temp >= STANDBY_TEMP))) 
  {
    will_temp = STANDBY_TEMP;    
  }  


  actual_temperature = getTemperature();
  
  checkUnplugged();
  checkTimer(); 
  sw_millis.start(); 


  pwm = Output;
  MAX_PWM = actual_temperature <= STANDBY_TEMP ? MAX_PWM_LOW : MAX_PWM_HI;
  pwm = pwm > MAX_PWM ? pwm = MAX_PWM : pwm < 0 ? pwm = 0 : pwm;
  analogWrite(PWMpin, pwm);


  if(pwm != 0)
  {
    heater = HIGH;
  }
  else 
  {    
    heater = LOW;
  } 
  writeHEATING(will_temp, Input, pwm);
  showTemps();  
}
//=======================================================================
void checkTimer()
{
  if(mins >= TIMER_10MIN)
  {
    lcd.setBacklight(state);
  }  
  if(mins >= TIMER_20MIN)
  {
    lcd.setBacklight(HIGH);
    pwm = 0;
    digitalWrite(HEAT_LED, LOW);
    heater = LOW;   
      
    sw_millis.reset();  
    sw_millis.stop();    
    seconds = 0;
    minutes = 0;
    sw_countdownmillis.reset();
    sw_countdownmillis.stop();
    secs = 0;
    mins = 0;
  }  
}  
//=======================================================================
void checkUnplugged()
{
  if((actual_temperature >= MAX_TEMP) && (actual_temperature < MAX_TEMP+100))
  {    
    pwm = 0;
    digitalWrite(HEAT_LED, LOW);
    actual_temperature = 0; 
    lcd.clear();
    do
    {      
      lcd.setCursor(5,0);
      lcd.print(F("UNPLUGGED!"));
      lcd.setCursor(0,1);
      lcd.print(F("   PLEASE CONNECT   "));
      lcd.setCursor(0,2);
      lcd.print(F("        PLUG!       "));
      lcd.setBacklight(state);
      actual_temperature = getTemperature();
    }
    while(actual_temperature >= MAX_TEMP);
    lcd.setBacklight(HIGH);
    lcd.clear();


    lcd.setCursor(14,3); 
    lcd.print(will_temp);


    lcd.setCursor(4,2);
    if (t1 < 100)
      lcd.print(" ");
    if (t1 <10)
      lcd.print(" ");
    lcd.print(t1); 


    lcd.setCursor(4,3);
    if (t2 < 100)
      lcd.print(" ");
    if (t2 <10)
      lcd.print(" ");
    lcd.print(t2); 


    lcd.setCursor(14,2);
    if (p1 < 100)
      lcd.print(" ");
    if (p1 <10)
      lcd.print(" ");
    lcd.print(p1); 
  }
} 
//=======================================================================
void showTemps()
{
  lcd.setCursor(0,0);
  lcd.print(F("A>"));
  lcd.setCursor(0,1);
  lcd.print(F("S>"));


  lcd.setCursor(0,2);
  lcd.print(F("ACT="));
  lcd.setCursor(0,3);
  lcd.print(F("SET="));
  lcd.setCursor(10,2);
  lcd.print(F("PWM="));
  lcd.setCursor(10,3); 
  lcd.print("MEM=");   


  lcd.setCursor(7,2);
  lcd.write(223); 
  lcd.print("C ");
  lcd.setCursor(7,3);
  lcd.write(223); 
  lcd.print("C ");
  lcd.setCursor(17,3);
  lcd.write(223); 
  lcd.print("C ");
  lcd.setCursor(17,2);
  lcd.print("% ");


  lcd.setCursor(2,0);
  print_histogram(t1,MAX_TEMP); 
  lcd.setCursor(2,1);
  print_histogram(t2,MAX_TEMP); 
  showTime(13,0);
}   
//=======================================================================
void writeHEATING(int tempWILL, int tempVAL, int pwmVAL)
{
  static int d_tempWILL = 1;//2        
  static int tempWILL_OLD = 1;//10
  static int tempVAL_OLD = 1;//10
  static int pwmVAL_OLD    = 1;//10


  pwmVAL = map(pwmVAL, 0, 255, 0, 99);


  if (tempVAL_OLD != tempVAL)
  {
    lcd.setCursor(4,2);
    if ((tempVAL_OLD/100) != (tempVAL/100))
    {
      lcd.print(tempVAL_OLD/100);
    }
    else
      lcd.print(" ");


    if (((tempVAL_OLD/10)%10) != ((tempVAL/10)%10))
      lcd.print((tempVAL_OLD/10)%10);
    else
      lcd.print(" ");


    if ((tempVAL_OLD%10) != (tempVAL%10))
      lcd.print(tempVAL_OLD%10 );


    lcd.setCursor(4,2);
    if (tempVAL < 100)
      lcd.print(" ");
    if (tempVAL <10)
      lcd.print(" ");


    lcd.print(tempVAL); 
    t1 = tempVAL;
    tempVAL_OLD = tempVAL; 
  }
  if ((tempWILL_OLD+d_tempWILL < tempWILL) || (tempWILL_OLD-d_tempWILL > tempWILL))
  {
    lcd.setCursor(4,3);


    if ((tempWILL_OLD/100) != (tempWILL/100))
    {
      lcd.print(tempWILL_OLD/100);
    }
    else
      lcd.print(" ");


    if (((tempWILL_OLD/10)%10) != ((tempWILL/10)%10))
      lcd.print((tempWILL_OLD/10)%10 );
    else
      lcd.print(" ");


    if ((tempWILL_OLD%10) != (tempWILL%10))
      lcd.print(tempWILL_OLD%10 );


    lcd.setCursor(4,3);
    if (tempWILL < 100)
      lcd.print(" ");
    if (tempWILL <10)
      lcd.print(" ");


    lcd.print(tempWILL); 
    t2 = tempWILL;
    tempWILL_OLD = tempWILL;
  }


  if (pwmVAL_OLD != pwmVAL)
  {
    lcd.setCursor(14,2);
    if ((pwmVAL_OLD/100) != (pwmVAL/100))
    {
      lcd.print(pwmVAL_OLD/100);
    }
    else
      lcd.print(" ");


    if (((pwmVAL_OLD/10)%10) != ((pwmVAL/10)%10))
      lcd.print((pwmVAL_OLD/10)%10 );
    else
      lcd.print(" ");


    if ((pwmVAL_OLD%10) != (pwmVAL%10))
      lcd.print(pwmVAL_OLD%10 );


    lcd.setCursor(14,2);
    if (pwmVAL < 100)
      lcd.print(" ");
    if (pwmVAL <10)
      lcd.print(" ");


    lcd.print(pwmVAL);
    p1 = pwmVAL; 
    pwmVAL_OLD = pwmVAL;
  }    
}
//=======================================================================
void showCountdownTime(int row, int line)
{
  lcd.setCursor(row, line);
  if(sw_countdownmillis.elapsed() > 999)
  {
    secs++;
    sw_countdownmillis.reset();
    sw_countdownmillis.start();
  }  
  if(secs > 59)
  {
    secs = 0;
    mins++;
  }
 
  if(mins < 10)
  {
    lcd.print("0");
  } 
  lcd.print(mins,DEC);
  lcd.print(":");
  if(secs < 10)
  {
    lcd.print("0");
  } 
  lcd.print(secs,DEC); 
 
}  
//=======================================================================
void showTime(int line, int row)
{
  lcd.setCursor(line, row);
  if(sw_millis.elapsed() > 999)
  {
    seconds++;
    sw_millis.reset();
    sw_millis.start();
  }
  if(seconds > 59)
  {
    seconds = 0;
    minutes++;
  }
  
  if(minutes < 10)
  {
    lcd.print("0");
  } 
  lcd.print(minutes,DEC);
  lcd.print(":");
  if(seconds < 10)
  {
    lcd.print("0");
  } 
  lcd.print(seconds,DEC);  
}  
//=======================================================================
//    ENCODER ISR
//=======================================================================
void updateEncoder_ISR() 
{
  myEncoder.lowLevelTick();
  encoderPos = myEncoder.getPosition();
  if(encoderPos <= MIN_TEMP)
  {
    myEncoder.setPosition(MIN_TEMP);
    encoderPos = MIN_TEMP;
  }  
  if(encoderPos >= MAX_TEMP) 
  {
    myEncoder.setPosition(MAX_TEMP);//1150
    encoderPos = MAX_TEMP;
  }
  beepBuzzer(6250,1);
}
//=======================================================================
//    ENCODER'S DETENT ISR
//=======================================================================
void EncoderClick_ISR() 
{  
  myEncoder.lowLevelClick();
  {
    EEPROM.writeInt(WILL_TEMP_EEPROM_ADDRESS, will_temp);
    EEPROM.writeInt(ENCODER_EEPROM_ADDRESS, encoderPos);
    myEncoder.setPosition(encoderPos);
    memWrite = true;
    memNoWrite = false;  
    beepBuzzer(6250,80);
  }  
}
//====================================
//    TIMER 1 ISR
//====================================
void timer1_ISR()
{
  Timer1.detachInterrupt();
  state =!state;
  
  switch(heater)
  {
  case HIGH:
    digitalWrite(HEAT_LED, state);
    break;
  case LOW:
    digitalWrite(HEAT_LED, LOW);
    break;  
  }
  if (digitalRead(STANDBYin) == LOW) 
  {
    standby_act = true;
    sw_countdownsecs.start(); 
  }  
  else 
  {
    standby_act = false;
    sw_countdownsecs.stop();
    sw_countdownsecs.reset();  
  }  
  Timer1.attachInterrupt( timer1_ISR );
}
```

----------


## Fire Doger

Ενδιαφέρουσα είναι η ιδέα (κόλπα=? :Rolleyes: ) απλώς επειδή είπαμε να κρατήσουμε 'καθαρό' το εδώ θέμα για να βρίσκουμε εύκολα μερικά πράγματα την συζήτηση - αναβάθμιση - χαβαλέ κάνουμε σε αυτό το θέμα που έχει ήδη ξεφύγει  :Tongue2: 

Edit: Αχ γμτ έσπασα τον κώδικα στην μέση, μπορεί κάποιος πράσινος-κόκκινος να το μετακινήσει προς τα κάτω ή να το διαγράψει?
Ευχαριστώ :Smile:

----------


## manolena

*UTILITY_LCD.ino*




```
//=======================================================
void customChars()
{
  uint8_t iron1[8] = {     // Custom Character 2
    B00001,
    B00010,
    B00100,
    B01110,
    B01110,
    B01110,
    B01110,
    B01110
  };


  uint8_t iron2[8] = {     // Custom Character 3
    B01110,
    B11111,
    B11111,
    B00100,
    B00100,
    B00100,
    B00100,
    B00100
  };


  lcd.createChar(6,iron1);
  lcd.createChar(7,iron2);
}
//=======================================================================
byte *getChar(int n, byte newChar[]) 
{
  int i;
  byte code[5] = 
  {
    B10000,
    B11000,
    B11100,
    B11110,
    B11111
  }; 
  for (i = 0; i < 8; i++)
    newChar[i] = code[n - 1];
  return newChar;
}
//=======================================================================
void splashScreen()
{
  lcd.setCursor(0,0);
  lcd.print(F("    ARDUINO NANO    "));
  lcd.setCursor(0,1);
  lcd.print(F(" SOLDERING STATION  "));
  lcd.setCursor(0,2);
  lcd.print(F("   MANOS MAR v1.6   "));
  lcd.setCursor(0,3);
  lcd.print(F("    96W/25-400"));
  lcd.write(223);
  lcd.print(F("C    "));
  delay(5000);
  lcd.clear();
  //  showIron(0,0);
  //  delay(5000);
}  
//=======================================================================
//    UTILITIES
//=======================================================================
void beepBuzzer(unsigned long hz, unsigned long ms) 
{ 
  unsigned long us = (750000 / hz);  
  unsigned long rep = (ms * 500L) / us; 


  for (int i = 0; i < rep; i++) 
  {  
    digitalWrite(BUZZER_PIN, HIGH);  
    delayMicroseconds(us);  
    digitalWrite(BUZZER_PIN, LOW);  
    delayMicroseconds(us);  
  }
}


//=======================================================================
void showIron(int row, int line)
{
  lcd.setCursor(row,line);
  lcd.write(byte(6));
  lcd.setCursor(row,line+1);
  lcd.write(byte(7));
}  
//=======================================================================
void setPwmFrequency(int pin, int divisor) 
{
  byte mode;
  if(pin == 5 || pin == 6 || pin == 9 || pin == 10) 
  {
    switch(divisor) {
    case 1: 
      mode = 0x01; 
      break;
    case 8: 
      mode = 0x02; 
      break;
    case 64: 
      mode = 0x03; 
      break;
    case 256: 
      mode = 0x04; 
      break;
    case 1024: 
      mode = 0x05; 
      break;
    default: 
      return;
    }
    if(pin == 5 || pin == 6) {
      TCCR0B = TCCR0B & 0b11111000 | mode;
    } 
    else {
      TCCR1B = TCCR1B & 0b11111000 | mode;
    }
  } 
  else if(pin == 3 || pin == 11) 
  {
    switch(divisor) 
    {
    case 1: 
      mode = 0x01; 
      break;
    case 8: 
      mode = 0x02; 
      break;
    case 32: 
      mode = 0x03; 
      break;
    case 64: 
      mode = 0x04; 
      break;
    case 128: 
      mode = 0x05; 
      break;
    case 256: 
      mode = 0x06; 
      break;
    case 1024: 
      mode = 0x7; 
      break;
    default: 
      return;
    }
    TCCR2B = TCCR2B & 0b11111000 | mode;
  }
}
//=======================================================================
int getTemperature()
{  
  analogWrite(PWMpin, 0);        //switch off heater
  delay(DELAY_MEASURE);            //wait for some time (to get low pass filter in steady state)


  total = total - readings[readIndex];
  readings[readIndex] = analogRead(TEMPin);
  total = total + readings[readIndex];
  readIndex = readIndex + 1;


  if (readIndex >= numReadings) 
  {
    readIndex = 0;
  }
  adcValue = total / numReadings;
  analogWrite(PWMpin, pwm);    //switch heater back to last value
  return round(((float) adcValue)*ADC_TO_TEMP_GAIN+ADC_TO_TEMP_OFFSET); //apply linear conversion to actual temperature
}
//=======================================================================
void print_histogram(float val, float maxVal) 
{
  int i;
  int bloks;
  float histogram;


  lcd.noBlink(); 
  histogram = (SIZE_BAR * val) / maxVal;
  histogram = histogram + 0.5; 
  bloks = (int)histogram / 5;


  for (i = 0; i < bloks; i++)
  {
    lcd.write(5); 
  }  
  if ((int)(histogram) % 5 > 0)
  {
    lcd.write((int)(histogram) % 5);    
  }
  lcd.print(" ");  
}
//=======================================================================
```


Ο παραπάνω κώδικας έχει λάβει updated version λόγω της προσθήκης ενός χρονομετρητή που μετρά ώρα λειτουργίας του σταθμού συνολικά
και ενός δεύτερου που βγάζει σε λειτουργία STBY το στέλεχος μετά απο 20 λεπτά λειτουργίας. Αν δεν τα χρειάζεστε, ανατρέξτε στο προηγούμενο
version, εδώ:

https://github.com/manolena/DIY-Sold..._1/IRON_NANO_5

Για τις βιβλιοθήκες που χρησιμοποιήθηκαν, μπορείτε να ανατρέξετε στο:

https://github.com/manolena/DIY-Sold...ster/Libraries

----------


## chip

To Lm336 υποθέτω είναι το -2,5 (όχι το -5), σωστά?

και από μένα συγχαρητήρια! εξαιρετικά προσεγμένο!

----------

manolena (30-05-16)

----------


## manolena

Ναι, ευχαριστώ για τη διευκρίνηση είναι το *LM336Z-2.5
*Εκ παραδρομής δεν φαίνεται στον κατάλογο υλικών ούτε στο συνημμένο BOM

----------


## manolena

Για την οθόνη:

Στον κατάλογο υλικών είναι το εξάρτημα LCD1. Είναι μια κλασσική οθόνη 4 γραμμών, 20 χαρακτήρων με οπίσθιο φωτισμό LED αλλά με προσαρμοσμένη πάνω της μια
μικρή πλακετίτσα σαν αυτή εδώ:

http://www.ebay.com/itm/IIC-I2C-TWI-...EAAOSwBahU1CiK

Άλλως, το σχέδιο για να τη φτιάξει κάποιος μόνος του είναι αυτό:



Μη δίνετε και πολλή σημασία στα όποια λαθάκια στις ονομασίες, η οθόνη είναι πάντα 4x20. Οι γραμμές είναι 4, SDA, SCL, VCC και GND

EDIT: Για το configuration των pins του PCF8574 στον κώδικα της οθόνης, θα τα εξηγήσουμε αν υπάρχει ερώτηση.

----------


## SeAfasia

> Για την οθόνη:
> 
> Στον κατάλογο υλικών είναι το εξάρτημα LCD1. Είναι μια κλασσική οθόνη 4 γραμμών, 20 χαρακτήρων με οπίσθιο φωτισμό LED αλλά με προσαρμοσμένη πάνω της μια
> μικρή πλακετίτσα σαν αυτή εδώ:
> 
> http://www.ebay.com/itm/IIC-I2C-TWI-...EAAOSwBahU1CiK
> 
> Άλλως, το σχέδιο για να τη φτιάξει κάποιος μόνος του είναι αυτό:
> 
> ...



Τελικά είχα IIC/I2C/TWI/SPI στο κουτί με τα modules arduino,δε το κόλλησα ακόμη απλά ανεβάζω μερικές φώτο πως θα κολληθεί σωστά,για αποφυγή προβλημάτων:
   ...... :Smile: 
Φίλε liat δεν είχα δεύτερο ..... ..... :Lol:   :Sad:  τεσπά...
Φθηνά έχει εδώ:
*IIC-I2C-TWI-SPI*

----------


## SeAfasia

μέσω πμ ο liat(Γιάννης) με ενημέρωσε για τα εξής τροφοδοτικά:
*6A 24V*
και
*AC 100V-240V DC 24V 4A 96W*
Eπίσης ένας πωλητής που περνάει τα C.C για το * 3A DC-DC Converter*

----------

finos (01-06-16), 

manolena (01-06-16)

----------


## liat

> μέσω πμ ο liat(Γιάννης) με ενημέρωσε για τα εξής τροφοδοτικά:
> *6A 24V*
> και
> *AC 100V-240V DC 24V 4A 96W*



Κώστα, βασικά δεν πρέπει να είναι 6Α το πρώτο. 100W/24V=4,16Α.
Οπότε είναι τα ίδια. Απλά το ανοιχτό μπορεί να φιλοξενηθεί στο ίδιο κουτί με τον σταθμό (πιστεύω ότι θα χρειαστεί ανεμιστήρας), ενώ το άλλο , ως εξωτερικό, μπορεί να χρησιμοποιηθεί κι αλλού όταν δεν είναι συνδεδεμένο με τον σταθμό.

----------


## SeAfasia

> Κώστα, βασικά δεν πρέπει να είναι 6Α το πρώτο. 100W/24V=4,16Α.
> Οπότε είναι τα ίδια. Απλά το ανοιχτό μπορεί να φιλοξενηθεί στο ίδιο κουτί με τον σταθμό (πιστεύω ότι θα χρειαστεί ανεμιστήρας), ενώ το άλλο , ως εξωτερικό, μπορεί να χρησιμοποιηθεί κι αλλού όταν δεν είναι συνδεδεμένο με τον σταθμό.



σωστά,για όποιον επιλέξει εσωτερική ή εξωτερική τροφοδοσία.Εγώ μάλλον θα το βάλω μέσα γιατί έχω κουτάκι... :Biggrin:

----------


## billtsig

καλησπέρα φιλε μάνο και συγχαρητήρια για την άψογη κατασκευή σου νομίζω πως δεν έχει να ζηλέψει τίποτα από μια του εμπορίου  :Very Happy:  


πιστεύω θα μωρού επιτρέψεις όμως να κάνω μια μικρή ερώτηση μιας και πειραματίζομαι και εγώ με κάτι παρόμοιο: εφόσον ο θερμοζεβγος είναι κοντά στην αντίσταση πως μπορούμε να γνωρίζουμε με ακρίβεια την θερμοκρασία της μύτης ? υποθέτω πως κάνεις κάποια πράξη του στιλ (temp=mesuretemp-equasion) σωστά ? αν ναι πως γνωρίζουμε τις τιμές του equasion


δεν θα ήθελα σε καμια περίπτωση να θίξω το post σου ούτε να βγω of topic αν πιστεύεις πως πρέπει να "διεγραφτει" διέγραψε το δεν έχω κανένα πρόβλημα


σε ευχαριστώ

----------


## manolena

Για το τελικό, όπως φαίνεται και απο την κατάληξη του νήματος κατασκεύασμα, επιλέχθηκε ο ευρέως χρησιμοποιούμενος τύπος στελέχους με αισθητήρα που είναι αντίσταση θετικού συντελεστή, ή αλλιώς PTC. Άρα για
αυτή την υλοποίηση που κι εγώ δοκίμασα αλλά και άλλοι φίλοι εδώ ήδη κατασκευάζουν, δεν μας απασχολεί το αισθητήριο με θερμοζεύγος ή αλλιώς K-TC. Υπάρχει όμως πρόβλεψη στο HW και για τέτοιου τύπου αισθητήριο.
Τώρα, για την ακριβή μέτρηση της θερμοκρασίας σε τέτοιου είδους εφαρμογές, πρέπει να συμπεριληφθεί υπ' όψιν και η θερμοκρασία περιβάλλοντος χώρου, η οποία αφαιρείται μέσω λογισμικού ώστε να προκύψει η 
-κοντά στην πραγματικότητα- θερμοκρασία της μύτης. Μπορείς να δείς τα σχετικά εξαιρετικά σχόλια του Φιλίππου (FILMAN) για αυτό το θέμα, εδώ:

http://www.hlektronika.gr/forum/show...l=1#post752645

http://www.hlektronika.gr/forum/show...l=1#post752651

----------


## Fire Doger

> καλησπέρα φιλε μάνο και συγχαρητήρια για την άψογη κατασκευή σου νομίζω πως δεν έχει να ζηλέψει τίποτα από μια του εμπορίου  
> 
> 
> πιστεύω θα μωρού επιτρέψεις όμως να κάνω μια μικρή ερώτηση μιας και πειραματίζομαι και εγώ με κάτι παρόμοιο: εφόσον ο *θερμοζεβγος* είναι κοντά στην αντίσταση πως μπορούμε να γνωρίζουμε με ακρίβεια την θερμοκρασία της μύτης ? υποθέτω πως κάνεις κάποια πράξη του στιλ (temp=mesuretemp-equasion) σωστά ? αν ναι πως γνωρίζουμε τις τιμές του equasion
> 
> 
> δεν θα ήθελα σε καμια περίπτωση να θίξω το post σου ούτε να βγω of topic αν πιστεύεις πως πρέπει να "διεγραφτει" διέγραψε το δεν έχω κανένα πρόβλημα
> 
> 
> σε ευχαριστώ



Μου βγήκε το μάτι :Lol: 
Εδώ ήμαστε για να βοηθάμε ο ένας τον άλλο, αν είναι να φοβόμαστε μην θίξουμε τον άλλο με μια ερώτηση καήκαμε. :Smile: 

Ποιο παλιά που το έψαχνα είχα βρει ένα πολύ ωραίο γράφημα.

Αν σκεφτείς πως οι απώλειες θερμοκρασίας είναι σε ποσοστό όσο αυξάνετε η θερμοκρασία τόσο μεγαλύτερη διαφορά έχεις. Σε φτηνά κολλητήρια που είναι καλιμπραρισμένα στους 100 βαθμούς όταν φτάνεις στους 400 έχεις 50 βαθμούς διαφορά (αυτό διορθώνετε κάνοντας καλιμπράρισμα στην μέση περίπου στον τελεστικό).
Η καλύτερη λύση είναι να κάνεις καλιμπράρισμα στην ελάχιστη θερμοκρασία χρήσης και να πάρεις μετρήσεις της θερμοκρασίας της μύτης σε διάφορες τιμές.
Κάνοντας μια απλή διαίρεση θα έχεις έναν συντελεστή (Τsens/Ttip) = x. Κατά την χρήση θα έχεις γνωστό το x και το Τsens οπότε θα βρίσκεις το Τtip.
Αν θέλεις μεγάλη ακρίβεια επειδή δεν είναι γραμμική η μεταβολή μπορείς να βρείς 10 x. πχ 50-100 βαθμούς το χ1, 101-150 βαθμούς χ2 κλπ κλπ.

Αυτοί οι υπολογισμοί είναι για το σφάλμα λόγο απόστασης αισθητηρίου-μύτης. Εξαρτάτε και απ' την θερμοχωρητικότητα της μύτης, την επιφάνειά της κλπ.

----------

manolena (01-06-16)

----------


## manolena

It's alive!!!!



Με τροφοδοσία απο το USB του Nano, χωρίς κώδικα.



Μόλις πέρασα τον κώδικα, δούλεψε αμέσως!!!
Βέβαια, του λείπουν μερικά υλικά, αλλά δεν κρατήθηκα, ήθελα να δώ το κύκλωμα αν είναι εντάξει. Όλα καλά λοιπόν καλοί μου συν-κατασκευαστές, μόλις θα του βάλετε φωτιά,
θα αρπάξει αμέσως (μεταφορικά, λέμε). Οι ασυναρτησίες που γράφει η οθόνη είναι επειδή δεν υπάρχει rotary encoder, στέλεχος και κάποια άλλα υλικά.
Αλλά, ΔΟΥΛΕΥΕΙ.

----------

michalism (02-06-16)

----------


## chip

αυτό που μου αρέσει στην υλοποίηση είναι ότι εφόσον δεν απαιτείται αντίσταση ακριβείας δεν βάζεις 1% αλλά 5% που διαβάζεται πολύ πιο εύκολα η τιμή της (και σαν χρώματα με υπόστρωμα το μπεζ/καφέ σε σχέση με το μπλε των 1% και εύκολη αναγνώριση σε ποια μεριά είναι το πρώτο ψηφίο και σε ποια η ανοχή).

----------


## manolena

Είναι αλήθεια αυτό. Παρ' όλα αυτά όμως, στον κατάλογο υλικών στην αρχή του νήματος, έχω βάλει όλες τις αντιστάσεις σε 1% ανοχή. Κάποιος με εμπειρία θα καταλάβει όμως όπως λες κι εσύ 
πως για παράδειγμα, η αντίσταση φορτίου των LED δεν χρειάζεται να είναι και στο 1%, δεν χάθηκε κι ο κόσμος! Αλλά αντίθετα, τις αντιστάσεις που σχετίζονται με το κύκλωμα του συγκριτή,
θα τις τοποθετούσε με 1% ίσως. Εγώ, όπως φαίνεται στη φωτογραφία, άλλα λέω κι άλλα κάνω!!!!!

----------


## SeAfasia

> Είναι αλήθεια αυτό. Παρ' όλα αυτά όμως, στον κατάλογο υλικών στην αρχή του νήματος, έχω βάλει όλες τις αντιστάσεις σε 1% ανοχή. Κάποιος με εμπειρία θα καταλάβει όμως όπως λες κι εσύ 
> πως για παράδειγμα, η αντίσταση φορτίου των LED δεν χρειάζεται να είναι και στο 1%, δεν χάθηκε κι ο κόσμος! Αλλά αντίθετα, τις αντιστάσεις που σχετίζονται με το κύκλωμα του συγκριτή,
> θα τις τοποθετούσε με 1% ίσως. Εγώ, όπως φαίνεται στη φωτογραφία, άλλα λέω κι άλλα κάνω!!!!!



έχω πάθει την πλάκα μου με το I2C module.....το μελετάω.. :Rolleyes:

----------


## manolena

Ιδέα:

Αντί να καρφώσεις το μοντουλάκι στην οθόνη, μπορεί με τη βοήθεια ενός ULN2803 να χρησιμοποιήσεις
τις εξόδους του PCF8574 για να οδηγήσεις μια 8άδα ρελέ για παράδειγμα με
λίγο πειραματισμό και στον κώδικα.

----------


## SeAfasia

> Ιδέα:
> 
> Αντί να καρφώσεις το μοντουλάκι στην οθόνη, μπορεί με τη βοήθεια ενός ULN2803 να χρησιμοποιήσεις
> τις εξόδους του PCF8574 για να οδηγήσεις μια 8άδα ρελέ για παράδειγμα με
> λίγο πειραματισμό και στον κώδικα.



κάτι τέτοιο;
*uln2803*

----------


## manolena

Α, μπράβο τέτοιο πράγμα.

----------


## billtsig

σας ευχαριστώ πολύ παιδιά για τις απαντήσεις σας θα πειραματιστώ και θα σας ενημερώσω!!!

----------


## SV1EOR

Υπαρχει διαθεσημο και to software για το arduino?

----------


## SeAfasia

> Υπαρχει διαθεσημο και to software για το arduino?



post #25 Γιάννο... :Wink:

----------


## SV1EOR

Ευχαριστω δεν το είχα δει..

Για τον αισθητήρα θερμοκρασίας τι τεχνικές υπάρχουν ....(δεν το έχω δει και αυτό...?!!)

----------


## SeAfasia

> Ευχαριστω δεν το είχα δει..
> 
> Για τον αισθητήρα θερμοκρασίας τι τεχνικές υπάρχουν ....(δεν το έχω δει και αυτό...?!!)



Γιάννο ρίξε μια ματιά εδώ,υπάρχει όλη η διαδικασία:
*manolena*

----------


## SV1EOR

Σε ευχαριστώ πολύ....και συγνώμη που σε πριζω αντί να διαβάζω.....

----------


## SeAfasia

> Σε ευχαριστώ πολύ....και συγνώμη που σε πριζω αντί να διαβάζω.....



δεν πειράζει SV1E0R..... :Biggrin:

----------


## SeAfasia

*Σε ποιό σημείο βρίσκεστε παίδες;
Εγώ έχω μαζέψει όλα τα εξαρτήματα πλην του κολλητηριού και μάλλον θα αλλάξω και το κουτί σε απλό πλαστικό...*

----------


## navar

> *Σε ποιό σημείο βρίσκεστε παίδες;
> Εγώ έχω μαζέψει όλα τα εξαρτήματα πλην του κολλητηριού και μάλλον θα αλλάξω και το κουτί σε απλό πλαστικό...*



φρέσκαρα την πάστα κόλλησης με λίγο flux (σαν να ειχε σκληραίνει ) και ετοιμάζομαι αύριο να αρχίσω να κολλάω !!!!

ΥΓ:ουψψψψψψ λάθος κολλητήρι , το smd θα κάνω πρώτα !

----------


## manolena

Αναγγελία:

Τελειώνει η σχεδίαση (σχηματικό, πλακέτα, υλικά, λογισμικό) μιας νέας έκδοσης του κολλητηριού σε μικρότερο μέγεθος (μεγαλύτερο εξάρτημα η οθόνη και κουτί σαν πακέτο τσιγάρων), με εξωτερικό, 
όπως πάντα τροφοδοτικό και πλήρως συμβατό με στελέχη τύπου HAKKO, MOSFET ισχύος SMT (SOIC8 ) και πολύ πιο οικονομικό για τυπάκια ειδικά σαν τον Βαγγέλα (fino).
Στηρίζεται στον Arduino Micro Pro (*http://www.ebay.com/itm/New-Pro-Micr...4AAOSwRgJXiEQu*)
(ATMega32U). 



Όλο το έργο είναι open source, όσοι πιστοί προσέλθετε.

----------


## SeAfasia

> Αναγγελία:
> 
> Τελειώνει η σχεδίαση (σχηματικό, πλακέτα, υλικά, λογισμικό) μιας νέας έκδοσης του κολλητηριού σε μικρότερο μέγεθος (μεγαλύτερο εξάρτημα η οθόνη και κουτί σαν πακέτο τσιγάρων), με εξωτερικό, 
> όπως πάντα τροφοδοτικό και πλήρως συμβατό με στελέχη τύπου HAKKO, MOSFET ισχύος SMT (SOIC8 ) και πολύ πιο οικονομικό για τυπάκια ειδικά σαν τον Βαγγέλα (fino).
> Στηρίζεται στον Arduino Micro Pro (*http://www.ebay.com/itm/New-Pro-Micr...4AAOSwRgJXiEQu*)
> (ATMega32U). 
> 
> 
> 
> Όλο το έργο είναι open source, όσοι πιστοί προσέλθετε.



*
Αρχηγέ,τα gerbers σε εμένα να τα στείλω στο pcbway οκ;(ειδάλως θα κάνω αποτυχημένο πραξηκόπημα.....)*

----------


## finos

δεν κανεις και μια εκδοση σουρωτήρι γιατι τα smd δεν.....

----------


## manolena

> *
> Αρχηγέ,τα gerbers σε εμένα να τα στείλω στο pcbway οκ;(ειδάλως θα κάνω αποτυχημένο πραξηκόπημα.....)*



Έγινε chief, αλλά θα πρέπει να βάλουμε ένα δημοψήφισμα για το πως το θέλει ο λαός εδώ γιατί απο πάνω εκφράζονται κάτι παράπονα.

----------


## SeAfasia

> Έγινε chief, αλλά θα πρέπει να βάλουμε ένα δημοψήφισμα για το πως το θέλει ο λαός εδώ γιατί απο πάνω εκφράζονται κάτι παράπονα.



*ναι αμέ....εγώ σέλω και από τα δύο κοκά.....*

----------


## manolena

> *ναι αμέ....εγώ σέλω και από τα δύο κοκά.....*



Εσένα μετά σε βλέπω να ανοίγεις αντιπροσωπεία με κολλητήρια τσέπης!

----------


## SeAfasia

> Εσένα μετά σε βλέπω να ανοίγεις αντιπροσωπεία με κολλητήρια τσέπης!



*70% εσύ και 30% εγώ....*
*Ας δούμε τις προτιμήσεις των φίλων τότε Μάνο...*... :Smile:

----------


## lepouras

να πω? να πω?
αν μπορεί να γίνει μικρό με καμιά μικρή οθόνη με βασικές ενδείξεις (θερμοκρασία ρύθμισης και θερμοκρασία κολλητηριού) ώστε να κάτσει όλο πάνω σε ένα step up converter(από χ>24 βολτ) σε κάνα μικρό κουτάκι και να μπορεί να χρησιμοποιηθεί σε αυτοκίνητο (αναπτήρα)σε σκάφος κάμπικ κλπ κλπ ή και στην χειρότερη με μια μπαταρία συναγερμού (ή για τους μερακλήδες με τίποτα λιθίου )στην ανάγκη (έστω για την λίγη ώρα που θα το χρειαστούμε)?????? φυσικά και στο εργαστήριο. έτσι θα είναι και μια χρήσιμη κατασκευή για όσους έχουν τροφοδοτικά πάγκου από κάνα τροφοδοτικό πισι....... ε? ε? τη λέτε? ε? ε? καταπληκτικοί σχεδιαστές κατασκευαστές προγραμματιστές?

----------


## finos

με αυτην τη οθονη φυσικα

----------


## manolena

Κολλητήρι λέμε, όχι ραδιόφωνο... Εσύ θες και OLED οθόνη;

----------


## finos

ε βρε το περιεχμενο κοιτας το hardware σου λεω τι θα πας να βαλεις καμια 16χ2 εδω μιλαμε για pocket καταστασεις

----------


## manolena

Έχω 2 απο αυτές:

http://www.banggood.com/1_8-Inch-Ser...-p-909802.html



...στις 1.8". Είναι το μικρότερο που μπορώ να κάνω. Με ποτενσιόμετρο και κουμπιά αντί encoder. Και όταν μπαίνει standby να σου παίζει μίκυ μάους απο την SD.

----------


## manolena

> να πω? να πω?
> αν μπορεί να γίνει μικρό με καμιά μικρή οθόνη με βασικές ενδείξεις (θερμοκρασία ρύθμισης και θερμοκρασία κολλητηριού) ώστε να κάτσει όλο πάνω σε ένα step up converter(από χ>24 βολτ) σε κάνα μικρό κουτάκι και να μπορεί να χρησιμοποιηθεί σε αυτοκίνητο (αναπτήρα)σε σκάφος κάμπικ κλπ κλπ ή και στην χειρότερη με μια μπαταρία συναγερμού (ή για τους μερακλήδες με τίποτα λιθίου )στην ανάγκη (έστω για την λίγη ώρα που θα το χρειαστούμε)?????? φυσικά και στο εργαστήριο. έτσι θα είναι και μια χρήσιμη κατασκευή για όσους έχουν τροφοδοτικά πάγκου από κάνα τροφοδοτικό πισι....... ε? ε? τη λέτε? ε? ε? καταπληκτικοί σχεδιαστές κατασκευαστές προγραμματιστές?



Γιαννάκο, επειδή σε ψυλλιάστηκα, ψάχνω να βρώ αν γίνεται ένα 24V HAKKO στέλεχος με κάποια μετατροπή σε 12 αλλάζοντας το heating element ή βρίσκοντας αντίσταση στα 12 με PTC. Αν έχει κάτι υπ΄όψιν του κάποιος θα βοηθούσε. Αλλιώς με step up.

EDIT: Με τέτοιο λες Γιάννη, ε; Μάλλον είναι πιο εύκολο αυτό.

----------


## finos

> Έχω 2 απο αυτές:
> 
> http://www.banggood.com/1_8-Inch-Ser...-p-909802.html
> 
> 
> 
> ...στις 1.8". Είναι το μικρότερο που μπορώ να κάνω. Με ποτενσιόμετρο και κουμπιά αντί encoder. Και όταν μπαίνει standby να σου παίζει μίκυ μάους απο την SD.



 go ahead and build this και καλυτερα οχι μικυ αλα κατι αλο ....

----------


## manolena

> go ahead and build this και καλυτερα οχι μικυ αλα κατι αλο ....



Άντε να χαθείς... Νεολαία σου λέει μετά. Asterix θα σου βάλω.

----------


## lepouras

εφόσον μηλάμε για μια μικρή και φορητή κατασκευή πιστεύω (τουλάχιστον για όσους έχει χρειαστεί να δουλέψουμε με κάνα φορητό) οι πολλές τζιριντζάντζουλες είναι περιττές. με μόνο 2 (βαριά 3 ) κουμπάκια δεν γίνετε? με ένα βήμα πχ 10 βαθμών από 200 μέχρι 450 πιστευώ είναι αρκετό. δύο κουμπιά( πάνω κάτω) και ένα τρίτο που απλά θα κάνει lock (πατώντας πχ για 2 δευτερόλεπτα)να μην πατηθεί καταλάθος και αλλάξει. φυσικά το lock  μπορεί να γίνει (αν γίνετε) με το ταυτόχρονο πάτημα των δύο πλήκτρον ) οπότε δεν χρειάζεται το τρίτο. ή το τρίτο με παρατεταμένο πάτημα να κάνει lock  και με σύντομο ένα κύκλο επιλογών πχ 250, 300, 350, 400 (για ποιο γρήγορη επιλογή). τώρα αν είναι η οθόνη γραφικών και θέλετε να βάλετε και σχεδιάκια κλπ αυτό είναι δικόσας θέμα και όρεξη. προσωπικά θα ήθελα να γίνει το δυνατόν μικρότερο........... :Smile:

----------


## Fire Doger

> go ahead and build this και καλυτερα οχι μικυ αλα κατι αλο ....

----------


## lepouras

> Γιαννάκο, επειδή σε ψυλλιάστηκα, ψάχνω να βρώ αν γίνεται ένα 24V HAKKO στέλεχος με κάποια μετατροπή σε 12 αλλάζοντας το heating element ή βρίσκοντας αντίσταση στα 12 με PTC. Αν έχει κάτι υπ΄όψιν του κάποιος θα βοηθούσε. Αλλιώς με step up.
> 
> EDIT: Με τέτοιο λες Γιάννη, ε; Μάλλον είναι πιο εύκολο αυτό.



ναι βρε Μάνο.αφού το να μπει ένα step up στην τροφοδοσία είναι πολύ ποιο εύκολο από το να μπλέξεις να μπει το κατάλληλο κολλητήρι με την όποια μετατροπή. χώρια που δίνεις και στην κατασκευή εύρος τάσης τροφοδοσίας. θα μπορούσε να παίξει ακόμα και από ηλιακό  πάνελ μέχρι power bank.

----------


## finos

θα μου επιτρεψετε να δουλεψω να δουλεψω στο κουτι ;

----------


## manolena

> εφόσον μηλάμε για μια μικρή και φορητή κατασκευή πιστεύω (τουλάχιστον για όσους έχει χρειαστεί να δουλέψουμε με κάνα φορητό) οι πολλές τζιριντζάντζουλες είναι περιττές. με μόνο 2 (βαριά 3 ) κουμπάκια δεν γίνετε? με ένα βήμα πχ 10 βαθμών από 200 μέχρι 450 πιστευώ είναι αρκετό. δύο κουμπιά( πάνω κάτω) και ένα τρίτο που απλά θα κάνει lock (πατώντας πχ για 2 δευτερόλεπτα)να μην πατηθεί καταλάθος και αλλάξει. φυσικά το lock  μπορεί να γίνει (αν γίνετε) με το ταυτόχρονο πάτημα των δύο πλήκτρον ) οπότε δεν χρειάζεται το τρίτο. ή το τρίτο με παρατεταμένο πάτημα να κάνει lock  και με σύντομο ένα κύκλο επιλογών πχ 250, 300, 350, 400 (για ποιο γρήγορη επιλογή). τώρα αν είναι η οθόνη γραφικών και θέλετε να βάλετε και σχεδιάκια κλπ αυτό είναι δικόσας θέμα και όρεξη. προσωπικά θα ήθελα να γίνει το δυνατόν μικρότερο...........



ΟΚ, ελήφθη.

----------


## lepouras

και αυτά τα μοντουλάκια μπορούν να χρησιμοποιηθούν.
http://www.ebay.com/itm/DC-3-32V-Ste...-/301783285699

αυτό για τους μερακλήδες που μπορεί να θέλουν να βλέπουν και την τάση τροφοδοσίας.
http://www.ebay.com/itm/DC-DC-100W-3...-/221835891794

 :Rolleyes:

----------

manolena (19-07-16)

----------


## manolena

> θα μου επιτρεψετε να δουλεψω να δουλεψω στο κουτι ;



Τι να κάνεις στο κουτί;

----------


## finos

3d modeling για εκτύπωση σε 3d printer

----------


## navar

> θα μου επιτρεψετε να δουλεψω να δουλεψω στο κουτι ;



αν κατάλαβα καλά θέλεις να σε βάλουμε σε ενα κουτί για να μπορείς να δουλεύεις με ησυχία !!!!

εμένα αυτό με βρίσκει κάτι παραπάνω απο σύμφωνο , φαντάζομαι και τον Μάνο !

----------


## finos

Με βρικατε μικρο κι με δουλευετε ομαδικός

----------


## manolena

Πλακέτα 67.2x65.4mm, MOSFET ισχύος σε ΤΟ220 τελικά αλλά κολημμένο απο κάτω για το ψυγείο, υλικά ΤΗ για κάτι τύπους σαν τον Βαγγέλα, χειρισμός απο encoder
(άμα θέλετε κουμπιά πέστε το να τα αλλάξω), οθόνη I2C OLED σαν και αυτή:

http://www.ebay.com/itm/272282084964...%3AMEBIDX%3AIT

----------

finos (21-07-16)

----------


## manolena

Και το σχηματικό σε .pdf σαν συνημμένο.

----------


## SeAfasia

> Πλακέτα 67.2x65.4mm, MOSFET ισχύος σε ΤΟ220 τελικά αλλά κολημμένο απο κάτω για το ψυγείο, υλικά ΤΗ για κάτι τύπους σαν τον Βαγγέλα, χειρισμός απο encoder
> (άμα θέλετε κουμπιά πέστε το να τα αλλάξω), οθόνη I2C OLED σαν και αυτή:
> 
> http://www.ebay.com/itm/272282084964...%3AMEBIDX%3AIT



*οπότε λογικά τα gerbers θα είναι έτοιμα;* :Biggrin:

----------


## finos

ξεκιναω αμεσα την σχεδιαση του κουτιου

----------


## manolena

> *οπότε λογικά τα gerbers θα είναι έτοιμα;*



Ναι, έτοιμα είναι, αλλά...

Πρέπει να σκεφτούμε πως είναι σαν πλακέτα αδοκίμαστη (εννοώ λειτουργικά). Αυτό όμως ισοφαρίζεται απο το γεγονός πως το σχέδιο ήδη λειτουργεί σε δύο προηγούμενες 
version (με πολύ μικρές διαφορές). Επίσης, όπως είναι σχεδιασμένο, μπορεί ο encoder να αντικατασταθεί εύκολα με την προσθήκη μιας πολύ μικρής διάτρητης που θα υποστηρίζει
κουμπιά, αν χρειαστεί (μέχρι 3). Πρέπει να βρεθεί ένα ψυγείο τύπου SK-548 Fischer για να έχει περίπου όμοιες διαστάσεις με την πλακέτα, αφού θα φορεθεί απο κάτω της.

Επίσης δηλώνω πως λόγω περιορισμών στα κεφάλαια των τραπεζών μου (το αφεντικό στο σπίτι που είναι πρόεδρος δεν δίνει έγκριση για "κούρεμα" κεφαλαίων), προς το παρόν
δεν δύναμαι να κατασκευάσω τα πρωτότυπα. Αν έχετε υπομονή θα προσπαθήσω να το κάνω σύντομα.

----------


## Spirtos

πριν κανά μήνα πήρα ένα κλώνο Ηakko (οκ, δεν ξέρω τι θα μου βγει στο τέλος, βα΄ση τιμής τον διάλεξα) & 2-3 ATtiny για να φτιάξω αυτό http://www.zl2pd.com/SolderingStation.html, επειδή ήθελα μικρό όγκο, DC τροφοδοσία και φθηνές μύτες (τα χω παίξει τόσα χρόνια με το Weller..) και εδώ γίνεται πανικός, δεν σας προλαβαίνω...  :Rolleyes: 

Πολύ καλή δουλειά Μάνο,  :Thumbup1: . Αν δουλεύει οποιοδήποτε encoder, καλύτερα κράτα το, κατά την γνώμη μου είναι πιο πρακτικό από buttons, χωρίς ανάγκη για περίεργες τρύπες & στήριξη στο κουτί κλπ. απαντήθηκε μέχρι να το γράψω  :Tongue2: 

θα προχωρήσει κανένας με πλακέτες? θα έπαιρνα 2-3  :Biggrin:

----------

manolena (21-07-16)

----------


## finos

ετοιμα :Tongue2:  :W00t: αυτο ειναι ενα προσχεδιο να το προχορισω στο fusion 360

----------


## moutoulos

Βρε τι οργασμός εργασιών είναι αυτός ???????  :Biggrin:

----------


## SeAfasia

Οκ, Μάνο τα gerbers τα αναλαμβάνω εγώ.... 
Όποιοι φίλοι ενδιαφέρονται θα τους περιμένω... 
Μάνο σε νιώθω...

----------


## manolena

Κωστή, θα φτιαξω και ένα καλό ΒΟΜ με links για τις προμήθειες και μόλις ετοιμαστεί, θα τα ανεβασω όλα μαζί, ΟΚ;

----------


## manolena

> Βρε τι οργασμός εργασιών είναι αυτός ???????



Εργασιοθεραπεία Γρήγορη... Όπως μας κατάντησαν, να κάνουμε δουλίτσα για να μην τα παίξουμε  τελείως...

----------


## finos

δεν μου ειπατε το προσχεδιο καλο ;

----------


## manolena

> δεν μου ειπατε το προσχεδιο καλο ;



Είμαι όλη μέρα με το τηλέφωνο, δεν μπορώ να το δω. Το βράδυ.

----------


## finos

εχω κ φωτο

----------


## SeAfasia

> Κωστή, θα φτιαξω και ένα καλό ΒΟΜ με links για τις προμήθειες και μόλις ετοιμαστεί, θα τα ανεβασω όλα μαζί, ΟΚ;



Οκ, με το πάσο σου... 
Είναι καλύτερα έτσι με βολεύει και μένα να στείλω και gerbers από άλλο Project μου....

----------


## manolena

> Συνημμένο Αρχείο 65936Συνημμένο Αρχείο 65937Συνημμένο Αρχείο 65938Συνημμένο Αρχείο 65939ετοιμααυτο ειναι ενα προσχεδιο να το προχορισω στο fusion 360



Έλα να σου πω τώρα κάτι εσένα:

Κατ' αρχήν, δεν έχεις κανενός είδους χαρακτηριστικά όλης της κατασκευής παρά μόνον τις διαστάσεις της πλακέτας. Αυτό σημαίνει πως πέραν απο το μέγεθος
(και πάλι κατά προσέγγιση, ασχέτως των διαστάσεων PCB) της βάσης ενός κουτιού, δεν μπορείς να σχεδιάσεις τίποτε άλλο. Μια πιο κοντινή απόπειρα κατασκευής
του κουτιού προς τα σωστά χαρακτηριστικά θα γίνει απο έναν μηχανικό, όταν κατασκευάσει το πρωτότυπό του με δείγματα απο τα ίδια τα υλικά της παραγωγής 
του (ή αυτά που τέλος πάντων ξέρει οτι θα είναι τα τελικά).

Δεν ξέρεις πώς θα στηρίζονται υλικά που χρησιμοποιούνται ως περιφερειακά της κατασκευής (που δεν ανήκουν στο PCB εννοώ), όπως οθόνη, διακόπτες, κουμπιά, βύσματα, 
ακροδέκτες ή ό,τι άλλο θα στηρίζεται πάνω στο κουτί.

Όλα αυτά, ο μηχανικός τα αποφασίζει όταν έχει στα χέρια του μια πλήρη BOM και με όλα τα datasheets των εξαρτημάτων του. Κάθε τεχνικό εγχειρίδιο, συνήθως στο τέλος
του, περιλαμβάνει και τα μηχανικά χαρακτηριστικά του εξαρτήματος για το οποίο έχει συγγραφεί (διαστάσεις), αλλά αναφέρει και τα variants (παραλλαγές) που κάποιες
φορές είναι πολύ κρίσιμα για την κατασκευή.

Το ανάποδο, είναι βέβαια πιό εύκολο, δηλαδή να έχεις το κουτί και να σχεδιάσεις πάνω του την κατασκευή σου. Έτσι έκανα με τον πρώτο σταθμό, αυτόν με την 
TFT οθόνη των 2.4". Τα υλικά συγκεντρώθηκαν πρώτα και μετά φτιάχτηκε η πλακέτα, αφού υπήρχε το κουτί. Για αυτό και πέτυχε με τη μια.

Βλέπεις λοιπόν Βαγγελάκο πως δεν είναι σωστό να βιάζεσαι, γιατί η βιασύνη στην πραγματική ζωή εκεί έξω που θα συναντήσεις όταν μεγαλώσεις, στοιχίζει πολύ
(σε χρήμα τώρα πια και σε χρόνο). Και οι βασύνες δεν συγχωρούνται τις περισσότερες φορές, αν δεν έχεις να δείξεις πρότερο "έντιμο" βίο. Όλα αυτά στα γράφω
γιατί καταλαβαίνω πως δεν καταλαβαίνεις οτι δεν πρέπει να πετάς κοντά στον ήλιο, γιατι τα φτερά σου θα λιώσουν. Μάθε να έχεις υπομονή και να ακούς
αυτά που σου λένε για καλό.

----------


## finos

σωστα ! και σημερα τη βιασηνη πτην πλιρωσα με μια καταλαθωε διαγραφη του δισκου με τα αρχεια ευτιχως υπαρχει το recuva .
για το κουτι απλως εκανα εν σκαριφιμα της ιδεας μου

----------


## thomasdriver

> σωστα ! και σημερα τη βιασηνη πτην πλιρωσα με μια καταλαθωε διαγραφη του δισκου με τα αρχεια ευτιχως υπαρχει το recuva .
> για το κουτι απλως εκανα εν σκαριφιμα της ιδεας μου



Και κάτι απο εμένα Βαγγέλη. Προσπάθησε να μην βιάζεσαι να γράφεις μόνο και μόνο για να γεμίζεις τον λογαριασμό σου με μηνύματα.Να ελέγχεις την ορθογραφία σου, διότι ...πίστεψέ με...... θά κάνεις μεγαλύτερη εντύπωση όταν τα γραφόμενά σου είναι τακτοποιημένα και ορθογραφικά σωστά παρά να είναι ασυνάρτητα και ανορθόγραφα.
Αυτά δέν στα λέω για να σε προσβάλλω. Απο αγάπη στα λέω,είσαι νέο παιδί και εμένα προσωπικά μου αρέσει που παθιάζεσαι με πολλά πράγματα. Αλλά μην αφήνεις αυτή την ρημάδα την γλώσσα μας να κατρακυλάει μέσα στήν χαβούζα. Παράκληση απο έναν 60άρη που δεν είναι και άσσος στην ορθογραφία........προσπαθώ ακόμη.!!!!

----------


## manolena

Τελείωσα σήμερα (99,9%) τον κώδικα για την εκδοχή του κολλητηριού με Arduino Micro Pro και οθόνη OLED 1.3"
Όλες οι δοκιμές έγιναν με τη συναρμολογημένη πλακέτα του Κώστα (SeAfasia) και έναν Arduino Nano που είναι το ίδιο. Η μαμά πλακέτα θα είναι 
αυτή που φαίνεται στο rendering παραπάνω και βγαίνει πολύ μικρό. Για κάτι απαιτητικούς τύπους σαν τον Γιάννη τον Λέπουρα. Με έναν encoder
μόνο τα κάνεις όλα. Δεξιά πάνω, η θερμοκρασία που ρυθμίζεται απο το κουμπί. Κάτω, η πραγματική θερμοκρασία μύτης που μετράται.
Αριστερά πάνω, η θερμοκρασία τελευταίας μνήμης, απο κάτω το PWM σε (%). Κάτω αριστερά, δύο χρονόμετρα: το πάνω μετρά χρόνο λειτουργίας μόλις
το πάρεις στο χέρι, το κάτω μετρά χρόνο λειτουργίας μόλις το παρκάρεις. Κάτω-μέση, δύο παράθυρα: πάνω βγάζει HEAT όταν δουλεύει το PWM
και κάτω βγάζει SB όταν το στέλεχος μπαίνει σε πάρκινγκ.Σε 20 λεπτά πάρκινγκ, σβήνει όλο το κολλητήρι με μήνυμα.

 Η πλακέτα που κάνω δοκιμές για τον κώδικα.

 Plan Americain για την μικρούλα οθόνη.

... και gros plan. Χαριτωμένη είναι τελικά.

 Λίγο απο τον κώδικα που θα ανεβάσω. Τον ασυμμάζευτο έχει.

 Η οθόνη έναρξης. Γράφετε ό,τι θέλετε.

----------

FH16 (05-08-16), 

lepouras (05-08-16), 

navar (05-08-16), 

nestoras (05-08-16), 

SeAfasia (05-08-16)

----------


## lepouras

είσαι θεός.......

----------

manolena (05-08-16)

----------


## manolena

Μήπως τα παραλές; Άλλοι εδώ μέσα φτιάχνουν διαστημόπλοια, εγώ φτιάχνω ανεμιστηράκια. Τίποτα δεν είμαι.

----------


## lepouras

δεν έχει σημασία τη φτιάχνεις αλλά ότι προσφέρεις αυτό που φτιάχνεις..  και πραγματικά εσύ προσφέρεις πολλά. κάνε εσύ τα δικά σου και άσε εμάς να λέμε αυτά που σου αξίζουν. τις ντροπές και τα κοκκινίσματα άστα για τους καφέδες. :Lol:

----------

manolena (05-08-16), 

SRF (05-08-16)

----------


## SeAfasia

ευτυχώς έχω τέτοια οθόνη OLED 1.3"  :Biggrin:  :Biggrin:

----------


## manolena

Bill of Materials




Source Data From:
PRO MICRO STATION.PrjPcb




Project:
PRO MICRO STATION.PrjPcb




Variant:
None











Creation Date:
05/08/2016





Print Date:
05-Aug-16



















Item #
Designator
Description
Comment
Quantity
Supplier Link

1
BUZ1
Buzzer, PCB
BUZZER
1


2
C1
Capacitor, MKT, 10% 50V
47nF
1


3
C2
Polarized Capacitor
10uF/25V
1


4
C3
'Capacitor, MKT, 10% 50V
10nF
1


5
C4, C5, C6
'Capacitor, MKT, 10% 50V
100nF
3


6
C7
Polarized Capacitor
470uF/35V
1


7
D1
LED, 3mm, RED
HEAT
1


8
D2
LED, 3mm, GREEN
PWR
1


9
J1
6pin terminal connector PCB, 2.54mm
PTC+
1x6pin or 3x2pin


10
J2
PTC-


11
J3
STBY_SW


12
J4
GND


13
J5
-LED HEAT


14
J6
+LED HEAT


15
J7
Low Voltage Power Supply Connector
PWR2.5
1


16
J8
4pin terminal connector PCB, 2.54mm
+PWR
1x4pin or 2x2pin


17
J9
-PWR


18
J10
+


19
J11
-


20
MDL1

ARDUINO PRO MICRO
1


21
MDL2

STEP DOWN CONVERTER
1


22
OLED1
1.3" OLED TFT
Serial I2C OLED TFT
1


23
OP1
AC OPTOCUPLER
PC814
1


24
P1
Header, 3-Pin, Dual row
ISP
1


25
Q1
PNP Bipolar Transistor
BC557
1


26
Q2
NPN Bipolar Transistor
BC547
1


27
Q3
P-Channel Power MOSFET
IRF9530
1


28
Q4
N-Channel MOSFET
BS170
1


29
R1, R7, R15
Resistor, Metal Film 1%
10K
3


30
R2
Resistor, Trimmer, Multiturn
5K
1


31
R3
Resistor, Metal Film 1%
15K
1


32
R4, R11, R12, R14
Resistor, Metal Film 1%
1K
4


33
R5
Resistor, Metal Film 1%
220K
1


34
R6
Resistor, Metal Film 1%
120K
1


35
R8
'Resistor, Trimmer, Multiturn
100K
1


36
R9
Resistor, Metal Film 1%
2K2
1


37
R10
Resistor, Metal Film 1%
330R
1


38
R13, R17, R18
Resistor, Metal Film 1%
4K7
3


39
R16
Resistor, Metal Film 1%
220R
1


40
S1
Single-Pole, Single-Throw Switch
SW-SPST
1


41
SW1
Rotary Encoder, 5pin
ENCODER
1


42
U1
Dual Precision Operational Amplifier
LT1013
1


43
U2
Adjustable Micropower Voltage Reference
LM336-2.5
1

----------


## manolena

```

#include <U8glib.h>
//#include <Wire.h>
#include <EEPROMEx.h>
#include <Encoder1.h>
#include <PinChangeInt.h>
#include <TimerOne.h>
#include <PID_v1.h>
#include <StopWatch.h>




#define VERSION "v1.9"        
#define INTRO


#define ADC_TO_TEMP_GAIN     1.8//0.99//2.50//0.53 //0.415
#define ADC_TO_TEMP_OFFSET      25.0
#define STANDBY_TEMP        175
#define MAX_TEMP        400
#define MIN_TEMP            25 // Minimum setpoint temperature
#define MAX_PWM_LOW        50//180
#define MAX_PWM_HI        255//210//240
#define PWM_DIV                 1024    


#define Encoder1ChnA          2
#define Encoder1ChnB          3
#define EncoderDetent         4


#define BUZZER_PIN            5
#define HEAT_LED              6
#define STANDBYin             7
#define TEMPin                   A0
#define PWMpin                   8


#define WILL_TEMP_EEPROM_ADDRESS 0x10
#define ENCODER_EEPROM_ADDRESS   0x20
#define DELAY_MAIN_LOOP     1//150
#define DELAY_MEASURE         2


#define TIMER_10MIN            10//0
#define TIMER_20MIN            20//0
//=======================================================================


int pwm = 0; //pwm Out Val 0.. 255
unsigned int actual_temperature, will_temp = STANDBY_TEMP;
int MAX_PWM;
boolean standby_act = false;
int will_temp_tmp;
volatile float encoderPos = 0;
volatile float encoderPosTemp = 0;
boolean memWrite = false;
boolean memNoWrite = true;
boolean state = false;
boolean heater = false;
boolean unplug = 0;
int t1,t2;
int p1;
static boolean rotating = false;
const int numReadings = 30;
int readings[numReadings];      // the readings from the analog input
int readIndex = 0;              // the index of the current reading
int total = 0;                  // the running total
float adcValue;


//PID parameters
double Setpoint, Input, Output;
double aggKp=1.00, aggKi=0.002, aggKd=8.00;
double consKp=0.50, consKi=0.001, consKd=4.00;
/*
double aggKp=8.00, aggKi=0.10, aggKd=4.00;
 double consKp=4.00, consKi=0.05, consKd=2.00;
 */


int seconds, minutes, hours = 0;
int secs, mins = 0;
static boolean oneTime = false; 
int tempWill = EEPROM.readInt(WILL_TEMP_EEPROM_ADDRESS);  
//=======================================================================
Encoder1 myEncoder = Encoder1(Encoder1ChnA,Encoder1ChnB,EncoderDetent);
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
StopWatch sw_millis;    
StopWatch sw_countdownmillis;  
StopWatch sw_secs(StopWatch::SECONDS);
StopWatch sw_countdownsecs(StopWatch::SECONDS);
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);    // I2C / TWI 
//======================================================================= 
void setup() 
{
  Serial.begin(9600);
  Serial.println("Sketch'es location:");
  Serial.println("C:\\Users\\Administrator\\Documents\\DXP\\AVR SOLDERING IRON\\FIRMWARE\\MICRO\\MICRO_9");


  pinMode(Encoder1ChnA, INPUT); 
  digitalWrite(Encoder1ChnA, HIGH); //turn pullup resistor on
  pinMode(Encoder1ChnB, INPUT); 
  digitalWrite(Encoder1ChnB, HIGH); //turn pullup resistor on
  pinMode(EncoderDetent, INPUT); 
  digitalWrite(EncoderDetent, HIGH); //turn pullup resistor on 


  PCintPort::attachInterrupt(Encoder1ChnA, &updateEncoder_ISR, CHANGE); 
  PCintPort::attachInterrupt(Encoder1ChnB, &updateEncoder_ISR, CHANGE);
  PCintPort::attachInterrupt(EncoderDetent, &EncoderClick_ISR, FALLING);


  Timer1.initialize(150000); // set a timer of length 150000 microseconds (or 0.15 sec)
  Timer1.attachInterrupt(timer1_ISR); // attach the service routine here  


  pinMode(13, OUTPUT);
  digitalWrite(13,HIGH);  


  pinMode(BUZZER_PIN, OUTPUT);
  digitalWrite(BUZZER_PIN,HIGH);


  pinMode(STANDBYin, INPUT_PULLUP);


  pinMode(TEMPin, INPUT);
  digitalWrite(TEMPin, LOW);


  pinMode(HEAT_LED, OUTPUT);
  digitalWrite(HEAT_LED, LOW);     


  myEncoder.setRate(1.0f);
  myEncoder.setMinMax(MIN_TEMP,MAX_TEMP);


  beepBuzzer(6250,80);


  sw_secs.start();
  sw_millis.start(); 
  sw_countdownmillis.start(); 


  will_temp_tmp = will_temp = EEPROM.readInt(WILL_TEMP_EEPROM_ADDRESS);
  myEncoder.setPosition(will_temp); 
  if (will_temp > MAX_TEMP) 
  {
    will_temp = STANDBY_TEMP;
  }
  encoderPos = EEPROM.readInt(ENCODER_EEPROM_ADDRESS);
  if (encoderPos == MAX_TEMP) 
  {    
    myEncoder.setPosition(will_temp);
  }


  Input = getTemperature();
  Setpoint = will_temp;
  myPID.SetMode(AUTOMATIC);
  pwm = 0; 


  u8g.firstPage();
  do 
  { 
    splashScreen();    
  } 
  while( u8g.nextPage()); 
  delay(5000);
}
//=======================================================================
void loop() 
{ 
  unsigned long now = millis();


  Input = getTemperature();
  if(standby_act == false)
  {    
    Setpoint = encoderPos;
  }
  else
  {
    Setpoint = STANDBY_TEMP;
  }    
  double gap = abs(Setpoint-Input); 
  if(gap < 10)
  {  
    myPID.SetTunings(consKp, consKi, consKd);
  }
  else
  {
    myPID.SetTunings(aggKp, aggKi, aggKd);
  }
  myPID.Compute();   
  actual_temperature = getTemperature();
  checkUnplugged();
  sw_millis.start(); 
  pwm = Output;
  MAX_PWM = actual_temperature <= STANDBY_TEMP ? MAX_PWM_LOW : MAX_PWM_HI;
  pwm = pwm > MAX_PWM ? pwm = MAX_PWM : pwm < 0 ? pwm = 0 : pwm;
  analogWrite(PWMpin, pwm);
  if(pwm != 0)
  {
    heater = HIGH;
  }
  else 
  {    
    heater = LOW;
  }


  u8g.firstPage();  
  do 
  {
    u8g.setFont(u8g_font_6x13);
    u8g.setPrintPos(0,10); 
    u8g.print("MEM = ");   
    u8g.print(will_temp_tmp);
    u8g.write(176);
    u8g.print("C");


    u8g.drawRFrame(0, 33, 36, 30, 2);
    u8g.drawRFrame(37, 33, 30, 15, 2);
    u8g.drawRFrame(37, 48, 30, 15, 2);
    u8g.drawRFrame(68, 0, 58, 32, 2);
    u8g.drawRFrame(68, 33, 58, 30, 2);


    checkMEM();
    checkSTBY();
    checkUnplugged();
    showTime();
    showCountdownTime();
    writeHEATING(will_temp, Input, pwm);


    u8g.setFont(u8g_font_fub20n);
    u8g.setPrintPos(69, 25);
    u8g.print(will_temp);
    u8g.setFont(u8g_font_6x10); 
    u8g.write(176);
    u8g.print("C");
    u8g.setFont(u8g_font_fub20n);  
    u8g.setPrintPos(69, 58);
    u8g.print(Input,0); 
    u8g.setFont(u8g_font_6x10); 
    u8g.write(176);
    u8g.print("C");
    u8g.setFont(u8g_font_fub11n);
    u8g.setPrintPos(0, 25);
    u8g.print(p1);
    u8g.setFont(u8g_font_6x13);
    u8g.print(" % PWM");    


    while((digitalRead(STANDBYin) != HIGH) && (mins >= TIMER_20MIN))
    { 
      u8g.firstPage();  
      do 
      {  
        u8g.setFont(u8g_font_fub14);
        u8g.setPrintPos(30, 25);
        u8g.print("SHUT");
        u8g.setPrintPos(25, 58);
        u8g.print("DOWN");
      } 
      while(u8g.nextPage());
      delay(5000);
      u8g.firstPage();  
      do 
      {  
        while((digitalRead(STANDBYin) != HIGH) && (mins >= TIMER_20MIN))
        {
          u8g.firstPage();  
          do 
          {  
            u8g.setFont(u8g_font_fub14);
            u8g.setPrintPos(0, 30);
            u8g.print("    ");
            u8g.setPrintPos(0, 60);
            u8g.print("    ");
          } 
          while(u8g.nextPage());
        }
      } 
      while(u8g.nextPage());      
    } 
  } 
  while(u8g.nextPage());
}


//=======================================================================
//    ENCODER ISR
//=======================================================================
void updateEncoder_ISR() 
{
  myEncoder.lowLevelTick(1,1);
  encoderPos = myEncoder.getPosition();
  if(encoderPos <= MIN_TEMP)
  {
    myEncoder.setPosition(MIN_TEMP);
    encoderPos = MIN_TEMP;
  }  
  if(encoderPos >= MAX_TEMP) 
  {
    myEncoder.setPosition(MAX_TEMP);//1150
    encoderPos = MAX_TEMP;
  }
  beepBuzzer(6250,1);
}
//=======================================================================
//    ENCODER'S DETENT ISR
//=======================================================================
void EncoderClick_ISR() 
{  
  myEncoder.lowLevelClick();
  {
    EEPROM.writeInt(WILL_TEMP_EEPROM_ADDRESS, will_temp);
    EEPROM.writeInt(ENCODER_EEPROM_ADDRESS, encoderPos);
    will_temp_tmp = will_temp;
    myEncoder.setPosition(encoderPos);
    memWrite = true;
    memNoWrite = false; 
    beepBuzzer(6250,80);
  }
}
//=======================================================================
//    TIMER 1 ISR
//=======================================================================
void timer1_ISR()
{
  Timer1.detachInterrupt();
  state =!state;


  switch(heater)
  {
  case HIGH:
    digitalWrite(HEAT_LED, state);
    break;
  case LOW:
    digitalWrite(HEAT_LED, LOW);
    break;  
  }
  if (digitalRead(STANDBYin) == LOW) 
  {
    standby_act = true;
    sw_countdownsecs.start(); 
  }  
  else 
  {
    standby_act = false;
    sw_countdownsecs.stop();
    sw_countdownsecs.reset();  
  }  
  Timer1.attachInterrupt( timer1_ISR );
}
//=======================================================================
```

----------


## manolena

```
//=======================================================================
//    UTILITIES
//=======================================================================
void beepBuzzer(unsigned long hz, unsigned long ms) 
{ 
  unsigned long us = (750000 / hz);  
  unsigned long rep = (ms * 500L) / us; 


  for (int i = 0; i < rep; i++) 
  {  
    digitalWrite(BUZZER_PIN, HIGH);  
    delayMicroseconds(us);  
    digitalWrite(BUZZER_PIN, LOW);  
    delayMicroseconds(us);  
  }
}
//=======================================================================
/*
void setPwmFrequency(int pin, int divisor) 
 {
 byte mode;
 if(pin == 5 || pin == 6 || pin == 9 || pin == 10) 
 {
 switch(divisor) {
 case 1: 
 mode = 0x01; 
 break;
 case 8: 
 mode = 0x02; 
 break;
 case 64: 
 mode = 0x03; 
 break;
 case 256: 
 mode = 0x04; 
 break;
 case 1024: 
 mode = 0x05; 
 break;
 default: 
 return;
 }
 if(pin == 5 || pin == 6) {
 TCCR0B = TCCR0B & 0b11111000 | mode;
 } 
 else {
 TCCR1B = TCCR1B & 0b11111000 | mode;
 }
 } 
 else if(pin == 3 || pin == 11) 
 {
 switch(divisor) 
 {
 case 1: 
 mode = 0x01; 
 break;
 case 8: 
 mode = 0x02; 
 break;
 case 32: 
 mode = 0x03; 
 break;
 case 64: 
 mode = 0x04; 
 break;
 case 128: 
 mode = 0x05; 
 break;
 case 256: 
 mode = 0x06; 
 break;
 case 1024: 
 mode = 0x7; 
 break;
 default: 
 return;
 }
 TCCR2B = TCCR2B & 0b11111000 | mode;
 }
 }
 */
//=======================================================================
int getTemperature()
{  
  analogWrite(PWMpin, 0);		//switch off heater
  delay(DELAY_MEASURE);			//wait for some time (to get low pass filter in steady state)


  total = total - readings[readIndex];
  readings[readIndex] = analogRead(TEMPin);
  total = total + readings[readIndex];
  readIndex = readIndex + 1;


  if (readIndex >= numReadings) 
  {
    readIndex = 0;
  }
  adcValue = total / numReadings;
  //  adcValue = 128;
  analogWrite(PWMpin, pwm);	//switch heater back to last value
  return round(((float) adcValue)*ADC_TO_TEMP_GAIN+ADC_TO_TEMP_OFFSET); //apply linear conversion to actual temperature
}
//=======================================================================
void splashScreen()
{
  u8g.setFont(u8g_font_6x13);
  u8g.setFontRefHeightText();
  u8g.setFontPosTop();
  u8g.drawStr(0, 0, "  ARDUINO MICRO PRO  ");
  u8g.drawStr(0, 15, "  SOLDERING STATION  ");
  u8g.drawStr(0, 30, "   MANOS MAR. 2016   ");
  u8g.drawStr(0, 45, "    96W/25-400 ");
  u8g.setPrintPos(85, 45);
  u8g.write(176);
  u8g.print("C  ");   
} 
//=======================================================================
void checkUnplugged()
{
  while(actual_temperature >= MAX_TEMP)
  {    
    pwm = 0;
    digitalWrite(HEAT_LED, LOW);
    actual_temperature = 0; 
    u8g.firstPage();  
    do 
    {
      u8g.setFont(u8g_font_fub14);
      u8g.setPrintPos(0, 20);
      u8g.print("PLEASE");
      u8g.setPrintPos(0, 40);
      u8g.print("CONNECT");
      u8g.setPrintPos(0,60);
      u8g.print("PLUG!");    
      actual_temperature = getTemperature();      
    } 
    while(u8g.nextPage());
    actual_temperature = getTemperature(); 
  }
}
//=======================================================================
void checkTimer()
{
  if(minutes >= TIMER_10MIN)
  {


  }  
  if(minutes >= TIMER_20MIN)
  {
    pwm = 0;
    digitalWrite(HEAT_LED, LOW);
    heater = LOW;   


    sw_millis.reset();  
    sw_millis.stop();    
    seconds = 0;
    minutes = 0;
    sw_countdownmillis.reset();
    sw_countdownmillis.stop();
    secs = 0;
    mins = 0;
  }   
}
//=======================================================================
void checkSTBY()
{
  u8g.setFont(u8g_font_6x10);
  if (digitalRead(STANDBYin) == HIGH)
  {
    if(heater == HIGH)
    {
      u8g.setPrintPos(40, 44);
      u8g.print("HEAT");
    }  
    standby_act = false;
    if(oneTime)
    {                      
      will_temp = STANDBY_TEMP;        
      oneTime = false;
      seconds = 0;
      minutes = 0;
      sw_millis.reset();
      sw_millis.start(); 
    }  
    sw_countdownmillis.reset();
    sw_countdownmillis.start();
    secs = 0;
    mins = 0;       
  }  
  else
  {
    u8g.setPrintPos(46, 59);
    u8g.print("SB"); 
    standby_act = true;
    sw_millis.stop();
    sw_millis.reset();
    seconds = 0;
    minutes = 0;


    if(!oneTime)
    {
      sw_countdownmillis.reset();
      sw_countdownmillis.start();
      secs = 0;
      mins = 0; 
      oneTime = true;      
    }
    will_temp = STANDBY_TEMP;
  }
}  
//=======================================================================
void showTime()
{
  u8g.setFont(u8g_font_6x13);
  u8g.setPrintPos(3, 45);
  if(sw_millis.elapsed() > 999)
  {
    seconds++;
    sw_millis.reset();
    sw_millis.start();
  }
  if(seconds > 59)
  {
    seconds = 0;
    minutes++;
  }


  if(minutes > 99)
  {
    minutes = 0;
  }  
  if(minutes < 10)
  {
    u8g.print("0");
  } 
  u8g.print(minutes,DEC);
  u8g.print(":");
  if(seconds < 10)
  {
    u8g.print("0");
  } 
  u8g.print(seconds,DEC);  
}
//=======================================================================
void showCountdownTime()
{
  u8g.setPrintPos(3, 58);
  if(sw_countdownmillis.elapsed() > 999)
  {
    secs++;
    sw_countdownmillis.reset();
    sw_countdownmillis.start();
  }  
  if(secs > 59)
  {
    secs = 0;
    mins++;
  }


  if(mins > 99)
  {
    mins = 0;
  }  
  if(mins < 10)
  {
    u8g.print("0");
  } 
  u8g.print(mins,DEC);
  u8g.print(":");
  if(secs < 10)
  {
    u8g.print("0");
  } 
  u8g.print(secs,DEC);  
} 
//=======================================================================
void checkMEM()
{
  will_temp = map(encoderPos, MIN_TEMP, MAX_TEMP, MIN_TEMP, MAX_TEMP);
  tempWill = EEPROM.readInt(WILL_TEMP_EEPROM_ADDRESS); 


  if((memNoWrite == true) && (memWrite = false))
  {       
    memNoWrite = true; 
    memWrite = false; 
  }  
  else if((memNoWrite == false) && (memWrite = true))
  {
    u8g.setPrintPos(64, 50);
    u8g.print(tempWill);
  }
  memNoWrite = true; 
  memWrite = false;
  // will_temp_tmp = will_temp;


  if ((standby_act && (will_temp >= STANDBY_TEMP))) 
  {
    will_temp = STANDBY_TEMP;    
  }   
}
//=======================================================================
void writeHEATING(int tempWILL, int tempVAL, int pwmVAL)
{  
  static int d_tempWILL = 1;//2		
  static int tempWILL_OLD = 1;//10
  static int tempVAL_OLD = 1;//10
  static int pwmVAL_OLD	= 1;//10 
  pwmVAL = map(pwmVAL, 0, 255, 0, 99);  




  //ACTUAL TEMPERATURE DISPLAY
  if (tempVAL_OLD != tempVAL)
  { 
    t1 = tempVAL;
    tempVAL_OLD = tempVAL; 
  }


  //DESIRED TEMPERATURE DISPLAY
  if ((tempWILL_OLD+d_tempWILL < tempWILL) || (tempWILL_OLD-d_tempWILL > tempWILL))
  { 
    t2 = tempWILL;
    tempWILL_OLD = tempWILL;
  }


  //PWM PERCENTAGE DISPLAY
  if (pwmVAL_OLD != pwmVAL)
  {   
    p1 = pwmVAL; 
    pwmVAL_OLD = pwmVAL;
  } 
}
//=======================================================================


//=======================================================================
```

----------


## SeAfasia

Mια χαρά Μάνο,σήμερα παρήγγειλα το κουτί να τα στεγάσω,επίσης έχει έρθει το τροφοδοτικό από ebay,μου μένει τώρα το στέλεχος του κολλητηριού.....

----------


## manolena

Και τα δυο αρχεία μπαίνουν σε κοινό φάκελο με το όνομα MICRO_9.

Μπορείτε ελεύθερα να επεμβείτε στον κώδικα.

Σ.Σ.: Βέβαια δεν μπορούν να γίνουν και πολλά πράγματα, τα έχω φέρει πάτσι παρά 4 bytes στα 30.720b... Κάλλιστα όμως μπορεί να προγραμματιστεί απο ISP και να απαλλαγείτε απο τον bootloader.

Για απορείες-ερωτήσεις-λεπτομέρειες, ρωτάτε ελεύθερα.

----------


## manolena

Μπορείτε να χρησιμοποιήσετε τον παρακάτω PID Simulator για να ρυθμίσετε την συμπεριφορά του σταθμού, προσαρμόζοντας στις γραμμές




```
double Setpoint, Input, Output;
double aggKp=1.00, aggKi=0.002, aggKd=8.00;
double consKp=0.50, consKi=0.001, consKd=4.00;
```


...τα αντίστοιχα απο τα πεδία.

----------


## SeAfasia

προσοσωρινή τακτοποίηση των πλακετών,έτσι να "ξαναζεστάνω" το θέμα...Περιμένω το στέλεχος το οποίο είναι αυτό:
*907F 60W~75W Hakko Heater Solder Soldering Welding Iron Gun 936 Rework Station*
Γνώμες και απόψεις δεκτές... :Biggrin: 








Δεν έχω κολλήσει τπτ ακόμη τα υλικά υπάρχουν όλα τις επόμενες μέρες αν είμαστε καλά θα το βάλω "μπρος"... :Rolleyes:

----------


## liat

> προσοσωρινή τακτοποίηση των πλακετών



Καλό μοντάρισμα Κώστα.
Ποιο κουτί έχεις πάρει; Αν δε θυμάσαι, μέτρα εσωτερικές διαστάσεις pls! Μάλλον από acdc;

----------


## SeAfasia

> Καλό μοντάρισμα Κώστα.
> Ποιο κουτί έχεις πάρει; Αν δε θυμάσαι, μέτρα εσωτερικές διαστάσεις pls! Μάλλον από acdc;



αυτό:

acdchop

----------


## manolena

Το holder του κολλητηριού θα είναι ενσωματωμένο στο κουτί Κώστα ή ξεχωριστό; Στη δεύτερη περίπτωση χρειάζεσαι ηλεκτρική σύνδεση με την πλακέτα για να ανιχνεύεται η STAND BY θέση του στελέχους και να κατεβάζει θερμοκρασία αυτόματα στο idle.

----------

SeAfasia (30-09-16)

----------


## liat

> αυτό:
> 
> acdchop



Είσαι βέβαιος Κώστα;  :Confused: 
Κρίνοντας από τις διαστάσεις τόσο του τροφοδοτικού όσο της πλακέτας του Μάνου, αλλά και της οθόνης, το κουτί σου πρέπει να είναι 15Χ15cm.
Μήπως είναι *αυτό*;

----------


## SeAfasia

> Είσαι βέβαιος Κώστα; 
> Κρίνοντας από τις διαστάσεις τόσο του τροφοδοτικού όσο της πλακέτας του Μάνου, αλλά και της οθόνης, το κουτί σου πρέπει να είναι 15Χ15cm.
> Μήπως είναι *αυτό*;







> Το holder του κολλητηριού θα είναι ενσωματωμένο στο κουτί Κώστα ή ξεχωριστό; Στη δεύτερη περίπτωση χρειάζεσαι ηλεκτρική σύνδεση με την πλακέτα για να ανιχνεύεται η STAND BY θέση του στελέχους και να κατεβάζει θερμοκρασία αυτόματα στο idle.



Γιάννη αυτό είναι που ανέβασες,έκανα λάθος λόγω κεκτημένης ταχύτητας... :Smile: 

Μάνο το Holder θα είναι ξεχωριστό,έχω ένα τέτοιο:
  
Η σύνδεση θα είναι εφικτή; :Confused1:

----------


## manolena

Χρειάζεται να ενωθεί ηλεκτρικά το εσωτερικό μεταλλικό της θήκης με την είσοδο του Nano στο άλλο κουτί όμως για να δουλέψει το αυτόματο STAND BY... Για να μην τραβάς "μπαλαντέζες", μάλλον θα πρέπει να στερεώσεις όλη τη βάση στο κουτί, έτσι δεν θα φαίνεται κάποιο καλώδιο.

----------


## SeAfasia

> Χρειάζεται να ενωθεί ηλεκτρικά το εσωτερικό μεταλλικό της θήκης με την είσοδο του Nano στο άλλο κουτί όμως για να δουλέψει το αυτόματο STAND BY... Για να μην τραβάς "μπαλαντέζες", μάλλον θα πρέπει να στερεώσεις όλη τη βάση στο κουτί, έτσι δεν θα φαίνεται κάποιο καλώδιο.



ξέρεις τι;
έλεγα να το "κολλήσω" από πάνω τι λες;Aλλά να διασαφινήσουμε το πως δουλεύει το stand by; :Biggrin:

----------


## manolena

Αν σε βολεύει εσένα και σου αρέσει, εμένα δεν μου πέφτει λόγος. Μάλλον το ίδιο θα έκανα κι εγώ.
Το STAND BY σήμα εισάγεται στην είσοδο του Nano όταν το μεταλλικό στέλεχος του κολλητηριού που είναι γειωμένο στο κύκλωμα του Nano, έρθει σε επαφή με το μέταλλο της θήκης. Έτσι λοιπόν, ένα LOW θα πάει στην είσοδο του Nano και αυτός θα το καταλάβει σαν "παρκάρισμα" της μύτης για να ρίξει τη θερμοκρασία της σε idle. Αυτό λοιπόν που πρέπει να κάνεις, είναι να συνδέσεις με ένα καλώδιο το μεταλλικό μέρος της βάσης με το GND της πλακέτας. Τα υπόλοιπα είναι στον κώδικα.

----------

SeAfasia (30-09-16)

----------


## SeAfasia

> Αν σε βολεύει εσένα και σου αρέσει, εμένα δεν μου πέφτει λόγος. Μάλλον το ίδιο θα έκανα κι εγώ.
> Το STAND BY σήμα εισάγεται στην είσοδο του Nano όταν το μεταλλικό στέλεχος του κολλητηριού που είναι γειωμένο στο κύκλωμα του Nano, έρθει σε επαφή με το μέταλλο της θήκης. Έτσι λοιπόν, ένα LOW θα πάει στην είσοδο του Nano και αυτός θα το καταλάβει σαν "παρκάρισμα" της μύτης για να ρίξει τη θερμοκρασία της σε idle.



ευχαριστώ Μάνο,το κατάλαβα...low=0,high=1

----------


## manolena

H είσοδος του Nano που έχει οριστεί για ανίχνευση του "παρκαρίσματος" του στελέχους, είναι μέσω κώδικα δεμένη στο +5V με εσωτερική στον μ/Ε αντίσταση. Οπότε, ναι, είναι HIGH για όση ώρα κρατας το κολλητήρι στο χέρι. Μόλις το ακουμπήσεις στη θέση παρκαρίσματος, το χαμηλό δυναμικό του μεταλλικού στελέχους θα μεταφερθεί στη μεταλλική βάση και από εκεί μέσω του καλωδίου προς την είσοδο STAND BY, που θα γίνει αμέσως LOW. Το κολλητήρι τότε θα μπει σε idle λειτουργία.

----------

SeAfasia (30-09-16)

----------


## nkarama

Παληκάρια, για πείτε με και εμένα... Αυτό το στέλεχος που έχει γράψει ο Κώστας, κάνει τελικά?

----------


## Fire Doger

http://www.ebay.com/itm/261801508322...%3AMEBIDX%3AIT
Αυτό εννοείς?
Ναι πολύ καλό.

----------


## picdev

Αυτό είναι original?
Μλκ είπα απλά είδα τη τιμή και λέω   


Sent from my 2014813 using Tapatalk

----------


## Fire Doger

Είναι καλής κινέζικης ποιότητας τα πλαστικά, δεν νιώθεις ότι κρατάς κάτι από παζάρι της Κίνας.

----------


## SeAfasia

> Είναι καλής κινέζικης ποιότητας τα πλαστικά, δεν νιώθεις ότι κρατάς κάτι από παζάρι της Κίνας.



αυτό αγόρασα Στέφανε...το περιμένω από μέρα σε μέρα...

----------


## manolena

Ναι παιδιά, το κολλητηράκι είναι εντάξει για τα κυβικά του. Ψαγμένο.

----------


## SeAfasia

κουτί εδώ:
Teko Enclosures KL 22.9

----------


## chip

Το κουτί αυτό υπάρχει και στην Ελλάδα και μάλλον σε καλύτερη τιμή... (έχει και το ΦΠΑ στον Ελληνικά Site ενώ για το ξένο δεν ξέρω... )
http://www.marelectronics.gr/product...page=3&lang=gr

ας κοιτάμε και λίγο Ελλάδα....

----------


## SeAfasia

> Το κουτί αυτό υπάρχει και στην Ελλάδα και μάλλον σε καλύτερη τιμή... (έχει και το ΦΠΑ στον Ελληνικά Site ενώ για το ξένο δεν ξέρω... )
> http://www.marelectronics.gr/product...page=3&lang=gr
> 
> ας κοιτάμε και λίγο Ελλάδα....



από Ελλάδα πάντα..σαν δείγμα το έβαλα.. :Biggrin:

----------


## SeAfasia

Σήμερα το παρέλαβα και μπορώ να πω ότι έχει "διαφορά" από τα υπόλοιπα κινέζικης διαστροφής προιόντα:

----------


## liat

> Σήμερα το παρέλαβα και μπορώ να πω ότι έχει "διαφορά" από τα υπόλοιπα κινέζικης διαστροφής προιόντα:



Καλοδούλευτο φίλε.
Το είχες δοκιμάσει στην πράξη πριν βγάλεις την φωτό ή η μύτη φαίνεται λίγο χρησιμοποιημένη;

----------


## SeAfasia

της φωτογραφίας είναι Γιάννη καινούργια είναι.....κοίτα τη δεύτερη και θα προσέξεις τη διαφορά μεταξύ τους!!!
Τώρα το μόνο που λείπει είναι το μοντάρισμα του σταθμού και ένα σετ μύτες...μη ξεχάσω οτι έιναι μάρκας yihua..

----------


## Fire Doger

Άντε κάνε και ένα γράφημα για την γραμμικότητα του αισθητήρα σε σχέση με την μύτη στις διάφορες κλίμακες θερμοκρασίας :Tongue2: 

Εγώ αυτό σκέφτομαι να πάρω γιατί μ' αρέσει να χώνω τα μούτρα μου όταν κολλάω :Rolleyes:

----------


## SeAfasia

> Άντε κάνε και ένα γράφημα για την γραμμικότητα του αισθητήρα σε σχέση με την μύτη στις διάφορες κλίμακες θερμοκρασίας
> 
> Εγώ αυτό σκέφτομαι να πάρω γιατί μ' αρέσει να χώνω τα μούτρα μου όταν κολλάω



όλο κάτι "σκέφτεσαι" Στέφανε,τι μύτες προτείνεις;

----------


## Fire Doger

> όλο κάτι "σκέφτεσαι" Στέφανε,τι μύτες προτείνεις;



Και όλο στην σκέψη μένω γιατί προκύπτουν πιο επείγον αγορές... :Tongue2: 

Θα σου πρότεινα να πάρεις ένα σετ στην αρχή με 10-12 μύτες και να δεις ποια κομμάτια σε βολεύουν και μετά παίρνεις από 2-3 διαφορετικούς το μέγεθος που θες και έχεις άμα χαλάσουν. Και μερικές ακριβές (10$ η μία) που είχα δει δεν δοκίμασα να δω αν αξίζουν, ποιο πολύ σε αυξημένη τιμή τις κόβω παρά καλύτερη ποιότητα.

Λέω 2-3 διαφορετικούς γιατί μια μου έμεινε μισή σε 30 λεπτά λειτουργίας, ήταν σαν να την έβλεπα να εξαφανίζεται :Tongue2:

----------


## liat

Τι λέτε για το *ATTEN 907 Soldering Iron* από banggood; Με φόβισε το δεύτερο σχόλιο!
Σε σύγκριση με το YIHUA 907 Solder Soldering Rework Station που πήρε ο Κώστας (SeAfasia) και εκθείασε ο Στέφανος (Fire Doger);

----------


## manolena

Με βάση τις πωλήσεις του, το 1,19% των (εως τώρα) αγοραστών εξέφρασε παράπονα για φωτιά στον σταθμό του. Δεν έχω προσωπικά καμιά εικόνα για χρήση του συγκεκριμένου και γνώμες για αυτό, αλλά θα το σκεφτόμουν πολύ σοβαρά να ΜΗΝ το πάρω, μόνο και μόνο για αυτή την αιτία παραπόνου, ασχέτως του χαμηλού ποσοστού (1 παράπονο στα 84).

----------


## hackertom

Μεγάλο μπράβο και απο εμένα για την όλη κατασκευή ... !!! Δυνατό το επίπεδο μερικών εδω μέσα ...  :Wink:

----------


## SeAfasia

> Τι λέτε για το *ATTEN 907 Soldering Iron* από banggood; Με φόβισε το δεύτερο σχόλιο!
> Σε σύγκριση με το YIHUA 907 Solder Soldering Rework Station που πήρε ο Κώστας (SeAfasia) και εκθείασε ο Στέφανος (Fire Doger);



Γιάννη σε πληροφορώ ότι το yihua είναι αρκετά καλή και στιβαρή κατασκευή...έχω πίασει στα χέρια μου ένα atten καμία σχέση φίλος!!!

----------


## liat

> Γιάννη σε πληροφορώ ότι το yihua είναι αρκετά καλή και στιβαρή κατασκευή...έχω πίασει στα χέρια μου ένα atten καμία σχέση φίλος!!!



Λόγω μη επαρκούς ποσού στην προπληρωμένη και θεωρώντας ότι τα 60-75w ίσως είναι υπερβολή (για μένα), παράγγειλα της ίδιας μάρκας αλλά εκείνο των 50w.
http://www.ebay.com/itm/281737512728...%3AMEBIDX%3AIT

----------


## liat

Μετά την περάτωση άλλου project, πήρα την απόφαση να προχωρήσω στην υλοποίηση της κατασκευής του σταθμού κόλλησης,
και μέχρι στιγμής έχουν συγκεντρωθεί τα απαιτούμενα υλικά (πλην ελαχίστων που βρίσκονται πολύ εύκολα).

Arduino Nano V3.0 (2,32€)
IIC I2C 2004 204 20 x 4 Character LCD Display Module Blue (6,17€)
Supper mini 3A DC-DC Converter Step Down buck Power Supply Module 3V 5V 16V*
4A 24V Switching Power Supply Board AC-DC Power Module (7,35€)
YIHUA 907 Solder Soldering Rework Station Iron (14,15€)
Κουτί Teko KL-22.9 (11,10€)
Όπου *, ευγενική χορηγία του Κώστα SeAfasia.
Συνολικό κόστος, μέχρι στιγμής, 48,07€.











Η πρόσοψη καλύφθηκε με ασημί ετικέτα της Zweckform, κατάλληλη για εκτύπωση σε laser printers.

----------

manolena (27-10-16), 

SeAfasia (27-10-16)

----------


## SeAfasia

να σου πω έχεις γίνει εξπέρ στις προσόψεις ή κάνω λάθος;
Το κολλητήρι εκεί που βιδώνει το στέλεχος της μύτης είναι σπασμένο ή είναι ατέλεια της φώτο;
Ωραίο κουτί...

----------


## hackertom

Φιλε τύπωμα γραμμάτων στο κουτί και κόψιμο για την οθόνη πως έκανες; Επίσης η οθόνη είναι στερεωμένη με κόλλα;

----------


## liat

> να σου πω έχεις γίνει εξπέρ στις προσόψεις ή κάνω λάθος;
> Το κολλητήρι εκεί που βιδώνει το στέλεχος της μύτης είναι σπασμένο ή είναι ατέλεια της φώτο;
> Ωραίο κουτί...



Αν λες για το σημάδι που περικλείεται του κόκκινου τετράγωνου, όχι δεν είναι σπάσιμο ούτε ατέλεια της φωτογραφίας.
Απλά δεν κόπηκε αυτή η φλούδα από το εργοστάσιο. Μια πετσούλα είναι που φεύγει με το νύχι.







> Φιλε τύπωμα γραμμάτων στο κουτί και κόψιμο για την οθόνη πως έκανες; Επίσης η οθόνη είναι στερεωμένη με κόλλα;



Δεν έχουν τυπωθεί πάνω στην αλουμινένια πρόσοψη, αλλά σε αυτοκόλλητο ασημί. Το πήρα από το πλαίσιο.
Δες στην καρτέλα "εκτύπωση/ετικέτες" και βρες το φίλτρο "χρώμα".
Το κόψιμο έγινε με nibbler cutter. Πολύ βολικό εργαλείο για κοψίματα αλουμινίου πάχους έως 1,6mm.
Μην το επιχειρήσεις για προσόψεις 2mm, που είναι τα περισσότερα κουτιά με λαβές, γιατί θα σου μείνει στο χέρι. Παθών!

----------


## liat

Αγοράστηκαν και τα τελευταία υλικά: πυκνωτές, αντιστάσεις, pin headers, leds, connector terminals, rotary encoder, buzzer, 5 pin male socket.
Κόστος 8,87€.
Η συνολική δαπάνη ανήλθε στο ποσό των *56,94€*
Από κει και πέρα η προσωπική εργασία.
Να περάσει η Εθνική μας επέτειος και θα αρχίσει η κόλληση των εξαρτημάτων.

----------


## eleCtroAsxetos

Εχοντας κατασκευάσει και εγω τον δικό μου σταθμό κόλλησης με αρντουινο νανο (οχι απο αυτο το προτζεκτ, αλλη υλοποιηση και κωδικας) εχω καπως εμβαθυνει στο θεμα αρκετα και ειδικα στο τροπο βαθμονομησης του κολλητηριου αν αυτο προκειτε για κλωνο του hakko 907.
Οι κλωνοι του hakko 907 με το din6 (προσοχή! με τον αρσενικο ανταπτορα στο κολλητηρι) εχουν διαφορα κινεζικα εργοστασια κατασκευης και δεν εχουν θερμοζευγος οπως αναφερεται εδω και εκει αλλα θερμιστορ με αντισταση στους 25C απο 40-55 ωμ (και αντισταση θερμαντικου στοιχει περιπου 3-4ωμ).
Θα πω καποια πραγματα και ελπιζω να φανουν σε καποιος χρησιμα. Γενικα τα θερμιστορ δεν ακολουθουν γραμμικη καμπυλη θερμοκρασιας αντιστασης αλλα κατι αλλοκοτες καμπυλες που περιγραφονται απο εξισωσεις τυπου steinhart-hart αν την ψαξετε wikipedia.
Οταν κανουμε υλοποιησεις σε αρντουινο με θερμιστορ εισαγουμε αυτη την εξισωση σε μια απλοποιημενη μορφη στο σκετς και μας εξαγει θερμοκρασια βασει αντιστασης.
Τωρα ευτυχως το θερμιστορ που χρησιμοποιησαν στο hakko 907 ειναι γραμμικη για θερμοκρασιες απο 100-450C. Εχουν γινει μελετες σε πολλα φορουμ και εχουν εξαχθει διαφορες γραμμικες για τα διαφορα κινεζικα κολλητηρια. Εγω εχω ενα διαγραμμα με 5 διαφορετικες ευθειες (και αντιστοιχες εξισωσεις της μορφης y=ax+b). Αλλα που να ξερουμε σε ποια ανηκει το δικο μας κολλητιρι για να προσαρμοσουμε τον κωδικα του αρντουινο μας?

Η τεχνικη που ειχα χρησιμοποιησει εγω ειναι να μετρησω την αντισταση σε 3 διαφορετικες θερμοκρασιες και να μετρησω με πολυμετρο απο την εξοδο του din6 την ωμικη αντισταση.
Η πρωτη θερμοκρασια που θα χρησιμοποιησετε θα ειναι η περιβαλλοντος. Πχ εχετε θερμοκρασια περιβαλλοντος 25C εστω μετρατε μια αντισταση 45ωμ.

Η επομενη μετρηση θα γινει με βραστο απιονισμενο νερο. Απιονισμενο για 2 λογους. Το απιονισμενο βραζει στους 100C σιγουρα και οχι στους 101 συν οτι δεν εχει αγωγιμοτητα οποτε δεν θα επηρεασει την ωμικη αντισταση οταν βουτατε το θερμαντικο στοιχειο στο βραστο νερο. Εννοειται εδω πρεπει να αποσυναρμολογησετε το κολλητηρι και να βουτηξετε στο βραστο νερο μονο το κεραμικο στοιχειο οριακα χωρις να μπει και το pcb..

H επομενη μετρηση ειναι και η πιο δυσκολη και απαιτητικη. Θελει γνωσεις κωδικα αρντουινο για να αλλαξετε τον κωδικα και να σας εμφανιζει στην οθονη την μετρησιμη αντισταση του θερμιστορ και οχι την θερμοκρασια του. Ουσιαστικα να μην κανει την αναγωγη αντιστασης σε θερμοκρασια.
Οποτε ειμαστε στη φαση που θερμαινεται το κολλητιρι και ρυθμιζουμε μια θερμοκρασια περιπου 250 βαθμων στο κολλητηρι. Χρησιμοποιουμε λιγο καλαι καλης γνωστης μαρκας και τυπου 60/40 (καλη μαρκα για να ειναι σιγουρη η συνθεση αυτη). Βαζουμε ενα μικρο μπαλακι καλαι στη μυτη λιωνει και αμεσως κλεινουμε το κολλητηρι για να παγωσει πανω το καλαι. 
Μετα απο λιγη ωρα και αφου εχει κρυωσει το κολλητηρι ρυθμιζουμε μια θερμοκρασια 160C και το ξεκινουμε. Το στηριζουμε καπου να μη το κραταμε και ξεκινουμε να ανεβαζουμε ανα διαστηματα 10 δευτερολεπτων βαθμο βαθμο τη θερμοκρασια και καθε φορα με ενα κατσαβιδι πειραζουμε τη μπαλα το καλαι στη μυτη να δουμε αν εμφανιζει σημαδια οτι ξεκινησε ισα ισα να λιωνει.
Καποια στιγμη καθως ανεβαζουμε τη θερμοκρασια θα δουμε το καλαι να εμφανιζει ελαφρα σημαδια τηξης οριακα και οταν το ακουμπαμε να ξαναστερεωποιηται. Εδω τελειωσε η τελευταια μετρηση.
ΠΑιρνουμε την ενδειξη αντιστασης απο την οθονη και αυτη η ενδειξη αντιστοιχει σε θερμοκρασια 187 C που ειναι και περιπου η ελαχιστη θερμοκρασια που λιωνει ενα καλαι 60/40
Απο τα τρια ζευγη θερμοκρασιας-αντιστασης και με ενα φυλλο excel κανουμε μια γραφικη παρασταση διασπορας χ-ψ (X Y scatter)  και πανω στο διαγραμμα επιλεγουμε προσθηκη γραμμης τασης. Αυτοματως θα μας βγαλει την εξισωση της μορφης 
y=ax+b 
Αν δουμε οτι το ζευγαρι αντιστασης-θερμοκρασιας της πρωτης μετρησης (Τ περιβαλλοντος) ειναι εντελως εκτος της ευθειας που οριζουν τα αλλα 2 ζευγαρια μετρησεων (στους 100 και 187) την απαλοιφουμε και εξαγουμε νεα εξισωση ευθειας μονο με τις 2 τιμες.

και αυτη την συναρτηση θα εισαγουμε στο αρντουινο για να μας κανει τις μετατροπες και ουσιαστικα ετσι καναμε μια επιστημονικη βαθμονομηση στο κολλητηρι μας.


Επισης σημαντικη παρατηρηση για να αποφυγετε την παγιδα. Το θηλυκο βυσμα του hakko 907 ειναι το din6 οχι το din5 παρα το γεγονος οτι εχει 5 εξοδους. Ειναι εξοδος din6 απλα δε χρησιμοποιειται το μεσαιο τρυπακι.

----------

manolena (28-10-16), 

michalism (29-10-16)

----------


## Fire Doger

Ωραία η βαθμονόμηση αλλά έχει ένα σφάλμα για να την πεις επιστημονική. Την μία μέτρηση την κάνεις πάνω στο thermistor αλλά την άλλη πάνω στην μύτη η οποία σίγουρα έχει απόκλιση σε σχέση με το αισθητήριο.

Για να μην ξηλώνεις το αισθητήριο μπορείς πιο μαθηματικά να τροφοδοτείς το κολλητήρι με μια είσοδο (σταθερό % pwm), κάποια στιγμή θα φτάσει στην σταθερή κατάσταση και να παίρνεις τις μετρήσεις σου με ένα θερμοζεύγος στην μύτη παίρνοντας υπόψιν το σφάλμα του θερμοζεύγους.
Αυτό που σε ενδιαφέρει είναι η θερμοκρασία στην μύτη, όχι αυτή του thermistor, μπορεί να έχεις μια άψογη βαθμονόμηση του θερμίστορ αλλά μετά θα πρέπει να κάνεις και μια καμπύλη θερμοκρασίας μύτης-θερμίστορ έτσι ώστε να υπολογίζεις το σφάλμα μεταξύ μύτης-θερμίστορ κάθε φορά που θα ρυθμίζεις μια θερμοκρασία κάτι το οποίο δεν είναι και γραμμικό νομίζω.

Εμένα έτσι μου ακούγετε καλύτερο σε θέμα αξιοπιστίας ως κολλητήρι πάντα.

----------


## eleCtroAsxetos

Και ομως το θερμοζευγος στη μυτη θα εχει περισσοτερη απόκλιση γιατι δεν υπαρχει ευκολος τροπος να εχουμε αριστη θερμικη αγωγιμοτητα μεταξυ μύτης και θερμοζευγους. Πολυ ορθη η παρατηρηση σου ομως για το μη επιστημονικου το θεματος οντως ισχυει οτι πρεπει να μετραμε τις θερμοκρασιες στο ιδιο σημειο γιατι ετσι το σφαλμα μας γινεται συστηματικο δηλαδη +- 2 βαθμους μονιμη αποκλιση στην ευθεια, που ομως δεν ειναι σημαντικο γιατι τα συστηματικα σφαλματα στη μετρηση γραμμικων συστηματων βασει θεωριας μετρολογιας δεν επηρεαζουν την κλιση της ευθειας βαθμονομησης. Το σημαντικο ειναι να μην εχουμε τυχαια σφαλμα μη συστηματικο σε μια απο τις 3 μετρησεις που θα αλλοιωσει την κλιση της ευθειας δινοντας σημαντικα σφαλματα σε υψηλες θερμοκρασιες πχ 300C.
To ιδανικο θα ηταν να μετρουσαμε την θερμοκρασια της μυτης με ενα αισθητηριο που να μην απαιτει επαφη οπως ενα αισθητηριο υπερυθρων ή λειζερ θεωρω.
Επισης αν το κεραμικο στοιχειο εχει καλη επαφη με τη μυτη και τα μεταλλα ειναι ποιοτικα, σε λιγη ωρα επιτυγχανεται σχετικη ισορροπια μεταξυ θερμοκρασιας θερμιστορ και μυτης, υπαρχει αποκλιση αλλα ειναι μικρη. Βεβαια δεν παυει αυτη η αποκλιση να επηρεαζει την καμπυλη βαθμονομησης σε υψηλες θερμοκρασιες καθως το σφαλμα πολλαπλασιαζεται Χ του συντελεστη κλισης της ευθειας.

----------


## liat

Καλησπέρα στην παρέα.
Κολλήθηκαν τα εξαρτήματα στην πλακέτα (μου λείπουν μία αντίσταση, ένας ηλεκτρολυτικός πυκνωτής και ένας πυκνωτής multilayer).



Προσπάθησα να προγραμματίσω το arduino, αλλά τζίφος.
Το μήνυμα σφάλματος που λαμβάνω είναι:

*Arduino: 1.6.12 (Windows 10), Πλακέτα:"Arduino Nano, ATmega328"*

*C:\Users\liat\Downloads\Iron_nano_6\IRON_NANO_6.in  o:1:31: fatal error: LiquidCrystal_I2C.h: No such file or directory*

* #include <LiquidCrystal_I2C.h>*

*                               ^*

*compilation terminated.*

*exit status 1*
*Σφάλμα μεταγλώττισης για την πλακέτα Arduino Nano.*

*Αυτή η αναφορά θα παρείχε περισσότερες πληροφορίες με* 
*"Εμφάνιση πλεονάζουσα έξοδος κατά τη σύνταξη"*
*Επιλογή από το Αρχείο -> Προτιμήσεις.*

Το nano που αγοράστηκε είναι το *MINI USB Nano V3.0 ATmega328P CH340G 16M 5V Compatible to Arduino Nano V3.0*

----------


## eleCtroAsxetos

Εχεις στην αρχη του κωδικα σου include την βιβλιοθήκη liquidcrystal_i2c.h αλλα δεν την εχεις περασει στον φακελο libraries του αρντουινο. Για αυτό και το σφαλμα. Κατεβασε την liquidcrystal_i2c που ειναι υπευθυνη για να παιξει η οθονη (ο driver ας θεωρησουμε...που θα ενσωματωθει στο hex) τοποθετησε τη στον καταλληλο φακελο και θα λυθει αυτο το προβλημα. Μπορει να λειπει και αλλη βιβλιοθηκη απο αυτες που εχουν γινει include αλλα το προγραμμα σου βγαζει ενημερωση σφαλματος για την 1η που δεν βρισκει  συμφωνα με τη σειρα που ειναι στον κωδικα.

----------


## manolena

Γιάννη,

Ανάτρεξε στο θέμα και βρες συνημμένη τη βιβλιοθήκη NewLiquiCrystal. Εγκατέστησέ την κατά τα γνωστά και ξηλωσε την ήδη υπάρχουσα LiquidCrystal. Προγραμμάτισε έτσι. 

Βάζω το link σε περίπτωση που δεν την βρεις.


https://github.com/manolena/DIY-Sold...ster/Libraries
https://bitbucket.org/fmalpartida/ne...stal/wiki/Home

----------


## liat

Δημήτρη και Μάνο ευχαριστώ για την τάχιστη βοήθεια.
Κατέβασα το zip αρχείο NewLiquidCrystal, το αποσυμπίεσα στον φάκελο libraries και το μετονόμασα σε LiquidCrystal, αφού πρώτα άλλαξα το όνομα του υπάρχοντα φακέλου. Πάλι τίποτα.

edit
Έκανα λάθος στον τρόπο εγκατάστασης βιβλιοθήκης, αλλά παρόλο που μετά ακολούθησα τον σωστό εν τούτοις παίρνω σφάλμα:

Arduino: 1.6.12 (Windows 10), Πλακέτα:"Arduino Nano, ATmega328"

C:\Users\liat\Downloads\Iron_nano_6\IRON_NANO_6.in  o:5:22: fatal error: EEPROMEx.h: No such file or directory

 #include <EEPROMEx.h>

                      ^

compilation terminated.

Βρέθηκαν πολλαπλές βιβλιοθήκες για "LiquidCrystal_I2C.h"
Σε χρήση: C:\Users\liat\Documents\Arduino\libraries\NewLiqui  dCrystal
Όχι σε χρήση: C:\Users\liat\Documents\Arduino\libraries\LiquidCr  ystal
Όχι σε χρήση: C:\Users\liat\Documents\Arduino\libraries\LiquidCr  ystal
Όχι σε χρήση: C:\Users\liat\Documents\Arduino\libraries\LiquidCr  ystal
Όχι σε χρήση: C:\Users\liat\Documents\Arduino\libraries\LiquidCr  ystal
exit status 1
Σφάλμα μεταγλώττισης για την πλακέτα Arduino Nano.

Αυτή η αναφορά θα παρείχε περισσότερες πληροφορίες με
"Εμφάνιση πλεονάζουσα έξοδος κατά τη σύνταξη"
Επιλογή από το Αρχείο -> Προτιμήσεις.

----------


## manolena

Μισό λεπτό.
Πρώτα, ξηλώνεις τον παλιό φάκελο LiquidCrystal (τώρα δεν έχει σημασία αυτό), μετά αποσυμπιέζεις μέσα στο φάκελο ...\arduino 1xxx\libraries την νέα βιβλιοθήκη NewLiquidCrystal. Τώρα δηλαδή μέσα στο φάκελο libraries πρέπει να υπάρχει ένας φάκελος με το όνομα NewLiquidCrystal. Δεν χρειάζεται να μετονομάσεις τίποτα εδώ. Απλά κλείνεις και ανοίγεις πάλι το Arduino IDE. Προσπάθησε να κάνεις compile και αντίγραψε τα σφάλματα εδώ.

----------


## liat

Μάνο το έκανα και βγάζει:

Arduino: 1.6.12 (Windows 10), Πλακέτα:"Arduino Nano, ATmega328"

C:\Users\liat\Downloads\Iron_nano_6\IRON_NANO_6.in  o:5:22: fatal error: EEPROMEx.h: No such file or directory

 #include <EEPROMEx.h>

                      ^

compilation terminated.

Βρέθηκαν πολλαπλές βιβλιοθήκες για "LiquidCrystal_I2C.h"
Σε χρήση: C:\Users\liat\Documents\Arduino\libraries\NewLiqui  dCrystal
Όχι σε χρήση: C:\Users\liat\Documents\Arduino\libraries\LiquidCr  ystal
Όχι σε χρήση: C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\libraries\NewLiquidCrystal
Όχι σε χρήση: C:\Users\liat\Documents\Arduino\libraries\LiquidCr  ystal
Όχι σε χρήση: C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\libraries\NewLiquidCrystal
Όχι σε χρήση: C:\Users\liat\Documents\Arduino\libraries\LiquidCr  ystal
Όχι σε χρήση: C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\libraries\NewLiquidCrystal
Όχι σε χρήση: C:\Users\liat\Documents\Arduino\libraries\LiquidCr  ystal
Όχι σε χρήση: C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\libraries\NewLiquidCrystal
exit status 1
Σφάλμα μεταγλώττισης για την πλακέτα Arduino Nano.

Αυτή η αναφορά θα παρείχε περισσότερες πληροφορίες με
"Εμφάνιση πλεονάζουσα έξοδος κατά τη σύνταξη"
Επιλογή από το Αρχείο -> Προτιμήσεις.

----------


## manolena

Μάλιστα. Να τα πάρουμε ένα-ένα. Πρώτον, μια συμβουλή: καλόν είναι όταν πάει κάποιος να κατεβάσει-εγκαταστήσει το IDE, να κάνει download όχι το executable αρχείο (installer) αλλά το zip file for non admin install. Ο λόγος είναι πως μπορεί να το τρέξει απο οπουδήποτε χωρίς να πάει αυτό σε βασικά directories των Windows όπως το My Documents. Εγώ το έχω για παράδειγμα σε άλλο δίσκο, εκτός C:\
Δεύτερον, Γιάννη: πρέπει να εξαφανίσεις όλες τις διπλοεγγραφές απο τον δίσκο σου. Αυτά που κατέβασες δηλαδή, όπως το C:\Users\liat\*Downloads*\arduino-1.6.12-windows\arduino-1.6.12\libraries\NewLiquidCrystal στο φάκελο Downloads.
Δεν του αρέσει να τα βλέπει διπλά. Όσο για το EEPROMEx.h, πρέπει να κατεβάσεις απο τη διαδρομή που σου έδωσα και την ίδια βιβλιοθήκη 

https://github.com/manolena/DIY-Soldering-Station-w-Arduino-Nano-4x20-LCD/blob/master/Libraries/EEPROMEx.zip

----------


## liat

Αυτήν την έκδοση έχω κατεβάσει, όχι τοn installer.
Έχω διαγράψει όλες τις διπλές εγγραφές, διέγραψα τον φάκελο Arduino που δημιουργήθηκε αυτόματα στα Έγγραφα, επίσης διέγραψα ό,τι είχε σχέση με arduino από τον C/χρήστες/liat/appdata/local και roaming.
Του εγκατέστησα τις βιβλιοθήκες stopwatch, PID_v1, Timer1, PinChangeint, Encoder1 μέσω της διαδικασίας Σχέδιο > Συμπερίληψη βιβλιοθήκης > Προσθήκη βιβλιοθήκης ZIP.
Πλέον λαμβάνω το εξής σφάλμα:

C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\Iron_nano_6\IRON_NANO_6.ino: In function 'void EncoderClick_ISR()':


IRON_NANO_6:643: error: 'struct EEPROMClass' has no member named 'writeInt'


     EEPROM.writeInt(WILL_TEMP_EEPROM_ADDRESS, will_temp);


            ^


IRON_NANO_6:644: error: 'struct EEPROMClass' has no member named 'writeInt'


     EEPROM.writeInt(ENCODER_EEPROM_ADDRESS, encoderPos);


            ^


exit status 1
'struct EEPROMClass' has no member named 'readInt'


Αυτή η αναφορά θα παρείχε περισσότερες πληροφορίες με 
"Εμφάνιση πλεονάζουσα έξοδος κατά τη σύνταξη"
Επιλογή από το Αρχείο -> Προτιμήσεις.

----------


## manolena

Πήγαινε στο φάκελο libraries και άνοιξε τον φάκελο EEPROMEx. Αντικατάστησε τα αρχεία EEPROMEx.cpp και EEPROMEx.h με αυτά που έχω στο zip συνημμένο

----------


## liat

> Πήγαινε στο φάκελο libraries και άνοιξε τον φάκελο EEPROMEx. Αντικατάστησε τα αρχεία EEPROMEx.cpp και EEPROMEx.h με αυτά που έχω στο zip συνημμένο



Τα αντικατέστησα και έτρεξα το πρόγραμμα.
Προχώρησε η μπάρα προόδου στο τέλος κι ενώ νόμισα ότι όλα πήγαν κατ' ευχήν ...
Άτιμε προγραμματισμέ!

Arduino: 1.6.12 (Windows 10), Πλακέτα:"Arduino Nano, ATmega328"


Το σχέδιο χρησιμοποιεί 444 bytes (1%) του χώρου αποθήκευσης του προγράμματος. Το μέγιστο είναι 30.720 bytes. 
Οι καθολικές μεταβλητές χρησιμοποιούν 9 bytes (0%) δυναμικής μνήμης, αφήνοντας 2.039 bytes για τοπικές μεταβλητές. Το μέγιστο είναι 2.048 bytes. 
avrdude: ser_open(): can't open device "\\.\COM1": Δεν είναι δυνατή η εύρεση του καθορισμένου αρχείου από το σύστημα.




Πρόβλημα ανεβάσματος στην πλακέτα. Δείτε στο http://www.arduino.cc/en/Guide/Troubleshooting#upload για υποδείξεις.


Αυτή η αναφορά θα παρείχε περισσότερες πληροφορίες με 
"Εμφάνιση πλεονάζουσα έξοδος κατά τη σύνταξη"
Επιλογή από το Αρχείο -> Προτιμήσεις.

----------


## manolena

Θα τα φτιάξουμε όλα, μην ανησυχείς. 
Αυτό το "444 bytes" που χρησιμοποιεί το sketch με ανησυχεί που λέει... Κάνεις δηλαδή compile και έχει μέγεθος 444 bytes;

Υπάρχει περίπτωση το arduinάκι να μην έχει bootloader. Σε αυτή την περίπτωση δυσκολεύουν λίγο τα πράγματα αλλά υπάρχει λύση

----------


## liat

Παίζει με τα νεύρα μου:

Arduino: 1.6.12 (Windows 10), Πλακέτα:"Arduino Nano, ATmega328"


In file included from C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\Iron_nano_6\IRON_NANO_6.ino:5:0:


C:\Users\liat\Documents\Arduino\libraries\EEPROMEx/EEPROMEx.h:159:22: error: conflicting declaration 'EEPROMClassEx EEPROM'


 extern EEPROMClassEx EEPROM;


                      ^


In file included from C:\Users\liat\Documents\Arduino\libraries\EEPROMEx/EEPROMEx.h:23:0,


                 from C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\Iron_nano_6\IRON_NANO_6.ino:5:


C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\hardware\arduino\avr\libraries\EEPROM\src/EEPROM.h:145:20: note: previous declaration as 'EEPROMClass EEPROM'


 static EEPROMClass EEPROM;


                    ^


C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\Iron_nano_6\IRON_NANO_6.ino: In function 'void setup()':


IRON_NANO_6:167: error: 'struct EEPROMClass' has no member named 'readInt'


   will_temp = EEPROM.readInt(WILL_TEMP_EEPROM_ADDRESS);


                      ^


IRON_NANO_6:173: error: 'struct EEPROMClass' has no member named 'readInt'


   encoderPos = EEPROM.readInt(ENCODER_EEPROM_ADDRESS);


                       ^


C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\Iron_nano_6\IRON_NANO_6.ino: In function 'void loop()':


IRON_NANO_6:221: error: 'struct EEPROMClass' has no member named 'readInt'


   int tempWill = EEPROM.readInt(WILL_TEMP_EEPROM_ADDRESS);  


                         ^


C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\Iron_nano_6\IRON_NANO_6.ino: In function 'void EncoderClick_ISR()':


IRON_NANO_6:643: error: 'struct EEPROMClass' has no member named 'writeInt'


     EEPROM.writeInt(WILL_TEMP_EEPROM_ADDRESS, will_temp);


            ^


IRON_NANO_6:644: error: 'struct EEPROMClass' has no member named 'writeInt'


     EEPROM.writeInt(ENCODER_EEPROM_ADDRESS, encoderPos);


            ^


exit status 1
'struct EEPROMClass' has no member named 'readInt'


Αυτή η αναφορά θα παρείχε περισσότερες πληροφορίες με 
"Εμφάνιση πλεονάζουσα έξοδος κατά τη σύνταξη"
Επιλογή από το Αρχείο -> Προτιμήσεις.

----------


## liat

Μια διευκρίνηση για τον προγραμματισμό.
Επιλέγω Ανέβασμα ή Επικύρωση/μεταγλώτισση;

*Edit*
Κάνει πλακίτσες βραδιάτικα:

Arduino: 1.6.12 (Windows 10), Πλακέτα:"Arduino Nano, ATmega328"


C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\Iron_nano_6\IRON_NANO_6.ino:5:22: fatal error: EEPROMEx.h: No such file or directory


 #include <EEPROMEx.h>


                      ^


compilation terminated.


exit status 1
Σφάλμα μεταγλώττισης για την πλακέτα Arduino Nano.


Αυτή η αναφορά θα παρείχε περισσότερες πληροφορίες με 
"Εμφάνιση πλεονάζουσα έξοδος κατά τη σύνταξη"
Επιλογή από το Αρχείο -> Προτιμήσεις.

----------


## manolena

Επικύρωση/μεταγλώτισση πρώτα και αφού φτιάξουμε τα λάθη, ακολουθεί ο προγραμματισμός.

Γιατί βλέπω πως το σκετσάκι είναι στα C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\Iron_nano_6\IRON_NANO_6.inο;

----------


## liat

> Επικύρωση/μεταγλώτισση πρώτα και αφού φτιάξουμε τα λάθη, ακολουθεί ο προγραμματισμός.
> 
> Γιατί βλέπω πως το σκετσάκι είναι στα C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\Iron_nano_6\IRON_NANO_6.inο;



Ok.
Λοιπόν, επειδή το προηγούμενο μνμ σφάλματος το μετέφρασα ότι δεν υπάρχει το αρχείο EEPROMEx.h, μετονόμασα το EEPROMex.h που μου έδωσες σε αυτό που ζητά.
Πλέον πήρα σφάλμα:

Arduino: 1.6.12 (Windows 10), Πλακέτα:"Arduino/Genuino Uno"

C:\Users\liat\Downloads\arduino-1.6.12-windows\arduino-1.6.12\hardware\arduino\avr\cores\arduino\main.cpp  : In function 'main':

C:\Users\liat\Downloads\Iron_nano_6\UTILITY_LCD.in  o:44:28: warning: iteration 6 invokes undefined behavior [-Waggressive-loop-optimizations]

     newChar[i] = code[n - 1];

                            ^

C:\Users\liat\Downloads\Iron_nano_6\IRON_NANO_6.in  o:111:3: note: containing loop

   for (i = 0; i < 8; i++)

   ^


Το σχέδιο χρησιμοποιεί 20.002 bytes (62%) του χώρου αποθήκευσης του προγράμματος. Το μέγιστο είναι 32.256 bytes.
Οι καθολικές μεταβλητές χρησιμοποιούν 1.584 bytes (77%) δυναμικής μνήμης, αφήνοντας 464 bytes για τοπικές μεταβλητές. Το μέγιστο είναι 2.048 bytes.
Λίγη διαθέσιμη μνήμη, μπορεί να προκύψουν προβλήματα ευστάθειας.
avrdude: ser_open(): can't open device "\\.\COM1": Δεν είναι δυνατή η εύρεση του καθορισμένου αρχείου από το σύστημα.


Πρόβλημα ανεβάσματος στην πλακέτα. Δείτε στο http://www.arduino.cc/en/Guide/Troubleshooting#upload για υποδείξεις.

Αυτή η αναφορά θα παρείχε περισσότερες πληροφορίες με
"Εμφάνιση πλεονάζουσα έξοδος κατά τη σύνταξη"
Επιλογή από το Αρχείο -> Προτιμήσεις.

*Edit*
Τι τύπο προγραμματιστή πρέπει να επιλέξω; Το έχω συνδεδεμένο με USB κατευθείαν στον Η/Υ.

----------


## manolena

Όπως έχω ξαναπεί εδώ, εγώ χρησιμοποιώ (ακόμα) την έκδοση 1.0.2 για όσα έχω κάνει μέχρι τώρα. Την φορτώνω συνέχεια καινούριες βιβλιοθήκες, δεν με απασχολεί καθόλου και έκδοση 100.0.2 να βγεί όσο κάνει τη δουλειά μου. Αν δεν βγεί άκρη, σου προτείνω να τα καθαρίσεις όλα και να κατεβάσεις αυτή, φορτώνοντας και όλες τις βιβλιοθήκες του project.

----------


## liat

Θα το κάνω κι αυτό φίλε Μάνο.
Το έτρεξα ακόμα μια φορά (Επικύρωση/μεταγλώτισση) και:

*Ολοκλήρωση μεταγλώτισσης.
**Το σχέδιο χρησιμοποιεί 20.002 bytes (62%) του χώρου αποθήκευσης του προγράμματος. Το μέγιστο είναι 32.256 bytes.* *Οι καθολικές μεταβλητές χρησιμοποιούν 1.584 bytes (77%) δυναμικής μνήμης, αφήνοντας 464 bytes για τοπικές μεταβλητές. Το μέγιστο είναι 2.048 bytes.* 
*Λίγη διαθέσιμη μνήμη, μπορεί να προκύψουν προβλήματα ευστάθειας.*

Πάμε καλά; Κάνω κάτι ακόμα;

----------


## manolena

...και κοπάνα του έναν προγραμματισμό!!!!

----------


## liat

> ...και κοπάνα του έναν προγραμματισμό!!!!



πως; επιλέγοντας ανέβασμα;

Να σου πω, διέγραψα τα πάντα πλην των βιβλιοθηκών, κατέβασα την έκδοση 1.0.2 (πολύ φτωχή, δεν ενημερώνει αυτόματα βιβλιοθήκες :Wink:  και την έτρεξα.
Δεν πήρα μνμ σφάλματος και επέλεξα Αρχείο > Φόρτωμα.

Φόρτωση επιτυχής.
Μέγεθος δυαδικού σχεδίου: 23.564 bytes (από ένα μέγιστο 30.720 byte)
Μέγεθος δυαδικού σχεδίου: 23.564 bytes (από ένα μέγιστο 30.720 byte)

----------


## manolena

Ακριβώς. Έχεις συνδέσει οθόνη; Δείχνει κάτι;

Μην ανησυχείς για τις βιβλιοθήκες. Κοίτα εδώ τι έχω μαζέψει στην 1.0.2:

----------


## liat

> Ακριβώς. Έχεις συνδέσει οθόνη; Δείχνει κάτι;
> 
> Μην ανησυχείς για τις βιβλιοθήκες. Κοίτα εδώ τι έχω μαζέψει στην 1.0.2:



Η οθόνη δεν έχει συνδεθεί ακόμα.
Αύριο, πρώτα ο Θεός, θα κάνω τη δοκιμή, τροφοδοτώντας με τα 5V που παίρνει από την USB του υπολογιστή.
Αν όλα έχουν γίνει σωστά θα πρέπει να μου δείχνει ό,τι και στο 1ο post;
Ευχαριστώ πολύ για την βοήθεια, που απ' ότι καταλαβαίνω θα υπάρξει και συνέχεια.

----------


## manolena

Κανένα πρόβλημα, δώσ' του να καταλάβει κι εδώ είμαστε. Ναι, αν συμφωνεί και η διευθυνση του I2C της πισω πλακέτας της οθόνης, θα πρέπει να δείξει

----------


## SeAfasia

τσ τσ τσ....στραβώθηκα αρχηγέ!!! :Biggrin: 
Αυτή και αν είναι *βιβλιοθήκη....*
Γιάννη όλα καλά; :Biggrin:

----------


## manolena

Καλημέρα ΔΥ! Χαχαχαχααα

Μια φωτογραφία για τις συνδέσεις γιατί παιδεύω τον κόσμο χωρίς λόγο:



Μεταφέρω εδώ και τη στιχομυθία με το Γιάννη που αφορά τις συνδέσεις και τις αρχικές μετρήσεις, για να μην παιδεύεται ο κόσμος τσάμπα:

"Πριν κάνεις όλα αυτά όμως και πριν δώσεις τροφοδοσία, πρέπει να κάνεις κάποιους ελέγχους Κατ' αρχήν πρέπει να ξεκουμπώσεις το NANO απο τη βάση του και να γυρίσεις το τριμμεράκι του step *down* converter τέρμα αριστερά. Με τη βοήθεια ενός πολυμέτρου και με αργές κινήσεις, άρχισε να γυρνάς το τρίμμερ προς τα δεξιά ώστε στους ακροδέκτες OUT+ και OUT- να λάβεις ακριβώς 5V. Μετά απο αυτό, ξανακούμπωσε τον ΝΑΝΟ και τροφοδότησε.


Τώρα, για το plug του κολλητηριού. Όπως φαίνεται στη φωτογραφία, πρέπει να κάνεις κι εδώ κάποιες μετρήσεις με πολύμετρο σε μέτρηση αντίστασης για να σιγουρευτείς. Αν μετρήσεις μεταξύ του πιν 3 (όπως φαίνεται στην δική σου φωτογραφία) ή του πιν 2 (όπως φαίνεται στο συνημμένο το δικό μου) και του μεταλλικού στελέχους του κολλητηριού στο σώμα του, θα δεις short (0). Αν μετρήσεις μεταξύ 1-2 στην δική σου φωτογραφία ή 3-5 στη δική μου, θα δεις μια μικρή αλλά σταθερή τιμή που δεν αλλάζει καθόλου. Αυτός είναι ο heater και πρέπει να συνδεθεί στα SOLDERING IRON + και -. Τέλος αν μετρήσεις μεταξύ 4-5 στη δική σου φωτογραφία ή 1-4 στη δική μου, θα μετρήσεις μια αντίσταση που θα μεταβάλλεται αν ζεστάνεις λίγο το μεταλλικό στέλεχος της μύτης. Αυτό είναι και το αισθητήριο που πρέπει να συνδεθεί στα PTC+ και PTC-."

----------


## eleCtroAsxetos

Η εικονα του βύσματος που έχεις βάλει στο υπομνημα σύνδεσης ψηλά ψηλα, στο μικρο πλαίσιο ειναι το din5 ενω το σωστό ειναι το din6.

Καταλαβαινεις πιστευω ότι εχεις κανει μια φοβερή δουλειά, σου αξίζουν συγχαρητήρια και δε νομιζω να εχει να ζηλεψει τιποτα η υλοποιηση σου απο έτοιμες εργοστασιακες υλοποιήσεις. Επειδη καποια στιγμή εψαξα σχεδόν οτιδηποτε υλοποιηση υπάρχει στο ιντερνετ και αφορα σταθμους κόλλησης, με αρντουνο, με PIC, 24βολτους με μοσφετ, 220βολτους με τραικ, βιντεακια, φορουμς μπορώ να σου πω ότι δεν εχεις κανει κανενα συμβιβασμό οπουδήποτε και η υλοποιηση ειναι η επιτομή στο μερακι της ιδιοκατασκευής.

Μια ερώτηση επειδή δεν έχω δει τον κωδικά σου. Εχει μέσα auto shut off αν ξεχασεις το κολλητηρι ανοιχτο? Ειναι κατι απαραιτητο για την ασφαλεια σου και το κολλητηρι σου. Αν δεν υπαρχει κατι αντιστοιχο στον κωδικα σου μπορω να σου στειλω δικο μου κώδικα (στην κατοχη μου δηλαδη δεν εχει συνταχθει απο μενα)με την εντολή millis (η delay δεν μας κανει γιατι οσο τρεχει, ο κωδικας παγωνει και δεν μπορει να κανει κατι αλλο το προγραμμα)που ξεκινα μετραει χρόνο καθε φορα που πατας το κουμπί έναυσης του κολλητηριου και το κανει shut off 15 λεπτα μετα.

----------


## manolena

Υπάρχει η πρόβλεψη με φιξαρισμενους χρόνους (που μπορούν εύκολα να ρυθμιστούν) ώστε όταν το στέλεχος μπει στη βάση του η θερμοκρασία να κατεβαίνει στους 175°C (STAND BY) και αν δεν υπάρχει άλλη χρήση για κάποιο χρόνο από εκεί και μετά να κάνει SHUT DOWN.

----------


## manolena

Προσοχή, μία επισήμανση:

H εικόνα του rendering πιο πάνω είναι μόνο για reference. Δεν μπορούσα να βρω άλλο 3D model για τον arduino NANO και έβαλα αυτό. Για να τοποθετήσετε τον μοντουλακι πάνω στη μαμά πλακέτα, ακολουθήστε συγκρίνοντας το τοπογραφικό της με το τοπογραφικό του arduino NANO.

----------


## liat

Συνδέθηκε η οθόνη με την πλακέτα, τροφοδότησα το nano με την τάση από το usb του Η/Υ, άναψαν το πράσινο led της πλακέτας και η οθόνη, όμως δεν εμφανίζονται άλλες ενδείξεις και μετά από δευτερόλεπτα ακούγεται ένα μπιπ και τρεμοσβήνει το κόκκινο led.



*edit*
Ρύθμισα το contrast της οθόνης από το τριμεράκι στην πίσω πλευρά της και πλέον η ένδειξη είναι όπως της πρώτης φωτογραφίας του Μάνου, πριν βάλει τον κώδικα (*post #36*)

----------


## manolena

Έχεις φορτώσει τον arduino και δεν δείχνει κάτι; Δοκίμασε να αλλάξει μεταξύ τους τα καλώδια SCL και SDA της οθόνης.

Το κόκκινο led αναβοσβηνει γιατί βλέπει μηδενική θερμοκρασία και προσπαθεί να ζεστάνει το στέλεχος.

----------


## liat

> Έχεις φορτώσει τον arduino και δεν δείχνει κάτι; Δοκίμασε να αλλάξει μεταξύ τους τα καλώδια SCL και SDA της οθόνης.
> 
> Το κόκκινο led αναβοσβηνει γιατί βλέπει μηδενική θερμοκρασία και προσπαθεί να ζεστάνει το στέλεχος.



Σε περίπτωση που δεν είδες την προσθήκη στο προηγούμενο post, ρύθμισα το contrast της οθόνης από το τριμεράκι στην πίσω πλευρά της και πλέον η ένδειξη είναι όπως της πρώτης φωτογραφίας σου, πριν βάλεις τον κώδικα (*post #36*).
Όπως το μεταφράζω, δεν έχει πάρει τον κώδικα.
Αν τρέξω την έκδοση 1.6.9 του nano, μου βγάζει:

Arduino: 1.6.9 (Windows 10), Πλακέτα:"Arduino Nano, ATmega328"


Το σχέδιο χρησιμοποιεί 23.048 bytes (75%) του χώρου αποθήκευσης του προγράμματος. Το μέγιστο είναι 30.720 bytes. 
Οι καθολικές μεταβλητές χρησιμοποιούν 1.705 bytes (83%) δυναμικής μνήμης, αφήνοντας 343 bytes για τοπικές μεταβλητές. Το μέγιστο είναι 2.048 bytes. 
Λίγη διαθέσιμη μνήμη, μπορεί να προκύψουν προβλήματα ευστάθειας.
avrdude: ser_open(): can't open device "\\.\COM1": Δεν είναι δυνατή η εύρεση του καθορισμένου αρχείου από το σύστημα.




Πρόβλημα ανεβάσματος στην πλακέτα. Δείτε στο http://www.arduino.cc/en/Guide/Troubleshooting#upload για υποδείξεις.


Αυτή η αναφορά θα παρείχε περισσότερες πληροφορίες με 
"Εμφάνιση πλεονάζουσα έξοδος κατά τη σύνταξη"
Επιλογή από το Αρχείο -> Προτιμήσεις.

Ποιον προγραμματιστή πρέπει να επιλέξω μέσα από τα εργαλεία;

----------


## liat

Όταν τρέχω το επικύρωση/μεταγλώττιση, εμφανίζει το ακόλουθο:

*Το σχέδιο χρησιμοποιεί 23.048 bytes (75%) του χώρου αποθήκευσης του προγράμματος. Το μέγιστο είναι 30.720 bytes. 
Οι καθολικές μεταβλητές χρησιμοποιούν 1.705 bytes (83%) δυναμικής μνήμης, αφήνοντας 343 bytes για τοπικές μεταβλητές. Το μέγιστο είναι 2.048 bytes. 
Λίγη διαθέσιμη μνήμη, μπορεί να προκύψουν προβλήματα ευστάθειας.*

Μόλις πατήσω "ανέβασμα" παίρνω στο τέλος της διαδικασίας:

*Arduino: 1.6.9 (Windows 10), Πλακέτα:"Arduino Nano, ATmega328"*

*Το σχέδιο χρησιμοποιεί 23.048 bytes (75%) του χώρου αποθήκευσης του προγράμματος. Το μέγιστο είναι 30.720 bytes.* 
*Οι καθολικές μεταβλητές χρησιμοποιούν 1.705 bytes (83%) δυναμικής μνήμης, αφήνοντας 343 bytes για τοπικές μεταβλητές. Το μέγιστο είναι 2.048 bytes.* 
*Λίγη διαθέσιμη μνήμη, μπορεί να προκύψουν προβλήματα ευστάθειας.*
*avrdude: ser_open(): can't open device "\\.\COM1": Δεν είναι δυνατή η εύρεση του καθορισμένου αρχείου από το σύστημα.*


*Πρόβλημα ανεβάσματος στην πλακέτα. Δείτε στο http://www.arduino.cc/en/Guide/Troubleshooting#upload για υποδείξεις.*

*Αυτή η αναφορά θα παρείχε περισσότερες πληροφορίες με* 
*"Εμφάνιση πλεονάζουσα έξοδος κατά τη σύνταξη"*
*Επιλογή από το Αρχείο -> Προτιμήσεις.*

----------


## liat

Λοιπόν, άλλαξα την προκαθορισμένη θύρα με αυτήν που κουμπώνει το nano και δείχνει:

*Επιτυχές ανέβασμα.
**Το σχέδιο χρησιμοποιεί 23.048 bytes (75%) του χώρου αποθήκευσης του προγράμματος. Το μέγιστο είναι 30.720 bytes.* 
*Οι καθολικές μεταβλητές χρησιμοποιούν 1.705 bytes (83%) δυναμικής μνήμης, αφήνοντας 343 bytes για τοπικές μεταβλητές. Το μέγιστο είναι 2.048 bytes.* 
*Λίγη διαθέσιμη μνήμη, μπορεί να προκύψουν προβλήματα ευστάθειας.*
Μάλλον είμαι σε καλό δρόμο.
Θα το ελέγξω αργότερα (μφ - μετά φαγητού).

----------


## liat

Εξελίξεις και μάλιστα ραγδαίες.
Παίρνοντας με τον Μάνο ένα-ένα τα βήματα προγραμματισμού, διαπιστώθηκε ότι το πρόγραμμα είχε φορτωθεί κανονικά, όμως εξακολουθούσαν να φαίνονται τουβλάκια στην οθόνη.
Μετά από έλεγχο των τεχνικών χαρακτηριστικών του I2C της οθόνης, βρέθηκε ότι η address είναι: 0x27 or 0x3F.
Έτσι, οδηγηθήκαμε στην αλλαγής του κώδικα του αρχείου IRON_NANO_6.ino και συγκεκριμένα στην γραμμή #define LCD_I2C_ADDRESS      0x27
που τροποποιήθηκε σε #define LCD_I2C_ADDRESS      0x3F.
Και επιτέλους εγένετο φως!






Με την ευκαιρία αλλάχτηκε η πρόσοψη, καθότι έγινε γρατζουνιά στην προηγούμενη.

----------


## manolena

Tip (όπως το συζητήσαμε ενωρίτερα):

Σε αυτή τη φάση και με αυτή την ένδειξη, μπορείς να συνδέσεις μια μικρή αντίσταση των περίπου 100Ω στις κλέμες PTC+ και PTC- ώστε να "κοροϊδέψεις" τον μ/Ε για να νομίζει οτι έχει αισθητήριο θερμοκρασίας.
Έτσι θα δείς και την επόμενη οθόνη που έχει πιο πολλά μπλιμπλίκια.

----------


## liat

> Tip (όπως το συζητήσαμε ενωρίτερα):
> 
> Σε αυτή τη φάση και με αυτή την ένδειξη, μπορείς να συνδέσεις μια μικρή αντίσταση των περίπου 100Ω στις κλέμες PTC+ και PTC- ώστε να "κοροϊδέψεις" τον μ/Ε για να νομίζει οτι έχει αισθητήριο θερμοκρασίας.
> Έτσι θα δείς και την επόμενη οθόνη που έχει πιο πολλά μπλιμπλίκια.



Έβαλα μία των 120Ω αλλά δεν άλλαξε η κατάσταση!

----------


## manolena

Ποια είναι η πιο μικρή που έχεις;

----------


## liat

> Ποια είναι η πιο μικρή που έχεις;



10 ohm, κάνει;

----------


## manolena

Για βάλε την, η αντίσταση στα στελέχη τύπου HAKKO είναι περίπου 50Ω, ας είναι και μικρότερη για το παρόν. Προσπάθησε να περιστρέψεις το R2 και το R10 μετά.

----------


## kioan

Αν δεν κάνω λάθος, στους 100C θα έπρεπε να είναι γύρω στα  60-70Ω. Ίσως είναι πολύ μικρή στα 10Ω.

----------


## liat

Έβαλα την 10άρα και ιδού  :Biggrin:  :



Σημ 1. Δεν πείραξα τα πολύστροφα Μάνο.
Σημ 2. Παρατήρησα ότι το converter καίει, το έκανε και πριν βέβαια.
Είναι φυσιολογικό ή επειδή δεν λειτουργεί σωστά και θέλει αλλαγή;

----------


## manolena

Έχει φάει σουτ τώρα, για αυτό. Προτείνω να το αφαιρέσεις προς το παρόν μέχρι να μπει ένα καινούριο.
Αυτά που φαίνονται μη σε ενοχλούν, είναι πρόχειρο τώρα το setup, θα συνέλθει αργότερα.

----------


## eleCtroAsxetos

Εφόσον με αντισταση 120 ωμ στη θεση του θερμιστορ δε σου εμφανιζει περιπου 150-200C θερμοκρασία θερμαντικου στοιχειου, θεωρω πρώτα πρεπει να κοιτάξεις τον κώδικα σου. Επίσης να επιβεβαιωσεις οτι εχεις ορισει σωστα τις εντολες analogread(), ποιες αναλογικες εισοδους εχεις ορισει να κοιτάει το αρντουινο ( στην παρενθεση της analogread πχ Α0 Α1κτλ) και σε ποιες συνδεεις το θερμιστορ και σε ποια το πολυστροφο.

----------


## liat

> Εφόσον με αντισταση 120 ωμ στη θεση του θερμιστορ δε σου εμφανιζει περιπου 150-200C θερμοκρασία θερμαντικου στοιχειου, θεωρω πρώτα πρεπει να κοιτάξεις τον κώδικα σου. Επίσης να επιβεβαιωσεις οτι εχεις ορισει σωστα τις εντολες analogread(), ποιες αναλογικες εισοδους εχεις ορισει να κοιτάει το αρντουινο ( στην παρενθεση της analogread πχ Α0 Α1κτλ) και σε ποιες συνδεεις το θερμιστορ και σε ποια το πολυστροφο.



Δοκιμάστηκε με αντίσταση 47Ω (1/4 W) και οι ενδείξεις έχουν ως εξής: ACT: 207oC, PWM: 99%, MEM: 655oC
Υπόψη ότι, δεν έχουν ρυθμιστεί τα πολύστροφα των 5 και 100KOhm και δεν έχει συνδεθεί το encoder (εφόσον έχουν σημασία για τη συμπεριφορά του σταθμού - που προφανώς θα έχουν, διαφορετικά δεν θα υπήρχαν).

----------

manolena (31-10-16)

----------


## manolena

Το μήνυμά ΜΕΜ=655°C μην σε ανησυχεί, μόλις μπει ο encoder και τον πιέσεις θα πάρει νορμαλ τιμή. Τώρα διαβάζει σκουπίδια απο την EEPROM.

----------


## liat

Καθότι δεν βρήκα (τουλάχιστον στα καταστήματα που επισκέφτηκα) rotary encoder με debouncer, κατασκευάστηκε ένα με τις κατευθυντήριες οδηγίες του Μάνου.













Όμως, λόγου του ότι το οπτικό αποτέλεσμα δεν με ικανοποιούσε κι επειδή τα καλώδια ήταν λίγο δύσκαμπτα, έπεσε σχετική τροποποίηση.







Ακολουθεί κι ένα, χμ, λίγο πρόχειρο video! Το καλό, όταν θα έχει τελειώσει ο σταθμός. 

http://www.dailymotion.com/video/x50...g-station_tech

----------


## SeAfasia

ρε παλιόπαιδο,είχα να σου στείλω ένα rotary γιατί να ταλαιπωρηθείς; :Sad: 
Τουλάχιστον μαθαίνεις,ωραίο βιντεο... :Biggrin:

----------


## liat

Μερικές φωτογραφίες από την μέχρι τώρα πρόοδο.
Απουσιάζουν το step down converter (έχει παραγγελθεί και αναμένεται) και να αντιστοιχηθούν τα pin του κολλητηριού με τις κλέμες της πλακέτας.
Θα ακολουθήσει ακόμα μία, όταν θα έχει τελειώσει και θα είναι αφιερωμένη στον Μάνο, για το καταπληκτικό project που δημιούργησε και μοιράστηκε στο forum.

----------

manolena (05-11-16), 

picdev (05-11-16), 

SeAfasia (05-11-16)

----------


## SeAfasia

Γιάννη αύριο σου στέλνω το rotary encoder να αντικαταστήσεις το διάτρυτο πλακετάκι,εγώ είμαι εδώ:


να σας πω τα pot δεν είναι στραβοκολλημένα έτσι; :Tongue2: 


θα το είχα τελειώσει αλλά ας όψεται η "φαγούρα" με το το dds..... :Smile:

----------


## manolena

> Γιάννη αύριο σου στέλνω το rotary encoder να αντικαταστήσεις το διάτρυτο πλακετάκι,εγώ είμαι εδώ:
> 
> 
> και
> 
> 
> θα το είχα τελειώσει αλλά ας όψεται η "φαγούρα" με το το dds.....



Εσύ μη βιάζεσαι να τελειώσεις, έχουμε κάτι θεματάκια εδώ. Μόλις τα λύσω θα τα πούμε  :Smile:  :Smile:  :Smile:  :Smile:  :Smile:

----------


## SeAfasia

οχι θα περιμένω θα κολλήσω τα headers του arduino nano,connectors,ΟΧΙ ΟΛΑ ΤΑ ΥΛΙΚΑ,λοιπές συνδέσεις του lcd και επιμελούμαι το κουτί του.... :Biggrin:  :Biggrin:  :Wink:

----------


## billys7

Να κάνω και εγώ μια - δυο ερωτησούλες...
Υπάρχει λόγος που χρησιμοποιήσαμε το PC814 ? Ένα μόνο, PC817 δεν θα έκανε και αυτό τη δουλειά ?
Επειδή μου περισσέυει το 2Ν7000, δεν νομίζω να έχω πρόβλημα αν αντικαστήσω το BS170. Τι λέτε?
Σκέφτομαι να το φτιάξω με  Arduino Mini Pro.

----------


## stratos111

Καλησπέρα. Χτες μου ήρθανε τα pc814 και έβαλα μπροστά το κολλητήρι. Μου παρουσιάζετε το παρακάτω πρόβλημα.Με δύο διαφορετικά τροφοδοτικά. Ένα 19v 3,95a από λάπτοπ και ένα 24v 10a πάγκου. Όταν το έχω ανοιχτό, χωρίς την αντίσταση μόνο με τον αισθητήρα, βλέπω σωστά την θερμοκρασία και το pwm δουλεύει. Μόλις συνδέσω και την αντίσταση, η θερμοκρασία αυξάνετε κατά 200° περίπου όσο είναι το pwm on και με το που κλείνει το pwm πέφτει αυτούς τους βαθμούς πάλι σε τρελούς ρυθμούς. Όταν αποσυνδέω την αντίσταση, επανέρχεται στα φυσιολογικά. Έχω αλλάξει 3 διαφορετικά στέλεχοι. ;Όλα είναι  κλώνοι Hakko. Τα δύο είναι με αντίσταση α1322 και το ένα με α1321. Με το α1321 δεν δείχνει θερμοκρασία. Είναι συνέχεια 27°. Με τα άλλα δύο κάνει το πρόβλημα που λέω. Όλα τα στελέχοι είναι καλά. Δουλεύουν στους άλλους δύο σταθμούς που έχω. Βάζω και ένα βιντεάκι να καταλάβετε τι λέω.
Και το δεύτερο πρόβλημα είναι ότι αν η θερμοκρασία πέσει κάτω των 170° τότε το pwm δεν ανεβαίνει πάνω από το 19%. Βέβαια αυτό το έλυσα κάνοντας το pwm σαν ελάχιστο να έχει 51%.
Μήπως σας έρχεται καμιά ιδέα τι μπορεί να είναι; Έχω πλύνει πολύ καλά την πλακέτα, έχω αλλάξει το lt1013 kai  pc814 και arduino αλλά τίποτα. Γαλβάνισα τους διαδρόμους έναν έναν και ξαναπέρασα τις κολλήσεις, αλλά δεν..
Να διευκρινίσω ότι έφτιαξα δική μου πλακέτα.  

 
Στο 0:17 αποσυνδέω την αντίσταση και  αφήνω μόνο τον αισθητήρα και στο 0:23 την ξανασυνδέω για λίγο

----------


## Fire Doger

Τι είναι αυτό το γκρι παντού?

----------


## stratos111

Χαχαχα.....Σιλικόνη που είχα την οθόνη κολλημένη στο κουτί.

----------


## Gaou

> Τι είναι αυτό το γκρι παντού?



σιλικόνα φαίνεται....

με προλαβε ...! γιατί δεν εχει μήνυμα ότι ενώ δακτυλογραφούσατε κάποιος άλλος πρόλαβε ?

----------


## stratos111

Καμιά ιδέα; Τι πιστεύετε ότι είναι. Hardware η software;

----------


## stratos111

Τελικά με μία αλλαγή στο 
#define DELAY_MEASURE     από 2 σε 40 σχεδόν έστρωσε. 
Και λέω σχεδόν γιατί ναι μεν δουλεύει σχετικά καλά, αλλά αν η θερμοκρασία οριστεί π.χ. σε 350°, σχεδόν σε 3-4 δευτερόλεπτα έχει πάει πάνω από 300° και μετά κάνει κάποια ώρα να φτάσει στους 350°.
Αυτό θα το ψάξω άλλη ώρα.

----------

