Inhoudsopgave:

Een automatische telefoonoplader: 6 stappen (met afbeeldingen)
Een automatische telefoonoplader: 6 stappen (met afbeeldingen)

Video: Een automatische telefoonoplader: 6 stappen (met afbeeldingen)

Video: Een automatische telefoonoplader: 6 stappen (met afbeeldingen)
Video: How I Design A Hexagon Shadow Box 2024, November
Anonim
Een automatische telefoonoplader
Een automatische telefoonoplader

"Deze instructable is gemaakt om te voldoen aan de projectvereiste van de Makecourse aan de University of South Florida (www.makecourse.com)"

Het idee achter dit project was om een apparaat te maken dat een telefoon kan opladen en vervolgens kan loskoppelen wanneer de telefoon 100% bereikt. Dit zou problemen met overladen stoppen.

Stap 1: Kunststof onderdelen

Kunststof onderdelen
Kunststof onderdelen
Kunststof onderdelen
Kunststof onderdelen
Kunststof onderdelen
Kunststof onderdelen
Kunststof onderdelen
Kunststof onderdelen

Er waren enkele componenten die werden gebruikt die 3D-geprint waren. Deze componenten omvatten een basis, een houder voor de oplader, een tandheugel-tandwielset (een normaal tandwiel en een lineair stuk dat de rotatie verandert in lineaire beweging), en een basis voor alles om op te werken. Deze onderdelen worden in de volgende paragrafen toegelicht. In volgorde van verschijnen

Oplader houder

Het doel hiervan is om de telefoonoplader vast te houden, of op zijn minst een betere en vlakkere basis te geven.

Baseren

De basis heeft ringen voor de telefoonhouder en een rail voor de versnellingsset.

Telefoon houder

Houdt de telefoon natuurlijk vast

Telefoonarm

Beweegt en houdt de telefoon vast

Tandheugeltandwielset

Wordt gebruikt om de telefoonoplader heen en weer te bewegen

Stap 2: Uitsplitsing van niet 3D-geprinte componenten

Dit zijn de componenten die voor het project zijn gekocht of al in het bezit zijn. Voor sommige onderdelen heb ik ze/soortgelijke items op amazon gelinkt, maar voel je vrij om ze overal te kopen.

Micro Servo:

Standaard 0-180 Servo:

HC-05 Bluetooth seriële module:

Telefoon en telefoonoplader

Arduino

Breadboard

Doos of bak voor basis

Aanraaksensor:

Stap 3: Elektronica

Elektronica
Elektronica

Het circuit voor dit project heeft misschien wat nodig, voornamelijk vanwege de HC-05-module. Veel van de modules van dit type hebben een snelheid van ongeveer 3,3V tot 6V, wat binnen het werkbereik van de Arduino ligt. Maar voor seriële communicatie werkt de Rx-pin soms beter met slechts 3,3V. Zoals te zien is in het bovenstaande diagram, zijn de twee servo's aangesloten op de Vin-pin op de Arduino. Deze extra spanning kan door alles geleverd worden, ik gebruikte een 9 volt batterij. De aanraaksensor was aangesloten op de 5V op de Arduino. Dit kwam omdat alle componenten moeite hadden om van dezelfde spanning af te komen. De aanraaksensor is bevestigd aan pin 2 en kan dus als pin-interrupt worden gebruikt. Vervolgens wordt de Bluetooth-module aangesloten op de Rx- en Tx-pinnen voor seriële communicatie. Tussen de Rx-pin op de module en Tx op de Arduino bevindt zich een weerstand van 2 kilo ohm met een verbinding van 1 kilo ohm met aarde. Dit helpt om de binnenkomende spanning te regelen.

Stap 4: Montage

samenkomst
samenkomst

De montage is vrij eenvoudig.

  1. met wat superlijm monteer je je servo's in hun posities, één voor de versnelling door de uitsparing op de basis en één in de buurt van waar de basis van de telefoon is.
  2. Bevestig de aanraaksensor aan de telefoonhouder, zodat deze weet wanneer de telefoon er is.
  3. Bevestig vervolgens het tandwiel en de arm aan hun respectieve servo's
  4. Zorg ervoor dat draden geen interferentie veroorzaken met andere componenten terwijl u uw elektronica vult

Stap 5: Coderen

Er zijn drie sets code die worden gepresenteerd, één code voor de Arduino, die is gemaakt in de Arduino IDE en twee codes die zijn gemaakt in Android Studio. De Android-apps zijn hetzelfde, behalve dat één de volledige app is die de levensduur van de batterij bijhoudt en de andere niet. De tweede is voor testdoeleinden.

Arduino-code

Het belangrijkste punt van deze code is om de aanraaksensor en motoren te bedienen, het ontvangt een commando van de telefoon en handelt ernaar.

#include // roept de servobibliotheek op zodat we de twee servo'sServo servo1 kunnen besturen; Servo servo2;//creëert twee servo-objecten voor elke servomotor int a=0;//volgvariabele voor het testen van int q=0;//een variabele die het mogelijk maakt dat er een vertraging is voordat het pluggin-proces begint char c;// variabele die het seriële bericht bevat van de telefoon void setup() { attachInterrupt(digitalPinToInterrupt(2), AH, FALLING);// voegt een vallende interrupt toe om precies te weten wanneer de aanraaksensor ziet wanneer de telefoon uit is op servo1.attach (10); servo2.attach (9);// initialiseert de twee servo's Serial.begin (9600);// begint de seriële communicatie met een snelheid die vergelijkbaar is met die van de Bluetooth-module servo2.write (20);// stelt de servo's automatisch in op een startpositie servo1.write(180); }

lege lus() {

if (Serial.available()){// dit controleert of er iets van de telefoon binnenkomt via de seriële pinnen Tx en Rx c=Serial.read();// leest wat er binnenkomt als (c== 't'){//als het seriële apparaat op leest, betekent dit dat de telefoon volledig is opgeladen, het loskoppelen begint servo2.write (120);// koppelt de vertraging van de oplader los (5000);// wacht om zeker te zijn er is tijd voor het verwijderen servo1.write(110);//zet de telefoon rechtop om //Serial.println("here"); attachInterrupt(digitalPinToInterrupt(2), AH, FALLING);//sluit de interrupt opnieuw aan } } if (q==1){//als de voorwaarde voor het inpluggen is, begin dan met het bevestigen van de ladervertraging (10000); servo2.write(0);//verplaatst servo naar positie q=0;//reset condition} }

ongeldige AH(){

//Serial.println("in"); servo1.write(180);// laat het telefoonplatform in de oplaadpositie q=1;//start de conditie om het proces voort te zetten //a=1; detachInterrupt (digitalPinToInterrupt(2));// koppelt de interrupt los, zodat er geen problemen zijn met het starten van de interrupt wanneer dat niet zou moeten}

Android-app

Hier zal ik alleen de juiste app weergeven, maar het testcodebestand zal ook worden gegeven, het enige verschil is het verwijderen van de runnable en getBattery-klasse. De genoemde seriële code is degene die standaard is voor telefoons die verbinding maken met apparaten zoals de module.

pakket com.voorbeeld.daniel.make; android.bluetooth. BluetoothAdapter importeren; android.bluetooth. BluetoothDevice importeren; android.bluetooth. BluetoothSocket importeren; android.os. Handler importeren; android.support.v7.app. AppCompatActivity importeren; android.os. Bundel importeren; android.content importeren. Intentie; android.content. IntentFilter importeren; android.os. BatteryManager importeren; import java.io. IOException; import java.io. OutputStream; import java.util. Set; java.util. UUID importeren;

openbare klasse MainActivity breidt AppCompatActivity uit {

// het creëren van noodzakelijke objecten Handler-handler;//helpt met de lus Runnable runnable;//loopt continu BluetoothAdapter mBluetoothAdapter; BluetoothSocket mmSocket; BluetoothApparaat mmApparaat; OutputStream mmOutputStream; vluchtige boolean stopWorker; privé OutputStream outputStream; privé finale String DEVICE_NAME="HC-05"; privé finale UUID PORT_UUID=UUID.fromString("00001101-0000-1000-8000-000805f9b34fb"); privé BluetoothAdapter-apparaat; privé BluetoothSocket-aansluiting; @Override protected void onCreate(Bundle savedInstanceState) {//is een set instructies die wordt uitgevoerd wanneer de app wordt gemaakt super.onCreate(savedInstanceState);//displya creation setContentView(R.layout.activity_main); runnable = new Runnable() { @Override public void run() {//wordt herhaaldelijk uitgevoerd int level = (int) getBattery();// haalt het huidige batterijniveau op als (level==100){//if het batterijniveau bereikt 100% probeer {getBT();//maakt verbinding met de bluetooth-module openBT();//opent het sendData();//stuurt de benodigde gegevens closeBT();//sluit het object} catch (IOException ex) { } } handler.postDelayed (uitvoerbaar, 5000);//een vertraging } }; handler = nieuwe handler(); handler.postDelayed (uitvoerbaar, 0); }

openbare float getBattery() {

Intent batteryIntent= registerReceiver(null, new IntentFilter(Intent. ACTION_BATTERY_CHANGED));// maakt de actie die verbinding maakt met de batterij int level = batteryIntent.getIntExtra(BatteryManager. EXTRA_LEVEL, -1);//krijgt het betere niveau int scale = batteryIntent.getIntExtra(BatteryManager. EXTRA_SCALE, -1);//haalt de schaal van de batterij als (niveau == -1 || schaal == -1) {//in geval van misstap return 50.0f; } float batt = (level/(float)scale)*100.0f;//krijgt de juiste scale return batt;//retourneert het niveau}

void getBT(){//krijgt de mogelijke bluetooth-verbindingen

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//krijgt de adapter if(!mBluetoothAdapter.isEnabled()) {//zorgt ervoor dat de telefoon blue tooth heeft op Intent enableBluetooth = new Intent (BluetoothAdapter. ACTION_REQUEST_ENABLE);//verzoekt om ingeschakeld indien niet startActivityForResult(Bluetooth inschakelen, 0); } Set pairedDevices = mBluetoothAdapter.getBondedDevices();//haalt de lijst met gekoppelde bluetooth op if(pairedDevices.size() > 0) {//zorgt ervoor dat er een aantal apparaten zijn voor (BluetoothDevice device: pairedDevices) {// loopt door de devices if(device.getName().equals("HC-05")) {//controleert of het de juiste is mmDevice = device;//saves it break; } } } }

void openBT() gooit IOException {

UUID uuid = UUID.fromString ("00001101-0000-1000-8000-000805f9b34fb"); //Standard //SerialPortService ID mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);//maakt verbinding met het apparaat met de juiste id mmSocket.connect();//verbindt mmOutputStream = mmSocket.getOutputStream();//start de mogelijkheid om te verzenden gegevens naar de Arduino-module }

void sendData() gooit IOException {//class die de t naar de Arduino stuurt

mmOutputStream.write('t'); }

void closeBT() gooit IOException {//sluit alle verbindingen met de arduino

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

Stap 6: Bestanden

Bedankt voor het lezen, bijgevoegd zijn de bestanden die in dit project zijn gebruikt

Aanbevolen: