Dan Horák ha annunciato che Fedora 20 (Heisenbug) Linux operating system è disponibile per le macchine IBM System z (s390x) 64-bit.

Dan Horák ha annunciato che Fedora 20 (Heisenbug) Linux operating system è disponibile per le macchine IBM System z (s390x) 64-bit.

La tecnologia VPN è diventata strategica anche nella realtà quotidiana. SoftEther, progetto nato in un contesto universitario giapponese, dilata le prospettive.

DKAN è una piattaforma open source che permette di catalogare, pubblicare e visualizzare dati e documenti. Governi, università ed organizzazioni nonprofits possono facilmente pubblicare dati ai cittadini, consuetudine, in certe realtà, straordinaria.
Adafruit Industries presenta dei materiali elettroluminescenti
La misura della forza elettromotrice è fondamentale per applicazioni quali il controllo del CED. Questioni strettamente connesse sono la gestione degli UPS ed il controllo di eccesso di calore nnell’ambiente.
Cominciamo utilizzando un accoppiatore ottico a doppio led che facciamo lavorare a pochi mA. Il produttore è Avago, il modello ACPL-824, che in questo contesto utilizziamo a metà.
Il funzionamento verso la soglia minima permette di non generare calore e proveremo essere sufficiente ai nostri fini.
In entrata sono collegate due o meglio quattro resistenze a film metallico, per ridurre i picchi di linea. Non usiamo condensatori di livellamento in uscita al fine di eseguire misure puntuali direttamente con il pin di entrata analogica.
Colleghiamo il collettore ai +5V e l’emettitore verso massa con una resistenza.
Fissati i valori opportuni abbiamo ottenuto il modulo di una sinusoide con picco sotto 1.5V DC, che andremo a campionare.
E’ indispendabile un piccolo oscilloscopio. Abbiamo utilizzato l’ottimo, per queste problematiche, Seeedstudio DSO Nano.

Sono da fissare il numero di misure da fare, la determinazione del massimo, quindi il calcolo diretto del valore medio moltiplicando per l’inverso della radice di due.
I test attualmente in corso mostrano stabilità e buon funzionamento.
La collocazione attuale del ACPL824 con resistenze è in una presa elettrica ed il cavo per il segnale da misurare è il cavo utilizzato per i sistemi di allarme, schermato con due cavi per l’alimentazione, nel nostro caso massa e +5VDC, e due cavi per i segnali, nel nostro caso un solo cavo. Procederemo con test di affidabilità e stabilità della lettura da Arduino con un cavi anche piuttosto lunghi.
E’ facile valutare l’impatto di un LCD collegato alla scheda microcontroller: da un dispositivo muto, privo di riscontri, si passa ad una situazione nettamente migliore, sia in termini di controllo che di debug, infatti si possono visualizzare messaggi di stato, avvisi ed errori.
L’utilizzo di LED risulta meno vantaggioso per la richiesa di un pin per LED, la fatica di allestire, una densità informativa drammaticamente inferiore.

Dotati di fresa tipo Dremel, meglio se del traforo elettrico,
procediamo al taglio rettangolare sulla scatola di policarbonato ad uso elettrico, per l’incastro del display. Studieremo il miglior fissaggio.

Scegliamo un LCD di fattura minima, di ampia diffusione, con una libreria per Arduino pronta ed collaudata.
Potremmo scegliere tra dispositivi a caratteri, grafici, seriali, paralleli ed I2C. Optiamo per il classico due righe a caratteri con controllo parallelo ad 8 o 4 bit.

Scegliamo il fondo blu con scritta bianca, perchè più gradevole.
Il produttore Crystal Clear Technology propone il modello C216W01NBN00, 2 righe di 16 caratteri, Controller/Driver ST7066U-0A-B e ST7065C-B o equivalente, fondo blu con scritta bianca, costa poco, e per ora ci convince.

La libreria Arduino da utilizzare è la classica LiquidCrystal con il controllo del LCD 4-bit mode.

