Inhaltsverzeichnis:

Ein automatisches Telefonladegerät - Gunook
Ein automatisches Telefonladegerät - Gunook

Video: Ein automatisches Telefonladegerät - Gunook

Video: Ein automatisches Telefonladegerät - Gunook
Video: Damit schädigst du täglich deinen Akku 2024, Juli
Anonim
Ein automatisches Telefonladegerät
Ein automatisches Telefonladegerät

"Dieses instructable wurde in Erfüllung der Projektanforderung des Makecourse an der University of South Florida (www.makecourse.com) erstellt."

Die Idee hinter diesem Projekt bestand darin, ein Gerät zu entwickeln, das ein Telefon aufladen und dann ausstecken kann, wenn das Telefon 100 % erreicht hat. Dies würde Probleme mit Überladung stoppen.

Schritt 1: Kunststoffkomponenten

Kunststoffkomponenten
Kunststoffkomponenten
Kunststoffkomponenten
Kunststoffkomponenten
Kunststoffkomponenten
Kunststoffkomponenten
Kunststoffkomponenten
Kunststoffkomponenten

Es wurden einige Komponenten verwendet, die 3D-gedruckt wurden. Diese Komponenten bestanden aus einer Basis, einem Halter für das Ladegerät, einem Zahnstangen- und Ritzelsatz (ein normales Zahnrad und ein lineares Teil, das die Drehung in eine lineare Bewegung umwandelt) und eine Basis für alles, was betrieben werden kann. Diese Komponenten werden in den folgenden Abschnitten erläutert. In der Reihenfolge des Erscheinens

Ladegeräthalter

Der Zweck besteht darin, das Telefonladegerät zu halten oder ihm zumindest eine bessere und ebene Basis zu geben.

Base

Die Basis hat Ringe für die Telefonhalterung sowie eine Schiene für das Zahnrad.

Telefonhalter

Hält natürlich das Telefon

Telefonarm

Bewegt und hält das Telefon

Zahnstangen- und Ritzelsatz

Wird verwendet, um das Telefonladegerät hin und her zu bewegen

Schritt 2: Aufschlüsselung von nicht 3D-gedruckten Komponenten

Dies sind die Komponenten, die entweder für das Projekt gekauft wurden oder bereits im Besitz waren. Für einige der Teile habe ich sie / ähnliche Artikel auf Amazon verlinkt, aber Sie können sie gerne überall erwerben.

Micro Servo:

Standard 0-180 Servo:

HC-05 Bluetooth Serielles Modul:

Telefon und Telefonladegerät

Arduino

Steckbrett

Box oder Mülleimer für Basis

Berührungssensor:

Schritt 3: Elektronik

Elektronik
Elektronik

Die Schaltung für dieses Projekt kann jedoch einiges erfordern, hauptsächlich aufgrund des HC-05-Moduls. Viele der Module dieses Typs sind für ungefähr 3,3 V bis 6 V ausgelegt, was im Betriebsbereich des Arduino liegt. Für die serielle Kommunikation funktioniert der Rx-Pin jedoch manchmal mit nur 3,3 V besser. Wie im obigen Diagramm zu sehen sind die beiden Servos an den Vin-Pin des Arduino angeschlossen. Diese zusätzliche Spannung kann von allem geliefert werden, ich habe eine 9-Volt-Batterie verwendet. Der Berührungssensor wurde an die 5V des Arduino angeschlossen. Dies lag daran, dass alle Komponenten Probleme hatten, mit der gleichen Spannung zu laufen. Der Berührungssensor ist an Pin 2 angeschlossen und kann somit als Pin-Interrupt verwendet werden. Dann wird das Bluetooth-Modul mit den Rx- und Tx-Pins für die serielle Kommunikation verbunden. Zwischen dem Rx-Pin am Modul und Tx am Arduino befindet sich ein 2-Kilo-Ohm-Widerstand mit einem 1-Kilo-Ohm-Anschluss an Masse. Dies hilft, die eingehende Spannung zu regulieren.

Schritt 4: Montage

Montage
Montage

Der Zusammenbau ist recht einfach.

  1. Montieren Sie Ihre Servos mit etwas Sekundenkleber in ihren Positionen, eine für das Zahnrad am Ausschnitt an der Basis und eine in der Nähe der Basis des Telefons.
  2. Bringen Sie den Berührungssensor an der Telefonhalterung an, damit er weiß, wann das Telefon da ist.
  3. Befestigen Sie dann das Zahnrad und den Arm an den jeweiligen Servos
  4. Stellen Sie sicher, dass die Drähte keine anderen Komponenten stören, wenn Sie Ihre Elektronik einfüllen

Schritt 5: Code

Es werden drei Codesätze präsentiert, ein Code für das Arduino, der in der Arduino IDE erstellt wurde und zwei Codes, die in Android Studio erstellt wurden. Die Android-Apps sind die gleichen, außer dass eine die vollständige App ist, die die Akkulaufzeit verfolgt und eine nicht. Der zweite ist zu Testzwecken.

Arduino-Code

Der Hauptzweck dieses Codes besteht darin, den Berührungssensor und die Motoren zu bedienen, er empfängt einen Befehl vom Telefon und reagiert darauf.

#include // ruft die Servobibliothek auf, damit wir die beiden Servos steuern könnenServo servo1; Servo servo2; // erzeugt zwei Servo-Objekte für jeden Servomotor int a = 0; // Tracking-Variable zum Testen int q = 0; // eine Variable, die es ermöglicht, eine Verzögerung zu geben, bevor der Pluggin-Prozess beginnt char c; // Variable, die die serielle Nachricht vom Telefon enthält void setup () { attachInterrupt (digitalPinToInterrupt(2), AH, FALLING); // fügt einen fallenden Interrupt hinzu, um genau zu wissen, wann der Berührungssensor erkennt, wenn das Telefon auf servo1.attach aus ist (10); servo2.attach(9); // initialisiert die beiden Servos Serial.begin (9600); // beginnt die serielle Kommunikation mit einer Geschwindigkeit ähnlich der des Bluetooth-Moduls servo2.write (20); // auto setzt die Servos auf eine Startposition servo1.write(180); }

Leere Schleife () {

if (Serial.available()){// Dies prüft, ob etwas vom Telefon über die seriellen Pins Tx und Rx eingeht c=Serial.read(); // liest, was von if (c== 't'){//Wenn das serielle Gerät dann liest, bedeutet dies, dass das Telefon vollständig aufgeladen ist, der Trennvorgang beginnt servo2.write (120); // trennt die Ladeverzögerung (5000); // wartet, um sicherzustellen, dass es ist Zeit für die Entfernung servo1.write(110); // bewegt das Telefon in eine aufrechte Position, um //Serial.println ("hier"); attachInterrupt(digitalPinToInterrupt(2), AH, FALLING); // fügt den Interrupt erneut an}} if (q==1){//wenn die Bedingung für das Einstecken erfüllt ist, dann beginnen Sie mit dem Anhängen der Ladeverzögerung (10000); servo2.write (0); // bewegt Servo in Position q = 0; // Bedingung zurücksetzen } }

nichtig AH(){

//Seriell.println("in"); servo1.write(180); // lässt die Telefonplattform in die Ladeposition q = 1; // startet die Bedingung, um den Vorgang fortzusetzen // a = 1; detachInterrupt (digitalPinToInterrupt(2)); // trennt den Interrupt, damit es keine Probleme mit dem Starten des Interrupts gibt, wenn er nicht starten sollte }

Android App

Hier werde ich nur die richtige App anzeigen, aber auch die Testcodedatei geben, der einzige Unterschied ist das Entfernen der runnable- und getBattery-Klasse. Der erwähnte Seriennummerncode ist der Standard für Telefone, die mit Geräten wie dem Modul verbunden sind.

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

öffentliche Klasse MainActivity erweitert AppCompatActivity {

// notwendige Objekte erstellen Handler-Handler; // hilft bei der Schleife Runnable runnable; // läuft kontinuierlich BluetoothAdapter mBluetoothAdapter; BluetoothSocket mmSocket; Bluetooth-Gerät mmGerät; OutputStream mmOutputStream; volatile boolescher Wert stopWorker; privater OutputStream outputStream; private finale Zeichenfolge DEVICE_NAME="HC-05"; private finale UUID PORT_UUID=UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); privates BluetoothAdapter-Gerät; private BluetoothSocket-Buchse; @Override protected void onCreate(Bundle savedInstanceState) {//ist eine Reihe von Anweisungen, die ausgeführt werden, wenn die App erstellt wird super.onCreate(savedInstanceState);//displya Creation setContentView(R.layout.activity_main); runnable = new Runnable() { @Override public void run() {//läuft wiederholt int level = (int) getBattery();// Ruft den aktuellen Akkustand ab if (level==100){//wenn der Akkustand erreicht 100% try { getBT(); // verbindet sich mit dem Bluetooth-Modul openBT (); // öffnet es sendData (); // sendet die notwendigen Daten closeBT (); // schließt das Objekt } catch (IOException ex) { } } handler.postDelayed(runnable, 5000); // eine Verzögerung } }; Handler = neuer Handler (); handler.postDelayed (ausführbar, 0); }

öffentlicher Schwimmer getBattery() {

Intent batteryIntent= registerReceiver(null, new IntentFilter(Intent. ACTION_BATTERY_CHANGED));// erstellt die Aktion, die eine Verbindung zum Akku herstellt int level = batteryIntent.getIntExtra(BatteryManager. EXTRA_LEVEL, -1);//erhält den besseren Level int scale = BatteryIntent.getIntExtra(BatteryManager. EXTRA_SCALE, -1); // Ruft die Skala der Batterie ab if (level == -1 || scale == -1) {//bei Fehltritt return 50.0f; } float batt = (level/(float)scale)*100.0f;//erhält die richtige Scale Return batt; // gibt den Level zurück }

void getBT() {//erhält die möglichen Bluetooth-Verbindungen

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // Ruft den Adapter ab if(!mBluetoothAdapter.isEnabled()) {//Stellt sicher, dass das Telefon über Bluetooth verfügt eingeschaltet, wenn nicht startActivityForResult(enableBluetooth, 0); } Set pairedDevices = mBluetoothAdapter.getBondedDevices(); // Ruft die Liste der verbundenen Bluetooth ab if(pairedDevices.size() > 0) {//Stellt sicher, dass es einige Geräte gibt für(BluetoothDevice device: pairedDevices) {//Schleife durch die Geräte if(device.getName().equals("HC-05")) {//überprüft ob es das richtige ist mmDevice = device;//spart es break; } } } }

void openBT() wirft IOException {

UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); //Standard //SerialPortService ID mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid); // verbindet sich mit dem Gerät mit der richtigen ID mmSocket.connect();// verbindet mmOutputStream = mmSocket.getOutputStream();//startet die Fähigkeit zu senden Daten zum Arduino-Modul }

void sendData() wirft IOException {//class, die das t an das arduino sendet

mmOutputStream.write('t'); }

void closeBT() wirft IOException {//schließt alle Verbindungen zum Arduino

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

Schritt 6: Dateien

Vielen Dank fürs Lesen, im Anhang sind die Dateien, die in diesem Projekt verwendet wurden

Empfohlen: