Αποστολέας Θέμα: Arduino σε παιδια Δημοτικου  (Αναγνώστηκε 494 φορές)

παρις

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 149
Arduino σε παιδια Δημοτικου
« στις: 10 Μάι 2020, 02:12:31 μμ »
Καλησπερα.

Εχει κανει κανεις με επιτυχια σε αυτες τις ηλικιες;
Ασκησεις υπαρχουν;

geochatz

  • Θαμώνας
  • ***
  • Μηνύματα: 25
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #1 στις: 10 Μάι 2020, 10:12:30 μμ »
Μέχρι να απαντήσει κάποιος που να έχει δοκιμάσει το arduino σε δημοτικό, να προτείνω εναλλακτικά το microbit ως "ξαδερφάκι", που ταιριάζει καλύτερα σε μικρές ηλικίες.

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3386
  • to Iterate is human to Recurse divine
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #2 στις: 10 Μάι 2020, 10:26:07 μμ »
Παρουσιάζει πάντως ενδιαφέρον το γεγονός, μαθητές δημοτικού που πρωτεύουν σε διαγωνισμούς ρομποτικής, όταν έρχονται στο γυμνάσιο να μην μπορούν να γράψουν δυο γραμμές κώδικα σε μια απλή γλώσσα προγραμματισμού όπως η Python ή να μην μπορούν να λύσουν μόνοι τους πιο σύνθετα προβλήματα στο Scratch.

Επίσης ακόμα μεγαλύτερο ενδιαφέρον παρουσιάζει το γεγονός της πολύ μεγάλης συμμετοχής μαθητών σε διαγωνισμούς ρομποτικής σε σχέση με την πολύ μικρή έως και μηδαμινή συμμετοχή μαθητών στον διαγωνισμό πληροφορικής.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

dpa2006

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 665
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #3 στις: 11 Μάι 2020, 02:28:19 πμ »
Δεν έχω ακούσει κάτι τέτοιο προσωπικά,αλλά δεν το αποκλείω.
Δες τα εξής,αν δεν τα γνωρίζεις ήδη,


https://create.arduino.cc/projecthub/projects/tags/kids


https://www.arduino.cc/education

Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 455
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #4 στις: 11 Μάι 2020, 06:05:12 μμ »
Έτυχε να φτιάξω ένα πρόγραμμα σε Arduino. Η γλώσσα που χρησιμοποιεί είναι η c++. Στο εγχειρίδιο γράφει c/c++ αλλά είναι c++ η οποία περιέχει τη c στο συντακτικό της.
Αν κάνει κάποιος το λάθος να βάλει ένα = σε ισότητα, δεν θα βγεί λάθος. Θα το πάρει σαν εκχώρηση και η τιμή της εκχώρησης αν δεν είναι μηδενική θα σημαίνει true.
Αυτό είναι ένα ζήτημα κατά το debugging. Μιλάμε λοιπόν για μια c++ κανονική. Η διαφορά είναι ότι ο double ενώ υπάρχει  είναι ισοδύναμος με τον float.
Επίσης ένα πρόγραμμα σαράντα γραμμών επειδή χρησιμοποιεί αντικείμενα της c++ κρυμμένα πίσω από include αρχεία τύπου .h φτιάχνει τελικό πρόγραμμα 200kbytes.
Βεβαίως αν τα παιδιά μάθουν παίζοντας σιγά  σιγά τη c++ θα είναι φανταστικό! Η ανώτερη γλώσσα για μένα είναι η c++.
Το πρόγραμμα που έγραψα και ελέγχθηκε σε board ήταν για τον έλεγχο ενός ασανσέρ, ο εγκέφαλος κατά μία έννοια.

παρις

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 149
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #5 στις: 11 Μάι 2020, 08:54:43 μμ »
Έτυχε να φτιάξω ένα πρόγραμμα σε Arduino. Η γλώσσα που χρησιμοποιεί είναι η c++. Στο εγχειρίδιο γράφει c/c++ αλλά είναι c++ η οποία περιέχει τη c στο συντακτικό της.
Αν κάνει κάποιος το λάθος να βάλει ένα = σε ισότητα, δεν θα βγεί λάθος. Θα το πάρει σαν εκχώρηση και η τιμή της εκχώρησης αν δεν είναι μηδενική θα σημαίνει true.
Αυτό είναι ένα ζήτημα κατά το debugging. Μιλάμε λοιπόν για μια c++ κανονική. Η διαφορά είναι ότι ο double ενώ υπάρχει  είναι ισοδύναμος με τον float.
Επίσης ένα πρόγραμμα σαράντα γραμμών επειδή χρησιμοποιεί αντικείμενα της c++ κρυμμένα πίσω από include αρχεία τύπου .h φτιάχνει τελικό πρόγραμμα 200kbytes.
Βεβαίως αν τα παιδιά μάθουν παίζοντας σιγά  σιγά τη c++ θα είναι φανταστικό! Η ανώτερη γλώσσα για μένα είναι η c++.
Το πρόγραμμα που έγραψα και ελέγχθηκε σε board ήταν για τον έλεγχο ενός ασανσέρ, ο εγκέφαλος κατά μία έννοια.
Υπαρχει και το scratch σαν plan B, αν ζοριστουν με την C++. http://s4a.cat/ Yπαρχει αυτη η ειδικη εκδοση...φοβερο. γιατι η C/C++ ειναι το plan A παντα.
Αυτο που με κερδισε ειναι η πληθωρα εξοπλισμου και η πληθωρα εφαρμογων. Φυσικα δεν θα τα κανουμε ολα αυτα, απλα ανοιγεις μια τεραστια πυλη μαθησης που φτανει μεχρι και στο πανεπιστημιο (προγραμματισμος arduino-μικροελενκτη)
Ενας εφτιαξε μετρητη Geiger!
https://create.arduino.cc/projecthub/EDUcentrum/geiger-counter-with-arduino-uno-2cf621

