Arduino i HTC Dream

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Teclat extern per al HTC Dream

Un dels principals inconvenients del HTC Dream (inconvenient del Android) és que no està implementat el bluetooth. Sembla ser que només funciona els auriculars bluetooth per escoltar música. El hardware del G1 suporta USB, però no està implementat pel SO Android.

Hi ha projectes de controlar dispositius externs (robot, hardware) amb el HTC Dream a través de DTMF:

Una possibilitat és utilitzar tons DTMF a través de l'auricular (http://en.wikipedia.org/wiki/DTMF, http://developer.android.com/reference/android/media/ToneGenerator.html)

Amb aquesta tècnica podem controlar amb el HTC Dream un dispositiu extern, però nosaltres volem fer-ho al revés: des d'un teclat extern importar la informació al HTC Dream.

Arduino i servidor web

El servidor web amb Arduino es pot implementar via Ethernet o via wifi, amb dos shields diferents.

arduino web server. Es fa amb el Arduino Ethernet shield (no és wifi, és cable ethernet)

Com es pot fer un teclat extern per al HTC Dream, donat que no es pot utilitzar el USB del HTC Dream? Doncs una possibilitat, crec jo, és utilitzar Arduino com a servidor web i el Android com a client:

client.println("<br />");

(veure http://arduino.cc/en/Tutorial/WebServer), i per tant el que escric en el teclat es visualitza en el client web del HTC Dream.

La part de connectar el Arduino amb un external keyboard hauria de ser fàcil: PS2Keyboard - A small library that deals with PS/2 based keyboards http://www.arduino.cc/playground/Main/InterfacingWithHardware (compte perquè el resum-esquema no està ben fet i hi ha altres opcions que no surten en l'esquema).

Dins la secció Input > Input Devices > Keyboard/Keypads > PS2Keyboard -> http://www.arduino.cc/playground/Main/PS2Keyboard

Per tal de poder utilitzar signes de puntuació i backspace, he d'utilitzar PS2KeyboardExt (que és una extensió de l'anterior)

#include <PS2Keyboard.h>
#include <PS2KeyboardExt.cpp>

Preus:

wifi i arduino: WiShield 1.0 -> http://www.asynclabs.com/

La solució wifi vindria per WiShield, tot i que no he trobat informació a la web d'Arduino. WiShield: a shield to give your Arduino Diecimilia or Duemilanove wifi connectivity to the internet. Simple to use interface to allow your Arduino to serve webpages or talk to other clients over TCP/IP

WiShield Wi-Fi Module Features:

    * 802.11b Wi-Fi certified
          o 1Mbps and 2Mbps throughput speeds 
    * Supports both infrastructure (BSS) and ad hoc (IBSS) wireless networks
    * Ability to create secured and unsecured networks
          o WEP (64-bit and 128-bit)
          o WPA/WPA2 (TKIP and AES) PSK 
    * Low power usage
          o Sleep mode: 250μA
          o Transmit: 230mA
          o Receive: 85mA 

En principi la solució per acoplar un teclat extern amb el Android (donada la impossibilitat d'utilitzar bluetooth per transmetre fitxers) és:

Arduino i MicroSD Module

Ara bé, si el que volem és una solució per escriure i prou, podem plantejar-nos d'utilitzar una solució només-Arduino, sense el HTC Dream. Seria qüestió d'escriure directament en una memòria SD. Aleshores aquesta memòria SD es podria passar al HTC Dream o a un ordinador. Evidentment, no és molt útil de cara a editar text, però si es tracta d'escriure a raig sí que pot ser útil.

MicroSD Module for Arduino: http://www.sensor-networks.org/index.php?page=0827727742, http://www.libelium.com/tienda/catalog/product_info.php?products_id=66

Són 20 e

HTC Dream i headsets d'audio

Per fer uns cascs d'audio (headsets) necessito el breakout que ja tinc.

| A B C D E |
\1 2 3 4 5 6|

A: GND
B: NC
C: +DATA
D: -DATA
E: +5v

1: +Mic
2: +Right
3: Switch / Rx / CABLE_IN2
4: GND / Tx / CABLE_IN1
5: GND
6: +Left 

El breakout que jo he comprat:

6   9   11  5
O   O   O   O
7   8   10  4
O   O   O   O
1   2   3
O   O   O

1: USB VCC +5v
2: USB Data -
3: USB Data +
4: N / C
5: USB GND
6: Left Audio +
7: Labeled "AG" (també serial 2.8V Level GND)
8: Audio - (GND) Labeled "CK" (també serial 2.8V TX Output)
9: Switch (Talk) Labeled "OT" (també serial 2.8V RX Input)
10: Right Audio +
11: Mic +
12: Chassis Ground (GND)

Aquest connector en diuen EMU (Enhanced Mini USB), i es diu Enhanced perquè a part de dades també porta audio. La part de dalt (A,B,C,D,E) es correspon a dades, i la part de baix (1,2,3,4,5,6) es correspon a audio.

Però compte, que per fer un headset també necessitaré el pin A:

pin 4 is linked internally to pin A and this is how the device detects a headset connection,
by grounding pin 4

Per tant, per fer el headset necessito:

2: +Right -> pin 10 del breakout
4: GND -> pin 8 del breakout (pontejat amb el pin 5 del breakout (A))
6: +Left -> pin 6 del breakout
A: GND -> pin 5 del breakout (pontejat amb el pin 8)

Arduino i serial-to-usb

la idea és que els valors dels teclats es passen via senyal sèrie, i per enviar-los al HTC Dream s'han de convertir a USB. Sembla ser que hauria de funcionar, però segur que dóna molts mal de caps.

Com a pas previ es pot començar fent el projecte http://www.instructables.com/id/Android_G1_Serial_Cable/

Nota: ja he fet aquest cable (7-10-2009), però realment no veig per què em pot servir...

M'he registrat a instructables.com: joan_quintana@yahoo.com, jonibigut/jq****

Es tracta d'un conversor serial-to-USB, però no em queda clara la utilitat. El que està clar és que el protocol sèrie RS232 i el protocol sèrie USB són diferents, i per tant aquest conversor converteix un protocol en l'altre.

A part del connector ExtUSB per connectar el HTC Dream es necessita un USB to 2.8V (or 3.3v) serial level converter, que converteix de USB a serie i a més a més fa una conversió del voltatge, doncs la senyal que ha d'entrar al HTC Dream és de 2.8 o 3.3V (sembla ser que totes dues són correctes).

Els pins de connexió del mini-USB del HTC Dream es poden veure aquí: http://www.tracyandmatt.co.uk/blogs/index.php/2006/09/10/htc_hermes_usb_connector_pin_config

| A B C D E |
\1 2 3 4 5 6|

A: GND
B: NC
C: +DATA
D: -DATA
E: +5v

1: +Mic
2: +Right
3: Switch / Rx / CABLE_IN2
4: GND / Tx / CABLE_IN1
5: GND
6: +Left 

El connector ExtUSB es pot comprar a http://www.podgizmo.com (http://www.podgizmo.com/index.php?act=viewProd&productId=30) o http://www.sparkfun.com (http://www.sparkfun.com/commerce/product_info.php?products_id=9167), però de moment veig que tenen esgotades les existències.

On sí que es pot trobar i hi ha stock és a http://www.coolcomponents.co.uk/catalog/product_info.php?products_id=266.

El que sí que està en stock és el HTC ExtUSB 11 Pin USB Connector (http://www.podgizmo.com/index.php?act=viewProd&productId=29), però aquest no va tan bé per soldar (tot i que també és possible). A http://www.podgizmo.com està en stock.

This isn't standard RS232, so don't hook it directly to an RS232 port!  
It looks like serial is at cmos ttl levels (~2.8 volts) so you will  
need to make sure you are communicating at that level. Sparkfun also  
sells an adjustable-voltage ttl-serial converter which worked for me.

The port runs at 115200bps, 8N1. 

USB to 2.8V (or 3.3v) serial level converter

Per al USB to 2.8V (or 3.3v) serial level converter tinc vàries possibilitats:

Description: This is a basic breakout board for the FTDI FT232RL USB to serial IC. The pinout of this board matches the FTDI cable to work with official Arduino and cloned 3.3V Arduino boards. It can also be used for general serial applications. The major difference with this board is that it brings out the DTR pin as opposed to the RTS pin of the FTDI cable. The DTR pin allows an Arduino target to auto-reset when a new Sketch is downloaded. This is a really nice feature to have and allows a sketch to be downloaded without having to hit the reset button. This board will auto reset any Arduino board that has the reset pin brought out to a 6-pin connector.

Lo bo del cas és que l'Arduino també té el xip FTDI FT232RL. En el cas de l'Arduino, això serveix per convertir un senyal RS232 (com per exemple un teclat connectat, PROJ22) a USB i entrar el senyal a l'ordinador. En el cas de l'ordinador, com que està instal.lat un driver FTDI, aquest té la missió de fer un pot COM virtual (/dev/ttyUSB0) i per tant és com si tinguéssim un port sèrie. En això es basa la consola Sèrie de l'Arduino.

En principi, doncs, si connecto l'Arduino a aquest producte s'haurien de comunicar totalment sense cap problema (no?). Així doncs, l'esquema per connectar un teclat extern al HTC Dream seria:

Teclat extern PS2 > Arduino > USB to 2.8V (or 3.3v) serial level converter > connector ExtUSB > HTC Dream (Android)

Un altre problema és les possibilitats de programar el Android tot el tema de la senyal sèrie que arriba...

pàgina web dels drivers FTDI: http://www.ftdichip.com/FTDrivers.htm

Finalment jo utilitzo aquesta possibilitat: (Breakout Board for FT232RL USB to Serial)

El compro a coolcomponents.co.uk, juntament amb el connector per al HTC. Per tant, ara ja tindré tot el material necessari. (em falta el cable USB, doncs necessito miniUSB a USB normal).

Important llegir aquest post en un forum:

És bastant clarificador. Un que vol connectar arduino amb Android. El pitjor de tot: es comenta que Android encara no té implementada la llibreria sèrie.

There is no API for this so you have to write your own serial communication protocol
and apps for both the g1 and the android.My friend is loading the Android kernel, and will work on enabling Serial Data, and including API's for it.

http://forum.xda-developers.com/archive/index.php/t-475006.html

Now, I heard you say that a kernel patch could enable serial communication through the USB port.
...
My friend is loading the Android kernel, and will work on enabling Serial Data, and including API's for it.
...
EDIT: If you check http://code.google.com/p/android/issues/detail?id=738 one of the devs explains:
The 11-pin extended USB connector does have a TTL level serial port (Linux sees it as /dev/ttyMSM2 -- you'll need to build a kernel with the H2W driver and FIQ serial debugger disabled for it to be usable).
The Android devices available to date are disappointingly poor in I/O. I am using a
HTC Magic for development right now. One project needs to interface with external
sensors. Bluetooth serial profile or USB would be the obvious choices, but neither
are available to me with the HTC Magic. Best I can tell the only practical way of
getting data in/out of the device is to interface via WiFi... which is a whole lot of
extra electronic baggage the sensor pack needs to carry. Folks: I/O is very important
for innovative applications.
Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines