Salve sono un novellino. Mi sono subito appasionato al mondo di arduino. Noto che questo forum è davvero ben organizzato, e per questo chiedo il vostro aiuto.
Se qualche utente esperto ha la buona volotà di leggere questo messaggio ne sarei grato per l' aiuto.
Mi sono appena affacciato al mondo di arduino. Attraverso libri e guide su internet ho realizzato molti progetti, ma nessuno mi ha veramente entusiasmato.
Chiedo il vostro aiuto per la realizzazione di un bel progetto entusiasmante tipo la connessione ad arduino del nunchuk o una guida su come interfacciare arduino con il bluetooth.
Collegare il Nunchuk ad Arduino è una cosa semplicissima, devi aprire il cavo isolare i fili di alimentazione e della I2C, con google trovi facilmente molte guide con dovizia di foto che illustrano come fare, dopo di che comincia con il caricare lo sketch che ti allego, permette di comandare fino a 8 servo tramite il Nunchuk e Arduino.
Lo sketch è diviso in due file pde, devi copiarli nella stessa directory usando i nomi che ho indicato in grassetto.
Nun_Servo.pde
/*
Servo Controller basato sul Nunchuk
(c) 2011 By MdA Project
v1.0.0, build 30.07.2011
*/
/*
Collegamenti Nunchuk
_________
| 1 2 3 |
| |
| 6 5 4 |
|_-----_|
•pin 1: verde - data (Arduino analog pin 4)
•pin 2: (not connected)
•pin 3: rosso - 3.3V
•pin 4: giallo - clock (Arduino analog pin 5)
•pin 5: (not connected)
•pin 6: bianco - GND
Il nunchuk originale Nintendo incorpora delle resistenze di pullup I2C da circa 1.8k.
Se utilizzate un Nunchuk non Nintendo verificate la presenza dei 3.3V su SDA e SCL
ed eventualmente aggiungere due resistenze di pull up, collegate al 3.3V,
con un valore compreso tra 1.5k e 3.3k
*/
/*
NOTE GENERALI
a) Non è garantito il corretto funzionamento con Nunchuk non originali.
b) In questa versione non è presente una routine per la calibrazione del Joystick
e dell'accelerometro.
Tutti i calcoli sono eseguiti sulla base dei valori medi forniti dai
sensori pertanto sia il punto centrale che i punti estremi possono differire
sensibilmente da quanto atteso e in modo diverso con diversi Nunchuk.
La calibrazione verrà aggiunta nelle future release.
c) Nella funzione "nun_read()" sono contenute delle serial.print() commentate, vanno
utlizzate, decommetandole, solo a scopo diagnostico per verificare il corretto
funzionamento del Nunchuk, visualizzano tutti i valori letti sul monitor seriale.
d) Nella prossima release verrà aggiunto il controllo tramite seriale con protocollo
dedicato e una GUI per pc (in futuro anche per Android) che permetterà di muovere
i servi tramite cursori e/o joystik collegato al pc.
*/
#include <Wire.h> // include per I2C
#include <Servo.h> // include per i Servo
// creazione degli oggetti servo
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
Servo servo8;
int pos = 1500; // posizione servo
char Led_stat = 0;
//uint8_t nun_buf[6];
unsigned char nun_buf[6]; // buffer dati in arrivo dal nunchuck,
unsigned char z_but = 0;
unsigned char c_but = 0;
unsigned char joy_x_axis;
unsigned char joy_y_axis;
int accel_x_axis;
int accel_y_axis;
int accel_z_axis;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(115200); // per uso futuro della seriale
nunchuck_init(); // inizializza il nunchuck
// attaches servo ai pin 3-10
servo1.attach(3);
servo2.attach(4);
servo3.attach(5);
servo4.attach(6);
servo5.attach(7);
servo6.attach(8);
servo7.attach(9);
servo8.attach(10);
}
void loop()
{
Led_stat ^=1; // inverte il valore di Led_stat
digitalWrite(13, Led_stat); // lampeggio led
nun_get();
nun_read();
if (z_but & c_but)
{
pos = 800 + joy_x_axis * 6;
servo1.writeMicroseconds(pos);
pos = 800 + joy_y_axis * 6;
servo2.writeMicroseconds(pos);
}
if (z_but & !c_but)
{
pos = 800 + joy_x_axis * 6;
servo3.writeMicroseconds(pos);
pos = 800 + joy_y_axis * 6;
servo4.writeMicroseconds(pos);
}
if (!z_but & c_but)
{
pos = 800 + joy_x_axis * 6;
servo5.writeMicroseconds(pos);
pos = 800 + joy_y_axis * 8;
servo6.writeMicroseconds(pos);
}
if (!z_but & !c_but)
{
pos = 500 + accel_x_axis * 2 ;
servo1.writeMicroseconds(pos);
pos = 500 + accel_y_axis * 2;
servo2.writeMicroseconds(pos);
}
pos = 500 + accel_x_axis * 2 ;
servo7.writeMicroseconds(pos);
pos = 500 + accel_y_axis * 2 ;
servo8.writeMicroseconds(pos);
delay(50);
}
Nun_Func.pde
void nunchuck_init()
{
Wire.begin();
Wire.beginTransmission(0x52);
Wire.send(0x40);
Wire.send(0x00);
Wire.endTransmission();
}
void nunchuck_send_request()
{
Wire.beginTransmission(0x52);
Wire.send(0x00);
Wire.endTransmission();
}
int nun_get()
{
int cnt=0;
Wire.requestFrom (0x52, 6);
while (Wire.available ())
{
nun_buf[cnt] = nun_decode(Wire.receive());
cnt++;
}
nunchuck_send_request();
if (cnt >= 5) {
return 1; //restituisce 1 se fallisce
}
return 0; //restituisce 0 se i dati sono stati ricevuti in maniera corretta
}
// decodifica valori nunchuck
char nun_decode (char x)
{
x = (x ^ 0x17) + 0x17;
return x;
}
void nun_read()
{
joy_x_axis = nun_buf[0];
joy_y_axis = nun_buf[1];
accel_x_axis = nun_buf[2] << 2;
accel_y_axis = nun_buf[3] << 2;
accel_z_axis = nun_buf[4] << 2;
z_but = 0;
c_but = 0;
if ((nun_buf[5] >> 0) & 1) z_but = 1;
if ((nun_buf[5] >> 1) & 1) c_but = 1;
if ((nun_buf[5] >> 2) & 1) accel_x_axis += 1;
if ((nun_buf[5] >> 3) & 1) accel_x_axis += 2;
if ((nun_buf[5] >> 4) & 1) accel_y_axis += 1;
if ((nun_buf[5] >> 5) & 1) accel_y_axis += 2;
if ((nun_buf[5] >> 6) & 1) accel_z_axis += 1;
if ((nun_buf[5] >> 7) & 1) accel_z_axis += 2;
// da decommentare solo per verifica corretto funzionamento Nunchuk
/*
Serial.print(accel_x_axis, DEC);
Serial.print(",");
Serial.print(accel_y_axis, DEC);
Serial.print(",");
Serial.print(accel_z_axis, DEC);
Serial.print(",");
Serial.print(joy_x_axis,DEC);
Serial.print(",");
Serial.print(joy_y_axis, DEC);
Serial.print(",");
Serial.print(z_but, DEC);
Serial.print(",");
Serial.println(c_but, DEC);
*/
}
Puoi farti un giro nella sezione internazionale exhibition(s) e vedere cosa ti attira...
chiedo a astrobeed o altri che gentilmente mi hanno aiutato.
Cosa si intende per copiare nella stessa directory?
che ambedue i file devono trovarsi nella stessa cartella quando apri l'IDE (programma di arduino).
così facendo apre ambedue i file e li inserisce (con l'apposito tasto) dentro il microcontrollore ![]()
Scusate se continuo a non capire.
Significa cioè che devo copiare il codice di entrambe i file nello stesso sketch?
mimmo1994:
Scusate se continuo a non capire.
Significa cioè che devo copiare il codice di entrambe i file nello stesso sketch?
Devi copiare i due file nella stessa directory.
Comunque forse hai bisogno di basi di informatica prima di progetti entusiasmanti...
E proprio per questo che chiedo aiuto a voi più esperti di me.
Devi salvare i due sketch nella stessa cartella... ![]()
mimmo1994:
Salve sono un novellino. Mi sono subito appasionato al mondo di arduino. Noto che questo forum è davvero ben organizzato, e per questo chiedo il vostro aiuto.
Se qualche utente esperto ha la buona volotà di leggere questo messaggio ne sarei grato per l' aiuto.
Mi sono appena affacciato al mondo di arduino. Attraverso libri e guide su internet ho realizzato molti progetti, ma nessuno mi ha veramente entusiasmato.
Chiedo il vostro aiuto per la realizzazione di un bel progetto entusiasmante tipo la connessione ad arduino del nunchuk o una guida su come interfacciare arduino con il bluetooth.
Da come hai messo la cosa, pare che tu metta le idee e noi te le dobbiamo realizzare ![]()
Pare che come primo giorno nel forum ho iniziato male.
Mi sono iscritto con l' intento di trovare persone esperte che mi aiutassero a incrementare l' esperienza, ma a quanto pare non è possibile da queste parti.
Bisogna nascere già tutti imparati.
Scusate se ho disturbato la vostra attenzione!
Scusate se ho disturbato la vostra attenzione!
Ma guarda che te lo hanno detto più volte e non sanno quali altre parole usare.
Spiega sai, sai cosa è una directory? ahhhhhhhh, li su windows si chiamano cartelle, ok.
Devi copiare i due sketch nella cartella di progetto.
Vuoi vedere che era proprio questa l'incomprensione.
Mannaggi a quelli di windows che si sono inventati un termine italiano sostitutivo di directory.
Ciao.
. . .. . . . . . . . . . . ,.-‘”. . . . . . . . . .~., . . . . . . . .. . . . . .,.-”. . . . . . . . . . . . . . . . . .“-., . . . . .. . . . . . ..,/. . . . . . . . . . . . . . . . . . . . . . . ”:, . . . . . . . .. .,?. . . . . . . . . . . . . . . . . . . . . . . . . . .\, . . . . . . . . . /. . . . . . . . . . . . . . . . . . . . . . . . . . . . ,} . . . . . . . . ./. . . . . . . . . . . . . . . . . . . . . . . . . . ,:`^`.} . . . . . . . ./. . . . . . . . . . . . . . . . . . . . . . . . . ,:”. . . ./ . . . . . . .?. . . __. . . . . . . . . . . . . . . . . . . . :`. . . ./ . . . . . . . /__.(. . .“~-,_. . . . . . . . . . . . . . ,:`. . . .. ./ . . . . . . /(_. . ”~,_. . . ..“~,_. . . . . . . . . .,:`. . . . _/ . . . .. .{.._$;_. . .”=,_. . . .“-,_. . . ,.-~-,}, .~”; /. .. .} . . .. . .((. . .*~_. . . .”=-._. . .“;,,./`. . /” . . . ./. .. ../ . . . .. . .\`~,. . ..“~.,. . . . . . . . . ..`. . .}. . . . . . ../ . . . . . .(. ..`=-,,. . . .`. . . . . . . . . . . ..(. . . ;_,,-” . . . . . ../.`~,. . ..`-.. . . . . . . . . . . . . . ..\. . /\ . . . . . . \`~.*-,. . . . . . . . . . . . . . . . . ..|,./.....\,__ ,,_. . . . . }.>-._\. . . . . . . . . . . . . . . . . .|. . . . . . ..`=~-, . .. `=~-,_\_. . . `\,. . . . . . . . . . . . . . . . .\ . . . . . . . . . .`=~-,,.\,. . . . . . . . . . . . . . . .\ . . . . . . . . . . . . . . . . `:,, . . . . . . . . . . . . . `\. . . . . . ..__ . . . . . . . . . . . . . . . . . . .`=-,. . . . . . . . . .,%`>--==
mimmo1994:
Bisogna nascere già tutti imparati.
Scusate se ho disturbato la vostra attenzione!
Si presuppone che almeno un minimo di basi devi averle, non puoi pretendere che ti facciamo il lavoro da 0 e tanto meno che ci mettiamo a spiegarti cosa è un file o una directory, come evidenziato nel topic relativo ai consigli su come chiedere aiuto c'è questa voce :
“Non siamo l’ufficio informazioni per il vostro progetto”
Si applica perfettamente al tuo caso.
copiare i 2 file nella stessa cartella.
esempio
apri il programma di arduino copi questo
/*
Servo Controller basato sul Nunchuk
(c) 2011 By MdA Project
v1.0.0, build 30.07.2011
*/
/*
Collegamenti Nunchuk
_________
| 1 2 3 |
| |
| 6 5 4 |
|_-----_|
•pin 1: verde - data (Arduino analog pin 4)
•pin 2: (not connected)
•pin 3: rosso - 3.3V
•pin 4: giallo - clock (Arduino analog pin 5)
•pin 5: (not connected)
•pin 6: bianco - GND
Il nunchuk originale Nintendo incorpora delle resistenze di pullup I2C da circa 1.8k.
Se utilizzate un Nunchuk non Nintendo verificate la presenza dei 3.3V su SDA e SCL
ed eventualmente aggiungere due resistenze di pull up, collegate al 3.3V,
con un valore compreso tra 1.5k e 3.3k
*/
/*
NOTE GENERALI
a) Non è garantito il corretto funzionamento con Nunchuk non originali.
b) In questa versione non è presente una routine per la calibrazione del Joystick
e dell'accelerometro.
Tutti i calcoli sono eseguiti sulla base dei valori medi forniti dai
sensori pertanto sia il punto centrale che i punti estremi possono differire
sensibilmente da quanto atteso e in modo diverso con diversi Nunchuk.
La calibrazione verrà aggiunta nelle future release.
c) Nella funzione "nun_read()" sono contenute delle serial.print() commentate, vanno
utlizzate, decommetandole, solo a scopo diagnostico per verificare il corretto
funzionamento del Nunchuk, visualizzano tutti i valori letti sul monitor seriale.
d) Nella prossima release verrà aggiunto il controllo tramite seriale con protocollo
dedicato e una GUI per pc (in futuro anche per Android) che permetterà di muovere
i servi tramite cursori e/o joystik collegato al pc.
*/
#include <Wire.h> // include per I2C
#include <Servo.h> // include per i Servo
// creazione degli oggetti servo
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
Servo servo8;
int pos = 1500; // posizione servo
char Led_stat = 0;
//uint8_t nun_buf[6];
unsigned char nun_buf[6]; // buffer dati in arrivo dal nunchuck,
unsigned char z_but = 0;
unsigned char c_but = 0;
unsigned char joy_x_axis;
unsigned char joy_y_axis;
int accel_x_axis;
int accel_y_axis;
int accel_z_axis;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(115200); // per uso futuro della seriale
nunchuck_init(); // inizializza il nunchuck
// attaches servo ai pin 3-10
servo1.attach(3);
servo2.attach(4);
servo3.attach(5);
servo4.attach(6);
servo5.attach(7);
servo6.attach(8);
servo7.attach(9);
servo8.attach(10);
}
void loop()
{
Led_stat ^=1; // inverte il valore di Led_stat
digitalWrite(13, Led_stat); // lampeggio led
nun_get();
nun_read();
if (z_but & c_but)
{
pos = 800 + joy_x_axis * 6;
servo1.writeMicroseconds(pos);
pos = 800 + joy_y_axis * 6;
servo2.writeMicroseconds(pos);
}
if (z_but & !c_but)
{
pos = 800 + joy_x_axis * 6;
servo3.writeMicroseconds(pos);
pos = 800 + joy_y_axis * 6;
servo4.writeMicroseconds(pos);
}
if (!z_but & c_but)
{
pos = 800 + joy_x_axis * 6;
servo5.writeMicroseconds(pos);
pos = 800 + joy_y_axis * 8;
servo6.writeMicroseconds(pos);
}
if (!z_but & !c_but)
{
pos = 500 + accel_x_axis * 2 ;
servo1.writeMicroseconds(pos);
pos = 500 + accel_y_axis * 2;
servo2.writeMicroseconds(pos);
}
pos = 500 + accel_x_axis * 2 ;
servo7.writeMicroseconds(pos);
pos = 500 + accel_y_axis * 2 ;
servo8.writeMicroseconds(pos);
delay(50);
}
e lo salvi dentro c:/mioprimoprogramma
chiamalo Nun_Servo.pde
dove mioprimoprogramma è una cartella dentro c:
poi fai un nuovo file copiando quest'altro codice e chiamandolo Nun_Func.pde sempre dentro c:/mionuovoprogramma
void nunchuck_init()
{
Wire.begin();
Wire.beginTransmission(0x52);
Wire.send(0x40);
Wire.send(0x00);
Wire.endTransmission();
}
void nunchuck_send_request()
{
Wire.beginTransmission(0x52);
Wire.send(0x00);
Wire.endTransmission();
}
int nun_get()
{
int cnt=0;
Wire.requestFrom (0x52, 6);
while (Wire.available ())
{
nun_buf[cnt] = nun_decode(Wire.receive());
cnt++;
}
nunchuck_send_request();
if (cnt >= 5) {
return 1; //restituisce 1 se fallisce
}
return 0; //restituisce 0 se i dati sono stati ricevuti in maniera corretta
}
// decodifica valori nunchuck
char nun_decode (char x)
{
x = (x ^ 0x17) + 0x17;
return x;
}
void nun_read()
{
joy_x_axis = nun_buf[0];
joy_y_axis = nun_buf[1];
accel_x_axis = nun_buf[2] << 2;
accel_y_axis = nun_buf[3] << 2;
accel_z_axis = nun_buf[4] << 2;
z_but = 0;
c_but = 0;
if ((nun_buf[5] >> 0) & 1) z_but = 1;
if ((nun_buf[5] >> 1) & 1) c_but = 1;
if ((nun_buf[5] >> 2) & 1) accel_x_axis += 1;
if ((nun_buf[5] >> 3) & 1) accel_x_axis += 2;
if ((nun_buf[5] >> 4) & 1) accel_y_axis += 1;
if ((nun_buf[5] >> 5) & 1) accel_y_axis += 2;
if ((nun_buf[5] >> 6) & 1) accel_z_axis += 1;
if ((nun_buf[5] >> 7) & 1) accel_z_axis += 2;
// da decommentare solo per verifica corretto funzionamento Nunchuk
/*
Serial.print(accel_x_axis, DEC);
Serial.print(",");
Serial.print(accel_y_axis, DEC);
Serial.print(",");
Serial.print(accel_z_axis, DEC);
Serial.print(",");
Serial.print(joy_x_axis,DEC);
Serial.print(",");
Serial.print(joy_y_axis, DEC);
Serial.print(",");
Serial.print(z_but, DEC);
Serial.print(",");
Serial.println(c_but, DEC);
*/
}
capisco la tua difficoltà, ci siamo passati tutti, ma comincerei con qualcosa di meno impegnativo ![]()
Ti ringrazio per la gentile spiegazione. Ho deciso di affacciarmi maggiormente al mondo di arduino spinto dall' uso limitato che facciamo a scuola di questo microcontrollore. Dato che attraverso l' istruzione scolastica non riesco ad apprendere appieno i meccanismi di arduino ho deciso di approfondire la cosa per conto mio. Ho iniziato acquistando dei libri e ora ho provato ad iscriversi al forum. Spero che insieme a voi possa migliorare la mia comprensione di arduino.
ma come si fa ad andare in una scuola dove si usa arduino, ritengo quindi un istituto tecnico, e non capire che significa directory ?
c'e' qualcosa che non va ![]()
Frequento il 4 superiore dell' Augusto righi a Taranto, e abbiamo iniziato quest anno ad usare arduino. L' indirizzo é elettronica e telecomunicazione. Mi dispiace dirlo ma non sapevo cosa significasse directory.
Ora appena posso provo a compilare il programma seguendo i vostri consigli.
@Testato: Si, nella scuola in Puglia
!! ]![]()
Ho fatto tutto come mi avete detto, cioè salvando i due file nella stessa cartella, ma aprendo la cartella automaticamente si sono salvate due cartelle separate ognuna con il nome del programma cioè Num...servo e Num...Func, e così posso aprire solo un programma alla volta.
Se provo a mettere nuovamente i file nella stessa cartella mi dice questo: The file "Num......pde" needs to be inside a sketch folder named "Num...." Create this folder, move the file, and continuos? se clicco su ok, come detto nel messaggio mi crea un' altra cartella e l' ide mi apre i file separati.
Cosa devo fare?