L’utilizzo è immediato, rimandiamo alle pagine di guida ufficiale del dsito Arduino per apprenderne l’utilizzo.
Per ora utilizziamo i pin in modo canonico, come proposto dalla libreria, riservarndoci ad una futura razionalizzazione.

Il potenziometro da 10K verrà sostituito, per compattezza, da una resistenza.
Per una corretta visualizzazione ricordarsi di collegare a massa ed a +5 VDC i pin di backlight del display.
In futuro utilizzeremo anche un LCD con luce di fondo RGB per potre cambiare i colori, per esempio verde o blu per funzionamento normale, arancio per avvisi, rosso per errori.
Integriamo il firmware con le variabili globali:
LCDpresent
LCDactive
LCDdebug
ed i primi comandi:
LCDactive on|off
LCDdebug on|off
LCDprint string
Naturalmente il programma per Arduino diventa piuttosto esteso, ma nella seconda fase verrà generato in automatico, e quindi il codice conterrà lo stretto necessario, raggiungendo la compattezza ideale.
La grande attività di Ubuntu e del gruppo Gnome di costruire le loro proposte per la nuova generazione di tavolette, hanno fatto perdere la loro prima posizione nell’ambito desktop. Molti articoli indicano il successo di KDE, in particolare nelle distribuzioni Kubuntu e specialmente Mint, distribuzioni derivate da Ubuntu. Mint, secondo Distrowatch (in data odierna, 4 gennaio 2014) batte ampiamamente Ubuntu che è sceso a livello di gradimento alla pari di Debian, la distribuzione di riferimento.
Chi utilizza Ubuntu può semplicemente installare KDE nell’usuale maniera, da terminale (Control Alt t) scrivere:
sudo apt-get install kde-full
Distrowatch (in data odierna, 4 gennaio 2014)
| 1 | Mint ![]() |
3564![]() |
|---|---|---|
| 2 | Debian |
1861![]() |
| 3 | Ubuntu |
1843![]() |
| 4 | Mageia |
1496![]() |
| 5 | Fedora |
1397![]() |
| 6 | openSUSE |
1328![]() |
| 7 | PCLinuxOS |
1166![]() |
| 8 | Manjaro |
1117![]() |
| 9 | Arch |
918![]() |
| 10 | Puppy |
860![]() |

Questo primo articolo è dedicato a rivisitare il grande tema dell’automazione secondo le nuove possibilità tecnologiche. arduino
L’ impianto di nuova generazione deve avere un dispositivo centrale che sia sostanzialmente della categoria server.
Quindi un sistema operativo server, come Ubuntu Server, una collezione di servizi che permetta il controllo, monitoraggio, l’archiviazione di dati e log, modalità di accesso diverse web, socket, app, applicazioni native, console, ssh, …
Il dispositivo centrale deve permettere la coesistenza di applicazioni di autori diversi, realizzate con strumenti diversi, C, Qt, QML, Java, Python, PHP …
L’architettura deve essere aperta per permettere l’integrazione di parti diverse in un contesto di rispetto.
Applicazioni a codice aperto devono comunque coesistere con aplicazioni commerciali. In sostanza si adotta il modello community affiancato al commerciale.
La nuova visione concepisce un impianto:
![]()
Linux, Qt, QML, Arduino, Raspberry PI e le nuove schede ARM sono elementi fondamentali per costruire i sistemi.
I campi di applicazione sono moltissimi.
La prima applicazione è la gestione del CED, in modo da poter:
Una seconda è nel campo dell’illuminotecnica, che permetta di sfruttare i nuovissimi prodotti per l’illuminazione.
Una terza è l’integrazione di un sistema di controllo presenza ed accessi, anche nell’accezione più ampia di controllo ambiente domestico o perfino dell’automobile. Quindi sarà possibile collocare nella propria dimora un microserver che progressivamente assumerà funzioni diverse, dalla rilevazione di temperatura ed avvio elettrici, alla gestione di punti PIR con l’invio di avvisi ricevibili da smartphone. Oppure lasciare nel camper un dispositivo RPI connesso in 3G ed in poll con una scheda micro che invii avvisi in caso di attivazioni elettriche o riscontri positivi da PIR.
In questa fase si presuppone dimestichezza con la IDE Arduino. Il riferimento sia la IDE versione 1.0.5 disponbile in repository di Ubuntu 13.10. Consideriamo la gestione di Arduino da Linux per la stabilità e la precisione difficilmente raggiungibili da altri ambienti. Quindi, con i privilegi di root, eseguire synaptic e scegliere Arduino, infine confermare l’installazione. Ricordiamo di eseguire la IDE con i privilegi amministrativi per poter gestire la porta USB con perfetto controllo. In una fase prossima allestiremo una situazione nella quale all’utente non siano richieste le competenze relative all’uso dell’IDE in questione. Collegare la scheda compatibile Arduino che si intende utilizzare, avviare arduino con i privilegi amministrativi, selezionare il tipo di scheda adottato e la porta, caricare un semplice esempio, compilare e caricare il compilato nella scheda. Si è operativi se non sono emersi errori.
Riprendiamo il nostro sistema che immaginiamo costituito da molti nodi, ognuno dei quali sia dotato preferibilmente di un suo autonomo LCD, nella versione più economica a due righe di caratteri. In questo modo si facilità la comprenzione dello stato del nodo. Miglioremo la proposta adottando un display con fondo RGB, da poter utilizzare un cambio colori per avvisi immediati: verde funzionamento normale, giallo avvisi, rosso stato di errore.

L’interazione con l’impianto è attraverso comandi, che devono essere semplici, naturali, per facilitare l’utilizzo ed il debug.
Quindi stringhe termiante con il tradizionale a capo ( \n NewLine ), per esempio
set port=1 value=0\n
oppure
read port=3\n .
La risposta è una stringa coerente.
Così possiamo immaginare di poter connettere il proprio notebook alla porta USB di un qualunque nodo dell’impianto, ed interagire a mano in modo semplice.
E’ possibile usare il terminale della IDE di sviluppo Arduino. Per sfruttare la massima velocità della seriale il terminale va configurato con A capo (NL) e 115200 baud.
La denominazione ijk rimane valida e costituisce l’indirizzo di ogni dispositivo. In seguito verrà introdotto il parametro device=ij per indirizzare i comandi stessi. Si apre la q routeruestione di sulla scrittura dell’indirizzo, che in questa prima fase proponiamo i.j.k ovvero
1.0.0 è la scheda o device o nodo con i=1,
3.0.2 è il sensore o attuatore k=2 del nodo i=3
2.1.0 è la scheda j=1 del nodo i=2
2.1.7 è il suo settimo sensore o attuatore di
indice k=7 del nodo o device 2.1
Il microserver, radice dell’albero o grafo, ha il compito fondamentale di prelevare i dati letti riportandoli in tabelle, leggere i comandi da eseguire da tabelle ed inviarli ai destinatari. Inoltre ha un altro compito fondamentale di router per comandi od eventi tra linee diverse, ovvero i diversi.
I dispositivi al livello i sono:
1. microcontroller connessi mediante seriale-USB
2. microcontroller con porta ethernet
Quindi due dispositivi i’ ed i” possono comunicare tra loro mediante il microserver.
I dispositivi di secondo livello, ovvero ij, sono connessi al loro padre di livello i, mediante:
1. porta seriale RS232 o TTL 5V o TTL 3.3 V; in merito ricordiamo che libreria SoftwareSerial permette di gestire dal dispositivo molti dispositivi seriali, dedicando due pin per ogni dispositivo controllato mediante seriale; il protocollo è del tipo Master/Slave, dove la porta principale connessa alla USB è in modalità Slave, le altre seriali dei device i sono in modalità Master, mentre i dispositivi ij, di livello j, sono in modalità Slave; svilupperemo concreatamente questo aspetto
2. mediante porta seriale RS485, quindi una linea di molti dispositivi
3. mediante I2C, che quindi può prevedere molti dispositivi
Il primo passo da fare è pensare alla situazione più semplice, ovvero un unico microcontroller con la porta seriale-USB, con la finalità di relizzare la situazione di collegamento e scollegamento a caldo per debug o controllo.
Ricordiamo che il reset legato al DTR deve essere opportunamente gestito, per esempio mediante taglio del ponticello ed adozione del reset manuale per il bootloader. Nella situazione che stiamo realizzando, l’opzione di reset automatico conviene che rimanga attiva, infatti il poll costante del microserver con la scheda via USB, ha così un meccanismo di recupero in caso di problemi di comunicazione. E’ ovvio che, in questo caso, il collegamento USB si intende fisso. Il cambio del device tty, inevitabile con la sconnessione e successiva connessione del canale USB, verrà gestita mediante attenta interazione con udev.
E’ importante per creare un contesto di laboratorio utilizzare degli strumenti per creare prototipi molto rapidamente, per esempio adottando lo standard Arduino TinkerKit o Grove.

![]()
Lo shield Grove 1.2 ha problemi con alcune schede Arduino, mentre con Leonardo (con header) oppure Olimexino 328 è perfetto, bisogna selezionare 5V e non 3.3V di funzionamento.
![]()
Quindi passiamo a presentare la prima versione del codice da compilare e caricare nella scheda utilizzata.
La finalità è di realizzare un nodo che se connesso al terminale mediante USB-serial risponda ai primi ed importanti comandi oppuri permetta il debug.
La scheda tipo Arduino, appena avviata, per ora, attende un comando, link, come conferma connessione. Questa versione rimarrà tale nel caso di scehda con USB- reset attivo. Affronteremo successivamente le questioni correlate. La risposta è:
Linked with <link> mc_ver.: SC.0.1.01\n
Prevediamo quindi il comando ovvio help\n .
Ed i seguenti comandi di ovvio utilizzo:
mc_version|ver|version
mc_getvaried|getvaried
mc_geall|getall
mc_getad|getad
mc_setport|setport out<n>=0|1
Utilizziamo
setport out3=1\n
invece del più elegante
set port=3 value=1\n
per poter realizzare assegnazioni multiple, tipo
setport out1=0 out3=0 out4=1\n
Inoltre introduciamo il concetto di variazione delle rilevazioni, ovvero, ai fini di allegerire i dati comunicati, inviamo solo quelli che sono variati.
Il microserver ha la funzione di servizio in pool che invia comandi e gestisce i dati ad essi legati.
Quindi presentiamo la prima versione del programma per Arduino che realizza quanto detto.
La prima parte dichiara le prime variabili utilizzate:
const char* FIRMWARE_DESCRIPTION = “SC.0.1.012”;
const int CYCLE_DELAY = 20; // in millisecondi
char incomingChar = ‘\0’;
String incomingString = “”;
String command = “”;
String parameters = “”;
String parameter = “”;
String tempString = “”;
String tempString1 = “”;
String tempString2 = “”;
int port = 0;
String portvalue = “”;
String portname = “”;
int pos = 0;
int pos1 = 0;
int pos2 = 0;
int pos3 = 0;
int tempInt = 0;
char tempChar = ‘\0’;
int inPortNum = 3;
int inPortMap[7];
int valueIn[7];
int valueInPrev[7];
int valueInVaried[7];
int outPortNum = 3;
int outPortMap[7];
int valueOut[7];
int ADPortNum = 4;
int ADPortMap[5];
int ADPortValue[5];
int ADPortPrevValue[5];
int ADPortVariedValue[5];
Questa prima versione prevede l’assegnazione a mano dei pin digitali in uscita e di quelli in entrata: outPortNum ed inPortNum. I valori ora assegnati, ovvero 3, sono arbitrari e per cominciare a creare un sistema che funzioni.
La matrice inPortMap è utilizzata per la corrispondeza tra porte utilizzate nei comandi del sistema e porte fisicamente utilizzate.
Quindi presentiamo la prima versione di setup()
void setup() {
Serial.begin(115200);
for (int i = 0; i <= outPortNum – 1; i++) {
pinMode(11 + i, OUTPUT);
digitalWrite(11 + i, LOW);
outPortMap[i] = 11 + i;
}
for (int i = 0; i <= inPortNum – 1; i++) {
pinMode(8 + i, INPUT);
inPortMap[i]= 8 + i;
valueIn[i] = digitalRead(8 + i);
valueInPrev[i] = valueIn[i];
valueInVaried[i] = 1;
}
for (int i = 0; i <= ADPortNum – 1; i++) {
ADPortMap[i] = i;
ADPortPrevValue[i] = analogRead(ADPortMap[i]);
ADPortValue[i] = ADPortPrevValue[i];
ADPortVariedValue[i] = 1;
}
establishContact();
}
Segue il canonico loop()
void loop() {
aggiornavalueIn();
aggiornavalueAD();
if (Serial.available() > 0) {
incomingChar = Serial.read();
if (incomingChar == ‘\n’) {
execCommand();
incomingString = “”;
}
else {
incomingString += incomingChar;
if (incomingString.length() > 254) {
Serial.print(“Error: “);
Serial.println(incomingString);
incomingString = “”;
}
}
}
}
Quindi la collezione di funzioni utilizzate:
void establishContact() {
while (Serial.available() <= 0) {
delay(100);
}
incomingChar = ‘\0’;
while ( (Serial.available() > 0 ) && (incomingChar != ‘\n’) ) {
incomingChar = Serial.read();
if ((incomingChar != ‘\n’) && (incomingChar != ‘\r’)) {
incomingString += incomingChar;
}
}
Serial.print(“Linked with <“);
Serial.print(incomingString);
Serial.print(“> mc_ver.: “);
Serial.println(FIRMWARE_DESCRIPTION);
incomingString = “”;
delay(50);
}
void execCommand() {
incomingString.trim();
pos = incomingString.indexOf(” “); // parte da zero
command = incomingString;
if (pos == -1) {
command = incomingString;
if ((command == “mc_ver”) || (command == “ver”) || (command == “version”)) {
Serial.print (“0 mc_ver.: “);
Serial.println(FIRMWARE_DESCRIPTION);
}
else if ((command == “mc_getvaried”) || (command == “getvaried”)) {
SerialPrintInVariedValue ();
}
else if ((command == “mc_getall”) || (command == “getall”)) {
SerialPrintInAllValue ();
}
else if ((command == “mc_getad”) || (command == “getad”)) {
SerialPrintADAllValue ();
}
else if ((command == “mc_help”) || (command == “help”)) {
PrintHelp();
}
else {
Serial.println(“-1 Error: command unknown.”);
}
}
else {
command = incomingString.substring(0, pos);
command.trim();
parameters = incomingString.substring(pos);
parameters.trim();
if ((command == “mc_setport”) || (command == “setport”)) {
setPort();
}
else {
Serial.println(“-1 Error: command unknown.”);
}
}
};
// *******************************
void PrintHelp() {
Serial.println(“0 mc_help:”);
Serial.println(“——————————————————–“);
Serial.println(“”);
Serial.println(“mc_ver|ver|version print version”);
Serial.println(“”);
Serial.println(“mc_getvaried|getvaried get port value varied”);
Serial.println(” “);
Serial.println(“mc_getall|getall get all port value”);
Serial.println(” “);
Serial.println(“mc_getad|getad get all port AD in value”);
Serial.println(” “);
Serial.println(“mc_setport|setport out<n>=0|1 set port n to value 0|1”);
Serial.println(“”);
Serial.println(“”);
Serial.println(“————————————————“);
}
// *********************************************
void SerialPrintInVariedValue () {
static int toggle = 0;
if (toggle)
toggle = 0;
else
toggle = 1;
for (int i = 0; i <= inPortNum – 1; i++) {
if ( valueInVaried[i] ) {
Serial.print(“in”);
Serial.print(i + 1);
Serial.print(“=”);
Serial.print(valueIn[i]);
Serial.print(“;”);
valueInVaried[i] = 0;
};
};
Serial.println(“”);
}
void SerialPrintInAllValue () {
for (int i = 0; i <= inPortNum – 1; i++) {
Serial.print(“in”);
Serial.print(i + 1);
Serial.print(“=”);
Serial.print(valueIn[i]);
Serial.print(“;”);
};
Serial.println(“”);
}
void SerialPrintADAllValue () {
for (int i = 0; i <= ADPortNum – 1; i++) {
Serial.print(“ad”);
Serial.print(i + 1);
Serial.print(“=”);
Serial.print(ADPortValue[i]);
Serial.print(“;”);
};
Serial.println(“”);
}
void SerialPrintADVariedValue () {
static int toggle = 0;
for (int i = 0; i <= ADPortNum – 1; i++) {
if ( ADPortVariedValue[i] ) {
Serial.print(“ad”);
Serial.print(i + 1);
Serial.print(“=”);
Serial.print(ADPortValue[i]);
Serial.print(“;”);
}
};
Serial.println(“”);
}
// **********************************************
void aggiornavalueIn() {
for (int i = 0; i <= inPortNum -1; i++) {
valueInPrev[i] = valueIn[i];
valueIn[i] = digitalRead(inPortMap[i]);
if (valueIn[i] != valueInPrev[i]) {
valueInVaried[i] = 1;
};
}
};
// **********************************************
void aggiornavalueAD() {
for (int i = 0; i <= ADPortNum – 1; i++) {
ADPortValue[i] = analogRead(ADPortMap[i]);
if (ADPortPrevValue[i] != ADPortValue[i]) {
ADPortPrevValue[i] = ADPortValue[i];
ADPortVariedValue[i] = 1;
}
}
};
// **********************************************
void setPort() {
// esempio: setPort out1=1 out2=0 out5=1
// che permette agisce su pià porte con un solo comando
do { // esiste una prima coppia di parentesi tonde
// elabora parameters
// parte funzionante e legge parametri comandi tipo out3=1
pos = parameters.indexOf(“=”);
portname = parameters.substring(0, pos); // leggiamo la prima stringa a sinistra del primo uguale
portname.trim();
parameters = parameters.substring(pos);
parameters.trim(); // togliamo tutto fino al primo uguale, questo compreso
pos = parameters.indexOf(” “); // supponiamo che i parametri siano suddivisi da almeno uno spazio
portvalue = parameters.substring(1, pos);
portvalue.trim();
parameters = parameters.substring(pos);
parameters.trim(); // togliamo tutto fino al primo uguale, questo compreso
pos = parameters.indexOf(“=”);
/*
// sintassi nuova port=3 value=1
// migliore sintassi ed in liena con qt_micro, ma agisce su una sola porta per comando
portname=””;
portvalue=””,
parameters.trim();
pos = parameters.indexOf(” “);
tempString1 = parameters.substring(0, pos);
tempString1.trim();
tempString2 = parameters.substring(pos,parameters.length());
tempString2.trim();
if (tempString1.indexOf(“port”)>0){
portname=tempString1.substring(pos,tempString1.length());
}else{
if (tempString2.indexOf(“port”)>0){
portname=tempString2.substring(pos,tempString2.length());
}else{
// Serial.println(“-1 Error mc_setport: syntax not valid.”);
}
}
portname.trim();
if (tempString1.indexOf(“value”)>0){
portvalue=tempString1.substring(pos,tempString1.length());
}else{
if (tempString2.indexOf(“value”)>0){
portvalue=tempString2.substring(pos,tempString2.length());
}else{
// Serial.println(“-1 Error mc_setport: syntax not valid.”);
}
}
portvalue.trim();
*/
/*
Serial.println(“Debug: “);
Serial.println(pos);
Serial.println(portname);
Serial.println(portvalue);
Serial.println(portname.length());
Serial.println(portname.substring(0,3));
Serial.println(“===================”);
*/
if ( ((portname.length() == 4 ) && (portname.substring(0, 3) == “out”)) && ((portvalue == “0”) || (portvalue == “1”) )) { // tipo in1
//tempInt = portname.charAt(3);
//tempInt = tempInt – 48; // ottenendo n di outn, ma gli indici inziano da 0, quindi:
//tempInt = tempInt – 48 -1;
// combinando le precedenti
tempInt = portname.charAt(3) – 49;
// ovvero
port = outPortMap[portname.charAt(3) – 49];
/*
Serial.print(“Debug – pin: “);
Serial.println(port);
Serial.println(“===================”);
*/
if ((tempInt >= 0) && (tempInt <= outPortNum)) {
if (portvalue == “0”) {
/*
Serial.print(“Debug: “);
Serial.println(port);
Serial.println(portvalue);
Serial.println(“===================”);
*/
digitalWrite(port, LOW);
Serial.println(“0 Success mc_setport”);
}
else {
/*
Serial.print(“Debug: “);
Serial.println(port);
Serial.println(portvalue);
Serial.println(“===================”);
*/
digitalWrite(port, HIGH);
Serial.println(“0 Success mc_setport”);
}
}
else { // Errore:
Serial.println(“-1 Error mc_setport: port not valid.”);
}
; // if
}
else { // Errore:
Serial.println(“-1 Error mc_setport: syntax not valid.”);
}; // if ; // if
}
while (pos > -1);
} // setPort
void getPort() { // getPort p
pos = parameters.indexOf(” “);
while ( pos > 0 ) {
parameter = parameters.substring(0, pos);
parameter.trim();
parameters = parameters.substring(pos);
parameters.trim();
if (parameter.length() == 1 ) {
parameter.setCharAt(1, tempChar);
tempChar = tempChar – 48;
if ((tempChar >= 0) && (tempChar <= 7)) {
port = tempChar + 22 ;
}
}
else {
// Error:
};
};
}
A questo punto, connessa la propria scheda compatibile Arduino, avviato arduino con i privilegi di root, selezionata dal menu della IDE scheda e porta, copiato ed incollato il codice, controllato il proprio ino che non contenga errori da copia incolla o comunque banali, compilati e caricato nella scheda, avviato il terminale configurato con A capo (NL) e 115200 baud, si esegua il primo comando:
link
ricevendola risposta che la scheda è connessa, quindi si invii
help
oppure altri comandi come suggeriti dal help.
Si connetta uno shield Grove e, per esempio, l’attuatore relè ed il pulsante, quindi si inviino i comandi per accendere e spegenre il relè e per leggere lo stato del pulsante.
In caso di difficoltà si consulti il sito ufficiale Arduino e i suoi ottimi forum.
Nella situazione attuale stiamo gestendo a mano la scheda, il microserver provvederà alla gestione automatica con riferimento a tabelle di comandi e di stati. La scheda è semplicemente il tramile verso altre schede, attuatori e sensori. La maggior parte dei processi viene demandata al microserver per allegerire il più possibile le schede, che sono dotate di CPU piccole.
Concludiamo lasciando un account di contatto per i progetti trattati:
Ringraziamo per ogni forma di contributo e proposta.
Segnaliamo la scehda A20-OLinuXino-MICRO per l’incredibile dotazione, tra l’altro dotata del Cortex-A7 dual-core ARM, 1GB DDR3 RAM e del bus SATA.


Sono in commercio nuovi dischi fissi che utilizzano solo l’alimentazione a 5V DC, non richiedono più 12V DC.
La nuova generazione di schede ARM che funzionano a 5V o a 3.3V ben si accompagnano a questi dispositivi.

Scaricare l’ultima versione del browser Chrome.
Ricordiamo di prestare attenzione se il sistema operativo è 32 o 64 bit. Nel caso di Ubuntu 64 bit, scegliere di scaricare 64 bit .deb (Per Debian/Ubuntu).
Per determinare se il sistema operativo è a 32 o a 64 bit, utilizzare da terminale (CTRL ALT t) il comando uname -a.
Se la stringa che compare termina con x86_64 GNU/Linux allora il sistema operativo è a 64-bit.
Per installare Chrome, da terminale acquisire i pribvilegi di amministratore (root) mediante il comando su seguito da invio e password di root.Il pacchetto scaricato è collocato nella cartella Scaricati quindi per installarlo utilizzare il programma dpkg che installa pacchetti nel formato Debian:
dpkg -i Scaricati/google-chrome-stable_current_amd64.deb
Nel caso che si presentino errori per pacchetti danneggiati, bisogna prima correggere questi errori, per esempio invocando, sempre da termianle con i privilegi di root, il programma di gestione pacchetti synaptic .
Il menu modifica prevede l’opzione Ripara i pacchetti danneggiati. Procedere premendo applica.

Il nuovissimo Qt 5.2.0 SDK è disponibile. I primi lavori con questi nuovi strumenti permettono di sostenere che le aspettattive vengono rispettate.
Per chi utilizza Mysql con Ubuntu conviene disinstallare Mysql-workbech in repository, scaricare dal sito Mysql l’ultima attuale versione 6.0.8, che risolve vari problemi.

Dal 12 dicembre 2013 è disponibile WordPress 3.8 con i nuovi temi. Questa versione è denominata “Parker” in onore di Charlie Parker, innovatore bebop.
Abbiamo adottato il nuovo stile proposto che risulta essere gradevole, anche da device mobili e tavolette in genere.
Con l’occasione segnaliamo che abbiamo disattivato la possibilità di inserire commenti senza essere registrati, per il grande numero di spam che quotidianamente veniva inoltrato.

Gli utenti Windows 7 possono mantenere le abitudini utilizzando Zorin OS 7.

PASSIVE ELECTRODES FOR ELECTROCARDIOGRAPHY ELECTROMIOGRAPHY SHIELDS

Con l’adattatore dell’eccellente Olimex per Arduino SHIELD-EKG-EMG – ELECTROCARDIOGRAPHY ELECTROMYOGRAPHY SHIELD


Olimex è un’interessante industria con sede in Bulgaria specializzata in microcontroller.
Alcune proposte sono eccellenti, quali la revisione secondo standard industriali di Arduino e il bus UEXT.
Segnaliamo le pagine, realizzate in WordPress, che Olimex dedica alle novità.