H ερωτηση ειναι μπορω να το ξεκινησω απο φετος μεσω webex χωρις καθολου ρομποτ με simulator οπως καναμε στην σχολη; Να τρεξει καπου ο κωδικας θελω.
Η εφαρμογη arduino μπαινει ευκολα.

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 455
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #6 στις: 11 Μάι 2020, 11:11:08 μμ »
Η εφαρμογή τρέχει με Windows 7 ακόμα και 32bit  Δεν έχει απαιτήσεις σε μεγάλη μνήμη. Ο compiler σου λέει για λάθη αλλά η c++ είναι μυστήρια, γιατί αφήνει πχ ένα
if (A=B) .... να μην το δείχνει λάθος.
Επίσης πρέπει να ξέρει κανείς ποτέ βάζει volatile μια μεταβλητή.
Επίσης η χρήση των |, &, ~ να αποφεύγεται. Είναι οι λογικές πύλες ανά μπιτ. Ενώ αν έχουμε bool μεταβλητές ή και εκφράσεις, παίζουν τα ||,&& και !
Εννοείται ότι για ισότητα παίζει το ==
Επίσης τα πεζά κεφαλαία μετράνε. Το περιβάλλον του Arduino ψάχνει με ctrl+F και με ignore case, και κάνει αλλαγές και έτσι ίδια λέξη την φέρνει στα ίσα της με πεζά και κεφαλαία της επιλογής μας. Οπότε πρέπει να μην χρησιμοποιούνται αναγνωριστικά με διαφορά μόνο σε πεζά με κεφαλαία, αλλά με διακριτά ονόματα.
Void βάζουμε σε συναρτήσεις που χρησιμοποιούμε χωρίς επιστροφή τιμής.
Η επιστροφή τιμής γίνεται με την return. Μπορούμε να έχουμε όσες θέλουμε σε μια συνάρτηση αλλά η πρώτη που θα εκτελεστεί θα είναι και η επιστροφή από τη κλήση της συνάρτησης. Το void παίζει και στους pointers αλλά δεν είναι απαραίτητο να χρησιμοποιηθούν.
Το Arduino χρησιμοποιεί interrupts, οπότε δύο πράγματα μας ενδιαφέρουν, το πέρασμα συνάρτησης ως παράμετρος (call back) και το volatile, να σιγουρευτούμε ότι μια μεταβλητή μένει στην μνήμη για να αλλάξει από το interrupt). Επίσης ένα interupt πρέπει να είναι σύντομο, να μην έχει loop, καθυστέρηση,δηλαδή γιατί θα έρθει το επόμενο και θα το επικαλύψει, προκαλώντας προβλήματα.
Το συνηθισμένο μέρος του συντακτικού της γλώσσας ,c++ είναι μικρό και εύκολα κατανοητό από παιδιά δημοτικού.
Εξάσκηση χρειάζεται!
Ένας τρόπος κατανόησης των βιβλιοθηκών είναι η ανάγνωση των αρχείων .h και των  cpp. Αυτό για τον καθηγητή περισσότερα.
Οι συναρτήσεις της c++ που είναι μέρος αντικειμένου (η τύπου κατά μία έννοια) μπορούν να έχουν υπερφόρτωση δηλαδή να υπάρχουν σε εκδόσεις με διαφορετικές υπογραφές. Υπογραφή είναι ο αριθμός και το είδος των παραμέτρων. Αυτό θα το δούμε σε χρήση στους κατασκευαστές αντικειμένων. Αντικείμενα στο Arduino είναι τα τσιπάκια  που βάζουμε για ελεγκτές ή πόρτες εισόδων και εξόδων.
Αυτά τα ολίγα. Καλή προσπάθεια.


evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3386
  • to Iterate is human to Recurse divine
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #7 στις: 11 Μάι 2020, 11:39:32 μμ »
Αν κατάλαβα καλά μιλάμε για προγραμματισμό Arduino με C στο δημοτικό.
Στις ηλικίες αυτές με τι επιτυχία μπορούμε να μιλήσουμε για τα βασικά του προγραμματισμού?
Δηλαδή μεταβλητές, μια έννοια που δεν γνωρίζουν και πολύ δύσκολα θα κατανοήσουν οι μαθητές του δημοτικού (η έννοια αυτή διδάσκεται στην Β Γυμνασίου).
Να μην μιλήσουμε για δομή επανάληψης, μετρητές, δομή επιλογής άρα λογικές συνθήκες κλπ.
Στο Λύκειο υπάρχουν μαθητές που δυσκολεύονται με αυτά και αυτό βλέπω και στο Γυμνάσιο.
Στο δημοτικό πως ακριβώς εισάγονται αυτές οι έννοιες? Ειδικά όταν έχουμε ένα μονόωρο μάθημα στο οποίο το τμήμα δεν σπάει.

ΥΓ. Το ότι οι μεταβλητές αναφέρονται στο βιβλίο της ΣΤ δημοτικού (και με τον τρόπο που αναφέρονται) δε σημαίνει ότι τα παιδιά έχουν καταλάβει περί τίνος πρόκειται σε καμία περίπτωση, γιατί στα μαθηματικά η κατανόηση της έννοιας της μεταβλητής περνάει από την κατανόηση της έννοιας της συνάρτησης.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

παρις

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 149
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #8 στις: 12 Μάι 2020, 12:33:07 πμ »
Αν κατάλαβα καλά μιλάμε για προγραμματισμό Arduino με C στο δημοτικό.
Στις ηλικίες αυτές με τι επιτυχία μπορούμε να μιλήσουμε για τα βασικά του προγραμματισμού?
Δηλαδή μεταβλητές, μια έννοια που δεν γνωρίζουν και πολύ δύσκολα θα κατανοήσουν οι μαθητές του δημοτικού (η έννοια αυτή διδάσκεται στην Β Γυμνασίου).
Να μην μιλήσουμε για δομή επανάληψης, μετρητές, δομή επιλογής άρα λογικές συνθήκες κλπ.
Στο Λύκειο υπάρχουν μαθητές που δυσκολεύονται με αυτά και αυτό βλέπω και στο Γυμνάσιο.
Στο δημοτικό πως ακριβώς εισάγονται αυτές οι έννοιες? Ειδικά όταν έχουμε ένα μονόωρο μάθημα στο οποίο το τμήμα δεν σπάει.

ΥΓ. Το ότι οι μεταβλητές αναφέρονται στο βιβλίο της ΣΤ δημοτικού (και με τον τρόπο που αναφέρονται) δε σημαίνει ότι τα παιδιά έχουν καταλάβει περί τίνος πρόκειται σε καμία περίπτωση, γιατί στα μαθηματικά η κατανόηση της έννοιας της μεταβλητής περνάει από την κατανόηση της έννοιας της συνάρτησης.
Οι τυποι των μεταβλητων ειναι ευκολοι. Αν εξαιρεσω τους δεκαδικους που τους μαθαινουν στα μαθηματικα σε ποια ταξη; Εκει μονο θελει λιγα λεπτα παραπανω.
Με παραδειγματα απο την ζωη μπορεις να εξηγησεις τους
İnteger
Float
Char
Boolean.

To boolean ειναι το ποιο ευκολο απ ολα, και εκει θα πεταξεις και την γλωσσα μηχανης απο το 0 και 1.
Οι λογικες συνθηκες ευκολες και αυτες θα κανεις ενα πινακα.

Η απλη δομη επαναληψης ειναι κατανοητη οταν αρχιζεις και προσθετεις ισως μπλεχτουν.
Οι δομες επιλογης ισως τα δυσκολεψει.

Δεν τα εχω δοκιμασει στην πραξη δεν εχω arduino ρομποτακι, Πληρωσα κατι σεμιναρια για αρχη, ενα μικρο ποσο.
To scratch εχω κανει και θα ηθελα να δοκιμασω κατι αλλο γιατι κολλανε με την κινηση των χαρακτηρων και τα εφε και δεν μαθαινουν πολλα. Ασε που το scratch δεν ξερω αν στεκεται καθολου σαν προγραμματισμος. Φοβαμαι οτι μπερδευει...

παρις

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 149
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #9 στις: 12 Μάι 2020, 12:45:42 πμ »
Παράθεση
η κατανόηση της έννοιας της μεταβλητής περνάει από την κατανόηση της έννοιας της συνάρτησης.
Με μπερδεψες μεχρι και μενα... ;D μπλεκεις πολυ τα μαθηματικα. Θα ριξω μια γρηγορη ματια στα μαθηματικα τους οταν ερθει η ωρα.
Ψευδοκωδικα ειχα κανει στην Τριτη Λυκειου και ουτε που ειδα το βιβλιο των μαθηματικων...πανε χρονια βεβαια...(αλλη κοτσανα ο ψευδοκωδικας ποιανου φαϊνη ιδεα ηταν;) :o
« Τελευταία τροποποίηση: 12 Μάι 2020, 12:59:31 πμ από παρις »

παρις

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 149
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #10 στις: 12 Μάι 2020, 01:13:26 πμ »
Μέχρι να απαντήσει κάποιος που να έχει δοκιμάσει το arduino σε δημοτικό, να προτείνω εναλλακτικά το microbit ως "ξαδερφάκι", που ταιριάζει καλύτερα σε μικρές ηλικίες.
Τι διαφορα εχει αυτο; Ιδια τα βλεπω..
θα με ενδιεφερε να πεις 2 λογια που το ξερεις.

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 455
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #11 στις: 12 Μάι 2020, 07:00:36 πμ »
1. Στη c++ λέμε bool για τις boolean
https://www.geeksforgeeks.org/comparison-boolean-data-type-c-java/?ref=rp
Δείτε τις διαφορές των bool της c++ με τις boolean της java.
2. Το φυσικό ανάλογο της μεταβλητής στον υπολογιστή είναι το ποτήρι. Με δύο ποτήρια το Α και Β δείχνουμε το τύπο και την ποσότητα. Πχ  στο Α βάζουμε τη μισή ποσότητα ποτηριού και στο Β ολόκληρη τη ποσότητα ενός ποτηριού. Η ποσότητα είναι αριθμός.  Η Α και η Β έχουν αριθμούς σχετικούς με την ποσότητα σε νερό. Αν θέλω να αλλάξω τιμές στα Α και Β χωρίς να με ενδιαφέρουν οι τιμές τους θα πάρω ένα άδειο τρίτο ποτήρι, έστω Γ και θα  αδειάσω το Α στο Γ, μετά το Β στο Α και τέλος το Γ στο Β. Το δείχνω κιόλας πάνω στην έδρα.
Μετά τους λέω ότι παρόμοιο τρόπο έχει και ο υπολογιστής αλλά αντί για άδειασμα έχει αντιγραφή. Η εκχώρηση τιμής είναι η αντιγραφή τιμής σε μεταβλητή. Τους εξηγώ ότι η τιμή 123 λέγεται σταθερή στο κώδικα γιατί όποτε την συναντάει ο επεξεργαστής την αντιγράφει ως έχει. Αντίθετα αν δει το Α αντιγράφει τη τιμή που έχει το Α εκείνη τη στιγμή. Επειδή μπορώ να αλλάξω τιμή στην Α αντιγράφοντας μια άλλη, η Α λέγεται μεταβλητή. Η Α έχει όπως το ποτήρι μια μέγιστη τιμή που μπορεί να πάρει.
Στη c αν προσθέσω ένα σε  μεταβλητή με μέγιστη τιμή θα μηδενίσει. Σε άλλες γλώσσες θα βγει λάθος. Αυτό δεν έχει να κάνει με τη μεταβλητή αλλά με το τρόπο λειτουργίας της κάθε γλώσσας.
Πώς γίνονται οι πράξεις. Το σημαντικό εδώ είναι να κατανοήσει ο μαθητής ότι στον επεξεργαστή υπάρχει ένα μόνο σημείο που γίνονται πράξεις, τον συσσωρευτή Το Α=Α+1 .κάνει τη γλώσσα να αντιγράψει την τιμή του Α στον συσσωρευτή να προσθέσει την τιμή 1 και τέλος να αντιγράψει την τιμή του στο Α. Η εκτέλεση γίνεται από την δεξιά έκφραση από το = και ακολουθεί η εκχώρηση στην αριστερή έκφραση.
Αυτά τα απλά, ας γίνουν και σε δύο μαθήματα..,μετά είναι τυφλοσούρτης.
« Τελευταία τροποποίηση: 12 Μάι 2020, 07:24:15 πμ από bugman »

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3386
  • to Iterate is human to Recurse divine
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #12 στις: 12 Μάι 2020, 11:01:12 πμ »
Ο διδακτικός μετασχηματισμός με το ποτήρι είναι λανθασμένος επειδή:
1) Μπορείς να αναμείξεις δυο υγρά σε ένα ποτήρι, όμως δεν υπάρχει αντίστροφη λειτουργία για να επανέλθουν εκεί που ήταν
2) Η ιδέα για την συνύπαρξη δυο αντικειμένων σε μια μεταβλητή είναι υπεύθυνη για μια από τις γνωστές παρανοήσεις που έχουν οι μαθητές την παρανόηση ιστορικού μεταβλητής (history/stack variable misconception). Η παρανόηση αυτή δεν εμφανίζεται εκείνη τη στιγμή απαραίτητα αλλά όταν θα μιλήσουμε για πίνακες ή θα μπούμε στην επανάληψη. Οι μαθητές νομίζουν ότι μια μεταβλητή έχει καταχωρημένες όλες τις τιμές που έχει πάρει.

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

Επίσης ο σκοπός δεν είναι να μάθουμε στα παιδιά να χρησιμοποιούν μεταβλητές, αλλά να τους δείξουμε την αναγκαιότητά τους. Γιατί χρειάζονται δηλαδή.
« Τελευταία τροποποίηση: 12 Μάι 2020, 11:12:06 πμ από evry »
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 455
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #13 στις: 12 Μάι 2020, 01:38:28 μμ »
Το 1 είναι τραβηγμένο. Τα ποτήρια τα αναφέρεις με συγκεκριμένο τρόπο. Ένα είδος, νερό. Η ανάμειξη δεν περιλαμβάνεται στο παράδειγμα.
Το 2 με φέρνει προ εκπλήξεως. Υπάρχει προγραμματιστικά η απομνημόνευση τιμών σε μεταβλητή. Υπάρχει και σχετικό task στο rossettacode.org για να φτιάξει κανείς τέτοιες μεταβλητές.


Δείτε εδώ τις History Variables. Υπάρχει και κώδικας σε M2000 αλλά και σε άλλες γλώσσες όπως java και c#.
http://rosettacode.org/wiki/History_variables

Η χρήση του arduino περιέχει τη χρήση των μεταβλητών. Αν τα βάζαμε σε μια σειρά, πρώτα έρχεται η χρήση μεταβλητών, μετά δομών struct, και τέλος πινάκων (σπάνια να χρησιμοποιηθούν στα project).
 
« Τελευταία τροποποίηση: 13 Μάι 2020, 12:38:07 μμ από bugman »

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3386
  • to Iterate is human to Recurse divine
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #14 στις: 12 Μάι 2020, 02:51:19 μμ »
Το 1 είναι τραβηγμένο. Τα ποτήρια τα αναφέρεις με συγκεκριμένο τρόπο. Ένα είδος, νερό. Η ανάμειξη δεν περιλαμβάνεται στο παράδειγμα.
Δεν έχει σημασία τι αναφέρεις αλλά ότι χρησιμοποιείς έναν διδακτικό μετασχηματισμό ο οποίος ευθύνεται στη συνέχεια για παρανοήσεις. Αυτό που έχει σημασία είναι τι σκέψεις κάνουν τα παιδιά με βάση τον μετασχηματισμό που τους δίνεις. Δεν είναι παθητικοί δέκτες. Θα κάνουν τις δικές τους γενικεύσεις, για αυτό πρέπει το μοντέλο που τους προτείνεις να μην έχει τέτοια προβλήματα.

Παράθεση
Το 2 με φέρνει προ εκπλήξεως. Υπάρχει προγραμματιστικά η απομνημόνευση τιμών σε μεταβλητή. Υπάρχει και σχετικό task στο rossettacode.org για να φτιάξει κανείς τέτοιες μεταβλητές.

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

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 455
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #15 στις: 12 Μάι 2020, 04:08:13 μμ »
@evry
Δεν αντιλέγω ως προς τη χρήση βιβλιογραφίας. Για την εφαρμογή της στο σκεπτικό μου αντιλέγω. Η παρουσίαση ποτηριών και το παράδειγμα αλλαγής τιμής είναι πολύ χειροπιαστό για να το μπερδέψει κάνεις. Η χρήση της γλώσσας, της ελληνικής, και του παραδείγματος δεν δείχνουν ότι υπάρχουν παρανοήσεις. Αλλά αν δεν εξεταστεί η πρόταση σε αίθουσες, όχι μόνο σε μια, δεν μπορούμε να την απορρίψουμε. Εκτός και αν έχει εξεταστεί όπως το έγραψα και υπάρχει βιβλιογραφία που το δείχνει.
Ο αριθμός στη μεταβλητή "ποτήρι" είναι η ποσότητα του νερού  δηλαδή μα μετρούμενη ιδιότητα. Στις μεταβλητές στον υπολογιστή, επίσης έχουμε μια μετρούμενη ιδιότητα τα bit, αλλά με χρήση δυνάμεων του δύο. Αντί να αναφέρουμε τη λεπτομέρεια αυτή, το αφήνουμε να εννοηθεί ότι υπάρχει κάτι που μπορεί να μετρηθεί. Το δεύτερο ουσιαστικό με το παράδειγμα  "ποτήρι" είναι ο περιορισμός που βάζει η μέγιστη τιμή. Δηλαδή το ποτήρι όπως και η μεταβλητή δέχονται όρια ως προς το περιεχόμενο. Το παράδειγμα δείχνει λοιπόν ότι μια τιμή γράφεται στη μεταβλητή εντός ορίων τιμών, και μπορούμε να αλλάξουμε περιεχόμενο, αλλάζοντας τιμή.
Δεν υπάρχει δηλαδή καμία ιδέα περί ανάμειξης υγρών, όπως δεν μπορούμε να προσθέσουμε μήλα με πορτοκάλια. Αυτό το τελευταίο το ξέρει ο μαθητής. Η κλεψειδρα για παράδειγμα είναι ένας τρόπος μέτρησης χρόνου που περιέχει δύο ποτήρια, και όταν είναι σε κάθετη διάταξη το ρευστό, η άμμος ρέει από το ένα στο άλλο. Δηλαδή αφαιρείται άμμος από το ένα ποτήρι και προστίθεται στο άλλο. Μπορεί ένας μαθητής να το βλέπει ανάποδα, ότι φεύγει αέρας από το κάτω ποτήρι και πάει στο πάνω δίνοντας χώρο στη άμμο για να κατέβει!  Σημασία έχει ότι όταν θα ρωτήσει ο δασκαλος: Πότε τελειώνει αυτό που κάνει η κλεψειδρα, όλοι θα πουν  όταν αδειάσει. Αυτό είναι το διακριτό γεγονός. Ομοίως στα ποτήρια μπορούμε να μετράμε τις ποσότητες με ζυγαριές. Το διακριτό βγαίνει με τη ζύγιση. Αν θέλω να πάρει η Β την ίδια τιμή με την Α θα βάλω όσο νερό έχει η Α με χρήση ζυγού. Του λέμε του παιδιού ότι ο υπολογιστής έχει τρόπο να βρίσκει το μεγαλύτερο, το ίσο, το μικρότερο  με το ανάλογο του ζυγού.
Φθάνουμε σε ένα σημείο που μαθαίνουμε στο μαθητή ότι ενώ διαφορετικές ποσότητες  νερού μπορούν να καταχωρηθούν στα ποτήρια, στους υπολογιστές οι τιμές μεταξύ τους ειναι πολλαπλάσια  μιας ελάχιστης μικρής τιμής. Εδώ λέμε ότι το άδειο ποτήρι έχει τιμή μηδέν. Έτσι μια μεταβλητή  δέχεται αριθμούς με το ισοδύναμο του πολλαπλάσιου μιας μικρής ποσότητας, της μονάδας. Έτσι στο μυαλό του μαθητή μπαίνει η ιδέα ότι ο αριθμός στον υπολογιστή δεν είναι αφηρημένη έννοια αλλά περιεχόμενο, που Υπάρχει. Ο κώδικας μπορεί να γράφει εντολές αλλά κατά την εκτέλεση φτιάχνονται τα νούμερα ως κάτι το υπαρκτό, που  έχει θέση σε κάτι που καταχωρεί αριθμούς, όπως μπορεί να το κάνει ένα ποτήρι, Αυτό το κάτι είναι περιοχή της μνήμης, Τα γράμματα των μεταβλητών δεν είναι ετικέτες ποτηριών αλλά μνήμης συγκεκριμένου μεγέθους, όπως τα ποτήρια έχουν συγκεκριμένο μέγεθος.
Ας γίνει λοιπόν δοκιμή από εκπαιδευτικό και ας δούμε τα συμπεράσματα,
Ο προγραμματισμός στηρίζεται όχι μόνο στο πως λειτουργεί μια μεταβλητή αλλά και τι θέλουμε να σημαίνει η μεταβλητή στο πρόγραμμα.Η χρήση αντικειμένων αυτοματοποιεί μεν και βοηθάει να βάζουμε τις κατάλληλες μεθόδους πάνω σε αυτά αλλά δεν διδάσκει αυτό που μπορείς να κάνεις με απλές μεταβλητές.
Για παράδειγμα, διόρθωσα ένα πρόγραμμα σε arduino στο οποίο σε μια δομή με όνομα μεταβλητής Di υπήρχαν τα P0 έως P7, όπου γράφονταν τιμές 1 ή 0 από 8 ποδαράκια ενός περιφερειακού, ως τιμές εισόδου. Πιο κάτω στο κώδικα υπήρχε μια ReadValue(Di.P0), Δηλαδή πήρε κάτι που ήταν Τιμή Εισόδου σε πόρτα περιφερειακού και την έδωσε ως διεύθυνση στη συνάρτηση που διαβάζει τις εισόδους του arduino. Μετέτρεψε την τιμή εισόδου σε τιμή επιλογής πόρτας. Έφόσον οι πόρτες είναι 8, οι τιμές πρέπει να είναι από 0 έως 7 ; έτσι οι τιμές 0 και 1 που έδινε  η λάθος χρήση μεταβλητής δεν έβγαζε λάθος στο κώδικα, αλλά δεν δούλευε ο κώδικας όπως θα έπρεπε. Πως το έβαλε ο προγραμματιστής; Το αντέγραψε από αλλού, χωρίς να καταλάβει τι κάνει, αλλά και χωρίς να γνωρίζει το τι σημαίνει η μεταβλητή στο κώδικα.
Πριν έγινε αναφορά ότι στη ρομποτική πάμε καλά αλλά στο προγραμματισμό τα παιδιά δυσκολεύονται. Αυτό συμβαίνει όταν η ρομποτική στηρίζεται σε παραδείγματα που απλά αντιγράφουμε κώδικα ενώ ποτέ δεν έγινε πραγματική εισαγωγή στο προγραμματισμό.
« Τελευταία τροποποίηση: 12 Μάι 2020, 09:21:58 μμ από bugman »

