Salve,
Tutto è iniziato oggi pomeriggio. Stavo provando a pilotare un motore dc con un transistor. All'inizio avevo fatto un semplice on/off e funzionava regolarmente poi ho voluto provare un pin pwm per giocare con la velocità ed è impazzito arduino.
Avevo fatto un semplice codice che chiedeva in input un numero e se era compreso tra 0 e 255 cambiava la velocità del motore. Quando inserivo un numero però arduino faceva un rumore strano continuo e il motore era fermo. Non capendo il motivo ho riprovato più volte eliminando pezzi di codice per semplificare fino ad ottenere un codice che chiede in input un intero e lo stampa. Anche qui arduino funziona completamente a caso. Inserisco ad esempio 50 e mi stampa 53 e 48 su 2 righe differenti. Bhoooo
Davvero non capisco che stia succedendo, ho staccato tutti i jumper e ho lasciato come unico codice questo:
Mi aiutate a capire che succede? Grazie in anticipo
Edit: un'altra cosa che ho notato è che in base alle cifre che inserisco in input tante volte mi stampa i numeri sballati. Cioè inserendo 3 mi stampa un numero (tipo 51), inserendo 33 mi stampa 2 numeri (51 e 51), inserendo 333 mi stampa e numeri (51 51 e 51), tutti su righe differenti. È come se leggesse ogni numero che inserisco una cifra per volta e me lo stampa distorto in qualche altro numero.
Non so descrivertelo come rumore, era tipo quello del PC appena si avvia.
Adesso ho provato a rifare il circuito col transistor e il motore dc. Ho fatto un semplice codice che prende in ingresso un intero i e lo uso come velocità per il motore usando digitalWrite (3,i) ma mettendo valori piccoli il motore si accende e si spegne, più aumento il valore più tempo dura il periodo di accensione, ma la velocità è sempre la stessa.
Che succede? Sembra che abbia una vita sua
ixol:
Adesso ho provato a rifare il circuito col transistor e il motore dc. Ho fatto un semplice codice che prende in ingresso un intero i e lo uso come velocità per il motore usando digitalWrite (3,i) ....
Ehhhhh ? ? ? :o :o :o
La digitalWrite() può solo mettere un pin HIGH o LOW ... per quello che vuoi fare tu dei usare dei pin che supportano il PWM ed utilizzare la analogWrite() !!!
In ogni caso mettendo analog fa più o meno la stessa cosa: mettendo numeri bassi fa quel rumore di cui parlavo prima per poco tempo, aumentando il numero oltre i 1000 il rumore si sente per più tempo e così via. Comunque non è una cosa normale..
So benissimo che i valori vanno da 0 a 255... sentendo quel rumore strano ho fatto delle prove e ho visto che la durata del rumore aumenta con l'aumentare del numero, anche oltre i 255. Infatti mettendo 999999 dura per circa 1 secondo.
Ora pubblico la foto ma non so se capisce granché e ho problemi con la rete internet di casa quindi non posso scaricare software per disegnare schemi elettrici. Al massimo provo con paint se volete. http://postimg.org/image/3ukrsdrkx/
Sotto arduino ci sono 4 pile da 1.5 volt che tramite il filo rosso vanno al motore. Il fill nero del motore va al collettore del transistor e c'è un diodo (quello che mantengo in mano). Dall'emettitore del transistor esce un filo nero che va alla terra di arduino e delle pile.
Per quanto riguarda il 51 che vedo al posto del 3 a cosa è dovuto?
ixol:
So benissimo che i valori vanno da 0 a 255... sentendo quel rumore strano ho fatto delle prove e ho visto che la durata del rumore aumenta con l'aumentare del numero, anche oltre i 255. Infatti mettendo 999999 dura per circa 1 secondo.
... tu puoi arrivare a quello che ti pare ... il numero viene sempre troncato e sempre gli 8 bit meno significativi vengono presi
ixol:
Ora pubblico la foto ma non so se capisce granché e ho problemi con la rete internet di casa quindi non posso scaricare software per disegnare schemi elettrici. Al massimo provo con paint.
... va benissimo un disegnino fatto con un qualsiasi programma, purché sia leggibile.
Te l'ho spiegato nel PS di prima ... '3' è il carattere, 0x33 è il valore esadecimale corrispondete nella codifica ASCII, 51 è il valore in decimale.
Quando ricevi dei 'caratteri' essi sono codificati in ASCII quindi, per ogni carattere ricevi un byte con il valore ASCII del carattere ... '0' = 0x30 ... 'A' = 0x41 ... e così via.
gpb01:
Te l'ho spiegato nel PS di prima ... '3' è il carattere, 0x33 è il valore esadecimale corrispondete nella codifica ASCII, 51 è il valore in decimale.
Quando ricevi dei 'caratteri' essi sono codificati in ASCII quindi, per ogni carattere ricevi un byte con il valore ASCII del carattere ... '0' = 0x30 ... 'A' = 0x41 ... e così via.
Cerca tabella ASCII.
Guglielmo
Ah ho capito devo usare Serial.parseInt () per leggere interi. Ora ha più senso la cosa.
Per l'altro problema cercherò di risolverlo domani o manderò delle foto migliori. Per ora grazie
Ma mi da quel rumore fisso di cui parlavo.
Il circuito è corretto perché con arduino senza alimentazione se simulo la saturazione del transistor con un jumper il motore funziona. E se con arduino dico accendi spegni va. Solo quando inserisco una speed non va più e dà quel rumore strano...
Edit: facendo delle prove ho scoperto che con alcuni valori funziona.
Se metto come velocità un valore superiore a 115 e un delay di 2 millisecondi funziona. Se aumento il delay devo aumentare la velocità almeno a 150 per farlo funziona sennò fa il rumore strano.
Ora le mie domande sono:
Perché con valori di velocità bassi o di delay alti non funziona regolarmente?
Il rumore da dove previene e a cosa è dovuto?
Giusto per curiosità, ma se non colleghi nulla ad arduino e lo avvii con quello sketch senti qualcosa?
Arduino fa comunque rumore?
Altrimenti è il motore che tentando di girare vibra ad una certa frequenza che riesci a sentire...