1 di 2 12 UltimaUltima
Risultati da 1 a 10 di 16

Discussione: Scheda di controllo Arduino

  
  
  1. #1
    Moderator L'avatar di t-rex
    Data Registrazione
    Mar 2011
    Località
    roma
    Messaggi
    2,060

    Predefinito Scheda di controllo Arduino

    Nel mondo del modding ,sempre piu' spesso si fa uso di automazione e in questo caso puo' venirci incontro una scheda di controllo ,Arduino.
    Una scheda open source, molto versatile nell'utilizzo a tal punto da essere usata nei modi più svariati.
    Ma andiamo a conoscerla..





    Il nome deriva da un bar di Ivrea frequentato dai fondatori del progetto (che a sua volta richiamava il nome del primo Re d'Italia nel 1002)
    Arduino e' una piattaforma open source basata su una scheda input\output e l'IDE(Integrated Development Environment),il software che si esegue sul computer.Disponibile per Windows,Mac,linux.
    l'IDE serve a creare scketch(non sono altro che programmi scritti da noi,in italiano "bozzetto", che si andranno a caricare nella memoria flash di Arduino per istruire la scheda su cosa fare),questo programma è scaricabile dal sito Arduino - Software
    Tutto cio avviene attraverso un microcontrollore AVR di Atmel , l'ATmega 328 .(per i piu' curiosi vi posto il link del datasheet)




    i pin visti sulla scheda





    Il particolare dei pin.

    Pin I\O digitali (0-13 )

    progettati per essere bidirezionali,in grado di passare da uno stato d'ingresso a quello di uscita,attraverso la programmazione nello sketch

    Pin di ingresso analogico (0-5)

    qui usa un convertitore Analogico \Digitale (A\D)a 10 bit(misura la tensione in ingresso ogni qualvolta viene interrogato e la converte in numeri compresi tra 0 e 1023.

    Pin di uscita Analogica(3,5,6,9,10,11)

    in realta' sarebbero sei pin digitali ma attraverso lo sketch possono essere riprogrammati per funzionare da output analogici.
    Con la sua moltitudine di porte e di pin di ingresso e di uscita Arduino e' in grado di acquisire informazioni da una miriade di sensori e gadget elettronici,potendo allo stesso tempo pilotare motori ,accendere luci ed emettere suoni.

    La scheda può essere alimentata attraverso la porta USB del computer, la maggior parte dei caricatori USB o un alimentatore esterno da 7 a 12 volt con spinotto cilindrico da 2,1mm con positivo centrale, tensione che viene poi ridotta ai canonici 5 V e a 3,3 V da un regolatore presente sulla scheda.Se nella presa non vi è collegato nessun alimentatore, la scheda preleva l'alimentazione dall' USB, ma non appena si collega un alimentatore di corrente, essa la usa automaticamente.


    [/QUOTE]



    Arduino uno ha una memoria pari a 32 mila byte(32KB) e in questo spazio dovra' starci tutto il programma ,quindi nella maggior parte dei casi ,per programmi complessi,bisogna ridurre le varie operazioni al limite..e in questo caso possono venirci in aiuto i diagrammi di flusso.

    in pratica noi nel diagramma descriviamo quello che nella realta' vorremmo produrre ..
    in questo caso vediamo che se il pulsante e'chiuso l'istruzione e'accendi la lampadina ,aspetta un minuto e spegni la lampadina e vai a rileggere lo stato del pulsante..loop(ripetizione di una serie di istruzioni)
    Ultima modifica di t-rex; April 28th, 2013 alle 19:13


    Iscriviti al nostro canale



    Er moderator de roma!!!!!

  2. #2
    Moderator L'avatar di t-rex
    Data Registrazione
    Mar 2011
    Località
    roma
    Messaggi
    2,060

    Predefinito Re: Guida Arduino 1 parte..

    come dicevo su ,Il linguaggio di programmazione di Arduino e' una versione semplificata di C\C++,arricchito da una serie di comandi creati apposta per le funzioni specifiche della scheda.



    ma come si fa a realizzare lo sketch?


    Attraverso una serie di istruzioni che noi andremo a scrivere sul compilatore di arduino, e sono:

    STRUTTURE

    Il codice per programmare Arduino è composto essenzialmente da due parti:

    void setup() - Questo è il posto dove mettiamo il codice di inizializzazione. Inizializza tutte le impostazioni e le istruzioni della scheda (gli INPUT e OUTPUT) prima che il ciclo principale del programma si avvii.

    void loop() - Contiene una serie di istruzioni che possono essere ripetute una dopo l'altra all'infinito fino a quando non spegniamo la scheda Arduino.



    ELEMENTI SINTATTICI- COSTANTI

    Nella scheda Arduino è inserita una serie predefinita di parole chiave con valori speciali. High e Low sono usati per esempio quando si vuole accendere o spegnere un Pin di Arduino. INPUT e OUTPUT sono usate per definire se uno specifico Pin deve essere un dato di entrata o un dato di uscita. True e False indicano il rispettivo significato italiano: se abbiamo un'istruzione, la condizione può essere vera o falsa.

    { } parentesi graffe
    (si scrivono con Alt+123 “{“ e Alt+125 “}” sul tastierino numerico della tastiera) Le parentesi graffe (noto anche semplicemente come"parentesi"o "parentesi graffe") definisconol'inizio e la fine dei blocchi di funzione edi blocchi delle istruzioni come
    il “void loop()” ed anche per le istruzioni “for”, “if”, “while”, etc.type function(){statements;}
    Una parentesi graffa aperta “{“ deve sempre essere seguita da una parentesi graffa di chiusura “}”: in altre parole il numero delle parentesi graffe deve essere sempre pari e il numero delle parentesi aperte è uguale al numero delle parentesi graffe chiuse. Eventuali anomalie nelle parentesi graffe possono spesso portare a errori difficili da eliminare e rintracciare in un programma di grandi dimensioni.
    L'ambiente di compilazione di Arduino include una comoda funzione per controllare il bilanciamento di parentesi graffe. Basta selezionare una parentesi, o anche scegliere il punto di inserimento immediatamente dopo una parentesi graffa, e la sua compagna logica sarà evidenziata.

    ; punto e virgola
    Un punto e virgola deve essere utilizzato per terminare una istruzione e separare gli elementi di istruzioni del programma. Un punto e virgola è usato anche per separare le istruzioni sul contatore all’interno di un’struzione for.
    es int x = 13; // dichiarazione della variabile “x” come numero intero 13
    Dimenticare di terminare una riga con un punto e virgola si tradurrà in un errore di compilazione.

    Serial.flush();
    VARIABILI

    Sono aree della memoria di Arduino dove si possono registrare dati e intervenire all’interno del programma. Come dice il nome stesso, le variabili possono essere cambiate tutte le volte che vogliamo. Quando si dichiara una variabile bisogna dichiararne anche il tipo. Questo significa dire al processore le dimensioni del valore che si vuole memorizzare. Ne esistono di diversi tipi:


    boolean - Può assumere solamente due valori: vero o falso.

    char - Contiene un singolo carattere. L'Arduino lo registra come un numero (ma noi vediamo il testo). Quando i caratteri sono usati per registrare un numero, possono contenere un valore compreso tra -128 e 127.

    byte - Può contenere un numero tra 0 e 255. Come un carattere usa solamente un byte di memoria.

    int - Contiene un numero compreso tra -32'768 e 32'767. E' il tipo di variabile più usata e usa 2 byte di memoria.

    unsigned int - Ha la stessa funzione di int, solo che non può contenere numeri negativi, ma numeri tra 0 e 65.535.

    long - E' il doppio delle dimensioni di un int e contiene i numeri da -2'147'483'648 a 2'147'483'647.

    unsigned long - Versione senza segno di long va da 0 a 4'294'967''295.

    float - Può memorizzare numeri con la virgola. Occupa 4 bytes della RAM.

    double - A doppia precisione in virgola mobile con valore massimo di 1'7976931348623157x10^308.

    string - Un set di caratteri ASCII utilizzati per memorizzare informazioni di testo. Per la memoria, usa un byte per ogni carattere

    della stringa, più un carattere NULL che indica ad Arduino la fine della stringa. Esempio:

    char string1[] = "Hello"; // 5 caratteri+carattere NULL <br>char string2[6]="Hello" // La stessa cosa di sopra<br>

    N.B. ogni istruzione deve sempre terminare con ";" in tale linguaggio. Inoltre "//" è usato per inserire commenti che aiutano a comprenderlo.

    array - un elenco di variabili accessibili tramite un indice. Vengono utilizzate per creare tabelle di valori facilmente accessibili. Come

    esempio se si vuole memorizzare diversi livelli di luminosità di un LED possiamo creare 4 variabili, una per ogni livello di luminosità.

    Si può utilizzare una semplice array come:

    int Luce[5]={0,25,50,100};

    Nel tipo della variabile la parola "array" non si dichiara, ma si usano i simboli [] e {}.


    STRUTTURE DI CONTROLLO
    Il linguaggio di Arduino include parole chiave per controllare il progetto logico del nostro codice.

    If…else - Permette di prendere delle decisioni all’interno del programma, ma deve essere seguito da una domanda sotto forma di

    espressione tra parentesi. Se la domanda è vera tutto ciò che segue verrà eseguito. Se falso verrà eseguito tutto il codice che

    segue else. If è possibile usarlo senza usare necessariamente else. Esempio:

    if (val=1){digitalWrite(LED, HIGH);} // (val=1) è la domanda se è vera esegue ciò che è fra parentesi<br>

    For - Ripete il codice per un numero predefinito di volte.

    for(int i=0;i<10;i++){Serial.print(“Ciao”);} //stampa 10 volte “


    Switch - E’ come un interruttore nel corso del programma. Fa prendere al programma diverse direzioni in base al valore della

    variabile (il suo nome deve essere messo tra parentesi dopo switch). E’ utile perché può sostituire lunghe serie di if.

    switch(valore sensore){<br>case 38:<br>digitalwrite(12, High);break; <br>case 55:<br>digitalwrite(3, High);break;<br>default: // si usa per

    indicare tutti i casi in cui non è ne 38 ne 55<br>digitalwrite(12, Low); <br>digitalwrite(13, Low);}<br>

    While - Esegue un blocco di codice fino a quando una certa condizione posta tra le parentesi è vera.

    while(valore sensore<500){<br>digitalWrite(13, HIGH); <br>delay(100); <br>digitalWrite (13, HIGH);

    <br>delay(100); <br>Valoresensore=analogRead(1); <br>

    Do…While - E’ uguale a while solo che il codice è avviato prima che la condizione sia verificata. Si usa quando si vuole eseguire il

    codice almeno una volta prima che la condizione sia valutata. Esempio:



    do {<br>digitalWrite(13,HIGH); <br>delay(100); <br>digitalWrite(13,HIGH); <br>DELAY (100);

    <br>valore sensore=analogread(1); <br>}

    Break - Questo termine consente di bloccare il ciclo e continuare ad eseguire il codice fuori dal ciclo. Viene utilizzato anche per

    separare le varie condizioni nella funzione Switch.

    Continue - Questo comando fa saltare il resto del codice all’interno del ciclo, e riavvia il ciclo. Esempio:

    for(luminosità=0; luminosità<200; luminosità++)<br>f((x>120) && (x<180)) continue;
    <br>analogWrite(PWMPin, luminosità); <br>delay(20); <br>}

    Return - Ferma una funzione che si sta eseguendo e restituisce un risultato. E’ possibile infatti usarlo per restituire un valore da

    una funzione. Esempio chiama una funzione “calcolaumidità” e ritorna il valore dell’umidità.

    Int calcolaumidità() {<br>Int umidità=0; <br>umidità0(analogread(0)+45/100)/100;<br>return umidità;<br>}


    Iscriviti al nostro canale



    Er moderator de roma!!!!!

  3. #3
    Moderator L'avatar di t-rex
    Data Registrazione
    Mar 2011
    Località
    roma
    Messaggi
    2,060

    Predefinito Re: Guida Arduino 1 parte..

    OPERAZIONI ARITMETICHE

    Si può usare Arduino per compiere operazioni matematiche complesse con una semplice sintassi: + e – indicano addizione e

    sottrazione, * indica la moltiplicazione, e / la divisione.
    C’è un operatore in più in questo linguaggio chiamato “Modulo” che è un comando che restituisce il resto di una divisione. Esempio:

    a=3+3; luminosità=((12*valore sensore)/4);


    OPERATORI DI COMPARAZIONE

    Quando si specificano delle condizioni ci sono vari operatori che tu puoi usare:

    == Uguale a

    > maggiore di

    < minore di

    != diverso da

    <= minore o uguale

    >= maggiore o uguale


    OPERATORI BOOLEANI

    Sono usati quando si vogliono combinare più condizioni, ad esempio se vogliamo verificare se il valore di un sensore è tra 1 e 5

    basta scrivere:

    if(sensore=>1) && (sensore=<=5);

    Esistono tre tipi di operazioni booleane: &&(And), ||(Or), !(Not).


    OPERATORI COMPUTAZIONALI

    Servono a ridurre la mole di un codice e a renderlo più semplice e chiaro per operazioni semplici come incrementare o

    decrementare una variabile.

    Esempio: val=val+1; è come dire val++

    incremento (++) e decremento (--)

    ++ e -- incrementano/decrementano una variabile di 1; lo stesso è applicabile a +=, -=, *=, /= .

    Esempio: le seguenti espressioni sono equivalenti:

    val=val+5;

    Val+=5;


    FUNZIONI INPUT E OUTPUT

    Arduino include funzioni per la gestione degli Input e degli Output.


    pinMode(pin,mode) - Riconfigura un pin digitale a comportarsi come uscita o come entrata.

    pinMode(13,INPUT) - imposta il pin 13 come Input.

    digitalWrite(pin,value) - imposta un pin digitale ad ON o a OFF.

    digitalWrite(7,HIGH) - imposta come digitale il pin 7.

    int digitalRead(pin) - Legge lo stato di un input Pin, ritorna HIGH se il Pin riceve della tensione oppure LOW se non c’è tensione

    applicata.

    Val=digitalRead(7); // legge il pin 7 dentro a val

    Int analogRead(pin) - Legge la tensione applicata a un ingresso analogico e ritorna un numero tra 0 e 1023 che rappresenta le

    tensioni tra 0 e 5 V.

    val=AnalogRead(0); // legge l’ingresso analogico 0 dentro a val

    analogWrite(pin,value) - Cambia la frequenza PWM su uno dei pin segnati PWM, nella voce pin si può mettere 11 10 9 6 5 3,

    value invece può essere un valore da 0 a 255 che rappresenta la scala da 0 a 5 V.

    analogWrite(9,128);

    shiftOut(dataPin, clock, Pin, bit, Order, value) - Invia i dati ad un registro. Questo protocollo usa un pin per i dati e uno per il

    clock. bitOrder indica l'ordine dei bytes (least significant byte=LSB, most significant byte=LMB) e value è il byte da inviare. Esempio:

    shiftOut(dataPin, Clock Pin, LSBFIRST, 255);

    insigned long pulseIn(pin, value) - misura la durata degli impulsi in arrivo su uno degli ingressi digitali. E’ utile ad esempio per

    leggere alcuni sensori a infrarossi o alcuni accelerometri che emettono impulsi di diversa durata.

    Tempo=pulsin(8,HIGH);


    FUNZIONI DI TEMPO

    Arduino include alcune funzioni per misurare il tempo trascorso e anche per mettere in pausa il nostro programma.

    Insigned long millis() - Ritorna il numero in millisecondi trascorsi dall’inizio del programma, esempio:

    durata=millis()-tempo // calcola il tempo trascorso prima di “tempo”

    delay(ms) - Mette in pausa il programma per un numero di millisecondi specificato.

    delay(1000); //stoppa il programma per 1 secondo

    delayMicroseconds(us) - Come delay mette in pausa il programma ma l’unità di misura è molto più piccola, parliamo di microsecondi.

    delayMicroseconds(2000); // aspetta per 2 millisecondi (1000us=1ms)


    FUNZIONI MATEMATICHE

    Arduino include molte funzioni matematiche comuni. Servono, per esempio, per trovare il numero max o il numero min.


    min (x,y) - Ritorna il più piccolo fra x e y. Esempio:

    Val= min(5,20); // val adesso è 5

    max(x,y) - Ritorna il più grande fra x e y.

    abs(x) - Ritorna il valore assoluto di x, ossia trasforma i numeri negativi in numeri positivi. Se x fosse 5 ritorna 5, ma anche se x

    fosse -5 ritorna sempre 5. Esempio:

    Val= abs(-5) // val vale 5

    constrain(x,a,b) - Ritorna il valore "x" costretta tra "a" e "b". Ciò vuol dire che se "x" è minore di "a" ritornerà semplicemente

    "a" e se x è maggiore di "b" restituirà semplicemente il valore di "b".

    map(value, fromLow, fromHigh, toHigh) - Associa un valore che sta nel range fromLow e maxlow in un nuovo range che va

    da toLow a toHigh. E’ molto utile per processare valori provenienti da sensori analogici. Esempio:

    val=map(analogRead(0),0,1023,100,200); // associa il valore analogico 0 ad un valore tra 100 e 200

    double pow(base,exponent) - Restituisce come risultato la potenza di un numero. Si deve indicare la base e l’esponente.

    Double sqrt(x) - Restituisce la radice quadrata di un numero x.

    Double sin(rad) - Restituisce il seno dell’angolo specificato in radianti. Esempio:

    Double sine= sine(2); // circa 0.909297370

    Double cos(rad) - Restituisce il coseno dell’ angolo specificato in radianti.

    Double tan(rad) - Restituisce il valore della tangente di un angolo specificato in radianti.



    FUNZIONI NUMERI RANDOM


    Se si ha bisogno di generare numeri random (a caso), Arduino ci viene incontro con alcuni comandi standard per generarli.

    randomSeed(seed) - Anche se la distribuzione di numeri restituita dal comando random() è essenzialmente casuale, la sequenza

    è prevedibile. randomSeed(seed) inizializza il generatore di numeri pseudo-casuali, facendola partire da un punto arbitrario nella sua

    sequenza casuale.

    Long random(min,max) - Restituisce un valore long intero di valore compreso fra min e max -1. Se min non è specificato il suo

    valore minimo è 0. Esempio:

    long random= random(13); // numero compreso fra 0 e 12



    COMUNICAZIONE SERIALE

    Queste sono le funzione seriali cioè quelle funzioni che Arduino usa per comunicare tramite la porta Usb del nostro Pc.

    Serial.begin(speed) - Prepara Arduino a mandare e a ricevere dati tramite porta seriale. Possiamo usare generalmente 9600 bits

    per secondo con la porta seriale dell’Arduino, ma sono disponibili anche altre velocità, di solito non si supera i 115.200 bps.

    Serial.print(data)Serial.begin(9600);

    Serial.print(data,codifica) - Invia alcuni dati alla porta seriale. La codifica è opzionale.

    Serial.print(32); // stampa 32

    Serial.Print(32, DEC); // stampa 32 come sopra

    Serial.Print(32, OCT); // 40 (stampa10 in ottale)

    Serial.Print(32 , BIN); // 100000 (stampa 10 in binario)

    Serial.Print(32 , BYTE); // “Space” valore associato nella tabella ASCII

    Int Serial.available() - Ritorna quanti bytes non ancora letti sono disponibili sulla porta Serial per leggerli tramite la funzione

    read(). Dopo aver read() tutti i bytes disponibili Serial.Available restituisce 0 fino a quando nuovi dati non giungono sulla Porta.



    Int.Serial.read() - Recupera un byte di dati in entrata sulla porta Seriale.

    int data= Serial.read();

    Poichè i dati possono giungere nella porta seriale prima che il programma li possa leggere(per la velocità), Arduino salva tutti i dati

    in un buffer. Se è necessario ripulire il buffer e aggiornarlo con i dati aggiornati, usiamo la funzione flush().


    grazie alla collaborazione di Defcon


    Per avere informazioni piu dettagliate di tutto cio che e'stato riassunto in queste pagine vi consiglio

    Primi passi con arduino
    Arduino "la guida ufficiale di massimo Banzi
    inoltre vi consiglio di dare un occhiata al seguente link
    ovviamente internet che ci viene spesso in nostro aiuto.

    nella prossima discussione parleremo di come installare la scheda sul pc e faremo un esempio dove anche voi darete il vostro contributo.
    Ultima modifica di t-rex; April 28th, 2013 alle 18:47


    Iscriviti al nostro canale



    Er moderator de roma!!!!!

  4. #4

    Predefinito Re: Scheda di controllo Arduino

    Molto molto interessante! Seguo!
    Inviato dal mio Dremel usando Trapantalk



  5. #5
    Jonin
    Data Registrazione
    Dec 2011
    Località
    Cesena (FC)
    Messaggi
    302

    Predefinito Re: Scheda di controllo Arduino

    Citazione Originariamente Scritto da marco Visualizza Messaggio
    Molto molto interessante! Seguo!
    QUOTO!!!
    E seguo anch'io...

  6. #6
    Chunin A L'avatar di chiby
    Data Registrazione
    Dec 2006
    Località
    Sangano (To) - Venezia (Ogni tanto)
    Messaggi
    2,301

    Predefinito Re: Scheda di controllo Arduino

    Seguo interessata anch'io... è un pò che volevo cercare informazioni, ma non lo facevo mai...
    'Due cose sono infinite: L'universo e la stupidità umana' [CIT.]

  7. #7
    Admin L'avatar di Tonyevol
    Data Registrazione
    Dec 2006
    Località
    Latisana - Bevazzana - Lignano Sabbiadoro
    Messaggi
    3,973

    Predefinito Re: Scheda di controllo Arduino

    Ottimo Giovanni, finalmente ti vedo all'opera con questo tema, ti auguro un buon lavoro
    [cit.] "il software è troppo importante nel mondo moderno per non essere sviluppato attraverso l'open source"

  8. #8
    Moderator L'avatar di t-rex
    Data Registrazione
    Mar 2011
    Località
    roma
    Messaggi
    2,060

    Predefinito Re: Scheda di controllo Arduino

    grazie ragazzi...cerchero' di fare del mio meglio...ovviamente col vostro aiuto...


    Iscriviti al nostro canale



    Er moderator de roma!!!!!

  9. #9

    Predefinito Re: Scheda di controllo Arduino

    con il loro aiuto, io non ci chiappo na mazza...
    comunque userò arduino pure io, così mi da una mano con il mio modding
    bravo gio
    " Better to burn out than to fade away soon "

  10. #10

    Predefinito Re: Scheda di controllo Arduino

    Raga, scusate l'ignoranza, ma è vero che con arduino si può comandare un quadricottero?????
    Non ci sono problemi..... Solo soluzioni!!!!! Cit.

1 di 2 12 UltimaUltima

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •