giovedì 14 giugno 2012

Java su Ubuntu 12.04 (Precise Pangoline)

Su Ubuntu 12.04 non e' possibile installare Java nella versione originale di Oracle  direttamente da apt
Per questo si deve scaricare il pacchetto JDK direttamente da Oracle per la versione Linux (.tgz)
Successsivamente allo scompattamento dei file in una directory

sudo mkdir -p /usr/lib/jvm/jdk1.7.0


sudo mv jdk1.7.0_03/* /usr/lib/jvm/jdk1.7.0/

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.7.0/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.7.0/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.7.0/bin/javaws" 1

infine, dato che vi possono essere differenti installazione di Jdk (vedi OpenJDK) si deve scegliere quale attivare mediante il comando

sudo update-alternatives --config java




mercoledì 13 giugno 2012

Voltaggio variabile da Arduino

Sulla scheda Arduino non e' disponibile la porta analogica in modalita' output. Per generare quindi delle tensioni intermedie tra 0 e 5 V vengono impiegate le porte digitali in modalita PWM per simulare una tensione intermedia tra il valore off (0 V) e on (5 V) tipici degli stati digitali


In pratica la porta digitale funziona ad impulsi oscillando tra 0 e 5 V in modo da simulare che mediante l'uscita sia un valore intermedio. La velocita' di variazione, che e' circa 480 Hz, rende irriconoscibile allo strumento che si tratta di impulsi

Al contrario della lettura della porta digitale, in caso di scrittura si hanno solo 255 livelli per cui gli incrementi minimi di corrente sono 5V/255 circa 0.02 V

Il programma e' estremamente semplice

---------------------------------------
 void setup()
  {
    pinMode(9,OUTPUT);
  }
 
void loop()
{
  analogWrite(9,127);
}

---------------------------------------
variando il secondo parametro di analogWrite (in questo caso il 127) si puo' variare la tensione in uscita

Valore Output = 50

Valore Output =100

Valore Output =150

Valore Output =200

Valore Output =250
Nel caso si voglia una approssimazione ancora migliore di una corrente in uscita continua e non pulsata si  puo' aggiungere un filtro passa basso con una resistenza da almeno 4.7 KOhm ed un capacitore da almeno 2 uF

lunedì 11 giugno 2012

Sensore di alta pressione

Per il test di sensore di alta pressione 'e stato provato il modello Gefran TP867 2D che ha un range di misura 0-20 bar ed una uscita  di 3 mv/V

Il sensore ha 6 connettori (2 alimentazione, 2 segnale, 2 calibrazione) ma nell'esemplare di test erano collegati solo alimentazione e segnale con colori differenti da quelli riportati in scheda tecnica

La pedinatura e'
A : segnale + (colore cavo marrone)
B : segnale -  (colore cavo nero)
C : alimentazione + (colore cavo giallo)
D : alimentazione -  (colore cavo blu)

Sull'alimentazione e' stata messa una batteria da 9V


alla pressione atmosferica il sensore segnala 2 mV; soffiando con la bocca all'interno dell'imboccatura il segnale sale a 4-5 mV

Non e' presente nessun circuito di amplificazione per cui dovra' essere costruito esternamente

Visualizzare immagini in Python/Pygame

Un metodo semplice per visualizzare immagini in Python/Pygame

-----------------------------------------
import pygame

pygame.init()

size = [428,375]
screen = pygame.display.set_mode(size);

img = pygame.image.load("concordia.jpg").convert();
screen.blit(img, [0,0])
pygame.display.flip()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()

-----------------------------------------

venerdì 8 giugno 2012

Stream video via Webcam su Ubuntu

per installare mjpg_streamer su Ubuntu/Debian non e' proprio una passeggiata perche' il pacchetto scaricabile dal sito non si installa

digitando
dpkg -i mjpg-streamer_r94-1_i386.deb

si ha un messaggio di errore che corrisponde a "errore nella stringa Version "r94-1"

dpkg-deb -x mjpg-streamer.deb tmpdir 
dpkg-deb --control mjpg-streamer.deb tmpdir/DEBIAN

si deve poi editare il file control che si trova in tmpdir/DEBIAN
 
nano tmpdir/DEBIAN/control

cambiando la stringa r94-1 in 94.1

a questo punto si puo' ricostruire il pacchetto deb con il comando 

dpkg -b tmpdir mjpeg-streamer_my.deb

che e si puo' installare con il comando

dpkg -i mjpeg-streamer_my.deb

(istruzioni riprese da questo sito


per attivare lo streaming da linea di comando si puo' digitare

mjpg_streamer -i "input_uvc.so -d /dev/video0 -y -r 640x480" -o "output_http.so -w ./www -p 8082"

dove
video0 e' il device video da usare
-r 640x480 e' la risoluzione
-p 8082 e' la porta di ascolto
-f 10 e' il numero di frame 

con queste impostazioni si hanno 5 frame al secondo

per visualizzare lo stream si deve digitare l'indirizzo

http://localhost:8082/?action=stream

sia dentro una finestra di un browser (meglio Firefox) si  usando VCL (File/Apri Flusso di rete/Rete)...e' molto piu' stabile la visualizzazione su VLC


Sul calcolatore su cui sono state effettuate le prove c'e' un ritardo di circa 1.5 secondi da quando avviene un evento a quando viene visualizzato

Un esempio di streaming contempoeraneamente su Firefox (al centro) e VLC (a destra) lanciato dalla finestra di shell (a sinistra)
Il ritardo e' piuttosto evidente ed anche il fuori sincrono tra Firefox e VLC ma si deve considerare che server e client girano sulla stessa macchina (peraltro di prestazioni non eccezionali)



lunedì 4 giugno 2012

Transistor come interruttore su Arduino

L'uso di un transistor come interruttore permette di dividere il circuiti in due settori non in connessione elettrica tra di loro

La base e' il punto dove si applica la tensione; nel caso in cui si sia tensione tra base (+) ed emettitore (terra) la resistenza tra emettitore e collettore scende quasi a zero aprendo il circuito.
Sulla base e' sempre necessario inserire una resistenza da almeno 1 KOhm


Fonte Wikipedia


Nei grafici l'emettitore e' indicato con una freccia; nei transistor reali la posizione dei pin puo' essere variabile e si deve consultare la scheda tecnica

Vce - è la massima tensione che può essere applicata fra il collettore e l'emettitore
Vbe - è la massima tensione che può essere applicata fra la base e l'emettitore
Ic - è la massima corrente che può attraversare il circuito di collettore
Ib - è la massima corrente che può attraversare il circuito di base
hfe -  e' il guadagno di corrente in uscita

Esistono diverse configurazioni:
1) A base comune (terminale di base a terra)
2) Ad emettitore comune (ovvero Base ed Emittore con in continuita' elettrica. Uso Amplificatore)
3) A Collettore comune (Inseguitore di Emettitore)


------------------------------------------------------------------------------------------------
Il mio transitor di test e' BC547B
Si tratta di un sensore NPNda 625 mW con
Vce = 45 V
Vcb = 50 V
Vbe = 6 V
Ic = 100 mA
hfe = 290 (2mA),  180 (100mA) a 5Volts
Disposizione della pedinatura del componente
 
 Per il calcolo della resistenza R1 da mettere sulla base si deve prevedere quale e' la corrente che si vuole che scorra tra collettore ed emettitore
Per esempio se si vuole una corrente di 0.3mA sull'uscita del transistor si deve calcolare

Ib (corrente sulla base) = Ic/290 Ic  dove Ic e' imposto a 0.3mA
n pratica si divide la corrente che vogliamo avere per il fattore di amplificazione in modo da calcolare quale deve essere la corrente sulla base
Risulta che Ib =  0.1 mA

Usando poi la legge di Ohm (R=5/0.0001) si ha che la resistenza da inserire sulla base e' 50KOhm














venerdì 1 giugno 2012

Input da pulsante su Arduino


Per poter gestire l'input di un utente mediante la pressione di un pulsante si puo' collegare un circuito come nella figura seguente


La resistenza (da almeno 1KOhm) serve a non mandare in corto il circuito quando viene premuto il tasto.

La pressione del tasto viene gestita dalla lettura dello stato dell'input digitale (in questo caso il 12)

Lo sketch per Arduino e' il seguente
Il programma accende e spenge il led integrato sulla scheda che corrisponde al PIN13 digitale a seconda dello stato del PIN 12 comandato dal pulsante
--------------------------------------------------------------------------------------


const int buttonPin = 12;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  pinMode(ledPin, OUTPUT);     
  pinMode(buttonPin, INPUT);    
}

void loop(){
  buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {    
    digitalWrite(ledPin, HIGH); 
  }
  else {
    digitalWrite(ledPin, LOW);
  }
}

sdfsf

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...