Taula de continguts:

Un carregador de telèfon automàtic: 6 passos (amb imatges)
Un carregador de telèfon automàtic: 6 passos (amb imatges)

Vídeo: Un carregador de telèfon automàtic: 6 passos (amb imatges)

Vídeo: Un carregador de telèfon automàtic: 6 passos (amb imatges)
Vídeo: Беслан. Помни / Beslan. Remember (english & español subs) 2024, Desembre
Anonim
Un carregador de telèfon automàtic
Un carregador de telèfon automàtic

"Aquesta instrucció es va crear per complir els requisits del projecte del Makecourse de la Universitat del Sud de Florida (www.makecourse.com)"

La idea d’aquest projecte era crear un dispositiu que pogués carregar un telèfon i després desconnectar-lo quan el telèfon arribés al 100%. Això aturaria problemes de sobrecàrrega.

Pas 1: components de plàstic

Components plàstics
Components plàstics
Components de plàstic
Components de plàstic
Components plàstics
Components plàstics
Components de plàstic
Components de plàstic

Es van utilitzar alguns components que es van imprimir en 3D. Aquests components comprenien una base, un suport per al carregador, un conjunt d'engranatges de pinyó i cremallera (un engranatge normal i una peça lineal que canvia la rotació al moviment lineal) i una base per a què tot pugui funcionar. Aquests components s’explicaran als paràgrafs següents. Per ordre d’aparició

Porta carregador

El propòsit d’això és mantenir el carregador del telèfon o, com a mínim, donar-li una base millor i anivellada.

Base

La base té anells per al suport del telèfon, així com una pista per al conjunt d’engranatges.

Suport del telèfon

Sosté el telèfon, òbviament

Braç del telèfon

Es mou i sosté el telèfon

Conjunt de cremallera i cremallera

S'utilitza per moure el carregador del telèfon cap endavant i cap enrere

Pas 2: desglosseu components no impresos en 3D

Aquests són els components que es van comprar per al projecte o que ja eren propietat. Per a algunes de les parts que hi he enllaçat / articles similars a Amazon, però no dubteu a adquirir-los en qualsevol lloc.

Micro Servo:

Servo estàndard 0-180:

Mòdul de sèrie Bluetooth HC-05:

Telèfon i carregador de telèfon

Arduino

Taula de pa

Caixa o paperera per a la base

Sensor tàctil:

Pas 3: electrònica

Electrònica
Electrònica

El circuit per a aquest projecte pot requerir-ne alguns, principalment a causa del mòdul HC-05. Molts dels mòduls d’aquest tipus tenen una velocitat d’aproximadament 3,3V a 6V, que es troba en el rang de funcionament de l’Arduino. Però, per a la comunicació en sèrie, el pin Rx de vegades funciona millor amb només 3,3 V. Com es veu al diagrama anterior, els dos servos estan connectats al pin Vin de l'Arduino. Aquest voltatge addicional el pot subministrar qualsevol cosa, he utilitzat una bateria de 9 volts. El sensor tàctil es va connectar al 5V de l’Arduino. Això es deu al fet que tots els components tenien problemes per sortir del mateix voltatge. El sensor tàctil està connectat al pin 2, de manera que es pot utilitzar com a interrupció del pin. A continuació, el mòdul bluetooth es connecta als pins Rx i Tx per a la comunicació en sèrie. Entre el pin Rx del mòdul i Tx de l’Arduino hi ha una resistència de 2 quilos d’ohm amb un ohm de 1 quilo que es connecta a terra. Això ajuda a regular la tensió que entra.

Pas 4: Muntatge

muntatge
muntatge

El muntatge és força senzill.

  1. amb una mica de super cola, munteu els vostres servos a les seves posicions, un per a l’engranatge per la retallada de la base i un altre a prop de la base del telèfon.
  2. Connecteu el sensor tàctil al suport del telèfon perquè pugui saber quan hi ha el telèfon.
  3. A continuació, fixeu l’engranatge i el braç als seus servos respectius
  4. Assegureu-vos que els cables no interfereixen amb altres components a mesura que ompliu els aparells electrònics

Pas 5: Codi

Es presentaran tres conjunts de codi, un codi per a l’Arduino, que es va crear a l’IDE Arduino i dos codis que es van fer a Android Studio. Les aplicacions d’Android són les mateixes, tret que una és l’aplicació completa que fa un seguiment de la durada de la bateria i una no. El segon és per a proves.

Codi Arduino

El punt principal d’aquest codi és fer funcionar el sensor tàctil i els motors, rep una ordre del telèfon i actua sobre ell.

#include // truca a la biblioteca de servo perquè puguem controlar els dos servos Servo servo1; Servo servo2; // crea dos servoobjectes per cada servo motor int a = 0; // variable de seguiment per provar int q = 0; // una variable que permet que hi hagi un retard abans que comenci el procés de connexió; variable que conté el missatge en sèrie de la configuració del buit del telèfon () {attachInterrupt (digitalPinToInterrupt (2), AH, FALLING); // adjunta una interrupció que cau per saber exactament quan el sensor tàctil veu quan el telèfon surt a servo1.attach (10); servo2.attach (9); // inicialitza els dos servos Serial.begin (9600); // inicia la comunicació serial a una velocitat similar a la del mòdul bluetooth servo2.write (20); // auto defineix els servos a una posició inicial servo1.write (180); }

bucle buit () {

if (Serial.available ()) {// això comprova si hi ha alguna cosa que entra del telèfon a través dels pins sèrie Tx i Rx c = Serial.read (); // llegeix el que entra de if (c == 't') {// si el dispositiu sèrie es llegeix aleshores, vol dir que el telèfon està completament carregat, s'inicia el procés de desconnexió servo2.write (120); // desconnecta el retard del carregador (5000); // espera per assegurar-se que hi ha temps per a l'eliminació servo1.write (110); // mou el telèfon en posició vertical per indicar //Serial.println("aquí "); attachInterrupt (digitalPinToInterrupt (2), AH, FALLING); // torna a adjuntar la interrupció}} si (q == 1) {// si la condició del connector és actual, comenceu per connectar el retard del carregador (10000); servo2.write (0); // mou el servo a la posició q = 0; // restableix la condició}}

buida AH () {

//Serial.println("in "); servo1.write (180); // deixa caure la plataforma del telèfon a la posició de càrrega q = 1; // inicia la condició per continuar el procés // a = 1; detachInterrupt (digitalPinToInterrupt (2)); // desconnecta la interrupció, de manera que no hi haurà problemes amb la interrupció que comenci quan no ho hauria de fer}

Aplicació per a Android

Aquí només mostraré l'aplicació adequada, però també es mostrarà el fitxer de codi de prova, l'única diferència serà l'eliminació de la classe runnable i getBattery. El codi sèrie esmentat és el que estàndard per als telèfons que es connecten a dispositius com el mòdul.

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

MainActivity de classe pública amplia AppCompatActivity {

// creació d'objectes necessaris Handler Handler; // ajuda amb el bucle Runnable runnable; // s'executa contínuament BluetoothAdapter mBluetoothAdapter; BluetoothSocket mmSocket; BluetoothDevice mmDevice; OutputStream mmOutputStream; volàtil booleà stopWorker; private OutputStream outputStream; private final String DEVICE_NAME = "HC-05"; UUID final privat PORT_UUID = UUID.fromString ("00001101-0000-1000-8000-00805f9b34fb"); dispositiu privat BluetoothAdapter; endoll privat BluetoothSocket; @Override protected void onCreate (Bundle savedInstanceState) {// és un conjunt d'instruccions que s'executen quan es crea l'aplicació super.onCreate (savedInstanceState); // displya creation setContentView (R.layout.activity_main); runnable = new Runnable () {@Override public void run () {// s'executa repetidament int level = (int) getBattery (); // obté el nivell actual de bateria si (nivell == 100) {// si el nivell de bateria arriba al 100% prova {getBT (); // es connecta al mòdul bluetooth openBT (); // l’obre sendData (); // envia les dades necessàries closeBT (); // tanca l’objecte} catch (IOException ex) { }} handler.postDelayed (executable, 5000); // un retard}}; handler = nou Handler (); handler.postDelayed (executable, 0); }

flotador públic getBattery () {

Intent batteryIntent = registerReceiver (nul, nou IntentFilter (Intent. ACTION_BATTERY_CHANGED)); // crea l'acció que es connecta a la bateria int level = batteryIntent.getIntExtra (BatteryManager. EXTRA_LEVEL, -1); // obté el millor nivell int scale = batteryIntent.getIntExtra (BatteryManager. EXTRA_SCALE, -1); // obté l’escala de la bateria if (nivell == -1 || escala == -1) {// en cas de pas erroni torneu 50.0f; } float batt = (nivell / escala (float)) * 100.0f; // obté la escala de retorn adequada; // retorna el nivell}

void getBT () {// obté les possibles connexions bluetooth

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter (); // obté l'adaptador si (! mBluetoothAdapter.isEnabled ()) {// s'assegura que el telèfon tingui la dent blava a Intent enableBluetooth = Intenció nova (BluetoothAdapter. ACTION_REQUEST_ENABLE); // sol·licita que sigui activat si no startActivityForResult (enableBluetooth, 0); } Establir pairedDevices = mBluetoothAdapter.getBondedDevices (); // obté la llista de bluetooth vinculats si (pairedDevices.size ()> 0) {// assegura que hi hagi alguns dispositius per a (BluetoothDevice device: pairedDevices) {// bucles a través del dispositius if (device.getName (). equals ("HC-05")) {// comprova si és el correcte mmDevice = dispositiu; // el guarda trencat; }}}}

void openBT () llança IOException {

UUID uuid = UUID.fromString ("00001101-0000-1000-8000-00805f9b34fb"); // Estàndard // SerialPortService ID mmSocket = mmDevice.createRfcommSocketToServiceRecord (uuid); // es connecta al dispositiu amb l’identificador mmSocket.connect (); // connecta mmOutputStream = mmSocket.getOutputStream (); // inicia la capacitat d’enviar dades al mòdul arduino}

void sendData () llança IOException {// classe que envia la t a l'arduino

mmOutputStream.write ('t'); }

void closeBT () llança IOException {// tanca totes les connexions a l'arduino

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

Pas 6: fitxers

Gràcies per llegir, adjuntem els fitxers que s’han utilitzat en aquest projecte

Recomanat: