arduino e python

Ciao a tutti,
su chi fosse interessato a comprendere come fare a far interagire il PC con Arduino senza usare l'IDE ho scritto un veloce articoletto su come usare python in questo ambito.
Stringato ma essenziale:

Utilizzo pyserial con arduino con successo da un annetto per il comando remoto di un grupo di rele'. Libreria consigliata!

Grazie per la conferma.
In effetti mi stavo proprio chiedendo se fosse stabile e non avesse bachi pesanti :slight_smile:
Anche io come prossimo programma ho intenzione di affrontare il relè.
Tu federico per cosa li utilizzi?
A quale Vout?

Ne consegue che è molto semplice fa interagire il PC con Arduino e questo rende questa tecnologia ancora più affascinante ai miei occhi...
Che ne pensate?

Molto,molto affasciante.
Devo fare ancora molta pratica con Arduino ma in futuro voglio creare applicazioni con python(wx) ed arduino per comunicare con l'ambiente esterno.
Ecco quello che ho acquistato di recente per fare pratica, ditemi un po' che ne pensate:

1 x LED 3mm - ROSSO/VERDE - 5pz 1,00EUR
1 x LED 3mm - ROSSO - 10pz 1,00EUR
1 x Micro Joystick Slide 4,80EUR
2 x LM35DZ Misuratore di temperatura di precisione 3,00EUR
1 x Microswitch a levetta 1,50EUR
1 x Catalogo Prodotti 1/2010 0,00EUR
1 x Cavi Jumper M/M 5,30EUR
1 x Potenziometro ALPS 100KOhm - 9mm 1,80EUR
1 x Chip Convertitore Luce/Frequenza 7,70EUR

ottimo.
Ci metterei anche uno o due servo motori per completare il quadro anche se mediamente costano di più degli elementi che hai elencato :frowning:

hai ragione ma il problema è che non sapendo se potevo collegare direttamente un servo alla breadboard ho pensato, meglio far pratica con cose elementari e collegare la marea di teoria che ho fatto con la pratica prima di prendere un servo.
Sbaglio?

No no, è corretto andare per gradi.
Preferisco chi fa così che non gettarsi nel progetto della vita.
Ad ogni modo il servo motore puoi collegarlo direttamente alla breadboard. Per questo non ti ho detto un motore passo passo o DC motor :slight_smile:

Utilizzo una coppia di rele per accendere dei remote di amplificatori, praticamente il segnale che indica all'amplificatore di accendersi. Ora come ora utilizzo rele' da 12v collegati brutalmente ad arduino e funzionano anche se ogni tanto ho avuto dei problemi. Questa settimana ho creato una scheda copiandola praticamente dai "brick" di seeedstudio e ho preparato rele a 5v con transistor, lo stato dell'arte :slight_smile: che andro' a sostituire a quelli attuali (sono 2)

Il problema maggiore che ho avuto e' sulla questione del reset di arduino sulla seriale, quando la chiudi il rele' si spegne. Ho visto ultimamente che forse c'e' la possibilita' di mettere una resistenza sul reset pin di arduino per evitare questa cosa ma non ho mai provato.

Attualmente il mio sistema e' costituito da un server web in python di poche righe che accetta chiamate su un paio di pagine, accendi e spegni. Il server web sale con l'accensione del computer e apre la seriale, poi l'utente "clicca l'icona" e comunica ad arduino cosa fare.

Fede

anche io ho fatto qualcosa con py e arduino...
ma non con pyserial...

Nella parte finale dell'articolo c'è una parte su un programmino in py per comandare uno stepper (richiede wx)

http://blog.lampugnani.org/arduino/motori-passo-passo-ed-elettronica/

Amici!!
è arrivato il materiale, cavolo dalla teoria alla pratica sono proprio 2 mondi diversi.
Vi posto l'immagine del collegamento del sensore per la temperatura ma del quale attraverso python e pyserial non riesco a leggere niente, la foto non ha il collegamento usb inserito ma vi giuro che quando smanetto la collego :smiley:

import serial
s=serial.Serial(1)
while(1):
line=s.readline()
print line

non mi da niente, errore?

E qual'e' il codice su arduino?

quello riportato qui:

Io uso linux,
ho modificato il tuo codice da:

import serial
s=serial.Serial(1)
while(1):
line=s.readline()
print line

a:

import serial
s=serial.Serial("/dev/ttyUSB0")
while(1):
line=s.readline()
print line

e funziona.

Tieni presente che con "s=serial.Serial(1)", cerchi i dati sulla seconda porta seriale.
quindi, su linux /dev/ttyS1; e da quel che mi risulta, su windows, com1 (non sono sicurissimo di windows perchè non ho modo di provare)

sfortunatamente uso windows :frowning:

Coltiva linux che windows si pianta da solo :slight_smile:
So che non è facile, è un mondo totalmente diverso ma credo valga la pena di impararlo. Ci sto provando ma non è facile però ci sono molte guide e ottimi forum in giro, almeno una prova va fatta. Alcune cose sono davvero intuitive e facili da fare, altre un pò meno però giusto per farti un esempio stupido prova a farti restituire via software le temperature rilevate dai sensori della motherboard su windows... Su linux basta una riga di codice da terminale, su sistemi windows per fare la stessa cosa non so verso quale santo occorre rivolgersi :slight_smile:
Scusa l'off topic.

[cite]Tieni presente che con "s=serial.Serial(1)", cerchi i dati sulla seconda porta seriale.
quindi, su linux /dev/ttyS1; e da quel che mi risulta, su windows, com1 (non sono sicurissimo di windows perchè non ho modo di provare)
[cite]
Il problema con windows è che devi sapere il driver della seriale virtuale come viene mappato. (Nel mio caso sono COM8 e COM9, ma uso 2 Arduini2k9).
Potresti chiedere alla Classe Serial di dirti quali seriali vede.
In genere è l'ultima e compare e scompare quando colleghi arduino .... quindi è facile da capire quale sia.
Se non vuoi impelagarti con il codice, verifichi tramite l'ide quale porta COM compare e scompare quando colleghi Arduino :smiley:
Ciao

amici avete pienamente ragione sull'utilizzo di linux al posto di windows e mi prometto che vi passero appena avro' risolto il problema di usare 3 monitor con 2 schede video sotto linux dal quale attualmente sto postando.

Ma torniamo a noi....

la porta è la com3 come risulta dall'idle di arduino
quando vado ad usare python dopo la linea finale di print s non mi stampa alcun valore eppure anche da pytho risulta la porta com3.
Mah!

import serial
s=serial.Serial(2)
print s
Serial<id=0xaf0f90, open=True>(port='COM3', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0, dsrdtr=0)
while(2):
line=s.readline()
print line

@Pelletta, ti prego, no flame. Sebbene anche io prediliga Linux anche windows è un ottimo sistema operativo. Con i propri pregi e difetti.

@Luka, tieni conto che la stessa considerazione vale per windows.Se tu scrivi s=serial.Serial(1) stai dicendo di aprire le comunicazioni con la COM1.
Il tuo IDE dialoga con questa?
Se si allora non comprendo altrimenti basta modificare il numerino.
Prova e facci sapere: il codice è esatto se riprendi il primo sketch indicato nella pagina che hai linkato.

Luka, tieni conto che la stessa considerazione vale per windows.Se tu scrivi s=serial.Serial(1) stai dicendo di aprire le comunicazioni con la COM1.
Il tuo IDE dialoga con questa?
Se si allora non comprendo altrimenti basta modificare il numerino.
Prova e facci sapere: il codice è esatto se riprendi il primo sketch indicato nella pagina che hai linkato.

ma infatti ho inserito il 2 in quanto mi riconosce la com3 come riporta la stampa in python:
Serial<id=0xaf0f90, open=True>(port='COM3'

o mi sto confondendo?

direi che va bene.
A quel ptuno il tuo codice python dovrebbe essere:

import serial
s=serial.Serial(2)
while(1):
     line=s.readline()
     print line

Una domanda importante: ovviamente dal IDE di Arduino leggi l'output dalla scheda correttamente vero??? ::slight_smile: