Isi kandungan:

Pengecas Telefon Automatik: 6 Langkah (dengan Gambar)
Pengecas Telefon Automatik: 6 Langkah (dengan Gambar)

Video: Pengecas Telefon Automatik: 6 Langkah (dengan Gambar)

Video: Pengecas Telefon Automatik: 6 Langkah (dengan Gambar)
Video: Cara Ngecas HP Biar Cepat Penuh 2024, November
Anonim
Pengecas Telefon Automatik
Pengecas Telefon Automatik

"Instruksional ini dibuat untuk memenuhi keperluan projek Makecourse di University of South Florida (www.makecourse.com)"

Idea di sebalik projek ini adalah untuk membuat peranti yang boleh mengecas telefon, dan kemudian mencabutnya apabila telefon mencapai 100%. Ini akan menghentikan masalah pengecasan berlebihan.

Langkah 1: Komponen Plastik

Komponen Plastik
Komponen Plastik
Komponen Plastik
Komponen Plastik
Komponen Plastik
Komponen Plastik
Komponen Plastik
Komponen Plastik

Terdapat beberapa komponen yang digunakan yang dicetak 3D. Komponen-komponen ini terdiri dari alas, pemegang untuk pengecas, rak dan set roda gigi pinion (roda gigi normal dan sekeping linier yang mengubah putaran menjadi pergerakan linier), dan pangkalan untuk semuanya beroperasi. Komponen-komponen ini akan dijelaskan dalam perenggan berikut. Dalam susunan penampilan

Pemegang Pengecas

Tujuannya adalah untuk memegang pengecas telefon, atau sekurang-kurangnya memberikan asas yang lebih baik dan rata.

Pangkalan

Pangkalannya mempunyai cincin untuk pemegang telefon serta trek untuk set gear.

Pemegang Telefon

Memegang telefon, jelas

Lengan Telefon

Bergerak dan memegang telefon

Set Rak dan Pinion

Digunakan untuk menggerakkan pengecas telefon ke belakang

Langkah 2: Pecahan Komponen Bercetak Bukan 3D

Ini adalah komponen yang dibeli untuk projek itu atau sudah dimiliki. Untuk beberapa bahagian yang saya pautkan kepada mereka / item serupa di amazon, tetapi jangan ragu untuk mendapatkannya di mana sahaja.

Servo Mikro:

Servo Standard 0-180:

Modul Bersiri Bluetooth HC-05:

Pengecas Telefon dan Telefon

Arduino

Papan roti

Kotak atau tong untuk asas

Sensor Sentuh:

Langkah 3: Elektronik

Elektronik
Elektronik

Litar untuk projek ini mungkin memerlukan beberapa, terutamanya kerana modul HC-05. Sebilangan besar modul jenis ini mempunyai kadar sekitar 3.3V hingga 6V, yang terdapat dalam julat operasi Arduino. Tetapi, untuk komunikasi bersiri pin Rx kadang-kadang berfungsi lebih baik dengan hanya 3.3V. Seperti yang ditunjukkan dalam rajah di atas, dua servo disambungkan ke pin Vin di Arduino. Voltan tambahan ini dapat dibekalkan oleh apa sahaja, saya menggunakan bateri 9 volt. Sensor sentuh dipasang ke 5V di Arduino. Ini kerana semua komponen mengalami masalah dengan voltan yang sama. Sensor sentuh dipasang pada pin 2 sehingga dapat digunakan sebagai pin interrupt. Kemudian modul bluetooth disambungkan ke pin Rx dan Tx untuk komunikasi bersiri. Di antara pin Rx pada modul dan Tx pada Arduino adalah perintang 2 kilo ohm dengan 1 kilo ohm menyambung ke tanah. Ini membantu mengatur voltan yang masuk.

Langkah 4: Perhimpunan

perhimpunan
perhimpunan

Pemasangannya agak sederhana.

  1. dengan beberapa gam super pasangkan servo anda pada kedudukan mereka, satu untuk gear dengan potongan di pangkalan dan yang lain di dekat pangkalan telefon.
  2. Pasang sensor sentuh ke pemegang telefon, sehingga dapat mengetahui kapan telefon itu ada.
  3. Kemudian pasangkan gear dan lengan ke servo masing-masing
  4. Pastikan wayar tidak mengganggu komponen lain semasa anda mengisi elektronik anda

Langkah 5: Kod

Ada tiga set kod yang akan disajikan, satu kod untuk Arduino, yang dibuat di Arduino IDE dan dua kod yang dibuat di Android Studio. Aplikasi Android adalah sama kecuali satu adalah aplikasi penuh yang mengesan hayat bateri dan satu tidak. Yang kedua adalah untuk tujuan ujian.

Kod Arduino

Titik utama kod ini adalah untuk mengendalikan sensor sentuh dan motor, ia menerima perintah dari telefon dan bertindak di atasnya.

#include // memanggil servo library supaya kita dapat mengawal dua servoServo servo1; Servo servo2; // membuat dua objek servo untuk setiap motor servo int a = 0; // pemboleh ubah penjejakan untuk menguji int q = 0; // pemboleh ubah yang memungkinkan berlakunya kelewatan sebelum proses pemalam bermula char; // pemboleh ubah yang mengandungi mesej bersiri dari penyediaan void telefon () {attachInterrupt (digitalPinToInterrupt (2), AH, FALLING); // melampirkan gangguan jatuh untuk mengetahui dengan tepat kapan sensor sentuh melihat ketika telefon sedang keluar pada servo1.attach (10); servo2.attach (9); // menginisialisasi dua servo Serial.begin (9600); // memulakan komunikasi bersiri pada kadar yang serupa dengan servo2.write modul bluetooth (20); // auto menetapkan servos menjadi servo1.write kedudukan permulaan (180); }

gelung kosong () {

jika (Serial.available ()) {// ini memeriksa apakah ada sesuatu yang masuk dari telefon melalui pin siri Tx dan Rx c = Serial.read (); // membaca apa yang masuk dari jika (c == 't') {// jika peranti bersiri berbunyi pada masa itu bermakna telefon sudah terisi penuh, proses mencabut palam bermula servo2.write (120); // mencabut penangguhan pengecas (5000); // menunggu untuk memastikan ada masa untuk penghapusan servo1.write (110); // menggerakkan telefon ke kedudukan tegak untuk memberi isyarat //Serial.println("here "); attachInterrupt (digitalPinToInterrupt (2), AH, FALLING); // pasang semula gangguan}} jika (q == 1) {// jika syarat untuk plugin dalam keadaan sudah tentu, mulailah dengan memasang kelewatan pengecas (10000); servo2.write (0); // memindahkan servo ke kedudukan q = 0; // menetapkan semula keadaan}}

batal AH () {

//Serial.println("in "); servo1.write (180); // menjatuhkan platform telefon ke kedudukan pengecasan q = 1; // memulakan keadaan untuk meneruskan proses // a = 1; detachInterrupt (digitalPinToInterrupt (2)); // melepaskan interupsi, sehingga tidak akan ada masalah dengan gangguan bermula apabila tidak seharusnya}

Aplikasi Android

Di sini saya hanya akan memaparkan aplikasi yang betul tetapi fail kod ujian juga akan diberikan, satu-satunya perbezaan adalah penghapusan kelas yang dapat dijalankan dan getBattery. Kod siri yang disebutkan adalah yang standard untuk telefon yang menyambung ke peranti seperti modul.

pakej com.example.daniel.make; import android.bluetooth. BluetoothAdapter; import android.bluetooth. BluetoothDevice; import android.bluetooth. BluetoothSocket; import android.os. Handler; import android.support.v7.app. AppCompatActivity; import android.os. Bundle; import android.content. Intent; import android.content. IntentFilter; import android.os. BatteryManager; import java.io. IOException; import java.io. OutputStream; import java.util. Set; import java.util. UUID;

MainActivity kelas awam memperluas AppCompatActivity {

// membuat objek yang diperlukan Pengendali pengendali; // membantu dengan gelung Runnable runnable; // berjalan berterusan BluetoothAdapter mBluetoothAdapter; BluetoothSocket mmSocket; BluetoothDevice mmDevice; OutputStream mmOutputStream; StopWorker boolean yang tidak menentu; OutputStream outputStream peribadi; rentetan akhir persendirian DEVICE_NAME = "HC-05"; UUID akhir peribadi PORT_UUID = UUID.fromString ("00001101-0000-1000-8000-00805f9b34fb"); peranti BluetoothAdapter peribadi; soket BluetoothSocket peribadi; @Override dilindungi void onCreate (Bundle saveInstanceState) {// adalah sekumpulan arahan yang dijalankan semasa aplikasi dibuat super.onCreate (saveInstanceState); // displya create setContentView (R.layout.activity_main); runnable = new Runnable () {@ Override public void run () {// berjalan berulang kali int level = (int) getBattery (); // mendapat tahap bateri semasa jika (level == 100) {// jika tahap bateri mencapai 100% cuba {getBT (); // menyambung ke modul bluetooth openBT (); // membukanya sendData (); // menghantar data yang diperlukan closeBT (); // menutup objek} tangkapan (IOException ex) { }} handler.postDelayed (runnable, 5000); // kelewatan}}; pengendali = Pengendali baru (); handler.postDelayed (runnable, 0); }

public float getBattery () {

Intent batteryIntent = registerReceiver (null, IntentFilter baru (Intent. ACTION_BATTERY_CHANGED)); // membuat tindakan yang menghubungkan ke tahap int bateri = batteryIntent.getIntExtra (BatteryManager. EXTRA_LEVEL, -1); // mendapat skala int tahap yang lebih baik = batteryIntent.getIntExtra (BatteryManager. EXTRA_SCALE, -1); // mendapat skala bateri jika (level == -1 || skala == -1) {// sekiranya berlaku salah langkah 50.0f; } skala float batt = (level / (float)) * 100.0f; // mendapat skala return batt yang betul; // mengembalikan level}

batal getBT () {// mendapat kemungkinan sambungan Bluetooth

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter (); // mendapat penyesuai jika (! mBluetoothAdapter.isEnabled ()) {// memastikan telefon mempunyai gigi biru pada Intent enabledBluetooth = new Intent (BluetoothAdapter. ACTION_REQUEST_ENABLE); // memintanya dihidupkan jika tidak startActivityForResult (enabledBluetooth, 0); } Tetapkan pairedDevices = mBluetoothAdapter.getBondedDevices (); // mendapat senarai bluetooth terikat jika (pairedDevices.size ()> 0) {// memastikan ada beberapa peranti untuk (BluetoothDevice device: pairedDevices) {// gelung melalui peranti jika (device.getName (). sama dengan ("HC-05")) {// memeriksa sama ada yang sesuai mmDevice = device; // menyimpannya rosak; }}}}

batal openBT () membuang IOException {

UUID uuid = UUID.fromString ("00001101-0000-1000-8000-00805f9b34fb"); // Standard // SerialPortService ID mmSocket = mmDevice.createRfcommSocketToServiceRecord (uuid); // menyambung ke peranti dengan id yang sesuai mmSocket.connect (); // menghubungkan mmOutputStream = mmSocket.getOutputStream (); // memulakan kemampuan untuk menghantar data ke modul arduino}

void sendData () melemparkan kelas IOException {// yang menghantar t ke arduino

mmOutputStream.write ('t'); }

void closeBT () membuang IOException {// menutup semua sambungan ke arduino

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

Langkah 6: Fail

Terima kasih kerana membaca, dilampirkan fail yang digunakan dalam projek ini

Disyorkan: