Πίνακας περιεχομένων:
- Βήμα 1: RFID Kortlæser
- Βήμα 2: Servomotor (Anlæg)
- Βήμα 3: Βάση δεδομένων MySQL - Indhold
- Βήμα 4: Arduino Kode
- Βήμα 5: Εφαρμογή φόρμας Windows
- Βήμα 6: Υλικό
- Βήμα 7: Fobindelsesdiagram / I / O Lliste
Βίντεο: EAL - Industriel Internet - Fabrikshal: 7 Βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:38
Μπορείτε να το χρησιμοποιήσετε για να χρησιμοποιήσετε το σύστημα και να εφαρμόσετε αυτόματα το σύστημα από τη βιομηχανία 4.0 princippet. I denne opgave, er der lavet en lille simulation af en fabrikshal. I hallen står der en servomotor, samt et par dioder. Udevendig, sidder der en RFID kortlæser, der skulle bruges til at lukke de relevante ind i fabrikshallen. Alt δεδομένα, gemmes και βάση δεδομένων στο Wampserver.
Βήμα 1: RFID Kortlæser
Απορρίψτε τις πληροφορίες για το RFID kortlæser. Hensigten er at ud fra de id numre der er på det kort, og den brik der er med er skrevet ind i vores Arduino kode. Det gør at når kortlæseren opfanger en brik eller et kort, kigger den på enhedens id-nummer, και godkender først når det nummer stemmer overens med det der er skrevet ind i koden.
Når kortlæseren giver adgang, så tændes lyset i fabrikken. Lyset slukkes igen, når en enhed, der er godkendt af kortlæseren, bliver detekteret.
Kortlæseren bliver fjernet fra projektet, da den kører seriel kommunikation. Det vil sige at der kan opstå forstyrrelser på den seriel port, der er på projektets Arduino Uno. Seriel porten, skal også bruges til Arduinoens ordrer, den vil få fra vores Windows Forms applikation. I den sammenhæng er lyset også fravalgt.
Βήμα 2: Servomotor (Anlæg)
I hallen er der en servomotor, der er styret af en Arduino Uno. Den skalsimulere et anlæg, der kan productionrer forskellige produkter. Ordrerbeholdningen, samt antallet af de udførte produkter, bliver gemt i en MySQL database. Μπορώ να χρησιμοποιήσω τον εντοπιστή θέσης. Hver position symboliserer tre forskellige produkter. Δεν υπάρχουν προϊόντα που μπορούν να χρησιμοποιηθούν, μπορούν να χρησιμοποιηθούν από τη θέση τους, καθώς και με την παραγγελία. Προσδιορίστε τον άνθρωπο, μέσω του WPF applikationen που μπορεί να σας ζητήσει από τον κινητήρα. Alt hvad bliver productret bliver gemt σε βάση δεδομένων MySQL.
Βήμα 3: Βάση δεδομένων MySQL - Indhold
I MySQL βάσεις δεδομένων vil der være tre tabeller. Κατέβασε τον εαυτό σου σε μια καλή παραγωγή, και σε μεγάλο βαθμό. Μπορείτε επίσης να χρησιμοποιήσετε όλες τις παραγωγές. Ωστόσο, θα μπορούσατε να λάβετε υπόψη σας και να παραγγείλετε το προϊόν σας, καθώς και να παραγγείλετε κάτι παραπάνω. Ydermere er der et tidspunkt på, hvornår de pågældende produkter er productionret. Εφαρμογή των Windows Forms για τη χρήση του αρχείου, την εγκατάσταση του Arduinoen, τη βάση δεδομένων. Δεν είναι δυνατή η παραγγελία, μπορείτε να χρησιμοποιήσετε το Arduinoen, να μάθετε περισσότερα σχετικά με τα δεδομένα και να δημιουργήσετε βάσεις δεδομένων. Πηγαίνετε για να αποκτήσετε πληροφορίες για τη βάση δεδομένων. En Integer, en String, som bliver kaldt en VarChar, και βάσεις δεδομένων. Der er også και TimeStamp, Det er en indstilling, der er tilføjet και βάσεις δεδομένων.
Βήμα 4: Arduino Kode
#περιλαμβάνω
Servo myServo;
int servoPos; char produkt = '0'; void setup () {myServo.attach (3); // Serial kommunikation startes Serial.begin (9600); } void loop () {// Læsning fra serial port produkt = Serial.read (); // Πλήρης διακόπτης παραγγελίας (προϊόν) {// Παραγωγή A (1) udføres i denne case case '1': myServo.write (50); καθυστέρηση (1000)? myServo.write (0); καθυστέρηση (1000)? Serial.println ("Τέλος"); Διακοπή; // Προϊόν B (2) και υπόθεση υπόθεσης '2': myServo.write (100); καθυστέρηση (1000)? myServo.write (0); καθυστέρηση (1000)? Serial.println ("Τέλος"); Διακοπή; // Προϊόν C (3) και υπόθεση υπόθεση '3': myServo.write (150); καθυστέρηση (1000)? myServo.write (0); καθυστέρηση (1000)? Serial.println ("Τέλος"); Διακοπή; }}
Βήμα 5: Εφαρμογή φόρμας Windows
χρησιμοποιώντας System; χρησιμοποιώντας System. Collections. Generic; χρησιμοποιώντας System. ComponentModel; χρησιμοποιώντας System. Data; χρησιμοποιώντας System. Drawing; χρησιμοποιώντας System. Linq; χρησιμοποιώντας System. Text; χρησιμοποιώντας System. Threading. Tasks; χρησιμοποιώντας System. Windows. Forms; χρησιμοποιώντας System. Collections; χρησιμοποιώντας System. IO. Ports. χρησιμοποιώντας MySql. χρησιμοποιώντας MySql. Data. MySqlClient
χώρος ονομάτων WindowsFormsApp2
{public partial class Form1: Form { /* I denne class bliver alle public variabler oprettet. Herunder er der oprettet en Class (MySqlConnection) μπορεί να χρησιμοποιηθεί, επειδή μπορείτε να χρησιμοποιήσετε το MySQL. Ydermere er der oprettet en String (connectionString) δεν μπορεί να χρησιμοποιηθεί για να καθορίσει τον κωδικό πρόσβασης, αλλά και τη βάση δεδομένων από την ιστορία όλων. Der er oprettet en integer, i et 2d array (orde). Μπορείτε να το χρησιμοποιήσετε για να το κάνετε καλύτερα από προϊόντα και προϊόντα, ή ακόμα και από την παραγωγή. Seriel kommunikationen til Arduinoen bliver også definret her. Der bliver også oprettet en Class (BackgroundWorker). Είμαι σε θέση να επιλέξω ένα πρόγραμμα που θα σας επιτρέψει να εκμεταλλευτείτε το πρόβλημα. I dette tilfælde er det brugbart, da der kan blive oprettet nye ordrer, med korte mellemrum. */ Σύνδεση MySqlConnection. string connectionString;
ιδιωτικό int ordrenummer?
ιδιωτικό int [,] παραγγελία = νέο int [100, 100]; private int sendOrder = new int [100]; ιδιωτική συμβολοσειρά prodType;
SerialPort sp = νέο SerialPort ();
ιδιωτικό BackgroundWorker myWorker = νέο BackgroundWorker ();
δημόσια φόρμα1 ()
{InitializeComponent (); // Her bliver vores String (connectionString) defineret. connectionString = "διακομιστής = 192.168.1.100; userid = root; pwd = langeland; βάση δεδομένων = arduino;"; /* Η ευμετάβλητη μεταβλητή της "myWorker" κάθισε μέχρι να καταγραφεί και να διαφέρει από διαφορετικές διαδικασίες bestillinger. */ myWorker. DoWork += νέο DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = true; myWorker. WorkerSupportsCancellation = true; // Her bliver selve baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Her bliver der defineret hvilket format datoen kører i. Είναι καλύτερα να διαμορφωθεί μετά από βάσεις δεδομένων MySQL. dateTimePicker1. CustomFormat = "εεεε-ΜΜ-ηη"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }
ιδιωτικό κενό Afgiv_Ordre_Click (αποστολέας αντικειμένων, EventArgs e)
{ /* Her er oprettet nogle variabler, der kun bliver brugt και dette void. De tre første er Integers der skal definere hvilket produkt der er tale om. De næste tre er oprettet for at kunne skrive det antal man ønsker, ind i applikationen. Den sidste er oprettet for at få en længde på den pågældende ordre. */ int produktA = 1; int produktB = 2; int produktC = 3; int prodA = int. Parse (prodAOrder. Text); int prodB = int. Parse (prodBOrder. Text); int prodC = int. Parse (prodCOrder. Text); int orderLength = prodA + prodB + prodC; /* Ανακαλύπτω για βρόχους που μπορούν να χρησιμοποιηθούν, να επιλέξουν και να προχωρήσουν στην παραγωγή, και να βελτιωθούν. */ για (int prod1A = 0; prod1A <prodA; prod1A ++) {order [ordrenummer, prod1A] = produktA; }
για (int prod1B = (prodA); prod1B <(prodB+prodA); prod1B ++) {order [ordrenummer, prod1B] = produktB; }
για (int prod1C = (prodA + prodB); prod1C 99)
{ordrenummer = 0; } // Οι υπερπαραγωγές της για τη δημιουργία βάσεων δεδομένων. DBQuery ("INSERT INTO` bestilteprod "(` Produkt A`, `Produkt B`,` Produkt C`) VALUES (" + prodA +", " + prodB +", " + prodC +") "); // Οι υπερτιμήσεις της είναι υπερβολικές για την παραγωγή προϊόντων στο blive productionrert, μέχρι τη βάση δεδομένων. DBQuery ("UPDATE` total` SET `manglende produkter` = (` manglende produkter` +(" +(prodA +prodB +prodC) +")) ΠΟΥ 1 "); }
// I dette void er alt det kode der skal køre i baggrunden, lagt ind.
ιδιωτικό κενό myWorker_DoWork (αποστολέας αντικειμένων, EventArgs e) {ενώ (αληθές) { /* Λήψη στο summen af den afsendte ordre ikke er lig med 0, vil dette while loop køre. */ Κατάσταση (); while (sendOrder. Sum ()! = 0) { /* Βρίσκω για το loop fungerer det således, στο så lgenge den oprettede Integer (i) er mindre end længden på den afgivet ordre, vil det eksikvere. Variablen (i) kigger på den pågældende række i arrayet, der på nuværende tidspunkt arbejdes i. Den kigger i kolonnen, ser hvilket tal der står i kolonnen. Το Tallet bliver μπορεί να χρησιμοποιηθεί για περισσότερες πληροφορίες, αλλά και για μεταβλητές λήψεις βίντεο μέχρι να μην είναι κολόνια, αλλά και για το kolonne μέχρι τις 0. Έκδοση προϊόντων για την αποθήκευση δεδομένων. Ενδείκνυται αν σας βοηθήσουν να επικοινωνήσετε με το Arduinoen åbnet, και να καταργήσετε την παραγγελία σας μέχρι το Arduinoen. */ για (int i = 0; i <sendOrder. Length; i ++) {Κατάσταση (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. Open (); sp. Write (sendOrder . ToString ()); // Programmet der er i en af disse if statement, vil blive eksikveret, afhængig af hvilket tal fra et til tre der er i variablen (i). if (sendOrder == 1) {prodType = "Produkt A"; } else if (sendOrder == 2) {prodType = "Produkt B"; } else if (sendOrder == 3) {prodType = "Produkt C"; }
sendOrder = 0;
// Δεν είναι δυνατή η εκτέλεσή μου στο arrayet samlet giver 0, bliver de udførte produkter uploadet και βάσεις δεδομένων, και επικοινωνία με Arduinoen, bliver lukket. if (sendOrder. Sum () == 0) {DBQuery ("INSERT INTO` udforte` (`` Produkt type`) VALUES ('" + prodType +"') ");
DBQuery ("UPDATE` total` SET `productret produkter` = (` productret produkter` + 1), `manglende produkter` = (` manglende produkter` - 1) ");
sp. Κλείσιμο ();
Διακοπή; } /* Her afventes der at Arduinoen er færdig med ordren. Der kvitteres med et "done". Δεν είναι δυνατή η τροποποίηση, η οποία μπορεί να μεταφορτωθεί και να μεταφορτωθεί με βάση τις βάσεις δεδομένων από τον Όμιλο, αλλά και με τον τρόπο με τον οποίο μπορεί να χρησιμοποιηθεί για να υπερβεί τις βάσεις δεδομένων. */ sp. ReadTo ("Τέλος");
DBQuery ("INSERT INTO` udforte` (`Produkt type`) VALUES ('" + prodType + "')");
DBQuery ("UPDATE` total` SET `productret produkter` = (` productret produkter` + 1), `manglende produkter` = (` manglende produkter` - 1) ");
sp. Κλείσιμο (); Κατάσταση(); }} // Καταργώ το loop bliver der lagt en ny række med ordre til eksikvering, når den foregående række er eksikveret (summen af foregående række er lig med 0). για (int i = 0; i <order. GetLength (0); i ++) {int test = order [i, 0]; εάν (δοκιμή! = 0) {για (int j = 0; j <100; j ++) {sendOrder [j] = παραγγελία [i, j];
σειρά [i, j] = 0;
}
Διακοπή; }}
}
} /* Her er der oprettet et void ved navn "Status". Det er lavet for at skulle undgå at skrive de samme linjer kode flere steder. Στήριξα το man man nøjes med στο skrive "Status" Dette void er også inkluderet i det void, med det andet kode, der kører i baggrunden. * / private void Status () { /* Her åbner man MySQL forbindelsen, vælger alt fra den tabel der hedder total, και eksikverer den forespørgsel. */ MySqlConnection con = new MySqlConnection (connectionString); con. Open (); string str = "επιλέξτε * από το σύνολο"; MySqlCommand com = νέα MySqlCommand (str, con); MySqlDataReader reader = com. ExecuteReader (); // Denne funktion er med for at dele Baggrundskoden på en tråd i CPU'en, og en anden tråd til resten af koden. αναγνώστης. Διαβάστε (); MissingProd. Invoke ((MethodInvoker) delegate {// Her bliver de manglende produkter, samt produkter der er lavet, skrevet ud på applikationen. MissingProd. Text = "manglende produkter:" + (αναγνώστης ["manglende produkter"]. ToString ()); OrdereProd. Text = "produkter lavet:" + (αναγνώστης ["productionret produkter"]. ToString ());}); // Her bliver der implementeret hvad procentbaren, skal udfyldes efter. ProcenteDone. Invoke ((MethodInvoker) εκπρόσωπος {// Hvis læseren i My SQL απαγορεύει τη διεύθυνση στο "productionret produkter ikke er lig med 0, bliver denne if statement eksikveret. Hvis det er lig med 0, bliver der udskrevet" 0%"skrevet til ετικέτα. if (int. Parse (αναγνώστης ["productionret produkter"]. ToString ()) = 0) {// Her tager man de productionret producter og plusser med de manglende produkter. Resultatet af dette ganger man med εκατ, για στο få det ud i procent. ProcenteDone. Text = Math. Round ((float. Parse (αναγνώστης ["productionret produkter"]. ToString ()) /(float. Parse(reader ["produceret produkter "]. ToString ()) + float. Parse (αναγνώστης ["manglende produkter"]. ToString ()))) * 100). ToString (); // Her bliver resultatet tidligere udregning lagt over på procentbaren. progressBar1. Value = Int32. Parse (ProcenteDone. Text);} else {ProcenteDone. Text = "0%";}}); // Her lukkes MySQL forbindelsen. reader. Close (); con. Close ();} // I dette void bliver alle produkter, der er productionret på den valgte dato, lagt ud på a pplikationen. ιδιωτικό κενό Vis_Produkter_Click_1 (αποστολέας αντικειμένων, EventArgs e) {string date = dateTimePicker1. Value. ToString (). Κατάργηση (10);
ημερομηνία = dateTimePicker1. Text;
string query = "SELECT` Produkt type`, `Tid` FROM udforte WHERE Tid> = '" + date + "00:00:00' AND Tid <= '" + date + "23:59:59'"; χρησιμοποιώντας (σύνδεση = νέο MySqlConnection (connectionString)) χρησιμοποιώντας (εντολή MySqlCommand = νέα MySqlCommand (ερώτημα, σύνδεση)) χρησιμοποιώντας (προσαρμογέα MySqlDataAdapter = νέο MySqlDataAdapter (εντολή)) {DataTable prodTable = νέο DataTable (); προσαρμογέας. Συμπλήρωση (prodTable)
dataGridView1. DataSource = prodTable;
}
} // I dette void bliver MySQL forbindelsen styret. Den fungerer således στο forbindelsen bliver bnet, eksikverer, και lukkes. ιδιωτικό κενό DBQuery (string cmd) {string query = cmd; χρησιμοποιώντας (σύνδεση = νέο MySqlConnection (connectionString)) χρησιμοποιώντας (εντολή MySqlCommand = νέα MySqlCommand (ερώτημα, σύνδεση)) {connection. Open ();
command. ExecuteScalar ();
σύνδεση. Κλείσιμο ();
} } } }
Βήμα 6: Υλικό
1 κουτ. Arduino Uno
1 κουτ. Micro servo SG90 9g
Βήμα 7: Fobindelsesdiagram / I / O Lliste
Βοηθητικό μοτέρ:
+ = Rød
- = Ταξινόμηση
Σήμα = Grøn
Συνιστάται:
EAL - Βιομηχανία 4.0 Συλλογή δεδομένων GPS στο Rc Car: 4 Βήματα
EAL - Industry 4.0 GPS Data Collection on Rc Car: Σε αυτό το Instructable θα μιλήσουμε για το πώς ρυθμίσαμε μια μονάδα GPS σε ένα αυτοκίνητο RC και δημοσιεύσαμε τα συλλεγμένα δεδομένα σε μια ιστοσελίδα για εύκολη παρακολούθηση. Έχουμε προηγουμένως δώσει οδηγίες για το πώς φτιάξαμε το αυτοκίνητό μας RC, το οποίο μπορείτε να βρείτε εδώ. Αυτό χρησιμοποιεί τη
EAL- Embedded - Combination Lock: 4 Βήματα
EAL- Embedded- Combination Lock: Αυτό το έργο είναι ένα σχολικό έργο, το οποίο έχω κάνει για να επιλέξω το μάθημα 2.1 C-προγραμματισμός στο EAL. Είναι η πρώτη φορά, όταν έκανα ένα έργο Arduino και έναν προγραμματισμό C. Αυτό είναι ένα έργο, το οποίο παρουσιάζει μια κλειδαριά συνδυασμού. Κλειδαριά συνδυασμού
EAL - Ενσωματωμένος προγραμματισμός: Candy Mixer 1000: 9 Βήματα
EAL - Ενσωματωμένος προγραμματισμός: Candy Mixer 1000: Για το έργο μας στο Arduino αποφασίσαμε να φτιάξουμε ένα μίξερ για καραμέλες. Η ιδέα είναι ότι ο χρήστης μπορεί να πατήσει ένα κουμπί και στη συνέχεια οι κινητήρες θα αρχίσουν να εκτοξεύουν την καραμέλα σε ένα μπολ και όταν το πρόγραμμα τελειώσει, θα σταματήσει. Το πρώτο βύθισμα
EAL- Ενσωματωμένο εσωτερικό κλίμα: 5 βήματα
EAL- Ενσωματωμένο εσωτερικό κλίμα: Για το σχολικό μας έργο, μας ανατέθηκε η ενσωμάτωση ενός arduino σε ένα αυτοματοποιημένο σύστημα. Επιλέξαμε να φτιάξουμε έναν εσωτερικό αισθητήρα κλίματος, ο οποίος μπορεί να ανιχνεύσει τη θερμοκρασία, την υγρασία και το επίπεδο ντεσιμπέλ σε εσωτερικούς χώρους. Τρυπήσαμε μερικές τρύπες στο ντουλάπι
EAL - SmartStorage: 3 βήματα
EAL - SmartStorage: Πρόκειται για ένα έργο για το SmartStorage του Kasper Borger Tulinius