lunedì 2 aprile 2012

ip-cam motorizzata ultra economica con carambola, arduino e iphone o tablet android PARTE 1

INTRO:
Il mio ultimo progetto, mi ha dato molte soddisfazioni! Ci sono un bel po' di cose sul piatto quando si decide di fare una ip-cam con arduino specialmente se si vuole aggiungerci la possibilità di controllarla da remoto per poter spostare l'inquadratura magari dal proprio iphone o dal proprio tablet.
Arduino da solo non credo sia in grado di gestire uno streaming di una webcam da solo (se potete smentitemi che ne sarei felicissimo!), carambola si. Sebbene in teoria sia possibile controllare dei servo motori direttamente da carambola, credo che un microcontrollore lo possa fare meglio e più facilmente, d'altra parte carambola è l'ideale per gestire uno stack tcpip completo, un webserver seppur minimo, un linguaggio di scripting comodo (nel mio caso php a cui voglio bene nonostante i difetti!) e sopratutto mjpeg per lo streaming video! Insomma l'accoppiata mi piace.... mi piace tantissimo.

MATERIALE UTILIZZATO:
- Arduino 2009
- Carambola + devboard
- webcam
- servo
- breadboard

FIRST THINGS FIRST: SETUP DI CARAMBOLA
Innanzi tutto bisogna far funzionare carambola ed installare tutti i moduli del kernel necessari.
La cosa sarebbe anche abbastanza semplice perchè carambola usa come SO openwrt, un famosissimo fork di linux pensato per sistemi embedded,  il quale ha il comodo opkg come gestore di pacchetti.
Ci sono davvero tantissimi programmi nei repositori ma attualmente pochi disponibili nel repository ufficiale di carambola. Poco male si puo' sfruttare un repository alternativo (che per altro era il primo repository utilizzato dalle prime versioni di carambola) ma attenzione i moduli del kernel installati dal nuovo repositori non funzionano perchè nel frattempo il kernel è cambiato. Per cui bisogna fare attenzione quando si compila l'openwrt di selezionare dal make menuconfig tutti i moduli necessari. Sebbene sia possibile compilarli a parte ed installarli successivamente io l'ho trovato un po' incasinato e ho preferito mangiarmi un po' di merda e ricompilare da capo.
Di seguito la lista dei moduli che ho installato sulla mia carambola:
------

root@OpenWrt:~# lsmod
Module                  Size  Used by    Not tainted
uvcvideo               51952  1
ftdi_sio               26464  1
v4l2_common             4192  0
videodev               61232  3 uvcvideo,v4l2_common
usb_storage            32672  0
usbserial              22304  3 ftdi_sio
i2c_gpio                1360  0
i2c_algo_bit            4208  1 i2c_gpio
dwc_otg                58800  0
i2c_dev                 4016  0
i2c_core               12336  5 v4l2_common,videodev,i2c_gpio,i2c_algo_bit,i2c_dev
nop_usb_xceiv           1168  0
nf_nat_irc               816  0
nf_conntrack_irc        2512  1 nf_nat_irc
nf_nat_ftp               992  0
nf_conntrack_ftp        4448  1 nf_nat_ftp
ipt_MASQUERADE           944  1
iptable_nat             2128  1
nf_nat                 10048  4 nf_nat_irc,nf_nat_ftp,ipt_MASQUERADE,iptable_nat
xt_conntrack            2112  3
xt_CT                   1072  0
xt_NOTRACK               464  0
iptable_raw              560  1
xt_state                 624  0
nf_conntrack_ipv4       3824  6 iptable_nat,nf_nat
nf_defrag_ipv4           624  1 nf_conntrack_ipv4
nf_conntrack           36544 12 nf_nat_irc,nf_conntrack_irc,nf_nat_ftp,nf_conntrack_ftp,ipt_MASQUERADE,iptable_nat,nf_nat,xt_conntrack,xt_CT,xt_NOTRACK,xt_state,nf_conntrack_ipv4
sd_mod                 22496  0
pppoe                   7200  0
pppox                   1152  1 pppoe
ipt_REJECT              1696  2
xt_TCPMSS               1952  0
ipt_LOG                 6000  0
xt_comment               416  0
xt_multiport            1120  0
xt_mac                   544  0
xt_limit                 960  1
iptable_mangle           816  1
iptable_filter           624  1
ip_tables               8960  4 iptable_nat,iptable_raw,iptable_mangle,iptable_filter
xt_tcpudp               1600  3
x_tables               10080 18 ipt_MASQUERADE,iptable_nat,xt_conntrack,xt_CT,xt_NOTRACK,iptable_raw,xt_state,ipt_REJECT,xt_TCPMSS,ipt_LOG,xt_comment,xt_multiport,xt_mac,xt_limit,iptable_mangle,iptable_filter,ip_tables,xt_tcpudp
gpio_dev                1328  0
ppp_async               6016  0
ppp_generic            18576  3 pppoe,pppox,ppp_async
slhc                    4176  1 ppp_generic
vfat                    7728  0
fat                    41056  1 vfat
ext4                  213408  0
jbd2                   36800  1 ext4
mbcache                 3504  1 ext4
rt2800usb              12096  0
rt2800pci               5568  0
rt2800lib              40784  2 rt2800usb,rt2800pci
rt2500usb              17504  0
rt2x00usb               7344  2 rt2800usb,rt2500usb
rt2x00soc               1120  1 rt2800pci
rt2x00pci               1856  1 rt2800pci
rt2x00lib              37520  7 rt2800usb,rt2800pci,rt2800lib,rt2500usb,rt2x00usb,rt2x00soc,rt2x00pci
mac80211              226592  4 rt2800lib,rt2x00usb,rt2x00soc,rt2x00lib
usbcore                94896  9 uvcvideo,ftdi_sio,usb_storage,usbserial,dwc_otg,rt2800usb,rt2500usb,rt2x00usb
scsi_mod               68352  2 usb_storage,sd_mod
nls_base                4544  3 vfat,fat,usbcore
crc16                    944  1 ext4
crc_itu_t                944  0
crc_ccitt                944  2 ppp_async,rt2800lib
eeprom_93cx6            1056  0
cfg80211              136144  2 rt2x00lib,mac80211
compat                  3200  1 mac80211
lib80211_crypt_tkip     6736  0
lib80211_crypt_ccmp     3792  0
lib80211_crypt_wep      1920  0
lib80211                2592  3 lib80211_crypt_tkip,lib80211_crypt_ccmp,lib80211_crypt_wep
arc4                     768  2
aes_generic            29632  0
crypto_algapi           9024  2 arc4,aes_generic
leds_gpio               1552  0
input_core             19824  2 uvcvideo


------





Nessun commento:

Posta un commento