dski

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 193
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #16 στις: 12 Μάι 2020, 09:48:43 μμ »
Το παράδειγμα με τα ποτήρια για την αντιμετάθεση του περιεχομένου δύο μεταβλητών υπήρχε στο πακέτο της Αλγοριθμικής (δείτε εδώ στο τετράδιο μαθητή στη σελ. 19. Όλο το πακέτο της Αλγοριθμικής είναι διαθέσιμο και από εδώ).

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

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

Α <- Α + Β
Β <- Α - Β
Α <- Α - Β

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

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

Κοντολογίς το ανάλογο των ποτηριών είναι χρήσιμο στο παράδειγμα της αντιμετάθεσης αλλά δεν μπορεί να χρησιμοποιηθεί για να εξηγήσει πλήρως τη λειτουργία των μεταβλητών.

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

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 455
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #17 στις: 12 Μάι 2020, 11:11:43 μμ »
Η μέθοδος με την αλλαγή τιμών με δυο μεταβλητές δεν πρέπει να αναφέρεται καν. Διότι  δεν είναι ισοδύναμη με τις τρεις μεταβλητές. Αν η άθροιση βγάλει αποτέλεσμα που δεν χωράει σε μια μεταβλητή τότε ανάλογα  με τη γλώσσα θα έχουμε ή όχι υπερχείλιση. Πχ στη c++ δεν θα έχουμε υπερχείλιση γιατί το επιπλέον bit θα αποκοπεί και θα πάρουμε λάθος αποτέλεσμα.
Στα ποτήρια βάζουμε πάντα σε κενό. Στη μνήμη του υπολογιστή πως λες να βάζεις το μηδέν 32bit σε μια θέση των 32 bit με αυτή τη τιμή 0XFFFFFFFF (όλα τα bit είναι 1). Πως μεταφέρεις το μηδέν; Δεν θα το εξηγήσω εδώ αλλά το έχεις σκεφτεί ή το γνωρίζεις;
Έτυχε πριν ασχοληθώ με τον προγραμματισμό να ασχοληθώ με τα ηλεκτρονικά και ειδικά μου άρεσαν οι πύλες και όλα τα τσιπάκια της σειράς 74XX
Είχα αγοράσει τα βιβλία TTL 1980 και 1981. Μια ιδέα μπορεί να πάρει κανείς εδω:
https://en.m.wikipedia.org/wiki/List_of_7400-series_integrated_circuits
Για να μπει νέα τιμή σε καταχωρητή πρέπει να καθαρίσει πρώτα, να αδειάσει.
Οι μνήμες στον υπολογιστή, οι λεγόμενες δυναμικές, ήθελαν φρεσκάρισμα σε τακτά διαστήματα γιατί έχαναν την μνήμη τους. Για το φρεσκάρισμα διαβάζονταν η μνήμη τους, byte προς byte και γράφονταν ξανά για να ανεβάσουν το φορτίο τους. Για να γράψεις στη μνήμη πρέπει να σβήσει πρώτα. Το 1 το φορτίο γράφεται σε τέτοιες μνήμης γιατί  αν υπάρχει 1 του δίνει φορτίο σαν να το φρεσκάρει. Το 0 κάνει καθάρισμα. Μόνο όμως όταν η γραμμή Εγγραφή, ειναι1 και εμπλέκει το κύκλωμα εγγραφής. Στο διάβασμα, το 1 ή το 0, που είναι τάσεις και τα δύο κάνουν την εγγραφή στην άλλη πλευρά του data bus, του μεταφορέα δεδομένων.
Που θέλω να καταλήξω; Ότι και η αντιγραφή  στην εκχώρηση είναι μια αντίληψη που δουλεύει για να σκεφτόμαστε αλλά δεν είναι η πραγματικότητα.  Πολλά τσιπάκια των 74XX όπως adders, shifters, latches, έχουν γραμμή clear, για  άμεσο καθαρισμό. Το ανάλογο του αδειάσματος του ποτηριού.
Αν υπάρχει άλλη πρόταση για να μάθουν σωστά τα παιδιά του δημοτικού τις βάσεις στο προγραμματισμό, κσλοδεχούμενη. Τα παιδιά μαθαίνουν να παίζουν και στην ουσία εκτελούν αλγόριθμους χωρίς να το ξέρουν. Η μάθηση θέλει αλγόριθμο για να επιτευχθεί.
« Τελευταία τροποποίηση: 12 Μάι 2020, 11:26:44 μμ από bugman »

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3386
  • to Iterate is human to Recurse divine
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #18 στις: 12 Μάι 2020, 11:14:39 μμ »
Δημήτρη, πολύ σωστά, ήθελα να το γράψω και το ξέχασα. Μου έχει τύχει πολλές φορές μαθητές να νομίζουν ότι μετά την εντολή:
Κώδικας: ΓΛΩΣΣΑ
  1. Α <- Β
