Turinys:

Automatinis telefono įkroviklis: 6 žingsniai (su nuotraukomis)
Automatinis telefono įkroviklis: 6 žingsniai (su nuotraukomis)

Video: Automatinis telefono įkroviklis: 6 žingsniai (su nuotraukomis)

Video: Automatinis telefono įkroviklis: 6 žingsniai (su nuotraukomis)
Video: Kaip iškirpti ir įklijuoti objektą iš nuotraukos su iPhone? 2024, Liepa
Anonim
Automatinis telefono įkroviklis
Automatinis telefono įkroviklis

„Ši instrukcija buvo sukurta vykdant Pietų Floridos universiteto„ Makecourse “projekto reikalavimą (www.makecourse.com)“

Šio projekto idėja buvo sukurti įrenginį, kuris galėtų įkrauti telefoną, o tada atjunkite jį, kai telefonas pasiekia 100%. Tai sustabdytų per didelio įkrovimo problemas.

1 žingsnis: plastikiniai komponentai

Plastikiniai komponentai
Plastikiniai komponentai
Plastikiniai komponentai
Plastikiniai komponentai
Plastikiniai komponentai
Plastikiniai komponentai
Plastikiniai komponentai
Plastikiniai komponentai

Buvo naudojami kai kurie komponentai, kurie buvo atspausdinti 3D. Šiuos komponentus sudarė pagrindas, įkroviklio laikiklis, krumpliaračių ir krumpliaračių komplektas (įprasta pavara ir linijinis gabalas, keičiantis sukimąsi tiesiniu judesiu) ir pagrindas viskam veikti. Šie komponentai bus paaiškinti kitose pastraipose. Pasirodymo tvarka

Įkroviklio laikiklis

Tikslas yra laikyti telefono įkroviklį arba bent jau suteikti jam geresnį ir lygesnį pagrindą.

Bazė

Pagrindas turi žiedus telefono laikikliui ir krumpliaračio rinkinį.

Telefono laikiklis

Telefoną, aišku, laiko

Telefono rankena

Judina ir laiko telefoną

Krumpliaračių ir krumpliaračių pavarų rinkinys

Naudojamas perkelti telefono įkroviklį pirmyn ir atgal

2 veiksmas: suskaidykite ne 3D spausdintus komponentus

Tai yra komponentai, kurie buvo įsigyti projektui arba jau priklauso. Kai kurias dalis, kurias aš susiejau su jomis/panašius elementus „Amazon“, bet galite jas įsigyti bet kur.

„Micro Servo“:

Standartinis 0-180 servo:

HC-05 „Bluetooth“serijos modulis:

Telefonas ir telefono įkroviklis

Arduino

Bandomoji Lenta

Dėžutė ar šiukšliadėžė pagrindui

Jutiklinis jutiklis:

3 žingsnis: Elektronika

Elektronika
Elektronika

Tačiau šio projekto grandinei gali prireikti, daugiausia dėl HC-05 modulio. Daugelis šio tipo modulių veikia maždaug nuo 3.3V iki 6V, o tai yra „Arduino“veikimo diapazone. Tačiau serijiniam ryšiui Rx kaištis kartais veikia geriau tik su 3.3V. Kaip matyti aukščiau esančioje diagramoje, abu servai yra prijungti prie „Arduino“„Vin“kaiščio. Šią papildomą įtampą gali tiekti bet kas, aš naudoju 9 voltų bateriją. Jutiklinis jutiklis buvo prijungtas prie „Arduino“5 V įtampos. Taip buvo todėl, kad visiems komponentams buvo sunku išjungti tą pačią įtampą. Jutiklinis jutiklis yra pritvirtintas prie 2 kaiščio, todėl jį galima naudoti kaip kaiščio pertraukimą. Tada „Bluetooth“modulis prijungiamas prie Rx ir Tx kaiščių nuosekliam ryšiui. Tarp modulio Rx kaiščio ir „Arduino“Tx yra 2 kilogramų omų rezistorius, 1 kg omo prijungtas prie žemės. Tai padeda reguliuoti įeinančią įtampą.

4 žingsnis: Surinkimas

Surinkimas
Surinkimas

Surinkimas yra gana paprastas.

  1. su kai kuriais super klijais pritvirtinkite savo servo sistemas savo vietose, viena - krumpliaračiui prie pagrindo išpjovos, o kita - šalia to, kur yra telefono pagrindas.
  2. Pritvirtinkite jutiklinį jutiklį prie telefono laikiklio, kad jis žinotų, kada telefonas yra.
  3. Tada pritvirtinkite pavarą ir svirtį prie atitinkamų servo
  4. Užpildydami elektroniką įsitikinkite, kad laidai netrukdo kitiems komponentams

5 žingsnis: kodas

Bus pateikti trys kodų rinkiniai, vienas „Arduino“kodas, sukurtas naudojant „Arduino IDE“, ir du kodai, sukurti naudojant „Android Studio“. „Android“programos yra tos pačios, išskyrus vieną - visa programa, kuri seka akumuliatoriaus veikimo laiką, o kita - ne. Antrasis skirtas bandymams.

Arduino kodas

Pagrindinis šio kodo tikslas yra valdyti jutiklinį jutiklį ir variklius, jis gauna komandą iš telefono ir veikia.

#include // iškviečia servo biblioteką, kad galėtume valdyti du servosServo servo1; Servo servo2; // sukuria du servo objektus kiekvienam servo varikliui int a = 0; // stebėjimo kintamasis, skirtas testavimui int q = 0; // kintamasis, leidžiantis palaukti, kol prijungimo procesas prasidės char c; // kintamasis, kuriame yra serijinis pranešimas iš telefono void setup () {attachInterrupt (digitalPinToInterrupt (2), AH, FALLING); // prideda krentantį pertraukimą, kad tiksliai žinotų, kada jutiklinis jutiklis mato, kai telefonas išjungiamas servo1.attach (10); servo2.attach (9); // inicijuoja du servus Serial.begin (9600); // pradeda nuoseklųjį ryšį tokiu pat greičiu, kaip ir „Bluetooth“modulis servo2.write (20); // automatinis servo nustatymas pradinė padėtis servo1.write (180); }

