Innholdsfortegnelse:

En automatisk telefonlader: 6 trinn (med bilder)
En automatisk telefonlader: 6 trinn (med bilder)

Video: En automatisk telefonlader: 6 trinn (med bilder)

Video: En automatisk telefonlader: 6 trinn (med bilder)
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, November
Anonim
En automatisk telefonlader
En automatisk telefonlader

"Denne instruerbare ble opprettet for å oppfylle prosjektkravet til Makecourse ved University of South Florida (www.makecourse.com)"

Ideen bak dette prosjektet var å lage en enhet som kunne lade en telefon, og deretter koble den fra når telefonen når 100%. Dette ville stoppe problemer med overlading.

Trinn 1: Plastkomponenter

Plastkomponenter
Plastkomponenter
Plastkomponenter
Plastkomponenter
Plastkomponenter
Plastkomponenter
Plastkomponenter
Plastkomponenter

Det var noen komponenter som ble brukt som ble 3D -trykt. Disse komponentene besto av en base, en holder for laderen, et tannhjulssett (et normalt gir og et lineært stykke som endrer rotasjonen til lineær bevegelse), og en base for alt å operere på. Disse komponentene vil bli forklart i de følgende avsnittene. I rekkefølge etter utseende

Laderholder

Hensikten med dette er å holde telefonladeren, eller i det minste gi den en bedre og jevn base å være på.

Utgangspunkt

Basen har ringer for telefonholderen, samt et spor for giret.

Telefonholder

Holder telefonen, åpenbart

Telefonarm

Beveger seg og holder telefonen

Tannhjulssett

Brukes til å flytte telefonladeren frem og tilbake

Trinn 2: Bryt ned komponenter som ikke er 3D -trykte

Dette er komponentene som enten ble kjøpt for prosjektet eller allerede eide. For noen av delene koblet jeg til dem/lignende varer på amazon, men kjøp dem gjerne hvor som helst.

Micro Servo:

Standard 0-180 Servo:

HC-05 Bluetooth-seriemodul:

Telefon og telefonlader

Arduino

Brødbrett

Eske eller kasse for base

Berøringssensor:

Trinn 3: Elektronikk

Elektronikk
Elektronikk

Kretsen for dette prosjektet kan imidlertid kreve noe, hovedsakelig på grunn av HC-05-modulen. Mange av modulene av denne typen har en hastighet på omtrent 3,3V til 6V, som er i driftsområdet til Arduino. Men for seriell kommunikasjon fungerer Rx -pinnen noen ganger bedre med bare 3,3V. Som vist i diagrammet ovenfor er de to servoene koblet til Vin -pinnen på Arduino. Denne ekstra spenningen kan leveres av alt, jeg brukte et 9 volt batteri. Berøringssensoren ble koblet til 5V på Arduino. Dette var fordi alle komponentene hadde problemer med å løpe av den samme spenningen. Berøringssensoren er festet til pinne 2, slik at den kan brukes som en pinneavbrudd. Deretter kobles bluetooth -modulen til Rx- og Tx -pinnene for seriell kommunikasjon. Mellom Rx -pinnen på modulen og Tx på Arduino er en 2 kilo ohm motstand med en 1 kilo ohm som kobles til bakken. Dette bidrar til å regulere spenningen som går inn.

Trinn 4: Montering

montering
montering

Monteringen er ganske enkel.

  1. med litt superlim monterer du servoene i posisjonene sine, en for giret ved utskjæringen på basen og en nær der basen på telefonen er.
  2. Fest berøringssensoren til telefonholderen, slik at den kan vite når telefonen er der.
  3. Fest deretter utstyret og armen til sine respektive servoer
  4. Sørg for at ledninger ikke forstyrrer andre komponenter når du fyller elektronikken din

Trinn 5: Kode

Det vil bli presentert tre sett med kode, en kode for Arduino, som ble opprettet i Arduino IDE og to koder som ble laget i Android Studio. Android -appene er de samme bortsett fra en er den fulle appen som sporer batterilevetid og en ikke. Den andre er for testformål.

Arduino -koden

Hovedpoenget med denne koden er å betjene berøringssensoren og motorene, den mottar en kommando fra telefonen og virker på den.

#include // ringer til servobiblioteket slik at vi kan kontrollere de to servoServo servo1; Servo servo2; // lager to servoobjekter for hver servomotor int a = 0; // sporingsvariabel for testing int q = 0; // en variabel som gjør at det kan være en forsinkelse før pluggprosessen begynner med char c; // variabel som inneholder den serielle meldingen fra telefonens ugyldige oppsett () {attachInterrupt (digitalPinToInterrupt (2), AH, FALLING); // legger ved et fallende avbrudd for å vite nøyaktig når berøringssensoren ser når telefonen er ute på servo1.attach (10); servo2.attach (9); // initialiserer de to servoene Serial.begin (9600); // starter seriekommunikasjonen med en hastighet som ligner den på bluetooth -modulen servo2.write (20); // setter automatisk servoen til en startposisjon servo1.write (180); }

void loop () {

if (Serial.available ()) {// dette sjekker om det kommer noe fra telefonen over seriepinnene Tx og Rx c = Serial.read (); // leser hva som kommer inn fra hvis (c == 't') {// hvis den serielle enheten leser på da betyr det at telefonen er fulladet, frakoblingsprosessen starter servo2.write (120); // kobler fra laderen forsinkelse (5000); // venter på å være sikker det er tid for fjerning av servo1.write (110); // flytter telefonen i oppreist posisjon for å signalere //Serial.println("here "); attachInterrupt (digitalPinToInterrupt (2), AH, FALLING); // fester avbruddet igjen}} if (q == 1) {// hvis betingelsen for plugg -in er ture, start deretter med å feste laderen forsinkelse (10000); servo2.write (0); // flytter servoen til posisjon q = 0; // tilbakestiller tilstand}}

ugyldig AH () {

//Serial.println("in "); servo1.write (180); // slipper telefonplattformen til ladeposisjonen q = 1; // starter betingelsen for å fortsette prosessen // a = 1; detachInterrupt (digitalPinToInterrupt (2)); // løsner avbruddet, slik at det ikke blir noen problemer med avbruddet som starter når det ikke skal}

Android App

Her vil jeg bare vise den riktige appen, men testkodefilen vil også bli gitt, den eneste forskjellen vil være fjerning av runnable og getBattery -klassen. Den nevnte seriekoden er den som er standard for telefoner som kobles til enheter som modulen.

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

public class MainActivity utvider AppCompatActivity {

// lage nødvendige objekter Handler handler; // hjelper med løkken Runnable runnable; // kjører kontinuerlig BluetoothAdapter mBluetoothAdapter; BluetoothSocket mmSocket; Bluetooth -enhet mmDevice; OutputStream mmOutputStream; flyktig 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 -enhet; privat Bluetooth -kontakt; @Override protected void onCreate (Bundle savedInstanceState) {// er et sett med instruksjoner som kjøres når appen opprettes super.onCreate (saveInstanceState); // displya creation setContentView (R.layout.activity_main); runnable = new Runnable () {@Override public void run () {// kjører gjentatte ganger int level = (int) getBattery (); // får gjeldende batterinivå hvis (level == 100) {// hvis batterinivået når 100% prøve {getBT (); // kobler til bluetooth -modulen openBT (); // åpner den sendData (); // sender de nødvendige dataene closeBT (); // lukker objektet} catch (IOException ex) { }} handler.postDelayed (kjørbar, 5000); // en forsinkelse}}; handler = new Handler (); handler.postDelayed (kjørbar, 0); }

public float getBattery () {

Intent batteryIntent = registerReceiver (null, new IntentFilter (Intent. ACTION_BATTERY_CHANGED)); // oppretter handlingen som kobles til batteri int nivå = batteryIntent.getIntExtra (BatteryManager. EXTRA_LEVEL, -1); // får det bedre nivået int skala = batteryIntent.getIntExtra (BatteryManager. EXTRA_SCALE, -1); // får skalaen til batteriet hvis (nivå == -1 || skala == -1) {// i tilfelle feilstopp 50.0f; } float batt = (nivå/(float) skala)*100.0f; // får den riktige skala retur batt; // returnerer nivå}

void getBT () {// får de mulige Bluetooth -tilkoblingene

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter (); // får adapteren hvis (! mBluetoothAdapter.isEnabled ()) {// sørger for at telefonen har en blå tann på Intent enableBluetooth = new Intent (BluetoothAdapter. ACTION_REQUEST_ENABLE); // ber om at den skal være slått på hvis ikke startActivityForResult (enableBluetooth, 0); } Angi pairedDevices = mBluetoothAdapter.getBondedDevices (); // får listen over bonded bluetooth hvis (pairedDevices.size ()> 0) {// sørger for at det er noen enheter for (BluetoothDevice -enhet: pairedDevices) {// går gjennom enheter hvis (device.getName (). er lik ("HC-05")) {// sjekker om den er den riktige mmDevice = device; // lagrer den pause; }}}}

void openBT () kaster IOException {

UUID uuid = UUID.fromString ("00001101-0000-1000-8000-00805f9b34fb"); // Standard // SerialPortService ID mmSocket = mmDevice.createRfcommSocketToServiceRecord (uuid); // kobler til enheten med riktig id mmSocket.connect (); // kobler til mmOutputStream = mmSocket.getOutputStream (); // starter muligheten til å sende data til arduino -modulen}

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

mmOutputStream.write ('t'); }

void closeBT () kaster IOException {// lukker alle forbindelsene til arduinoen

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

Trinn 6: Filer

Takk for at du leser, vedlagte er filene som ble brukt i dette prosjektet

Anbefalt: