Translate

Visualizzazione post con etichetta arduino. Mostra tutti i post
Visualizzazione post con etichetta arduino. Mostra tutti i post

sabato 7 novembre 2020



Questa sera vi parleò dell' LCD KeyPad Shield per Arduino (uno R3) che mi ero procurato mesi e mesi addietro... O meglio, dopo aver testato tutti i vari esempi disponibili nell' IDE di arduino, ho notato la mancanza di, o non sono cmq riuscito a trovare, una funzione che mi permettesse di scorrere un testo dal basso verso l'alto e viceversa.

La scheda presenta, oltre all' LCD, anche 5 pulsanti da utilizzare come input e controllo.

I tasti sono serigrafati come UP, DOWN, LEFT, RIGHT, and SELECT, ma i comportamenti da adottare in caso di pressione sono scelti dal programmatore.

La cosa interessante è che tutti i pulsanti sono collegati ad un singolo ingresso analogico A0: tramite una catena di resistenze / partitore resistivo si genera una tensione diversa su A0 a seconda del tasto premuto


Questo schema mostra i pulsanti di input e le resistenze associate:

Se nessun pulsante viene premuto la tensione su A0 sarà portata a 5v dalla resistenza di 2K R6 infatti in tale situazione nessuna delle altre resistenze avrà alcun effetto. Se si esegue un analogRead (A0) verrà restituito un 1023 (o qualsiasi valore sopra 1000).

Consideriamo ora cosa succede se si preme il tasto "DOWN". 

nel punto A0 avremo il partitore resistivo R6 da 2k e R2+R3 330+620=950
La tensione presente al pin A0 in questo caso è di circa 1.61V (5V*950/(2k+950), il che significa che se si esegue un analogRead (A0) restituirà un valore di circa 329. Quindi, se si legge un valore di circa 329 da A0 si sa' che il pulsante "DOWN" è premuto.

Lo stesso vale per gli altri pulsanti, con i valori di tensione e analogRead() relativi ed indicati nello schema sopra.

Questo è un modo pulito per gestire una serie di tasti in ingresso, utilizzando uno solo dei pin di I / O dell'Arduino.


N.B. Premendo contermporaneamente piu tasti, verrà riconosciuto solo quello piu in alto dello schema (tra quelli effettivamente premuti).

La parte di codice usato per la gestione dei tasti è:


#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5


...

int read_buttons()
{
    // i pulsanti sono collegati in serie a resistenze...
    // quindi basta un piedino Analogico per sapere cosa 

    // è stato premuto
    adc_key_in = analogRead(0);

    if (adc_key_in > 1000) return btnNONE; // la metto per prima

                                                      //in quanto condizione
                                                      // maggiormente verificata
    if (adc_key_in < 50)   return btnRIGHT;
    if (adc_key_in < 195)  return btnUP;
    if (adc_key_in < 380)  return btnDOWN;
    if (adc_key_in < 555)  return btnLEFT;
    if (adc_key_in < 790)  return btnSELECT;
}



Mediando gli esempi di tutilizzo trovati in giro, dopo l'inizializzazione del display

//creo istanza per come è collegato lo shield
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);



basato su questo collegamento


Pin Function
Analog 0 Button (select, up, right, down and left)
Digital 4 DB4
Digital 5 DB5
Digital 6 DB6
Digital 7 DB7
Digital 8 RS (Data or Signal Display Selection)
Digital 9 Enable
Digital 10 Backlit Control

sono passato a fare uno "splash screen" da 5 secondi usando anche dei caratteri grafici creati ad hoc.
La versione "cinese" da me acquistata al posto dei caratteri accentati presenta dei bellissini ideogrammi... di cui però non me ne sono fatto nulla e che mi hanno costretto a scrivere le lettere accentate con l'apice.






######

######

mercoledì 27 gennaio 2016

R2D2 - Alias C1P8 - Parte 1 di 999 - Arduino e Motori in DC


Rieccomi qui,
qualche Mese fa avevo fatto vedere la Saga di Guerre Stellari (Quelle degli anni '80) a mia figlia di 7 anni... è stato amore a prima vista con C1P8 (il nome italiano di R2D2)
Poi ci sono state le pubblicità del Robottino Emiglio (ma in italiano i nomi si scrivono con "LI" e mai con "GLI"?! ) e giu pianti quando gli ho spiegato che erano "solo radiocomandati" che non erano come C1P8...
Da li mi sono messo a giocare con un vecchio chassis di un robot (Cybot) uscito a fascicoli con la DeAgostini (di cui avevo preso solo i primi 4 fascicoli...)
un Arduino Uno R3, ed un chip L293D acquistato in stock su Amazon.

Qui Sotto lo schema del Chip (L293)


Quindi Partendo da questo datasheet ed usando lo schema qui sotto

Sono riuscito a far muovere il tutto alimentandolo con un PowerBank da cellulare.

il Programma usato è stato:




// Motore A
#define enable1Pin 11
#define in1Pin 10
#define in2Pin 9

//Motore B
#define enable2Pin 6
#define in3Pin 7
#define in4Pin 8


boolean reverse = false;
  
void setup()
{
  // Motore A
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(enable1Pin, OUTPUT);
  
  // Motore B
  pinMode(in3Pin, OUTPUT);
  pinMode(in4Pin, OUTPUT);
  pinMode(enable2Pin, OUTPUT);
}
 
void loop()
{

setMotorA(0, true);
setMotorB(0, true);
delay(1000);
delay(1000);
setMotorA(128, true);
setMotorB(128, true);
delay(1000);
setMotorA(255, true);
//setMotorB(128, true);
delay(1000);
setMotorA(128, true);
setMotorB(255, true);
delay(1000);

}
 
void setMotorA(int speed, boolean reverse)
{
  analogWrite(enable1Pin, speed);
  digitalWrite(in1Pin, ! reverse);
  digitalWrite(in2Pin, reverse);
}

void setMotorB(int speed, boolean reverse)
{
  analogWrite(enable2Pin, speed);
  digitalWrite(in3Pin, ! reverse);
  digitalWrite(in4Pin, reverse);
}



et Voila, un "percorso" da 5 secondi... :D


mercoledì 1 ottobre 2014

Arduino & Raspberry Pi




Questa sera ho deciso di mettere nero su bianco I passi che mi hanno permesso di collegare il mio “Raspberry Pi B-” ad uno dei miei “Arduino Uno R3”
Allora voi direte ma perche usare un Arduino ? Perche se devi usare con precisione la temporizzazione, leggere velocemente valori analogici etc etc l'Arduino è perfetto (Open Surce e Progetto Italiano) e come dice il sito ufficiale
Arduino is an open-source electronics platform based on easy-to-use hardware and software. It's intended for anyone making interactive projects.
(per maggiori info su cosa sia esattamente http://www.arduino.cc/)
cos'altro si puo' volrere ?
Collegargo al Raspberry Pi! Perche ? Potrei discutere sul fascino di interfacciare I due sistemi, dell'esplorazione dell'insolito... oppure confessare che il raspberry Pi è l'unico “PC-Fisso” che ho nella stanza Hobby che è un Triangolo Rettangolo Isoscele di lato 1,5 mt … in compenso il monitor è un 17Pollici1280x1024 :o)

cmq bando alle ciance
Aprendo il Terminale si scarica

sudo apt-get install arduino

Rispondete ad eventuali domande, scaricate, attendete .. et voilà comparira un menu con “Arduino IDE”




impostiamo la Board come “Arduino Uno



Dopodiche Carichiamo uno Sketch (è un programma per arduino) il piu semplice possibile...






dove al piedino 13 è collegato un Led (apposta per fare queste prove :) ) che andremo a far lampeggiare;
aggiungiamo, giusto per far lampeggiare il led in maniera particolare, le seg righe di codice alla fine:

digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
digitalWrite(led, HIGH);
delay(250);
digitalWrite(led, LOW);
delay(250);

dopodichè verifichiamo il codice








Prima di Fare L'upload sull Arduino
Bisogna collegarlo, in Teoria Bisognerebbe collegarlo NON direttamente al Raspberry Pi ma tramite un hub USB alimentato... ed è cio che vi consiglio.
Io per questi test ho provato il collegamento diretto ed ha funzionato... cmq non mi ritengo responsabile di eventuali Svampate che possano succedervi :D


(da notare che dovrebbe aver riconosciuto la porta USB in autonomia) nel mio caso :

/dev/ttyACM0


ed ora Carichiamo il programma su Arduino








Ed ora Finalmente un led giallo dovrebbe lampeggiare...