void loop () {

if (Serial.available ()) {// tai patikrina, ar iš telefono kas nors ateina per serijinius kaiščius Tx ir Rx c = Serial.read (); // skaito, kas ateina iš if (c == 't') {// jei serijinis įrenginys nuskaito tuo metu, tai reiškia, kad telefonas yra visiškai įkrautas, atjungimo procesas prasideda servo2.write (120); // atjungia įkroviklio uždelsimą (5000); // laukia, kol įsitikins yra laikas pašalinti servo1.write (110); // perkelia telefoną į vertikalią padėtį, kad signalizuotų //Serial.println("here "); attachInterrupt (digitalPinToInterrupt (2), AH, FALLING); // iš naujo pridedamas pertraukimas}} if (q == 1) {// jei įjungimo sąlyga yra tikra, pradėkite nuo įkroviklio uždelsimo (10000); servo2.write (0); // perkelia servo į poziciją q = 0; // iš naujo nustato sąlygą}}

void AH () {

//Serial.println("in "); servo1.write (180); // numeta telefono platformą į įkrovimo padėtį q = 1; // pradeda sąlygą tęsti procesą // a = 1; detachInterrupt (digitalPinToInterrupt (2)); // atjungia pertrauką, kad nebūtų jokių problemų, susijusių su pertraukimu, prasidedančiu tada, kai to neturėtų būti}

„Android“programa

Čia rodysiu tik tinkamą programą, tačiau taip pat bus pateiktas bandymo kodo failas, vienintelis skirtumas bus paleidžiamos ir „getBattery“klasės pašalinimas. Minėtas serijos kodas yra standartinis telefonams, jungiantiems prie tokių įrenginių kaip modulis.

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

public class MainActivity pratęsia „AppCompatActivity“{

// reikalingų objektų kūrimas Tvarkyklės tvarkyklė; // padeda kilpai Runnable runnable; // nuolat veikia „BluetoothAdapter“mBluetoothAdapter; „Bluetooth“lizdas mmSocket; „Bluetooth“prietaisas mmDevice; OutputStream mmOutputStream; nepastovus loginis sustojimasDarbuotojas; privatus OutputStream outputStream; privati galutinė eilutė DEVICE_NAME = "HC-05"; privatus galutinis UUID PORT_UUID = UUID.fromString ("00001101-0000-1000-8000-00805f9b34fb"); privatus „BluetoothAdapter“įrenginys; privatus „BluetoothSocket“lizdas; @Override protected void onCreate (Bundle savedInstanceState) {// yra instrukcijų rinkinys, kuris vykdomas sukūrus programą super.onCreate (savedInstanceState); // displya creation setContentView (R.layout.activity_main); runnable = new Runnable () {@Orride public void run () {// veikia pakartotinai int level = (int) getBattery (); // gauna dabartinį akumuliatoriaus įkrovos lygį, jei (lygis == 100) {// jei akumuliatoriaus įkrovos lygis pasiekia 100% bandymo {getBT (); // prisijungia prie „Bluetooth“modulio openBT (); // atidaro jį sendData (); // siunčia reikiamus duomenis closeBT (); // uždaro objektą} catch (IOException ex) { }} handler.postDelayed (paleidžiamas, 5000); // a delay}}; tvarkytojas = naujas tvarkytojas (); handler.postDelayed (paleidžiamas, 0); }

public float getBattery () {

Intent batteryIntent = registerReceiver (null, new IntentFilter (Intent. ACTION_BATTERY_CHANGED)); // sukuria veiksmą, kuris jungiasi prie akumuliatoriaus int level = batteryIntent.getIntExtra (BatteryManager. EXTRA_LEVEL, -1); // gauna geresnio lygio int skalę = batteryIntent.getIntExtra (BatteryManager. EXTRA_SCALE, -1); // gauna akumuliatoriaus skalę, jei (lygis == -1 || skalė == -1) {// klaidos atveju 50,0f; } float batt = (lygis/(plūdės) skalė)*100.0f; // gauna tinkamą skalės grąžinimo takelį; // grąžina lygį}

void getBT () {// gauna galimus „Bluetooth“ryšius

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter (); // gauna adapterį, jei (! mBluetoothAdapter.isEnabled ()) {// įsitikina, kad telefonas yra mėlynas, kai ketinama įgalintiBluetooth = naujas ketinimas („BluetoothAdapter. ACTION_REQUEST_ENABLE“); // prašo, kad tai būtų įjungtas, jei ne startActivityForResult (enableBluetooth, 0); } Set pairedDevices = mBluetoothAdapter.getBondedDevices (); // gauna susietų „Bluetooth“sąrašą, jei (pairedDevices.size ()> 0) {// įsitikina, kad yra keletas įrenginių, skirtų („BluetoothDevice device: pairedDevices“) {// kilpos per prietaisai if (device.getName (). lygus ("HC-05")) {// tikrina, ar jis tinkamas vienas mmDevice = device; // išsaugo pertrauką; }}}}

void openBT () meta IOException {

UUID uuid = UUID.fromString ("00001101-0000-1000-8000-00805f9b34fb"); // Standartinis // SerialPortService ID mmSocket = mmDevice.createRfcommSocketToServiceRecord (uuid); // prisijungia prie įrenginio su tinkamu ID mmSocket.connect (); // jungia mmOutputStream = mmSocket.getOutputStream (); // pradeda galimybę siųsti duomenys į „arduino“modulį}

void sendData () meta IOException {// klasę, kuri siunčia t į arduino

mmOutputStream.write ('t'); }

void closeBT () meta IOException {// uždaro visas jungtis prie arduino

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

6 žingsnis: failai

Dėkojame, kad perskaitėte, pridedami failai, kurie buvo naudojami šiame projekte

Rekomenduojamas: