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
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)
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
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
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); } }
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 ;>
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
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