Πίνακας περιεχομένων:

Αυτόματος φορτιστής τηλεφώνου: 6 βήματα (με εικόνες)
Αυτόματος φορτιστής τηλεφώνου: 6 βήματα (με εικόνες)

Βίντεο: Αυτόματος φορτιστής τηλεφώνου: 6 βήματα (με εικόνες)

Βίντεο: Αυτόματος φορτιστής τηλεφώνου: 6 βήματα (με εικόνες)
Βίντεο: Πως να ΦΟΡΤΙΖΕΙΣ ΣΩΣΤΑ το κινητό σου; | How to CHARGE my smartphone 2024, Νοέμβριος
Anonim
Αυτόματος φορτιστής τηλεφώνου
Αυτόματος φορτιστής τηλεφώνου

"Αυτό το διδακτικό δημιουργήθηκε για να εκπληρώσει την απαίτηση έργου του Makecourse στο Πανεπιστήμιο της Νότιας Φλόριντα (www.makecourse.com)"

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

Βήμα 1: Πλαστικά εξαρτήματα

Πλαστικά εξαρτήματα
Πλαστικά εξαρτήματα
Πλαστικά εξαρτήματα
Πλαστικά εξαρτήματα
Πλαστικά εξαρτήματα
Πλαστικά εξαρτήματα
Πλαστικά εξαρτήματα
Πλαστικά εξαρτήματα

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

Κάτοχος φορτιστή

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

Βάση

Η βάση διαθέτει δακτυλίους για τη βάση του τηλεφώνου καθώς και πίστα για το σετ γραναζιών.

Κάτοχος τηλεφώνου

Κρατάει το τηλέφωνο, προφανώς

Τηλεφωνικός βραχίονας

Μετακινεί και κρατάει το τηλέφωνο

Σετ εργαλείων Rack and Pinion

Χρησιμοποιείται για τη μετακίνηση του φορτιστή του τηλεφώνου μπρος -πίσω

Βήμα 2: Διαλύστε εξαρτήματα που δεν εκτυπώνονται σε 3D

Αυτά είναι τα στοιχεία που είτε αγοράστηκαν για το έργο είτε ανήκαν ήδη. Για μερικά από τα μέρη που τα συνδέω/παρόμοια αντικείμενα στο amazon, αλλά μη διστάσετε να τα αποκτήσετε οπουδήποτε.

Micro Servo:

Standard 0-180 Servo:

Σειριακή μονάδα Bluetooth HC-05:

Φορτιστής τηλεφώνου και τηλεφώνου

Arduino

Breadboard

Κουτί ή κάδος για βάση

Αισθητήρας αφής:

Βήμα 3: Ηλεκτρονικά

ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ
ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ

Το κύκλωμα για αυτό το έργο ενδέχεται να απαιτεί κάποια, κυρίως λόγω της μονάδας HC-05. Πολλές από τις μονάδες αυτού του τύπου είναι περίπου 3,3V έως 6V, το οποίο είναι στο εύρος λειτουργίας του Arduino. Όμως, για σειριακή επικοινωνία, η ακίδα Rx μερικές φορές λειτουργεί καλύτερα μόνο με 3,3V. Όπως φαίνεται στο παραπάνω διάγραμμα, τα δύο σερβο είναι συνδεδεμένα με τον πείρο Vin στο Arduino. Αυτή η επιπλέον τάση μπορεί να τροφοδοτηθεί από οτιδήποτε, χρησιμοποίησα μια μπαταρία 9 βολτ. Ο αισθητήρας αφής ήταν συνδεδεμένος στο 5V στο Arduino. Αυτό συνέβη επειδή όλα τα εξαρτήματα αντιμετώπισαν πρόβλημα με την ίδια τάση. Ο αισθητήρας αφής είναι προσαρτημένος στον πείρο 2, ώστε να μπορεί να χρησιμοποιηθεί ως διακοπή πείρου. Στη συνέχεια, η μονάδα bluetooth συνδέεται με τις ακίδες Rx και Tx για σειριακή επικοινωνία. Μεταξύ του πείρου Rx στη μονάδα και του Tx στο Arduino υπάρχει μια αντίσταση 2 κιλών ohm με 1 κιλό ωμ που συνδέεται με τη γείωση. Αυτό βοηθά στη ρύθμιση της εισερχόμενης τάσης.

Βήμα 4: Συναρμολόγηση

Συνέλευση
Συνέλευση

Η συναρμολόγηση είναι αρκετά απλή.

  1. με λίγη σούπερ κόλλα τοποθετήστε τα servos σας στις θέσεις τους, ένα για το γρανάζι με το κόψιμο στη βάση και ένα κοντά στο σημείο που βρίσκεται η βάση του τηλεφώνου.
  2. Συνδέστε τον αισθητήρα αφής στη θήκη του τηλεφώνου, ώστε να μπορεί να γνωρίζει πότε το τηλέφωνο είναι εκεί.
  3. Στη συνέχεια, συνδέστε το γρανάζι και τον βραχίονα στα αντίστοιχα servos τους
  4. Βεβαιωθείτε ότι τα καλώδια δεν επηρεάζουν άλλα εξαρτήματα καθώς γεμίζετε τα ηλεκτρονικά σας

Βήμα 5: Κωδικός

Υπάρχουν τρία σύνολα κώδικα που θα παρουσιαστούν, ένας κωδικός για το Arduino, που δημιουργήθηκε στο Arduino IDE και δύο κωδικοί που δημιουργήθηκαν στο Android Studio. Οι εφαρμογές Android είναι οι ίδιες, εκτός εάν μία είναι η πλήρης εφαρμογή που παρακολουθεί τη διάρκεια ζωής της μπαταρίας και μία όχι. Το δεύτερο είναι για σκοπούς δοκιμών.

Κωδικός Arduino

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

#include // καλεί τη σερβο βιβλιοθήκη για να μπορούμε να ελέγχουμε τα δύο servosServo servo1. Servo servo2; // δημιουργεί δύο σερβο αντικείμενα για κάθε σερβοκινητήρα int a = 0; // μεταβλητή παρακολούθησης για έλεγχο int q = 0; // μια μεταβλητή που επιτρέπει την καθυστέρηση πριν ξεκινήσει η διαδικασία pluggin char c; // μεταβλητή που περιέχει το σειριακό μήνυμα από το τηλέφωνο void setup () {attachInterrupt (digitalPinToInterrupt (2), AH, FALLING); // επισυνάπτει μια διακοπή πτώσης για να ξέρει ακριβώς πότε βλέπει ο αισθητήρας αφής όταν το τηλέφωνο είναι εκτός λειτουργίας στο servo1.attach (10) · servo2.attach (9); // προετοιμάζει τα δύο servos Serial.begin (9600) μια αρχική θέση servo1.write (180). }

void loop () {

εάν (Serial.available ()) {// αυτό ελέγχει εάν υπάρχει κάτι που έρχεται από το τηλέφωνο μέσω των σειριακών ακίδων Tx και Rx c = Serial.read (); // διαβάζει τι έρχεται από εάν (c == 't') {// εάν η σειριακή συσκευή διαβάζει τότε αυτό σημαίνει ότι το τηλέφωνο είναι πλήρως φορτισμένο, ξεκινά η διαδικασία αποσύνδεσης servo2.write (120); // αποσυνδέει την καθυστέρηση φορτιστή (5000), // περιμένει για να βεβαιωθείτε υπάρχει χρόνος για την αφαίρεση servo1.write (110); // μετακινεί το τηλέφωνο σε όρθια θέση για να δώσει σήμα //Serial.println("here "). attachInterrupt (digitalPinToInterrupt (2), AH, FALLING); // επανασυνδέει τη διακοπή}} if (q == 1) {// εάν η συνθήκη για το pluggin in είναι αρχική τότε ξεκινήστε με την επισύναψη της καθυστέρησης του φορτιστή (10000). servo2.write (0); // μετακινεί το σερβο στη θέση q = 0; // επαναφέρει την κατάσταση}}

void AH () {

//Serial.println("in "); servo1.write (180); // ρίχνει την πλατφόρμα του τηλεφώνου στη θέση φόρτισης q = 1; // ξεκινά τη συνθήκη για να συνεχίσει τη διαδικασία // a = 1; detachInterrupt (digitalPinToInterrupt (2)); // αποσυνδέει τη διακοπή, έτσι ώστε να μην υπάρχουν προβλήματα με τη διακοπή ξεκινώντας όταν δεν πρέπει}

Εφαρμογή Android

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

πακέτο com.example.daniel.make; εισαγωγή android.bluetooth. BluetoothAdapter? εισαγωγή android.bluetooth. BluetoothDevice; εισαγωγή android.bluetooth. BluetoothSocket? εισαγωγή android.os. Handler; εισαγωγή android.support.v7.app. AppCompatActivity; εισαγωγή android.os. Bundle; εισαγωγή android.content. Intent; εισαγωγή android.content. IntentFilter; εισαγωγή android.os. BatteryManager; εισαγωγή java.io. IOException; εισαγωγή java.io. OutputStream; εισαγωγή java.util. Set; εισαγωγή java.util. UUID;

δημόσια τάξη MainActivity επεκτείνει το AppCompatActivity {

// δημιουργία απαραίτητων αντικειμένων Χειριστής χειριστή; // βοηθά με τον βρόχο Runnable runnable; // τρέχει συνεχώς BluetoothAdapter mBluetoothAdapter; BluetoothSocket mmSocket? BluetoothΣυσκευή mmDevice; OutputStream mmOutputStream; πτητικό boolean stopWorker; ιδιωτικό OutputStream outputStream? ιδιωτικό τελικό String DEVICE_NAME = "HC-05"; ιδιωτικό τελικό UUID PORT_UUID = UUID.fromString ("00001101-0000-1000-8000-00805f9b34fb"); ιδιωτική συσκευή BluetoothAdapter. ιδιωτική πρίζα Bluetooth Το @Override προστατευμένο κενό onCreate (Πακέτο αποθηκευμένοInstanceState) {// είναι ένα σύνολο οδηγιών που εκτελούνται όταν δημιουργείται η εφαρμογή super.onCreate (αποθηκευμένοInstanceState); // displya creation setContentView (R.layout.activity_main); runnable = νέο Runnable () {@Override public void run () {// τρέχει επανειλημμένα int level = (int) getBattery (); // λαμβάνει το τρέχον επίπεδο μπαταρίας εάν (επίπεδο == 100) {// εάν η στάθμη της μπαταρίας φτάνει το 100% try {getBT (); // συνδέεται με τη μονάδα bluetooth openBT (); // το ανοίγει sendData (); // στέλνει τα απαραίτητα δεδομένα closeBT (); // κλείνει το αντικείμενο} catch (IOException ex) { }} handler.postDelayed (τρέξιμο, 5000); // μια καθυστέρηση}}; χειριστής = νέος χειριστής (); handler.postDelayed (τρέξιμο, 0); }

public float getBattery () {

Intent batteryIntent = registerReceiver (null, new IntentFilter (Intent. ACTION_BATTERY_CHANGED)); // δημιουργεί τη δράση που συνδέεται με την μπαταρία int level = batteryIntent.getIntExtra (BatteryManager. EXTRA_LEVEL, -1); // παίρνει το καλύτερο επίπεδο int κλίμακα = batteryIntent.getIntExtra (BatteryManager. EXTRA_SCALE, -1); // παίρνει την κλίμακα της μπαταρίας εάν (επίπεδο == -1 || κλίμακα == -1) {// σε περίπτωση λανθασμένου βήματος επιστροφή 50.0f, } float batt = (επίπεδο/(float) κλίμακα)*100.0f; // παίρνει τη σωστή κλίμακα επιστροφής κλίμακας; // επιστρέφει το επίπεδο}

void getBT () {// λαμβάνει τις πιθανές συνδέσεις bluetooth

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter (); // λαμβάνει τον προσαρμογέα εάν (! mBluetoothAdapter.isEnabled ()) {// βεβαιωθεί ότι το τηλέφωνο έχει μπλε δόντι στο Intent enableBluetooth = new Intent (BluetoothAdapter. ACTION_REQUEST_ENABLE); // αιτήματα ενεργοποιημένο αν όχι startActivityForResult (enableBluetooth, 0)? } Ορισμός pairedDevices = mBluetoothAdapter.getBondedDevices (); // λαμβάνει τη λίστα συνδεδεμένων bluetooth εάν (pairedDevices.size ()> 0) {// βεβαιώνεται ότι υπάρχουν ορισμένες συσκευές για [BluetoothDevice device: pairedDevices] {// βρόχους μέσω συσκευές if (device.getName (). equals ("HC-05")) {// ελέγχει αν είναι η κατάλληλη mmDevice = συσκευή; // το αποθηκεύει στο σπάσιμο. }}}}

void openBT () ρίχνει IOException {

UUID uuid = UUID.fromString ("00001101-0000-1000-8000-00805f9b34fb"); // Standard // SerialPortService ID mmSocket = mmDevice.createRfcommSocketToServiceRecord (uuid); // συνδέεται στη συσκευή με το κατάλληλο αναγνωριστικό mmSocket.connect (); // συνδέει mmOutputStream = mmSocket.getOutputStream (); // ξεκινά τη δυνατότητα αποστολής δεδομένα στη μονάδα arduino}

void sendData () ρίχνει IOException {// class που στέλνει το t στο arduino

mmOutputStream.write ('t'); }

void closeBT () ρίχνει IOException {// κλείνει όλες τις συνδέσεις με το arduino

stopWorker = true; mmOutputStream.close (); mmSocket.close (); }}

Βήμα 6: Αρχεία

Σας ευχαριστούμε που διαβάσατε, επισυνάπτονται τα αρχεία που χρησιμοποιήθηκαν σε αυτό το έργο

Συνιστάται: