Spisu treści:

Automatyczna ładowarka do telefonu: 6 kroków (ze zdjęciami)
Automatyczna ładowarka do telefonu: 6 kroków (ze zdjęciami)

Wideo: Automatyczna ładowarka do telefonu: 6 kroków (ze zdjęciami)

Wideo: Automatyczna ładowarka do telefonu: 6 kroków (ze zdjęciami)
Wideo: 6 OPCJI które MUSISZ Zmienić w swoim Androidzie! Poradnik 2023 2024, Listopad
Anonim
Automatyczna ładowarka do telefonu
Automatyczna ładowarka do telefonu

„Ta instrukcja została stworzona w celu spełnienia wymagań projektowych Makecourse na University of South Florida (www.makecourse.com)”

Ideą tego projektu było stworzenie urządzenia, które mogłoby ładować telefon, a następnie odłączyć go, gdy telefon osiągnie 100%. To powstrzymałoby problemy z nadmiernym ładowaniem.

Krok 1: Elementy z tworzyw sztucznych

Elementy z tworzyw sztucznych
Elementy z tworzyw sztucznych
Elementy z tworzyw sztucznych
Elementy z tworzyw sztucznych
Elementy z tworzyw sztucznych
Elementy z tworzyw sztucznych
Elementy z tworzyw sztucznych
Elementy z tworzyw sztucznych

Wykorzystano kilka komponentów, które zostały wydrukowane w 3D. Te elementy składały się z podstawy, uchwytu na ładowarkę, zębatki i zębatki (normalna przekładnia i element liniowy, który zmienia ruch obrotowy na ruch liniowy) oraz podstawy do wszystkiego, na czym można było operować. Te elementy zostaną wyjaśnione w kolejnych akapitach. W kolejności pojawiania się

Uchwyt ładowarki

Celem tego jest trzymanie ładowarki telefonu lub przynajmniej nadanie jej lepszej i równej podstawy.

Baza

Podstawa posiada pierścienie do uchwytu telefonu oraz tor na zestaw narzędzi.

Posiadacz telefonu

Oczywiście trzyma telefon

Uzbrojenie telefonu

Porusza i trzyma telefon

Zestaw zębatek i zębatek

Służy do przesuwania ładowarki telefonu tam iz powrotem

Krok 2: Rozbicie komponentów innych niż drukowane w 3D

Są to komponenty, które zostały zakupione do projektu lub już posiadane. W przypadku niektórych części, które połączyłem z nimi/podobnymi przedmiotami na amazon, możesz je kupić w dowolnym miejscu.

Micro Servo:

Serwo standardowe 0-180:

Moduł szeregowy Bluetooth HC-05:

Telefon i ładowarka do telefonu

Arduino

Deska do krojenia chleba

Pudełko lub kosz na podstawę

Czujnik dotykowy:

Krok 3: Elektronika

Elektronika
Elektronika

Układ do tego projektu może jednak wymagać trochę, głównie ze względu na moduł HC-05. Wiele modułów tego typu ma napięcie od około 3,3 V do 6 V, co mieści się w zakresie działania Arduino. Ale w przypadku komunikacji szeregowej pin Rx czasami działa lepiej przy tylko 3,3 V. Jak widać na powyższym schemacie, dwa serwa są podłączone do pinu Vin w Arduino. To dodatkowe napięcie może być dostarczane przez wszystko, użyłem baterii 9 woltów. Czujnik dotykowy został podłączony do 5V na Arduino. Wynikało to z tego, że wszystkie komponenty miały problemy z odprowadzeniem tego samego napięcia. Czujnik dotykowy jest podłączony do pinu 2, dzięki czemu może być używany jako przerwanie pinu. Następnie moduł bluetooth jest podłączony do pinów Rx i Tx w celu komunikacji szeregowej. Pomiędzy pinem Rx na module a Tx na Arduino znajduje się rezystor 2 kiloomów z 1 kiloomem podłączonym do masy. Pomaga to regulować napięcie wchodzące.

Krok 4: Montaż

montaż
montaż

Montaż jest dość prosty.

  1. za pomocą super kleju zamontuj serwa na swoich pozycjach, jeden na koło zębate przy wycięciu w podstawie, a drugi w pobliżu podstawy telefonu.
  2. Przymocuj czujnik dotykowy do uchwytu telefonu, aby wiedział, kiedy telefon się tam znajduje.
  3. Następnie przymocuj sprzęt i ramię do odpowiednich serw
  4. Upewnij się, że przewody nie kolidują z innymi komponentami podczas napełniania elektroniki

Krok 5: Kod

Zaprezentowane zostaną trzy zestawy kodu, jeden kod dla Arduino, który został stworzony w Arduino IDE i dwa kody, które zostały wykonane w Android Studio. Aplikacje na Androida są takie same, z wyjątkiem jednej pełnej aplikacji, która śledzi żywotność baterii, a jedna nie. Drugi służy do celów testowych.

Kod Arduino

Głównym celem tego kodu jest obsługa czujnika dotykowego i silników, odbiera polecenie z telefonu i działa na nim.

#include //wywołuje bibliotekę serwo, dzięki czemu możemy sterować dwoma serwomechanizmamiServo servo1; Servo servo2;//tworzy dwa obiekty serwo dla każdego serwosilnika int a=0;//zmienna śledząca do testowania int q=0;//zmienna pozwalająca na opóźnienie przed rozpoczęciem procesu podłączania char c;// zmienna zawierająca komunikat szeregowy z telefonu void setup() { attachInterrupt(digitalPinToInterrupt(2), AH, FALLING);// dołącza przerwanie opadające, aby dokładnie wiedzieć, kiedy czujnik dotyku widzi, kiedy telefon jest wyłączony na servo1.attach (10); servo2.attach(9);// inicjuje dwa serwa Serial.begin(9600);// rozpoczyna komunikację szeregową z szybkością podobną do szybkości modułu bluetooth servo2.write(20);//auto ustawia serwa na pozycja startowa servo1.write(180); }

pusta pętla () {

if (Serial.available()){// to sprawdza, czy coś przychodzi z telefonu przez styki szeregowe Tx i Rx c=Serial.read();//odczytuje, co przychodzi z if (c== 't'){//jeśli urządzenie szeregowe odczyta to oznacza to, że telefon jest w pełni naładowany, rozpoczyna się proces odłączania servo2.write(120);//odłącza opóźnienie ładowarki (5000);//czeka, aby się upewnić jest czas na usunięcie servo1.write(110);// ustawia telefon w pozycji pionowej, aby zasygnalizować //Serial.println("tu"); attachInterrupt(digitalPinToInterrupt(2), AH, FALLING);//ponownie dołącza przerwanie } } if (q==1){//jeśli warunek podłączenia jest spełniony, zacznij od dołączenia opóźnienia ładowarki (10000); servo2.write(0);//przenosi serwo na pozycję q=0;//resetuje warunek } }

nieważne AH() {

//Serial.println("w"); servo1.write(180);// ustawia platformę telefoniczną w pozycji ładowania q=1;//uruchamia warunek kontynuacji procesu //a=1; detachInterrupt (digitalPinToInterrupt(2));//odłącza przerwanie, dzięki czemu nie będzie żadnych problemów z uruchomieniem przerwania, kiedy nie powinno }

Aplikacja na Androida

Tutaj wyświetlę tylko odpowiednią aplikację, ale zostanie również podany plik z kodem testowym, jedyną różnicą będzie usunięcie klas runnable i getBattery. Wspomniany kod seryjny to ten, który jest standardem dla telefonów łączących się z urządzeniami takimi jak moduł.

pakiet com.przyklad.daniel.make; importuj android.bluetooth. BluetoothAdapter; importuj android.bluetooth. BluetoothDevice; importuj android.bluetooth. BluetoothSocket; importuj android.os. Handler; importuj android.support.v7.app. AppCompatActivity; importuj android.os. Bundle; importuj android.treść. Intent; importuj android.content. IntentFilter; importuj android.os. BatteryManager; import java.io. IOException; import java.io. OutputStream; import java.util. Set; import java.util. UUID;

klasa publiczna MainActivity rozszerza AppCompatActivity {

// tworzenie potrzebnych obiektów Handler handler;//pomaga w pętli Runnable runnable;//działa w sposób ciągły BluetoothAdapter mBluetoothAdapter; BluetoothGniazdo mmGniazdo; BluetoothUrządzenie mmUrządzenie; Strumień wyjściowy mm Strumień wyjściowy; lotny stop logicznyWorker; prywatny OutputStream outputStream; prywatny końcowy String DEVICE_NAME="HC-05"; prywatny końcowy UUID PORT_UUID=UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); prywatne urządzenie BluetoothAdapter; prywatne gniazdo BluetoothSocket; @Override protected void onCreate(Bundle savedInstanceState) {//to zestaw instrukcji uruchamianych podczas tworzenia aplikacji super.onCreate(savedInstanceState);//displya creation setContentView(R.layout.activity_main); runnable = new Runnable() { @Override public void run() {//uruchamia się wielokrotnie int level = (int) getBattery();// pobiera aktualny poziom baterii if (level==100){//jeśli poziom baterii osiąga 100% try { getBT();//łączy się z modułem bluetooth openBT();//otwiera go sendData();//wysyła niezbędne dane closeBT();//zamyka obiekt } catch (IOException ex) { } } handler.postDelayed(runnable, 5000);//a opóźnienie } }; handler = nowy Handler(); handler.postDelayed(uruchamialny, 0); }

public float pobierzBattery() {

Intent batteryIntent= registerReceiver(null, new IntentFilter(Intent. ACTION_BATTERY_CHANGED));// tworzy akcję, która łączy się z poziomem baterii int = batteryIntent.getIntExtra(BatteryManager. EXTRA_LEVEL, -1);//pobiera poziom ulepszenia int scale = batteryIntent.getIntExtra(BatteryManager. EXTRA_SCALE, -1);//pobiera skalę baterii if (poziom == -1 || scale == -1) {//w przypadku błędnego kroku zwróć 50.0f; } float batt = (level/(float)scale)*100.0f;//pobiera odpowiednią skalę zwraca batt;//zwraca poziom }

void getBT(){//pobiera możliwe połączenia bluetooth

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//pobiera adapter if(!mBluetoothAdapter.isEnabled()) {//upewnia się, że telefon ma niebieski ząb w trybie Intent enableBluetooth = new Intent(BluetoothAdapter. ACTION_REQUEST_ENABLE);//prosi o to włączone, jeśli nie startActivityForResult(enableBluetooth, 0); } Set pairedDevices = mBluetoothAdapter.getBondedDevices();//pobiera listę połączonych urządzeń bluetooth if(pairedDevices.size() > 0) {//upewnia się, że są jakieś urządzenia dla(BluetoothDevice device: pairedDevices) {//przechodzi przez devices if(device.getName().equals("HC-05")) {//sprawdza, czy jest to właściwe mmDevice = device;//zapisuje przerwanie; } } } }

void openBT() wyrzuca IOException {

UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); //Standard //SerialPortService ID mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);//łączy się z urządzeniem o odpowiednim identyfikatorze mmSocket.connect();//connects mmOutputStream = mmSocket.getOutputStream();//uruchamia możliwość wysyłania dane do modułu arduino }

void sendData() wyrzuca IOException {//klasa, która wysyła t do arduino

mmOutputStream.write('t'); }

void closeBT() wyrzuca IOException {//zamyka wszystkie połączenia z arduino

stopWorker = prawda; mmOutputStream.close(); mmSocket.zamknij(); } }

Krok 6: Pliki

Dziękuję za przeczytanie, w załączeniu pliki, które zostały wykorzystane w tym projekcie

Zalecana: