Indholdsfortegnelse:

En automatisk telefonoplader: 6 trin (med billeder)
En automatisk telefonoplader: 6 trin (med billeder)

Video: En automatisk telefonoplader: 6 trin (med billeder)

Video: En automatisk telefonoplader: 6 trin (med billeder)
Video: NÅR MOR IKKE ER HJEMME! 2024, November
Anonim
En automatisk telefonoplader
En automatisk telefonoplader

"Denne instruerbare blev oprettet for at opfylde projektkravet fra Makecourse ved University of South Florida (www.makecourse.com)"

Ideen bag dette projekt var at oprette en enhed, der kunne oplade en telefon, og derefter tage stikket ud, når telefonen når 100%. Dette ville stoppe spørgsmål om overopladning.

Trin 1: Plastkomponenter

Plastkomponenter
Plastkomponenter
Plastkomponenter
Plastkomponenter
Plastkomponenter
Plastkomponenter
Plastkomponenter
Plastkomponenter

Der var nogle komponenter, der blev brugt, der blev 3D -printet. Disse komponenter bestod af en base, en holder til opladeren, et tandhjuls tandhjulssæt (et normalt gear og et lineært stykke, der ændrer rotationen til lineær bevægelse), og en base for alt at arbejde på. Disse komponenter vil blive forklaret i de følgende afsnit. I rækkefølge

Opladerholder

Formålet med dette er at holde telefonopladeren eller i det mindste give den en bedre og mere stabil base at være på.

Grundlag

Basen har ringe til telefonholderen samt et spor til gearet.

Telefonholder

Holder selvfølgelig telefonen

Telefonarm

Bevæger og holder telefonen

Tandhjulsgear -sæt

Bruges til at flytte telefonopladeren frem og tilbage

Trin 2: Opdel ikke -3D -printede komponenter

Disse komponenter er enten købt til projektet eller allerede ejet. For nogle af delene linkede jeg til dem/lignende varer på amazon, men køb dem gerne overalt.

Micro Servo:

Standard 0-180 Servo:

HC-05 Bluetooth-seriemodul:

Telefon og telefon oplader

Arduino

Brødbræt

Æske eller kasse til bund

Berøringssensor:

Trin 3: Elektronik

Elektronik
Elektronik

Kredsløbet til dette projekt kan dog kræve noget, hovedsageligt på grund af HC-05-modulet. Mange af modulerne af denne type har en hastighed på omtrent 3,3V til 6V, hvilket er inden for Arduino's driftsområde. Men for seriel kommunikation fungerer Rx -stiften nogle gange bedre med kun 3,3V. Som det ses i diagrammet ovenfor, er de to servoer tilsluttet Vin -stiften på Arduino. Denne ekstra spænding kan leveres af alt, jeg brugte et 9 volt batteri. Berøringssensoren blev tilsluttet 5V på Arduino. Dette var fordi alle komponenterne havde problemer med at køre af den samme spænding. Berøringssensoren er fastgjort til pin 2, så den kan bruges som en pin -afbrydelse. Derefter forbindes bluetooth -modulet til Rx- og Tx -benene til seriel kommunikation. Mellem Rx -stiften på modulet og Tx på Arduino er der en 2 kilo ohm modstand med en 1 kilo ohm tilslutning til jorden. Dette hjælper med at regulere spændingen, der går ind.

Trin 4: Montering

montage
montage

Samlingen er ganske enkel.

  1. med noget superlim monteres dine servoer i deres positioner, en til gearet ved udskæringen på basen og en nær hvor bunden af telefonen er.
  2. Sæt berøringssensoren på telefonholderen, så den kan vide, hvornår telefonen er der.
  3. Fastgør derefter gearet og armen til deres respektive servoer
  4. Sørg for, at ledninger ikke forstyrrer andre komponenter, når du fylder din elektronik i

Trin 5: Kode

Der vil blive præsenteret tre sæt kode, en kode til Arduino, der blev oprettet i Arduino IDE og to koder, der blev lavet i Android Studio. Android -apps er de samme bortset fra en er den fulde app, der sporer batterilevetid, og en ikke. Den anden er til testformål.

Arduino kode

Hovedpunktet med denne kode er at betjene berøringssensoren og motorerne, den modtager en kommando fra telefonen og handler efter den.

#include // kalder servobiblioteket, så vi kan styre de to servosServo servo1; Servo servo2; // opretter to servoobjekter for hver servomotor int a = 0; // sporingsvariabel til test af int q = 0; // en variabel, der tillader, at der er en forsinkelse, før pluginprocessen begynder med char c; // variabel, der indeholder den serielle meddelelse fra telefonens hulrumsopsætning () {attachInterrupt (digitalPinToInterrupt (2), AH, FALLING); // vedhæfter en faldende afbrydelse for at vide præcis, hvornår berøringssensoren ser, når telefonen er ude på servo1.attach (10); servo2.attach (9); // initialiserer de to servoer Serial.begin (9600); // starter seriel kommunikation med en hastighed, der ligner den for bluetooth -modulet servo2.write (20); // auto indstiller servoerne til en startposition servo1.write (180); }

void loop () {

hvis (Serial.available ()) {// dette kontrollerer, om der kommer noget ind fra telefonen over de serielle ben Tx og Rx c = Serial.read (); // læser, hvad der kommer ind, hvis (c == 't') {// hvis den serielle enhed læser på det tidspunkt, betyder det, at telefonen er fuldt opladet, frakoblingsprocessen starter servo2.write (120); // afbryder opladeren forsinkelse (5000); // venter på at være sikker der er tid til fjernelse servo1.write (110); // flytter telefonen i en opretstående position for at signalere //Serial.println("here "); attachInterrupt (digitalPinToInterrupt (2), AH, FALLING); // fastgør afbrydelsen igen}} if (q == 1) {// hvis betingelsen for plug -in er ture, start derefter med at vedhæfte opladningsforsinkelsen (10000); servo2.write (0); // flytter servo til position q = 0; // nulstiller tilstand}}

ugyldig AH () {

//Serial.println("in "); servo1.write (180); // taber telefonplatformen i ladestilling q = 1; // starter betingelsen for at fortsætte processen // a = 1; detachInterrupt (digitalPinToInterrupt (2)); // fjerner afbrydelsen, så der ikke vil være problemer med afbrydelsen, der starter, når den ikke skal}

Android App

Her vil jeg kun vise den korrekte app, men testkodefilen vil også blive givet, den eneste forskel vil være fjernelse af runnable og getBattery -klassen. Den nævnte serienummer er den, der er standard for telefoner, der opretter forbindelse til enheder som modulet.

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

public class MainActivity udvider AppCompatActivity {

// oprettelse af nødvendige objekter Handler handler; // hjælper med sløjfen Runnable runnable; // kører kontinuerligt BluetoothAdapter mBluetoothAdapter; BluetoothSocket mmSocket; Bluetooth -enhed mmDevice; OutputStream mmOutputStream; flygtig boolsk stopWorker; private OutputStream outputStream; private final String DEVICE_NAME = "HC-05"; privat endelig UUID PORT_UUID = UUID.fromString ("00001101-0000-1000-8000-00805f9b34fb"); privat BluetoothAdapter enhed; privat BluetoothSocket -stik; @Override protected void onCreate (Bundle savedInstanceState) {// er et sæt instruktioner, der kører, når appen oprettes super.onCreate (saveInstanceState); // displya creation setContentView (R.layout.activity_main); runnable = new Runnable () {@Override public void run () {// kører gentagne gange int level = (int) getBattery (); // får det aktuelle batteriniveau hvis (niveau == 100) {// hvis batteriniveauet når 100% prøv {getBT (); // opretter forbindelse til bluetooth -modulet openBT (); // åbner det sendData (); // sender de nødvendige data closeBT (); // lukker objektet catch (IOException ex) { }} handler.postDelayed (kører, 5000); // en forsinkelse}}; handler = ny Handler (); handler.postDelayed (kører, 0); }

public float getBattery () {

Intent batteryIntent = registerReceiver (null, new IntentFilter (Intent. ACTION_BATTERY_CHANGED)); // opretter den handling, der forbinder til batteriets int -niveau = batteryIntent.getIntExtra (BatteryManager. EXTRA_LEVEL, -1); // får det bedre niveau int skala = batteryIntent.getIntExtra (BatteryManager. EXTRA_SCALE, -1); // får batteriets skala, hvis (niveau == -1 || skala == -1) {// i tilfælde af fejlagtigt afkast 50.0f; } float batt = (niveau/(float) skala)*100.0f; // får den korrekte skala retur batt; // returnerer niveau}

void getBT () {// får de mulige bluetooth -forbindelser

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter (); // får adapteren, hvis (! mBluetoothAdapter.isEnabled ()) {// sørger for, at telefonen har en blå tand på Intent enableBluetooth = new Intent (BluetoothAdapter. ACTION_REQUEST_ENABLE); // anmoder om, at den skal være slået til, hvis ikke startActivityForResult (enableBluetooth, 0); } Indstil pairedDevices = mBluetoothAdapter.getBondedDevices (); // får listen over bonded bluetooth, hvis (pairedDevices.size ()> 0) {// sørger for, at der er nogle enheder til (BluetoothDevice -enhed: pairedDevices) {// løber gennem enheder, hvis (device.getName (). er lig med ("HC-05")) {// kontrollerer, om den er den rigtige mmDevice = device; // gemmer den i stykker; }}}}

void openBT () kaster IOException {

UUID uuid = UUID.fromString ("00001101-0000-1000-8000-00805f9b34fb"); // Standard // SerialPortService ID mmSocket = mmDevice.createRfcommSocketToServiceRecord (uuid); // opretter forbindelse til enheden med den korrekte id mmSocket.connect (); // forbinder mmOutputStream = mmSocket.getOutputStream (); // starter evnen til at sende data til arduino -modulet}

void sendData () kaster IOException {// klasse, der sender t til arduinoen

mmOutputStream.write ('t'); }

void closeBT () smider IOException {// lukker alle forbindelser til arduinoen

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

Trin 6: Filer

Tak fordi du læste, vedhæftede er de filer, der blev brugt i dette projekt

Anbefalede: