Impostare il proxy server su VLC e' tutto fuorche' banale anche per colpa del menu' nascosto
Si parte da Strumenti/Preferenze
si seleziona Mostra le Impostazioni/Tutto
Ingresso/Codifica-Moduli di Accesso-HTTP
giovedì 4 luglio 2013
Sensore di allungamento su Arduino + Shield Ethernet
Questo sensore e' di comune utilizzo nei laboratori di geotecnica per misurare le variazioni di lunghezza.
Il sensore ha 4 cavi che corrispondono a
rosso = positivo alimentazione
bianco = negativo alimentazione
giallo = positivo segnale
verde = negativo segnale
nella posizione di riposo (ovvero con la molla a riposo) e con alimentazione a 9 V il segnale e' di circa 780 mV, via via che la testa rientra nel corpo cilindrico azzurro la tensione scende fino a 0 mV
La corsa della testa va da 35 mm (corrispondente a 780 mV) fino a 22. mm (0 mV), per valori di accorciamento superiori il valore e' sempre 0 mV. Si ha quindi una corsa utile di circa 13 mm
Per automatizzare la lettura e permettere la lettura in remoto (all'esterno del laboratorio di geotecnica) la sonda e' stata collegata ad un ingresso analogico della Arduino.
Il valore letto a riposo e' 165 per scendere a 0 a fine corsa. Considerando che la risoluzione di una unita' del convertitore ADC dell'Arduino coincide con circa 4.8 mV si ha una buona corrispondenza con i 780 mV misurati con il tester.
Inoltre visto che la corsa e' di circa 13 mm ed i livelli risultano essere 165 la precisione di campionamento dell'Arduino dovrebbe essere corrispondete al decimo di millimetro
Per permettere la lettura in remoto dei dati la scheda Arduino e' stata programmata come un client UDP che invia le letture ad un server UDP scritto in Python su una Debian Box
La rete e' cosi' configurata
Server : 192.168.0.1
Porta UDP : 5555
Arduino : 192.168.0.2
Lo sketch Arduino utilizzato e' il seguente
-----------------------------------------------
#include <SPI.h> // needed for Arduino versions later than 0018
#include <Ethernet.h>
byte ardmac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ardip(192, 168, 0, 2);
byte Server[] = { 192,168,0,1 };
unsigned int porta = 5555;
unsigned int localPort = 8888; // local port to listen on
int sensorPin = A0;
int sensorValue = 0;
EthernetUDP Udp;
char buf[12]; // "-2147483648\0"
void setup() {
Ethernet.begin(ardmac,ardip);
Udp.begin(localPort);
}
void loop() {
sensorValue = analogRead(sensorPin);
Udp.beginPacket(Server, porta);
Udp.write(itoa(sensorValue, buf, 10));
Udp.endPacket();
delay(1000);
}
-----------------------------------------------
mentre il server UDP (molto stupido e da implementare con il salvataggio dei dati)
-----------------------------------------------
import socket
UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
listen_addr = ("",5555)
UDPSock.bind(listen_addr)
contatore = 0
while True:
data,addr = UDPSock.recvfrom(1024)
print data.strip(),contatore
contatore = contatore + 1
Il sensore ha 4 cavi che corrispondono a
rosso = positivo alimentazione
bianco = negativo alimentazione
giallo = positivo segnale
verde = negativo segnale
nella posizione di riposo (ovvero con la molla a riposo) e con alimentazione a 9 V il segnale e' di circa 780 mV, via via che la testa rientra nel corpo cilindrico azzurro la tensione scende fino a 0 mV
La corsa della testa va da 35 mm (corrispondente a 780 mV) fino a 22. mm (0 mV), per valori di accorciamento superiori il valore e' sempre 0 mV. Si ha quindi una corsa utile di circa 13 mm
Per automatizzare la lettura e permettere la lettura in remoto (all'esterno del laboratorio di geotecnica) la sonda e' stata collegata ad un ingresso analogico della Arduino.
Il valore letto a riposo e' 165 per scendere a 0 a fine corsa. Considerando che la risoluzione di una unita' del convertitore ADC dell'Arduino coincide con circa 4.8 mV si ha una buona corrispondenza con i 780 mV misurati con il tester.
Inoltre visto che la corsa e' di circa 13 mm ed i livelli risultano essere 165 la precisione di campionamento dell'Arduino dovrebbe essere corrispondete al decimo di millimetro
Per permettere la lettura in remoto dei dati la scheda Arduino e' stata programmata come un client UDP che invia le letture ad un server UDP scritto in Python su una Debian Box
La rete e' cosi' configurata
Server : 192.168.0.1
Porta UDP : 5555
Arduino : 192.168.0.2
Lo sketch Arduino utilizzato e' il seguente
-----------------------------------------------
#include <SPI.h> // needed for Arduino versions later than 0018
#include <Ethernet.h>
byte ardmac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ardip(192, 168, 0, 2);
byte Server[] = { 192,168,0,1 };
unsigned int porta = 5555;
unsigned int localPort = 8888; // local port to listen on
int sensorPin = A0;
int sensorValue = 0;
EthernetUDP Udp;
char buf[12]; // "-2147483648\0"
void setup() {
Ethernet.begin(ardmac,ardip);
Udp.begin(localPort);
}
void loop() {
sensorValue = analogRead(sensorPin);
Udp.beginPacket(Server, porta);
Udp.write(itoa(sensorValue, buf, 10));
Udp.endPacket();
delay(1000);
}
mentre il server UDP (molto stupido e da implementare con il salvataggio dei dati)
-----------------------------------------------
import socket
UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
listen_addr = ("",5555)
UDPSock.bind(listen_addr)
contatore = 0
while True:
data,addr = UDPSock.recvfrom(1024)
print data.strip(),contatore
contatore = contatore + 1
-----------------------------------------------
modificando leggermente lo sketch e' possibile utilizzare una Arduino Uno per monitorare fino a 5 sensori
Arduino Uno ed Ethernet Shield
Invece di acquistare una Arduino Ethernet ho preferito provare ad utilizzare un Ethernet Shield per aggiungere le funzionalita' di rete ad una Arduino Uno.
Da un punto di vista di costo non ha molto senso comprare uno shield in quanto l'accoppiata Uno+Ethernet Shield costa piu' o meno quanto una Arduino Ethernet...diciamo che questa soluzione e' piu' flessibile
Per accoppiare le due l'orientamento e' quello indicato nella foto sottostante
Si sovrappongono e si connettono come nella foto successiva. A seconda dei modelli di Arduino non tutti i connettori dello shield trovano un corrispondente header dell'Arduino ma il tutto funziona ugualmente
dal punto di vista della programmazione nell'Arduino IDE deve essere comunque scelta come board l'Arduino Uno anche se poi si possono caricare gli sketch con le funzionalita' di rete
Da un punto di vista di costo non ha molto senso comprare uno shield in quanto l'accoppiata Uno+Ethernet Shield costa piu' o meno quanto una Arduino Ethernet...diciamo che questa soluzione e' piu' flessibile
Shield Ethernet |
Per accoppiare le due l'orientamento e' quello indicato nella foto sottostante
Si sovrappongono e si connettono come nella foto successiva. A seconda dei modelli di Arduino non tutti i connettori dello shield trovano un corrispondente header dell'Arduino ma il tutto funziona ugualmente
dal punto di vista della programmazione nell'Arduino IDE deve essere comunque scelta come board l'Arduino Uno anche se poi si possono caricare gli sketch con le funzionalita' di rete
mercoledì 3 luglio 2013
Villa di Rusciano 20 anni dopo
Sono tornato dopo piu' di 20 anni all'interno della Villa Rusciano attuale sede dell'Ufficio Ambiente del Comune di Firenze (motivo della visita) e prima sede del Liceo Gobetti
Il giardino e' decisamente piu' curato e l'edificio risulta essere attualmente in vendita da parte del Comune
Il giardino e' decisamente piu' curato e l'edificio risulta essere attualmente in vendita da parte del Comune
martedì 2 luglio 2013
Errore cannot read creator env file /tmp/ in QtCreator
Programmando in Qt4 e' comparso un curioso messaggio di errore nel momento di lanciare l'esecuzione del programma dall'interno di QtCreator
cannot read creator env file /tmp/.....
ed il programma non entra in esecuzione
Aprendo una shell, entrando nella directory del programma a cui stavo lavorando ed eseguendo la compilazione a mano con qmake, make il programma si e' compilato ed eseguito correttamente
il problema sembra legato all'interfaccia tra QtCreator ed (in questo caso) LXDETerminal..comunque
sono in buona compagnia
cannot read creator env file /tmp/.....
ed il programma non entra in esecuzione
Aprendo una shell, entrando nella directory del programma a cui stavo lavorando ed eseguendo la compilazione a mano con qmake, make il programma si e' compilato ed eseguito correttamente
il problema sembra legato all'interfaccia tra QtCreator ed (in questo caso) LXDETerminal..comunque
sono in buona compagnia
Lettore RFID EM4100
Oltre al precedente lettore Parallax ho acquistato anche questo modello che legge i medesimi tag ma essendo commercializzato dalla Cina (dealextreme) ha un prezzo inferiore ai 20 Euro. Sulla confezione e sul lettore non e' riportato nessun codice identificativo
Le connessione riguardano una porta USB per la sola alimentazione ed una porta seriale standard DB9 (per la quale e' necessario l'adattore seriale-usb)
In alcuni siti si legge che questo lettore si dovrebbe comportare come una interfaccia HID ed emulare la tastiera e non dovrebbe aver bisogno di nessun driver. Nel mio caso ho provato sia su Linux che su Windows ma l'unico sistema per ottenere la lettura del dato e' connettersi alla porta seriale DB9
La comunicazione avviene su porta seriale con i parametri 9600 8N1
Le connessione riguardano una porta USB per la sola alimentazione ed una porta seriale standard DB9 (per la quale e' necessario l'adattore seriale-usb)
In alcuni siti si legge che questo lettore si dovrebbe comportare come una interfaccia HID ed emulare la tastiera e non dovrebbe aver bisogno di nessun driver. Nel mio caso ho provato sia su Linux che su Windows ma l'unico sistema per ottenere la lettura del dato e' connettersi alla porta seriale DB9
La comunicazione avviene su porta seriale con i parametri 9600 8N1
Parallax Rfid Card Reader 28340
Per fare qualche esperimento con gli RFid mi sono comprato Parallax Rfid Card Reader
In realta' pensavo di ordinare la versione seriale da accoppiare ad Arduino (codice 28140) ma in realta' ho acquistato la versione USB (28340) per cui la uso con Raspberry
Il lettore legge il formato di Rfid a 125KHz a sola lettura (EM-4100) ed i dati vengono inviati sulla seriale virtuale rappresentata dalla porta USB come 2400 8N1
Per Linux non e' necessario installare nessun driver, su Windows invece la periferica non viene riconosciuta al volo
come indicato dal manuale, in caso di corretta lettura viene inviata una stringa di 12 caratteri in cui il codice
Rfid (composta da 10 caratteri numerici) e' compreso dal secondo all'undicesimo carattere
Stranamente alla prima lettura viene sempre restituita una stringa di 2 caratteri... dopo di cio' il lettura funziona in modo corretto ed e' anche sufficientemente veloce
---------------------------------------------------------------
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sqlite3 as lite
import sys
import serial
ser = serial.Serial('/dev/ttyUSB0', 2400)
con = lite.connect('birra.db')
with con:
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS birra")
cur.execute("CREATE TABLE birra(Rfid TEXT, Gratis INT)")
cur.execute("INSERT INTO birra VALUES('1100560289',1)")
while (1):
id = ser.readline()
if len(id) == 12:
r = id[:10]
print "Id = ",id
cur.execute("SELECT * FROM birra WHERE Rfid='"+r+"'")
while True:
row = cur.fetchone()
if row == None:
break
if row[1] == 1:
print "Birra gratis"
cur.execute("UPDATE birra SET Gratis=0 WHERE Rfid='"+r+"'")
else:
print "Birra da pagare"
In realta' pensavo di ordinare la versione seriale da accoppiare ad Arduino (codice 28140) ma in realta' ho acquistato la versione USB (28340) per cui la uso con Raspberry
Il lettore legge il formato di Rfid a 125KHz a sola lettura (EM-4100) ed i dati vengono inviati sulla seriale virtuale rappresentata dalla porta USB come 2400 8N1
Per Linux non e' necessario installare nessun driver, su Windows invece la periferica non viene riconosciuta al volo
come indicato dal manuale, in caso di corretta lettura viene inviata una stringa di 12 caratteri in cui il codice
Rfid (composta da 10 caratteri numerici) e' compreso dal secondo all'undicesimo carattere
Stranamente alla prima lettura viene sempre restituita una stringa di 2 caratteri... dopo di cio' il lettura funziona in modo corretto ed e' anche sufficientemente veloce
---------------------------------------------------------------
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sqlite3 as lite
import sys
import serial
ser = serial.Serial('/dev/ttyUSB0', 2400)
con = lite.connect('birra.db')
with con:
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS birra")
cur.execute("CREATE TABLE birra(Rfid TEXT, Gratis INT)")
cur.execute("INSERT INTO birra VALUES('1100560289',1)")
while (1):
id = ser.readline()
if len(id) == 12:
r = id[:10]
print "Id = ",id
cur.execute("SELECT * FROM birra WHERE Rfid='"+r+"'")
while True:
row = cur.fetchone()
if row == None:
break
if row[1] == 1:
print "Birra gratis"
cur.execute("UPDATE birra SET Gratis=0 WHERE Rfid='"+r+"'")
else:
print "Birra da pagare"
Iscriviti a:
Post (Atom)
Ollama e Jetson Nano 4G
Ancora nel tentativo di utilizzare in modo serio la Jetson Nano ho provato ad usarla per Ollama seguendo le istruzioni da https://dev.to/aje...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...