Το περιεχόμενο της Β χάνεται, δηλαδή γίνεται μεταφορά και όχι αντιγραφή.
Τώρα θυμήθηκα ότι σε ένα γυμνάσιο που ήμουν τους έκανα λίγο ΓΛΩΣΣΑ (πριν 10 χρόνια ακριβώς) και τους έθεσα το πρόβλημα αντιμετάθεσης των περιεχομένων δυο μεταβλητών.
Ξέρεις τι έκαναν τα παιδιά?
Χρησιμοποίησαν δυο προσωρινές μεταβλητές. Τότε συνειδητοποίησα ότι όλα αυτά που κάνουμε στο μάθημα του Λυκείου (και τα παρουσιάζουμε με θρασύτατο στόμφο ως Αλγοριθμική) τους περιορίζουν τη φαντασία και τους υποχρεώνουν σε μια καταστροφική για τη σκέψη τυποποίηση.

Για παράδειγμα όταν εκχωρείται η τιμή μιας μεταβλητής σε μια άλλη τότε το προηγούμενο περιεχόμενο της δεύτερης μεταβλητής χάνεται. Στα ποτήρια αυτό δεν συμβαίνει. Πρέπει πρώτα να αδειάσουμε το περιεχόμενο του 2ου ποτηριού για να βάλουμε μέσα το νέο περιεχόμενο. Επιπλέον στα ποτήρια το ένα γεμίζει και το άλλο αδειάζει, όμως στις μεταβλητές η αντιγραφή της τιμής μιας μεταβλητής σε μια άλλη δεν διαγράφει την τιμή από την αρχική μεταβλητή.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5385
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #19 στις: 13 Μάι 2020, 08:52:22 πμ »
Τότε που γράφαμε τη σχετική δραστηριότητα της Αλγοριθμικής, είχα προτείνει αντιγραφή κασέτας με κασετόφωνο ακριβώς για να μην αδειάζει το αρχικό περιεχόμενο, αλλά οι πιο έμπειροι ορθά είπανε ότι ...πλέον οι μαθητές δεν έχουν δει κασετόφωνα (και μάλιστα με δύο deck)!

happiness

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 244
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #20 στις: 15 Μάι 2020, 11:09:00 πμ »
Τότε που γράφαμε τη σχετική δραστηριότητα της Αλγοριθμικής, είχα προτείνει αντιγραφή κασέτας με κασετόφωνο ακριβώς για να μην αδειάζει το αρχικό περιεχόμενο, αλλά οι πιο έμπειροι ορθά είπανε ότι ...πλέον οι μαθητές δεν έχουν δει κασετόφωνα (και μάλιστα με δύο deck)!
;D ;D ;D ;D Σε λίγο θα τους δίνεις και κασέτα με στυλό bic!

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5385
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #21 στις: 15 Μάι 2020, 11:53:59 πμ »
Εεε ήταν το 2005, υπήρχαν ακόμα κασετόφωνα!  :D
(άστα ήδη ο Φώτης που έφτιαξε τον Επόπτη με φώναζε δεινόσαυρο, τι έχουμε να ακούσουμε ακόμα...!)

Έβαλα να δω το προσχέδιο της δραστηριότητας, παίζει ακόμα κι ας ήταν σε HTML4... αν και φαίνεται εντελώς εκτός εποχής πια!

lp

  • ΠΛΗΝΕΤ
  • *
  • Μηνύματα: 188
    • 2o Γενικό Λύκειο Ναυπλίου
Απ: Arduino σε παιδια Δημοτικου
« Απάντηση #22 στις: 19 Μάι 2020, 11:18:50 μμ »
Έχουμε δουλέψει σε κέντρο ρομποτικής  σε μικρά σεμινάρια 2-3 ωρών. Η πλατφορμα προγραμματισμού που δουλέψαμε είναι το mblock. Σκρατς δηλαδή για arduino. Τα αποτελέσματα ήταν πολύ ενθαρρυντικά. Εύκολη χρήση, άμεση μεταφορά σε c+
Λέων Προκόπης
2ο ΓΕΛ Ναυπλίου