Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
„Š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
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
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 yra gana paprastas.
- 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.
- Pritvirtinkite jutiklinį jutiklį prie telefono laikiklio, kad jis žinotų, kada telefonas yra.
- Tada pritvirtinkite pavarą ir svirtį prie atitinkamų servo
- 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