Continuano gli annuci di macchine della nuova generazione:
Il Boston Viridis 2.0 contiene sei EnergyCore™ ECX-2000 schede, ultima generazione di Calxeda SoC (Server-on-Chip). Ogni scheda contiene due 4-core SoC a 1.6GHz e consuma 6W. Per un totale di 48 Core che consumano meno di 40W.
La certificazione è Ubuntu 13.10.
L’eccellente rivista The MagPi è il riferimento per la comunità Raspberry.
E’ disponibile il numero di novembre 2013.

Tra i molti spunti segnaliamo l’articolo che introduce la gestione dell’alimentazione per RPi.
Digistump presenta alcune soluzioni, soprattutto PCB, di un certo interesse. Come esempio segnaliamop questa scheda nello standard Grove.

Sono molte le avvisaglie della nuova generazione di computer, che nel prossimo anno causerà un profondo cambio tecnologico.
Per esempio segnaliamo il nuovissimo Rikomagik MK902.
![]()
Il processore è il nuovissimo Rockchip RK3188ARM 32bit quad core a 1.8 GHz, 2GB RAM, l’eccellente Mali 400 mp4 per l’uscita video Full HDMI 1920 per 1080, wireless fino n, rete, il prezzo indicat è 99$.
Si concluda con un semplice esercizio di comparazione tra questo computer ed il desktop tipico intorno al 2010 …