Bluetooth Media Player Controller

Introducere

Un controller/telecomanda care se conecteaza la telefon prin Bluetooth si controleaza media player-ul telefonului.

Ideea a pornit de la nevoia practica de a dat seek forward la o melodie atunci cand nu as putea sa fac asta, de exemplu, in timp ce conduc. Acest controller m-ar ajuta sa dau skip forward fara sa:

  • Astept un semafor
  • Iau mana de pe volan
  • Ma uit la telefon
  • Ies din Waze
  • A modifica manual

Ca rezultat, pot sa dau seek forward in melodie fara sa iau ochii de pe drum sau mana de pe volan (daca lipesc controller-ul de volan).

Descriere generală

Hardware Design

  • Lista de piese:
    • Arduino UNO
    • Modul Bluetooth HC-06/HC-05
    • 4 Butoane pentru pauza/play, seek forward, next si back
    • Potentiometru pentru Volum
    • Rezistente (1k Ohm si 2k Ohm sau alternativ, inca 2 de 1k legate in serie)
    • Fire
    • Baterie 5V

Schema Tinkercad

Implementare Fizica

Software Design

  • Parte de software este reprezentata de catre:
    • Programarea Arduino in Arduino IDE
    • Aplicatie Android in Android Studio
    • Biblioteca 3rd-Party:
      • PinChangeInterrupt, da handle la intreruperile de pe pinii care nu au intreruperi de tipul INT0/1

Programul Arduino

  • Programul Arduino are ca scop citirea inputului de la butoane si potentiometru, si tranzmiterea acestor informatii catre telefon prin intermediul modulului Bluetooth HC-06. Pentru a facilita conexiunea cu modulul Bluetooth, folosim interfata UART (Serial).
  • Am folosit intreruperi pentru a da handle la apasatul butoanelor, de asemenea am facut debounce la input.
  • Am folosit ADC-ul Arduino pentru a citi valoarea data de Potentiometru, si am tradus-o intr-un range de la 0 la 99, dupa am folosit un timer pentru a transmite aceasta informatie din 100 in 100 ms
  • Codificarea mesajelor s-a facut in felul urmator:
    • Comanda Play/Pause = “P!” (pause/play)
    • Comanda Seek Forward = “F!” (forward)
    • Comanda Next = “N!” (next)
    • Comanda Back = “B!” (back)
    • Volum = ”![0-99]” (! urmat de numere in intervalul 0 - 99)
  • La fiecare 5 secunde, Arduino trimite un messaj de awake “UP” pentru a evita deconectarea automata.

Aplicatie Android

  • Aplicatia Android creeaza conexiunea cu modulul HC-06 atasat Arduino-ului si obtine toate sesiunile media in decurs pe telefon in acel moment, intr-un thread separat asteapta mesaje de la modulul Bluetooth, le interpreteaza si executa actiunea dorita.

Detalii Implementare

  • Pentru mai multe detalii, codul este comentat si poate fii accesat pe GitHub-ul din sectiunea Download

Permisiuni Aplicatie

  • Aplicatia Android necesita permisiuni speciale “Special Notification Permission” care trebuie data manual si explicit din setarile telefonului.

Rezultate Obţinute

  • Din cauza naturii proiectului, este greu sa adaug imagini asa ca am facut un mic filmulet care demonstreaza functionalitatea.

Concluzii

Dupa o batalie majora cu API-ul Android, am reusit sa dau skip 10 secunde in fata…

Motivul principal pentru care am facut proiectul a fost si cel mai greu de implementat dar in final merge si acum pot sa dau skip in fata fara sa iau ochii de pe drum!

Foarte interesanta implementarea, m-a speriat putin faptul ca a trebuit sa adaug un divizor de tensiune (pinul RX al modulului HC-05/HC-06 are o limita de 3.3V) dar chiar a fost ok.

Download

Bibliografie/Resurse

pm/prj2023/amocanu/media-player-controller.txt · Last modified: 2023/05/29 23:52 by daniel.sohanian
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0