lunedì 7 luglio 2014

Beacon su IOS


A seguito delle prove effettuate in questo post ed in questo post (usando in entrambi i casi un telefono Moto G con Android e librerie Radius) mi sono convertito ad IOS ed ho ripetuto l'esperienza usando un IPhone 4S con le medesime antenne usate in precedenza e le API di IOS



non ho ancora capito bene il motivo ma sembra che il segnale risulta nettamente piu' stabile su IOS che su Android (hardware o software???)


da notare che al contrario di Android su IOS vengono segnalati come valori negativi le fallite acquisizioni

il codice impiegato per misurare il segnale e' riportato in seguito (ripreso da questo link dall'esempio Art Gallery)

#import "ViewController.h"

#define ESTIMOTE_PROXIMITY_UUID [[NSUUID alloc] initWithUUIDString:@"4506F9C7-00F9-C206-C12C-C2F9C702D3C3"]

int oldminor;

@interface ViewController ()
@property (nonatomic, strong) NSMutableArray *beacons;
@property (nonatomic, strong) NSArray *paintings;
@property (nonatomic, strong) CLLocationManager *locationManager;
@property (nonatomic, strong) CLBeaconRegion *beaconRegion;


@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
_beacons = [[NSMutableArray alloc] init];
    
    _locationManager = [[CLLocationManager alloc] init];
    _locationManager.delegate = self;
    
    _beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:ESTIMOTE_PROXIMITY_UUID
                                                       identifier:@"lucainnoc.Ibeareader"];
}



- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)viewDidAppear:(BOOL)animated
{
    [_locationManager startRangingBeaconsInRegion:_beaconRegion];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [_locationManager stopRangingBeaconsInRegion:_beaconRegion];
}

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
{
    if (beacons.count) {
        
        CLBeacon *closestBeacon;
        
        for (CLBeacon *beacon in beacons) {
         
            NSLog([NSString stringWithFormat:@"%f", beacon.accuracy]);
            
           
        }

    }
    
}



@end

Webview su IOS

Per poter implementare una WebView su IOS, dopo aver trascinato il componente WebView, si dichiara il nuovo componente come

@interface ViewController : UIViewController
{
    IBOutlet UIWebView *Vista;


}



In questo caso la web view si chiamera' Vista
Per modificare la URL a cui punta la webview si agisce con il seguente comando

[Vista loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]];

Attenzione: di default la webview occupa tutto lo schermo per cui non sono visibile gli altri eventuali controlli (tipo pulsanti o label)

martedì 17 giugno 2014

SD Card su Macbook Pro A1286

Recentemente mi e' stato prestato un  MacBook Pro A1286 un po' datato (meta' 2009) ma sempre una bella macchina.
Non lo sapevo ma questo modello dispone di un lettore integrato di SD Card e dato che avevo da scaricare delle foto ho inserito la memoria nell'apposito slot


Con un certo disappunto non compariva il dispositivo nel Finder. Sulla prima ho pensato che il componente fosse rotto (data l'eta' del calcolatore) ma da una ricerca su Internet ho verificato che si tratta di un problema conosciuto. In pratica non si deve inserire la memoria fino in fondo ma, a tentativi, si deve trovare il punto in cui il lettore riesce a percepirla
Considerando che il computer era venduto da nuovo ad oltre 2200 dollari e che un lettore di SD Card e' un componente da meno di 5 euro e' una caduta di stile da non poco (fra parentesi i portatili IBM hanno un meccanismo a scatto e funzionano benissimo)


giovedì 5 giugno 2014

Kinect per paleontologia

Continuando la serie delle prove di Kinect come scanner 3D, e' stata provata una applicazione per paleontologia. L'oggetto scansionato e' un corno di cervo (piuttosto malridotto) parzialmente ancora inglobato in matrice argillosa



La scansione e' molto ravvicinata (circa 80 cm) e la scena e' stata tagliata per estrarre il solo dettaglio di interesse
Il colore blu indica le zone piu' vicine al sensore mentre il rosso/arancione sono le zone piu' lontane (ovvero il piano di appoggio)

Il file originale puo' essere scaricato a questo indirizzo

lunedì 26 maggio 2014

CC2540 vs CC2541

Il mio fornitore di beacon ha cambiato l'integrato passando da un CC2540 ad un CC2541 (entrambi Texas Instruments)



Ho fatto una breve prova per vedere se c'era una miglioramento sulla stabilita' del segnale
La prova (seppur con un numero modesto) e' stata fatta a geometria fissa evitando il piu' possibile di influenzare la misura

Alla fine e' emerso che il parametro Accuracy e' stato di 
CC 2540 : 6.79+/-5.23 
CC 2541 : 4.89+/-3.32

Con il 2540 la deviazione standard vale circa il 77% del valore medio mentre con il 2541 circa il 67%
Un miglioramento ma non certo sensibile



Fauna caldinese

Non so che specie sia ma un paio di giorni fa Caldine e' stata invasa da questi vesponi lungi circa 3 cm
Erano quasi tutti a terra (forse per la pioggia??)


giovedì 22 maggio 2014

Visualizzare PointCloud via Web

Sempre giocando con Kinect mi sono imbattuto in Point Cloud Web Viewer, uno strumeno in WebGL che gestisce anche file di generose dimensioni


Per poter utilizzare e visualizzare i propri dati le uniche impostazioni importanti sono quelle relative alla posizione della telecamera (un cattivo orientamento della telecamera risultera' in uno schermo nero) che si trova alle righe 35,36 del file index.html

L'immagine e' navigabile via mouse o tastiera per cambiare l'orientazione


Opencv camera calibration in cpp

Oltre che con uno script Python come visto qui la calibrazione della camera si puo' fare anche con il programma in CPP Questo il proce...