martedì 1 settembre 2015

Vysor - Android remote control

Uno dei problemi nel mostrare come funziona una applicazione, specialmente ad un gruppo di persone contemporaneamente, e' quella di condividere lo schermo in tempo reale (magari su un videoproiettore)

La soluzione definitiva e' Vysor, una estensione per Chrome, che via Adb permette di controllare con tastiera e mouse in modo remoto il telefono e di avere lo schermo del telefono replicato in tempo reale sul monitor del desktop (a questo punto basta connettere il video proiettore al desktop ed il gioco e' fatto)



Seppur in beta l'applicazione funziona bene (non ho avuto modo di sperimentare crash particolari)
Testato su Moto G 2013

Cookie Consent

Su segnalazione di Google AdSense, ho visto che per una normativa europea, e' necessario inserire un avvertimento sul tracciamento dei cookie

Il sistema piu' semplice e' stato quello di usare il sistema di SilkTide (open source e gratuito) che indica di aggiungere alcune righe (da copiare ed incollare prima della fine dell'intestazione del template del sito)




Funduino Mini Pro


Mi sono state prestate un paio di cloni Arduino riconducibili ad Arduino Mini Pro
La prima e' una Funduino mentre l'altra non riporta nessuna indicazione


Le schede sono estremamente piccole (si veda per confronto una moneta da 2 centesimi di euro) ed e' estremamente difficile capire sia il pinout delle schede (un po' per la mancanza di spazio un po' per la pessima qualita' di stampa).Per questo motivo riporto lo schema

Per programmare la scheda si deve usare il modulo usb2serial light (da notare che per il corretto allineamento la Funduino risulta rovesciata -pin in alto - rispetto al modulino USB)



Nell'IDE Arduino si deve scegliere come modello Arduino Pro o Arduino Mini Pro (5V 16 MHz) w/ AT mega328

 Per provarla ho connesso un modulo a due relay (anche questo in prestito). Il modulo funziona esattamente come il modulo singolo tranne per il fatto che, oltre a VCC e GND, ha due ingressi IN al posto di uno solo
Connettendo gli IN ad una uscita digitale e settando gli stati delle porte digitali si puo' aprire o chiudere il contatto dei due rele' in modo separato

lunedì 31 agosto 2015

Arduino GPS Clock

Un bel po' di tempo fa esistevano degli orologi che si sincronizzano via segnale radio (che se non erro era emesso una volta l'ora da una trasmittente in Germania) ed aggiornavano l'eventuale errore dell'orologio interno

Oggi ho provato a crearmi il mio orologio di precisione sincronizzato con il sistema GPS.



Per fare cio' ho preso
1) Arduino Nano
2) Modulo GPS Breakout v3 (modulo costoso, circa 20 euro, ma si trova qualcosa di simile a meta' prezzo)
3) Modulo di 8 Digit a 7 barre comandato da MAX 7219




I collegamenti sono semplici
Il GPS puo' essere collegato sia al 5V che al 3V3. Per lasciare spazio al display e' stato connesso al 3V3. GND ovviamente a GND ed infine GPS/RX a D2 e GPS/TX a D3

Il display e' stato quindi collegato a 5V, GND, LOAD/CS a D5, CLK a D6 e DIN a D7

per il funzionamento dello sketch devono essere installate le librerie ADAFRUIT GPS Library e  LedControl




Sono necessari circa 15 secondi da un cold start per ottenere i dati relativi all'ora dal dato GPS.
Inserendo la batteria tampone sul modulo GPS questo tempo e' ridotto a poche frazioni di secondo

---------------------------------------------------------------------------------
#include "LedControl.h"

#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>

LedControl lc=LedControl(7,6,5,1);
unsigned long delaytime=250;


SoftwareSerial mySerial(3, 2);
Adafruit_GPS GPS(&mySerial);
#define GPSECHO  true
boolean usingInterrupt = false;
void useInterrupt(boolean); 



void setup() {
  lc.shutdown(0,false);
  lc.setIntensity(0,8);
  lc.clearDisplay(0);
  
  Serial.begin(115200);
  GPS.begin(9600);
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);   // 1 Hz update rate
  GPS.sendCommand(PGCMD_ANTENNA);
  useInterrupt(true);
  delay(1000);
  mySerial.println(PMTK_Q_RELEASE);
}

SIGNAL(TIMER0_COMPA_vect) {
  char c = GPS.read();
#ifdef UDR0
  if (GPSECHO)
    if (c) UDR0 = c;  
#endif
}

void useInterrupt(boolean v) {
  if (v) {
    OCR0A = 0xAF;
    TIMSK0 |= _BV(OCIE0A);
    usingInterrupt = true;
  } else {
    TIMSK0 &= ~_BV(OCIE0A);
    usingInterrupt = false;
  }
}

uint32_t timer = millis();

int decina;
int unita;
int ora;
int minuti;
int secondi;

void loop() { 
  if (! usingInterrupt) {
    char c = GPS.read();
    if (GPSECHO)
      if (c) Serial.print(c);
  }
  if (GPS.newNMEAreceived()) {
    if (!GPS.parse(GPS.lastNMEA()))  
      return;  
  }

  if (timer > millis())  timer = millis();

  if (millis() - timer > 500) { 
    timer = millis(); // reset the timer
    
    ora = GPS.hour;
    minuti = GPS.minute;
    secondi = GPS.seconds;

// mostra ore 
    decina = (ora/10);
    unita = (ora%10);
    
    if (int(decina)==0) {
         lc.setChar(0,0,'0',false);
         }
         else {
         lc.setDigit(0,0,(byte)decina,false);
       }
    lc.setDigit(0,1,(byte)unita,false);



// mostra minuti 
    decina = (minuti/10);
    unita = (minuti%10);
    
    if (int(decina)==0) {
         lc.setChar(0,3,'0',false);
         }
         else {
         lc.setDigit(0,3,(byte)decina,false);
       }
    lc.setDigit(0,4,(byte)unita,false);

    
// mostra secondi
    decina = (secondi/10);
    unita = (secondi%10);
    
    if (int(decina)==0) {
         lc.setChar(0,6,'0',false);
         }
         else {
         lc.setDigit(0,6,(byte)decina,false);
       }
    lc.setDigit(0,7,(byte)unita,false);
  }
}

Accendere il fuoco con le lenti

Cosa si puo' fare con proprio figlio in un giorno estivo di pieno sole se non giocare al piccolo boyscout ??
Il gioco consisteva nel provare ad accendere il fuoco con una lente di ingrandimento e mi sono quindi munito di un po' di foglie secche e l'oculare del telescopio giocattolo di mio figlio

A sinistra l'oculare del telescopio, a destra una comune lente di ingrandimento

Ho iniziato usando l'oculare perche' pensavo che la lente fosse di qualita' migliore (e lo e') ed il fuoco della lente fosse piu' concentrato (e lo e'). Peccato che la foglie non iniziassero a bruciare
Come ho provato con la lente da tavolo immediatamente si e' alzato il fumo ed c'e' stato il primo inizio di combustione


Cosa e' successo?? Molto semplicemente l'oculare da telescopio ha una superficie di pochi millimetri quadri e quindi, pur concentrando molto meglio la luce, raccoglie poca radiazione. La lente da tavolo invece, seppur piu' otticamente grossolana, ha una superficie nettamente piu' estesa e permette di innescare facilmente la combustione.... da ricordare la prossima volta nel bosco ;>

&%it happens

Dopo un po' di acquisti fatti sugli e-store cinesi, prima o poi dovevo succedere.
La tastiera bluetooth (nemmeno troppo economica) e' stata spedita senza scatola e la conseguenza e' che e' arrivata deformata


Peraltro e' mancante anche lo Shift di sinistra (non era presente nemmeno nella busta quindi ragionevolmente era assente dalla spedizione)


Per la cronaca la tastiera funziona...ma una tastiera Logitech costa circa 3.5 volte di piu' ma e' decisamente un altro mondo

venerdì 28 agosto 2015

EddyStone Beacons


Eddystone e' una specifica per beacons a formato aperto (che si differenzia da IBeacons di marchio Apple) recentemente uscita e sponsorizzata da Google

Non tutti i beacon sono in grado di trasmettere in formato Eddystone ma quelli riprogrammabili (e di  marca) come Radius ed Estimote possono essere trasformati in modalita' Eddystone

Beacon Estimote in modalita' Eddystone

C'e' da dire che le due modalita' sono esclusive (od il beacon trasmette in modalita' IBeacon od in EddyStone) e che la durata stimata delle batterie su Eddystone e' inferiore a quella IBeacon


C'e' pero' da osservare un paio di aspetti importanti:

1) Eddystone permette di trasmettere, oltre all'UUID come IBeacon, anche stringhe di testo. In questo modo si puo' evitare l'utilizzo di un server esterno se per esempio si vuole pubblicizzare un prodotto in una vetrina (per esempio) . Si programma il beacon per puntare ad un link sullo store invece che ad un proprio server che legge l'UUID, interroga il database e fornisce il link del prodotto.

2) il formato e' libero e quindi meno soggetto alle guerre tra marchi (in questo modo verra' sdoganato l'uso dei beacon anche su Android)

Google ha pubblicato gli esempi sull'utilizzo (sia per Android che IOS) a questo link.
Oltre al protocollo Eddystone Google fornisce anche una infrastruttura cloud per gestire una eventuale flotta di beacons (un po' sullo stile di cio' che gia' offre Estimte) tramite le Proximity API

ps: alla data attuale l'applicazione Estimote per IOS non gestisce il protocollo Eddystone e non riconosce il broadcast da questi dispositivi. L'applicazione Estimote per Android invece funziona perfettamente con il nuovo formato

Change Detection with structural similarity

L'idea di base e' quella di cercare le differenze tra le due immagini sottostanti Non e' immediatamente visibile ma ci sono dei ...