# Συζήτηση Κυκλωμάτων > Παρουσίαση Ολοκληρωμένων Κατασκευών >  >  Μετατροπή παλιού scanner σε LED UV box

## nanobot

Καλησπέρα.

Λίγο αργά, αλλά θα ήθελα να μοιραστώ μαζί σας το UV scanner κουτί που έφτιαξα για έκθεση πλακετών. Χρησιμοποίησα ένα παλιό scanner και έφτιαξα ένα σύστημα αντίστροφης χρονομέτρησης χρησιμοποιώντας Arduino (ATMega328 MC). Η λειτουργία είναι σχετικά απλή, ο κώδικάς όμως του προγράμματος είναι πολύπλοκος, διότι ήθελα να κάνω καλή δουλειά με τον μετρητή των δευτερολέπτων και να τον σετάρω χρησιμοποιώντας ένα rotary encoder. Έχω ξεκινήσει και ερασιτεχνικό blog και το έχω ανεβάσει στο Youtube, αλλά είναι στα αγγλικά για όποιων ενδιαφέρεται να το δει.

Στην αρχή ξεκίνησα να δοκιμάζω τα UV LEDs και ποιος θα ήταν ο καλύτερος τρόπος να τα ανοιγοκλείνω μέσω των ψηφιακών pin του Arduino. Δοκίμασα με ρελεδάκια, αλλά κατέληξα σε NPN Mosfet γιατί νομίζω έχει καλύτερη απόδοση και ανταπόκριση. Στη συνέχεια έφτιαξα το σοτάρισμα των δευτερολέπτων χρησιμοποιώντας ένα τετραψήφιο αριθμητικό LED module και τον rotary encoder. Η ρύθμιση των δευτερολέπτων γίνετε γυρίζοντας τον rotary encoder δεξιά και αριστερά προσθέτοντας ή αφαιρώντας μονάδες, δεκάδες, εκατοντάδες και χιλιάδες σε κάθε γύρισμά αναλόγως την φορά που γυρίζει. Η εναλλαγή των ψηφίων γίνετε πατώντας το κουμπί του rotary encoder. Έχει δύο μπουτονάκια, ένα για εκκίνηση/παύση και ένα για σταμάτημα. Για την τροφοδοσία, χρησιμοποίησα τον μετασχηματιστή 12V που είχε το scanner φυσικά, και επίσης χρησιμοποίησα το USB connection του scanner για να συνδέσω τον Arduino Nano σε περίπτωση που χρειαστώ να κάνω upload νέο προγραμματάκι με διορθώσεις.

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

Πιο πολύ χρόνο μου πήρε να φτιάξω το video από το προτζεκτάκι!  :Lol: 
Δεν το έχω δοκιμάσει ακόμα, δυστυχώς, αλλά ελπίζω σύντομα.





*Υλικά:
*
R1: 10K
R2: 10K
R3: 120
R4: 120
MOSFET: FS10KM-10 (N-Channel)
Rotary encoder with a monetary switch
Monetary switch X 2
4 digit LED display module
UV LED Strip

     

*Links:

*Blog: https://lytrax.io/blog/projects/diy-uv-exposure-box
Github: https://github.com/clytras/CL_UVScanner
Youtube: https://www.youtube.com/watch?v=ZAlxNNI-BVM


Tim Eckel Arduino toneAC: https://bitbucket.org/teckel12/arduino-toneac/wiki/Home
CL_RotaryEncoder: https://github.com/clytras/CL_RotaryEncoder
CL_Button: https://github.com/clytras/CL_Button
TM1637Display: https://github.com/clytras/TM1637Display

----------

Ακρίτας (03-01-18), 

aktis (21-02-18), 

alfadex (03-01-18), 

cdesp (31-12-17), 

DiViDi (03-01-18), 

elektronio (03-01-18), 

ezizu (05-01-18), 

FH16 (03-01-18), 

Fire Doger (03-01-18), 

Gaou (31-12-17), 

Hulk (04-01-18), 

ipago (03-01-18), 

kioan (01-01-18), 

liat (31-12-17), 

manolena (17-01-18), 

michalism (03-01-18), 

SeAfasia (31-12-17), 

SV1EDG (01-01-18), 

trazor (03-01-18), 

usa (03-01-18)

----------


## ΜαστροΤζεπέτο

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

----------


## Fire Doger

Πολύ δυνατό το βίντεο! Συνήθως οι Έλληνες κάνουν μπαμ σαν τους Ινδούς στο youtube, πραγματικά είναι πολύ καλό και σε ήχο και σε εικόνα! Άνετα μαζεύεις μερικές δεκάδες χιλιάδες subs. Ξέρεις μπόλικη C, δουλεύεις Visio, έχεις παλμογράφο, μπορείς να γίνεις μεγάλο κανάλι στο youtube!

Και η κατασκευή εξίσου όμορφη!

Όσο για το software: Ο encoder καλό θα είναι να έχει velocity control (το κάθε step μεταβάλει την τιμή όχι κατά 1 αλλά ανάλογα με την ταχύτητα περιστροφής) όπως του παλμογράφου, πολύ καλύτερο απ' το να κουνιέσαι σε μονάδες-δεκάδες-κλπ. Όλοι αγαπάνε το velocity control.
Επίσης λείπει η ένδειξη σε πιο ψηφίο είσαι (συνήθως το κάνουν να αναβοσβήνει).

Ακόμα μπορείς να προσθέσεις και την προβολή του χρόνου σε λεπτά:δευτερόλεπτα και να εναλλάσσεται σε ξερά δευτερόλεπτα με παρατεταμένο πάτημα σε κάποιο κουμπί. (Συνήθως οι βιβλιοθήκες για το debounce έχουν και long click ή double click κλπ)

Τέλος κάτι που σίγουρα θα σου σπάσει τα νεύρα κάποια στιγμή, όταν κάνεις start έναν διαφορετικό χρόνο απ' αυτόν που έχει όταν bootάρει αποθήκευσε τον στην eeprom και την επόμενη φορά φόρτωσε αυτόν τον χρόνο κατά την εκκίνηση. (Προσοχή με την eeprom μην κάνεις άσκοπες εγγραφές γιατί έχει πεπερασμένο write/erase)

Αν έχεις και άλλο βιντεάκι να ανεβάσεις στείλ' το στον Dave που θα παίζει βίντεο από μικρά κανάλια τον Ιανουάριο. Καλή επιτυχία! :Thumbup:

----------

nanobot (03-01-18)

----------


## katmadas

Μπραβο φιλε ωραια δουλεια!

----------

nanobot (03-01-18)

----------


## chip

εξαιρετική δουλειά! Μπράβο!
θα πρότεινα να έμπαινε και κάποιο διακοπτάκι (micro-switch) που να κλείνει το UV ώστε να μην πέφτει στα μάτια UV κάθε φορά που κάποιος ανοίγει το καπάκι χωρίς να έχει πατήσει το button για να κλείσει το UV.

----------

nanobot (03-01-18)

----------


## kioan

> θα πρότεινα να έμπαινε και κάποιο διακοπτάκι (micro-switch) που να κλείνει το UV



Ή ακόμη καλύτερα, μια μαγνητική επαφή που στην ουσία να ενεργοποιεί το pause όταν ανοίγει το καπάκι.

----------

nanobot (03-01-18)

----------


## elektronio

Συγχαρητήρια και από μένα. Πολύ όμορφη κατασκευή και πολύ καλή η προσαρμογή που έκανες με το display και τa κουμπιά.
Αν το δούλεψες δώσε και κανένα νούμερο σε πόσο χρόνο εμφανίζει το τυπωμένο.

----------

nanobot (03-01-18)

----------


## katmadas

> Συγχαρητήρια και από μένα. Πολύ όμορφη κατασκευή και πολύ καλή η προσαρμογή που έκανες με το display και τa κουμπιά.
> Αν το δούλεψες δώσε και κανένα νούμερο σε πόσο χρόνο εμφανίζει το τυπωμένο.




Περιπου 90-120 δευτερολεπτα φανταζομαι...

Παντως να εχεις κανει τετοια κατασκευη και τετοια παρουσιαση και να μην το εχεις δοκιμασει καν ειναι φαουλ.

Οι περισσοτεροι θα το δοκιμαζαν πριν καν γινει ο αυτοματισμος....

----------

nanobot (03-01-18)

----------


## nanobot

Ευχαριστώ πολύ για τα καλά σας λόγια.

Ήθελα από καιρό να το μετατρέψω αυτό το scanner σε κουτί για πλακέτες, αλλά ήθελα να το γράψω και με την κάμερα για να φτιάξω το video. Τελικά βρήκα τον χρόνο και το κατάφερα.

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

Στέφανε έχω δει και εγώ μερικά πολύ κακής ποιότητας video από Έλληνες και δεν ήθελα να ανεβάσω κάτι τέτοιο, γι’ αυτό και αφιέρωσα χρόνο στο μοντάζ, στην ηχοληψία και στην σκηνοθεσία της παρουσίασης. Για να γίνει ένα σωστό video θέλει χρόνο και μεράκι όταν δεν γίνετε για λεφτά, αλλά μου αρέσει και πιστεύω ότι αξίζει. Λόγο επαγγέλματος (προγραμματιστής Η/Υ) ξέρω να γράφω κώδικά σε πάρα πολλές γλώσσες προγραμματισμού και φυσικά να φτιάχνω λογικά διαγράμματα. Το κάνω εδώ και πάρα πολλά χρόνια αυτό επαγγελματικά και θα το χρησιμοποιήσω και για το vlog μου και το χόμπι μου με τα ηλεκτρονικά. Αν ασχοληθώ και δεν το παρατήσω θα γίνει καλό κανάλι πιστεύω, αλλά γενικώς αυτό θέλει αρκετό χρόνο και μεράκι για να βγαίνει όμορφο αποτέλεσμα.

Τον encoder τον έχω μελετήσει αρκετά και ναι, το καλύτερο θα ήταν να τον φτιάξω με velocity control, αλλά και το σύστημα που έχω φτιάξει είναι καλό αν το σκεφτείς. Ξεκινάει στο τέταρτο ψηφίο (πρώτο από δεξιά) και όταν είναι σε αυτό προσθέτει και αφαιρεί μονάδες. Πατώντας τον rotary πηγαίνει στο επόμενο ψηφίο, δεύτερο από δεξιά, και εκεί πλέων προσθέτει/αφαιρεί δεκάδες. Πατώντας πηγαίνει στο επόμενο, τρίτο από δεξιά και προσθέτει/αφαίρει εκατοντάδες και για το τελευταίο ψηφίο προσθέτει/αφαίρει χιλιάδες. Τα παρατεταμένα πατήματα δεν είναι δύσκολό να γίνουν. Ξέρω ότι υπάρχουν libraries, αλλά εγώ τα φτιάχνω με custom timers χρησιμοποιώντας την συνάρτηση millis και στατικές μεταβλητές. Είναι σχετικά απλό με όλα τα buttons, όλα είναι θέμα λογισμικού. Ίσως δεν φαίνεται καλά στο video, γιατί τις δοκιμές της τρέχω σε fast forward, αλλά όλα τα ψηφία αναβοσβήνουν (500 milliseconds) όταν είναι σε "Set Mode" εκτός από το πρώτο ψηφίο. Το έκανα αυτό γιατί ξεκινάει με το πρώτό ψηφίο σε "Set Mode" και θεώρησα ότι θα ήταν καλύτερο αυτό το ψηφίο να μην αναβοσβήνει.

Την χρησιμοποιώ την EEPROM, αλλά μάλλον σε λάθος σημείο! Αν δεις τον κώδικα στο Program.cpp στην γραμμή 297, θα δεις τις συναρτήσεις writeROMData και readROMData. Τώρα που το σκέπτομαι και μου το γράφεις και εσύ, κάνω write στην ROM σε κάθε γύρισμα του rotary encoder που είναι λάθος και θα το διορθώσω. Αν το αφήσω έτσι κάποια στιγμή θα την κάψει πιστεύω! Θα το βάλω να κάνει write κάθε φορά που ανάβει τα LEDs για παράδειγμα.

Δεν το είχα δει το video του Dave για τα μικρά κανάλια που θα βγάζει videos, δυστυχώς, γιατί είχε deadline μέχρι τέλος Δεκεμβρίου για να του στείλουν videos. Έχω ανεβάσει ακόμα ένα βιντεάκι που δοκιμάζω USB Modules και το έχω στείλει, αλλά δεν το πρόλαβα.

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

Μάρκο και Φάνη δυστυχώς δεν έχω προλάβει να το δοκιμάσω ακόμα. Έχω τα πάντα, πλακέτες, υγρά εμφάνισης, τριχλωριούχο σίδηρο και δοχεία. Πιστεύω να βρω λίγο χρόνο να κάνω μια δοκιμή σύντομα. Ο χρόνος απ’ ότι έχω διαβάσει κυμαίνεται από 80 μέχρι 150 δευτερόλεπτά πάντα αναλόγως τον φωτισμό, τι απόσταση έχει το φως από την πλακέτα και φυσικά τις πλακέτες. Θέλω να πιστεύω ότι σύντομα θα βρω λίγο χρόνο για να κάνω δοκιμή και φυσικά θα μοιραστώ μαζί σας τα αποτελέσματα.

----------


## michalism

Συγχαρητήρια και από εμένα!
Σουπερ κατασκευή και βίντεο.
Καλοταξιδο το κανάλι και το blog σου...εγω γραφτηκα  :Rolleyes:

----------

nanobot (04-01-18)

----------


## Fire Doger

Την EEProm μπορείς να την κάνεις κάπως έτσι



```
void Program::writeEEPROMData()
{
    EEPROM.put(EEPROM_START_ADDRESS, m_secsCountdown);
}

int16_t Program::readEEPROMData()
{
    int16_t temp;
    EEPROM.get(EEPROM_START_ADDRESS, temp);

    if(temp< 0)
        temp= 1;
    else if(temp> 9999)
        temp= 9999;
    return temp;
}

void Program::UpdateEEPROMData()
{
    if(readEEPROMData() != m_secsCountdown)
        writeEEPROMData();
}
```


Δεν είμαι σίγουρος αν η βιβλιοθήκη ελέγχει αν τα δεδομένα είναι ίδια έτσι ώστε να μην κάνει άσκοπα erase/write την ίδια τιμή οπότε καλό είναι να το κάνεις κάπως έτσι και κάθε φορά που θα ξεκινάει αν έχεις αλλάξει τιμή θα γράφει την καινούρια αλλιώς δεν θα γράφει τίποτα. Αν γράφεις κάθε φορά που αλλάζει η τιμή απ' τον encoder πολύ γρήγορα θα καταστραφούν οι συγκεκριμένες διευθύνσεις. Δεν "καίγονται" απλώς αναπτύσσουν φορτίο και δεν μπορείς να σβήσεις.
Μερικές φορές χρησιμοποιούν και τεχνικές έτσι ώστε να αλλάζει κάθε φορά η πρώτη διεύθυνση για να εκμεταλλεύονται όλα τα byte της eeprom αλλά περιττό εδώ.

Επίσης η EEPROM είναι διαφορετική απ' την ROM και συνήθως αποφεύγουμε το σκέτο "Rom" για συντομία γιατί παραπέμπει αλλού. Ο bootloader γράφει στην ROM πχ και πολλά δεδομένα που δεν αλλάζουν κατά την εκτέλεση (string συνήθως) τα βάζουμε στην Rom για να μην τρώνε άσκοπα RAM

Άμα έχεις 30-40 βίντεο και κάποιο μετά γίνει viral θα μαζέψεις πολύ κόσμο στο κανάλι, είναι "light" βίντεο και το βλέπουν άνετα χομπίστες, κυλάει γρήγορα και ομαλά. Συνήθως αυτά που ξεκινάνε "DIY ..." όλα έχουν πολλά views.

*Όταν κάνεις δοκιμή μην ξεχάσεις να βγάλεις τις εκτυπώσεις έτσι ώστε το toner να ακουμπάει το φωτοευαίσθητο

----------

nanobot (04-01-18)

----------


## Hulk

Μπράβο Χρήστο! Πολύ καλή δουλειά με μεράκι προ πάντων!

----------

nanobot (04-01-18)

----------


## nanobot

Σας ευχαριστώ Μιχάλη και Σάββα. Αυτό είναι πάνω απ’ όλα που χρειάζεται, μεράκι και όρεξη.


Στέφανε αν διαβάσεις την περιγραφή της EEPROM.put() το γράφει ότι χρησιμοποιεί την EEPROM.update() η οποία ελέγχει τις τιμές αν είναι ίδιες πριν τις γράψει, οπότε δεν χρειάζεται αν το ελέγξω μέσα στο πρόγραμμα. Νομίζω το είχα διαβάσει αυτό και γι’ αυτό δεν έχω βάλει να κάνει check.






> EEPROM.put() Note
> 
> 
> This function uses EEPROM.update() to perform the write, so does not rewrites the value if it didn't change.







> EEPROM.update() Description
> 
> 
> Write a byte to the EEPROM. The value is written only if differs from the one already saved at the same address.



Την ονομασία την έκανα πρόχειρα και έχεις δίκιο, πρέπει να γράφουμε τα πράγματα όπως ακριβώς είναι και ειδικά σε κώδικά που μοιραζόμαστε με άλλους, γιατί υπάρχει διαφορά της ROM με την EEPROM. Σκέφτομαι ότι καλύτερο θα είναι ή να κάνω write στην EEPROM όταν πατάει το play button, ή να βάλω έναν timer που θα κάνει update μετά από 10 δευτερόλεπτα για παράδειγμα από το τελευταίο γύρισμα του encoder, ή ακόμα καλύτερα συνδυασμός και των δύο. Αν το αφήσω έτσι, θα σταματήσει να κάνει write και να αποθηκεύει τις τιμές κάποια στιγμή, αυτό είναι σίγουρο.


Πολύ σημαντικό αυτό που μου γράφεις για τις διαφάνειες και το καταλαβαίνω γιατί αν η επιφάνια με το toner δεν ακουμπάει το φωτοευαίσθητο, τότε υπάρχει ελάχιστος κενός χώρος που θα περνάει το φως και δεν θα βγαίνει ακριβές αποτέλεσμα!

----------


## nanobot

Έτοιμη η EEPROM. Το έφτιαξα να γράφει στην EEPROM μετά από 5 δευτερόλεπτα αφού έχει γυρίσει ο encoder και όταν ξεκινάει και ανάβει τα λεντάκια:




```
#define EEPROM_WRITE_AFTER_ENCODER_SECONDS 5

...

if(m_eepromWriteTimer != 0 && (currentMillis - m_eepromWriteTimer) >= (EEPROM_WRITE_AFTER_ENCODER_SECONDS * 1000))
{
    writeEEPROMData();
    m_eepromWriteTimer = 0;
}
```

----------


## nanobot

Καλησπέρα.


Έκανα δοκιμές με το μηχάνημα και είμαι λίγο μπερδεμένος μιας και δεν έχω ξανακάνει αποχάλκωση!


Ξεκίνησα και σχεδίασα ένα πολύ μικρό κύκλωμα για δοκιμή. Εκτύπωσα διαφάνεια που είχε μετρημένα 6 κομμάτια με το ίδιο κύκλωμα για πλακέτα 100 Χ 70 mm. Έκοψα μια κανονική πλακέτα χωρίς φιλμ σε 6 ίσα κομματάκια και στη συνέχεια εφάρμοσα το ρολό φιλμ που βλέπετε στη φωτογραφία αφού είχα αφαιρέσει το προστατευτικό από τη μια πλευρά. Το πέρασα από τον πλαστικοποιητή 2 φορές, έκοψα τα 6 κομμάτια και το έβαλα στο μηχάνημα με τα UV LEDs την κάθε πλακέτα με ξεχωριστό χρόνο για 60, 80, 100, 120, 140, 160 την πρώτη φορά, και για 180, 200, 220, 240, 260, 280 την δεύτερη. Παρόλο που διέκρινα πολύ αμυδρά σημεία του σχεδίου σε χρόνους μετα τα 200, χρησιμοποιώντας υγρό εμφάνισης ΚΕΜΟ Ε250 (https://www.ebay.co.uk/itm/KEMO-ELEC...-/122382275676) το φιλμ διαλυόταν τελείως χωρίς να αφήνει τίποτα από το σχέδιο! Το δοκίμασα 2 φορές με διαφορετικούς χρόνους και δεν βγήκε το παραμικρό τρακ στο σχέδιο!

Μετα πήρα μια έτοιμη πλακέτα με φιλμ που έχω, είναι αυτήν δεξιά στην φωτώ με το μπλε προστατευτικό. Έκοψα 2 κομματάκια, έβγαλα το προστατευτικό και τα άφησα στα UV LEDs για 180 και 300+ δευτερόλεπτα. Τα έβαλα στο ίδιο υγρό και μετα από μερικά λεπτά είχε εμφανιστεί το σχέδιο και στα δύο κομμάτια και αποχαλκώθηκαν με επιτυχία σε τριχλωριούχο σίδηρο με το αποτέλεσμα που μπορείτε να δείτε στην φωτογραφία που είναι πάρα πολύ ικανοποιητικό και για πρώτη πλακέτα!



Μπορεί κάποιος να μου δώσει κάποια συμβουλή στο τι μπορεί να κάνω λάθος με το φιλμ που τοποθετώ στις πλακέτες και δεν δουλεύει ενώ δουλεύει κανονικά με τις έτοιμες; Μήπως φταίει το φιλμ (κακή ποιότητα) ή μήπως θέλει παραπάνω χρόνο από 400 δευτερόλεπτα;

----------


## Ακρίτας

Χρήστο, το negative dry film είναι αρνητικό που σημαίνει ότι η διαφάνεια με τη μάσκα πρέπει να έχει αντεστραμμένο το άσπρο - μαύρο. Η εμφάνισή του γίνεται με απλή σόδα πλυντηρίου (ανθρακικό νάτριο) σε διάλυμα περίπου 5 gr σε 500 ml. Ο χρόνος εμφάνισης είναι περίπου 3,5 λεπτά και θα τον βρεις με πειραματισμό. Για τον χρόνο έκθεσης με UV led θα μας ενημερώσεις εσύ. Εγώ χρησιμοποιώ απλές λάμπες "οικονομίας" λευκές.

----------


## liat

Δες έναν *οδηγό* μετατροπής απλής πλακέτας σε φωτοευαίσθητη. Εμένα μου πέτυχε.

----------


## nanobot

Γιώργο και Γιάννη ευχαριστώ για τις απάντησης σας.
Ναι, το κάνω λάθος, δε θέλει το ίδιο υγρό για εμφάνιση, θέλει σόδα πλυντηρίου.
Θα ξαναδοκιμάσω αυτή τι φορά με τα σωστά βήματα και υγρό και θα επανέλθω με τα αποτελέσματα.

----------


## baxev

Μερικές σκέψεις μου για την κατασκευή σου:
Δεν έχει σημασία από που παράγεται η ακτινοβολία UV, λάμπα ή λεντάκια, είναι το ίδιο επικίνδυνη για τα μάτια και το δέρμα γενικότερα, οπότε μπορεί κάποιος να χρησιμοποιήσει όποια πηγή φωτισμού επιθυμεί. Το κάλυμμα όμως πρέπει να μένει πάντα κλειστό, όταν η πηγή φωτισμού είναι ενεργοποιημένη. Για τον λόγο αυτό η σύσταση που σου έγινε για να υπάρχει διακόπτης στο καπάκι που να κόβει το ρεύμα στην πηγή είναι σωστή και προάγει την ασφάλεια, έναντι κάποιου τρίτου που δεν γνωρίζει τον κίνδυνο της ακτινοβολίας UV. Οπότε για λόγους ασφαλείας όποτε ανοίγει το καπάκι θα πρέπει να σταματά ή πηγή και να εμφανίζεται η ένδειξη oPEn στην οθόνη.
Προσπάθησα να τρέξω το πρόγραμμα σε περιβάλλον arduino 1.8.2, μαζί με τις βιβλιοθήκες τους. Όμως βγάζει το σφάλμα:

Arduino: 1.8.2 (Windows 7), Board: "Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)"

C:\Users\Θανάσης\Documents\Arduino\libraries\TM163  7Display-master\TM1637Display.cpp:27:25: fatal error: ../ZKRTypes.h: No such file or directory


 #include <../ZKRTypes.h>





compilation terminated.


exit status 1
Error compiling for board Arduino Pro or Pro Mini.

Μήπως μου διαφεύγει κάτι;;;;

Ευχαριστώ

----------


## nanobot

> Μερικές σκέψεις μου για την κατασκευή σου:
> Δεν έχει σημασία από που παράγεται η ακτινοβολία UV, λάμπα ή λεντάκια, είναι το ίδιο επικίνδυνη για τα μάτια και το δέρμα γενικότερα, οπότε μπορεί κάποιος να χρησιμοποιήσει όποια πηγή φωτισμού επιθυμεί. Το κάλυμμα όμως πρέπει να μένει πάντα κλειστό, όταν η πηγή φωτισμού είναι ενεργοποιημένη. Για τον λόγο αυτό η σύσταση που σου έγινε για να υπάρχει διακόπτης στο καπάκι που να κόβει το ρεύμα στην πηγή είναι σωστή και προάγει την ασφάλεια, έναντι κάποιου τρίτου που δεν γνωρίζει τον κίνδυνο της ακτινοβολίας UV. Οπότε για λόγους ασφαλείας όποτε ανοίγει το καπάκι θα πρέπει να σταματά ή πηγή και να εμφανίζεται η ένδειξη oPEn στην οθόνη.
> Προσπάθησα να τρέξω το πρόγραμμα σε περιβάλλον arduino 1.8.2, μαζί με τις βιβλιοθήκες τους. Όμως βγάζει το σφάλμα:
> 
> Arduino: 1.8.2 (Windows 7), Board: "Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)"
> 
> C:\Users\Θανάσης\Documents\Arduino\libraries\TM163  7Display-master\TM1637Display.cpp:27:25: fatal error: ../ZKRTypes.h: No such file or directory
> 
> 
> ...



Καλησπέρα Θανάση.
Λίγο αργή η απάντηση μου, αλλά είχα καιρό να μπω στο site εδώ δυστυχώς.
Φυσικά και έπρεπε να το είχα σχεδιάσει με αυτόματο διακόπτη στο καπάκι, αλλά κακώς το αμέλησα γιατί πρέπει να προάγουμε τέτοια «μηνύματα» και πρακτικές ασφαλείας.
Έχεις δίκιο για το αρχείο ZKRTypes.h, δεν το είχα κάνει Add στο commit στο Github, πλέων υπάρχει και αυτό το αρχείο που έχει μόνο κάτι μακρος και μια συνάρτηση.
Αν συνεχίζεις να αντιμετωπίζεις πρόβλημα πες μου.

----------

