جدول المحتويات:

شاحن هاتف أوتوماتيكي: 6 خطوات (بالصور)
شاحن هاتف أوتوماتيكي: 6 خطوات (بالصور)

فيديو: شاحن هاتف أوتوماتيكي: 6 خطوات (بالصور)

فيديو: شاحن هاتف أوتوماتيكي: 6 خطوات (بالصور)
فيديو: شحن البطارية من صفر ل 100% في لحظة 🔋 #shortswithkhalook 2024, يوليو
Anonim
شاحن هاتف أوتوماتيكي
شاحن هاتف أوتوماتيكي

"تم إنشاء هذا الدليل للوفاء بمتطلبات مشروع Makecourse في جامعة جنوب فلوريدا (www.makecourse.com)"

كانت الفكرة من وراء هذا المشروع هي إنشاء جهاز يمكنه شحن الهاتف ، ثم فصله عندما يصل الهاتف إلى 100٪. هذا من شأنه أن يوقف مشاكل الشحن الزائد.

الخطوة 1: مكونات بلاستيكية

مكونات بلاستيكية
مكونات بلاستيكية
مكونات بلاستيكية
مكونات بلاستيكية
مكونات بلاستيكية
مكونات بلاستيكية
مكونات بلاستيكية
مكونات بلاستيكية

كانت هناك بعض المكونات التي تم استخدامها والتي تم طباعتها ثلاثية الأبعاد. تتألف هذه المكونات من قاعدة ، وحامل للشاحن ، ومجموعة تروس رف وترس (ترس عادي وقطعة خطية تغير الدوران إلى حركة خطية) ، وقاعدة لكل شيء للعمل عليها. سيتم شرح هذه المكونات في الفقرات التالية. من أجل الظهور

حامل الشاحن

والغرض من ذلك هو حمل شاحن الهاتف ، أو على الأقل منحه قاعدة أفضل ومستوى ليكون عليه.

يتمركز

تحتوي القاعدة على حلقات لحامل الهاتف بالإضافة إلى مسار لمجموعة التروس.

حامل الهاتف

من الواضح أنه يحمل الهاتف

ذراع الهاتف

يتحرك ويحمل الهاتف

رف وترس مجموعة العتاد

تستخدم لتحريك شاحن الهاتف ذهابًا وإيابًا

الخطوة 2: تفصيل المكونات غير المطبوعة ثلاثية الأبعاد

هذه هي المكونات التي تم شراؤها للمشروع أو المملوكة بالفعل. بالنسبة لبعض الأجزاء التي ربطتها بها / عناصر مماثلة على أمازون ، لكن لا تتردد في الحصول عليها في أي مكان.

مايكرو سيرفو: https://www.amazon.com/J-Deal-Micro-Helicopter-Air …

أجهزة قياسية 0-180:

وحدة تسلسلي بلوتوث HC-05:

شاحن الهاتف والهاتف

اردوينو

اللوح

صندوق أو صندوق للقاعدة

مستشعر اللمس:

الخطوة الثالثة: الإلكترونيات

إلكترونيات
إلكترونيات

قد تتطلب الدائرة الخاصة بهذا المشروع بعضًا ، ويرجع ذلك أساسًا إلى الوحدة النمطية HC-05. العديد من الوحدات من هذا النوع تتراوح من 3.3 فولت إلى 6 فولت تقريبًا ، وهو موجود في نطاق تشغيل Arduino. ولكن بالنسبة للاتصال التسلسلي ، يعمل دبوس Rx أحيانًا بشكل أفضل مع 3.3 فولت فقط. كما هو موضح في الرسم البياني أعلاه ، يتم توصيل الماكينتين بدبوس Vin في Arduino. يمكن توفير هذا الجهد الإضافي عن طريق أي شيء ، لقد استخدمت بطارية 9 فولت. تم توصيل مستشعر اللمس بجهد 5 فولت في Arduino. كان هذا لأن جميع المكونات واجهت مشكلة في الخروج من نفس الجهد. يتم توصيل مستشعر اللمس بالدبوس 2 بحيث يمكن استخدامه كمقاطعة دبوس. ثم يتم توصيل وحدة البلوتوث بدبابيس Rx و Tx للاتصال التسلسلي. بين دبوس Rx على الوحدة النمطية و Tx على Arduino يوجد مقاوم 2 كيلو أوم مع 1 كيلو أوم متصل بالأرض. هذا يساعد على تنظيم الجهد الداخل.

الخطوة 4: التجميع

المجسم
المجسم

التجميع بسيط للغاية.

  1. مع بعض الغراء الفائق ، قم بتركيب الماكينات الخاصة بك في مواضعها ، أحدها للترس من خلال الفتحة الموجودة على القاعدة والآخر بالقرب من مكان قاعدة الهاتف.
  2. قم بتوصيل مستشعر اللمس بحامل الهاتف ، حتى يتمكن من معرفة وقت وجود الهاتف.
  3. ثم قم بتوصيل الترس والذراع بوحدات الماكينة الخاصة بكل منهما
  4. تأكد من أن الأسلاك لا تتداخل مع المكونات الأخرى أثناء ملء إلكترونياتك

الخطوة 5: الكود

هناك ثلاث مجموعات من التعليمات البرمجية التي سيتم تقديمها ، رمز واحد لـ Arduino ، تم إنشاؤه في Arduino IDE وكودان تم إنشاؤهما في Android Studio. تطبيقات Android هي نفسها باستثناء تطبيق واحد هو التطبيق الكامل الذي يتتبع عمر البطارية والآخر لا يفعل ذلك. والثاني لأغراض الاختبار.

كود اردوينو

النقطة الرئيسية لهذا الرمز هي تشغيل مستشعر اللمس والمحركات ، حيث يتلقى أمرًا من الهاتف ويعمل بناءً عليه.

# تضمين // يستدعي مكتبة المؤازرة حتى نتمكن من التحكم في المؤازرتين المؤازرتين servo servo2؛ // ينشئ كائنين مؤازرين لكل محرك مؤازر int a = 0 ؛ // متغير تتبع للاختبار int q = 0 ؛ // متغير يسمح بوجود تأخير قبل أن تبدأ عملية pluggin char c ؛ // متغير يحتوي على الرسالة التسلسلية من إعداد فراغ الهاتف () {attachInterrupt (digitalPinToInterrupt (2) ، AH ، FALLING) ؛ // يعلق مقاطعة ساقطة لمعرفة متى يرى مستشعر اللمس بالضبط عندما يكون الهاتف خارجًا على servo1.attach (10) ؛ servo2.attach (9) ؛ // يقوم بتهيئة المؤازرتين Serial.begin (9600) ؛ // يبدأ الاتصال التسلسلي بمعدل مشابه لمعدل servo2.write الخاص بوحدة البلوتوث (20) ؛ // يعين تلقائيًا الماكينات على وضع البداية servo1.write (180) ؛ }

حلقة فارغة() {

if (Serial.available ()) {// يتحقق هذا مما إذا كان هناك أي شيء قادم من الهاتف عبر المسامير التسلسلية Tx و Rx c = Serial.read () ؛ // يقرأ ما يأتي من if (c == 't') {// إذا قرأ الجهاز التسلسلي في ذلك الوقت ، فهذا يعني أن الهاتف مشحون بالكامل ، تبدأ عملية الفصل servo2.write (120) ؛ // unplugs the charger delay (5000) ؛ // ينتظر للتأكد هناك وقت لإزالة servo1.write (110) ؛ // يحرك الهاتف إلى وضع رأسي للإشارة //Serial.println("here ") ؛ attachInterrupt (digitalPinToInterrupt (2)، AH، FALLING)؛ // reattaches the interrupt}} if (q == 1) {// إذا كان شرط المكون الإضافي صحيحًا فابدأ بإرفاق تأخير الشاحن (10000) ؛ servo2.write (0) ؛ // ينقل المؤازرة إلى الموضع q = 0 ؛ // يعيد تعيين الحالة}}

ه باطل () {

//Serial.println("in ") ؛ servo1.write (180) ؛ // يسقط منصة الهاتف في موضع الشحن q = 1 ؛ // يبدأ الشرط لمواصلة العملية // a = 1 ؛ detachInterrupt (digitalPinToInterrupt (2)) ؛ // يفصل المقاطعة ، بحيث لن تكون هناك أية مشكلات مع بدء المقاطعة عندما لا ينبغي ذلك}

الروبوت التطبيق

سأعرض هنا التطبيق المناسب فقط ولكن سيتم أيضًا تقديم ملف كود الاختبار ، وسيكون الاختلاف الوحيد هو إزالة فئة التشغيل و 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 ؛ BluetoothDevice mmDevice ؛ OutputStream mmOutputStream ؛ توقف منطقي متطاير خاص OutputStream outputStream ؛ السلسلة النهائية الخاصة DEVICE_NAME = "HC-05" ؛ UUID النهائي الخاص PORT_UUID = UUID.fromString ("00001101-0000-1000-8000-00805f9b34fb") ؛ جهاز BluetoothAdapter الخاص ؛ مقبس BluetoothSocket خاص ؛ Override protected void onCreate (Bundle saveInstanceState) {// هي مجموعة من الإرشادات التي يتم تشغيلها عند إنشاء التطبيق super.onCreate (saveInstanceState) ؛ // displya create setContentView (R.layout.activity_main) ؛ runnable = new Runnable () {Override public void run () {// يعمل بشكل متكرر int level = (int) getBattery () ؛ // يحصل على مستوى البطارية الحالي إذا (المستوى == 100) {// إذا كان مستوى البطارية تصل إلى 100٪ حاول {getBT () ؛ // يتصل بوحدة البلوتوث openBT () ؛ // يفتحها sendData () ؛ // يرسل البيانات اللازمة closeBT () ؛ // يغلق الكائن} catch (IOException ex) { }} handler.postDelayed (runnable، 5000)؛ // a delay}}؛ معالج = معالج جديد () ؛ handler.postDelayed (runnable، 0) ؛ }

public float getBattery () {

Intent batteryIntent = registerReceiver (فارغ ، IntentFilter جديد (Intent. ACTION_BATTERY_CHANGED)) ؛ // ينشئ الإجراء الذي يتصل بمستوى البطارية int = batteryIntent.getIntExtra (BatteryManager. EXTRA_LEVEL ، -1) ؛ // يحصل على مستوى أفضل من مقياس int = batteryIntent.getIntExtra (BatteryManager. EXTRA_SCALE، -1)؛ // يحصل على مقياس البطارية إذا (المستوى == -1 || المقياس == -1) {// في حالة الخطأ الذي يُرجع 50.0f ؛ } float batt = (المستوى / (float) scale) * 100.0f ؛ // يحصل على حزمة إرجاع المقياس المناسبة ؛ // إرجاع المستوى}

يحصل getBT () باطل {// على اتصالات البلوتوث الممكنة

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter () ؛ // يحصل على المحول إذا (! mBluetoothAdapter.isEnabled ()) {// تأكد من أن الهاتف له أسنان زرقاء على Intent enableBluetooth = نية جديدة (BluetoothAdapter. ACTION_REQUEST_ENABLE) ؛ // يطلب ذلك تم تشغيله إذا لم يكن startActivityForResult (enableBluetooth ، 0) ؛ } Set pairedDevices = mBluetoothAdapter.getBondedDevices () ؛ // يحصل على قائمة البلوتوث المترابط إذا تأكد (pairedDevices.size ()> 0) {// من وجود بعض الأجهزة لـ (BluetoothDevice device: pairedDevices) {// حلقات من خلال الأجهزة إذا كان (device.getName (). يساوي ("HC-05")) {// يتحقق مما إذا كان الجهاز المناسب mmDevice = الجهاز ؛ // يحفظه ، }}}}

يطرح openBT () الباطل IOException {

UUID uuid = UUID.fromString ("00001101-0000-1000-8000-00805f9b34fb") ؛ // قياسي // معرف SerialPortService mmSocket = mmDevice.createRfcommSocketToServiceRecord (uuid) ؛ // يتصل بالجهاز بالمعرف الصحيح mmSocket.connect () ؛ // يتصل mmOutputStream = mmSocket.getOutputStream () ؛ // يبدأ القدرة على الإرسال البيانات إلى وحدة اردوينو}

يؤدي إرسال voidData () إلى IOException {// class الذي يرسل t إلى arduino

mmOutputStream.write ('t') ، }

يطرح void closeBT () IOException {// يغلق جميع الاتصالات بـ arduino

stopWorker = صحيح ؛ mmOutputStream.close () ، mmSocket.close () ، }}

الخطوة 6: الملفات

شكرا لقراءتك ، أرفق الملفات التي تم استخدامها في هذا المشروع

موصى به: