Arduino Starter Project #2

Έλληνας Ιωάννης

1. Το LCD module

Ο τύπος του χρησιμοποιούμενου LCD module είναι το TS2040 με τα ακόλουθα χαρακτηριστικά:

  • Οθόνη: 20 χαρακτήρες x 4 γραμμές
  • Δεδομένα εισόδου: 4-Bits or 8-Bits
  • Χαρακτήρας: 5 x 8 Dots
  • Τροφοδοσία: 5V±5%
  • Φωτισμός με LED back light
  • Ο ακροδέκτης σύνδεσης είναι:

Register select (RS):  Με HIGH επιλέγεται ο καταχωρητής δεδομένων, ο οποίος περιέχει ότι εμφανίζεται στην οθόνη. Με LOW επιλέγεται ο καταχωρητής εντολών, μέσω του οποίου ρυθμίζεται η λειτουργία του LCD.

Read/Write (R/W): Επιλέγει την ανάγνωση/εγγραφή

Enable (E): Επιλέγει την εγγραφή των καταχωρητών

Data pins (DB0 -DB7). Περιέχουν αυτό που διαβάζεται ή εγγράφεται από ή στους καταχωρητές.

  • Το μπλοκ διάγραμμα του module είναι:

  • Οι εντολές προγραμματισμού και απεικόνισης είναι:

Σύνδεση με τον Arduino

Βασικό πρόγραμμα απεικόνισης

</pre>
#include <LiquidCrystal.h>

// LiquidCrystal display with:

// RS on pin 12

// R/W on pin 11

// Enable on pin 10

// DB4, DB5, Db6, DB7 on pins 5, 4, 3, 2

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

void setup() {

lcd.begin(20,4);                     // defines LCD type

lcd.setCursor(5,1);                // set the cursor to column 5, line 1

// line 0 is the first row

lcd.print(‘hello, world!’);         // print a message to the LCD

}

void loop() {

lcd.setCursor(5,3);               // set the cursor to column 5, line 3

lcd.print(millis()/1000);         // time in sec since starting

}
<pre>

Χρήσιμες πληροφορίες

 Παράδειγμα-1

 Σε αυτό το παράδειγμα, ο χρήστης στέλνει σειριακά ένα κείμενο το οποίο εμφανίζεται στο LCD.

#include LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

 void setup()
 {
   Serial.begin(9600);

lcd.begin(20,4);

lcd.clear();
 }

 void loop()
 {
   if (Serial.available()) {
     lcd.write(Serial.read());
   }
 }

Παράδειγμα-2

 Σε αυτό το παράδειγμα, δημιουργούμε χαρακτήρες που δεν υπάρχουν στον ήδη υπάρχοντα πίνακα συμβόλων. Οι προγραμματιζόμενοι χαρακτήρες αποθηκεύονται στην CGRAM (Character Generator RAM) με διεύθυνση από 0 έως 7 (8 χαρακτήρες συνολικά).

#include
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
byte GreekMi[8] = {
B10001,
B10001,
B10001,
B11110,
B10000,
B10000,
B10000,
B00000
};
byte GreekKsi[8] = {
B11111,
B00000,
B00000,
B11111,
B00000,
B00000,
B11111,
B00000
};
char text1[]=”Controller-”;

void setup() {
lcd.createChar(0, GreekMi);
lcd.createChar(1, GreekKsi);</pre>
lcd.begin(20,4);
<pre>  lcd.clear();
lcd.setCursor(3,1);       // set cursor to column 3, line 1
lcd.print((char) 0);        // the function lcd.write(0) returns an error
lcd.print(text1);
lcd.write(1);
}
void loop() {}

2. Αναλογικές είσοδοι

Συνδέουμε ένα ποτενσιόμετρο στην αναλογική είσοδο 2 και αλλάζουμε το duty cycle του ρεύματος οδήγησης του LED, το οποίο συνδέεται στην ψηφιακή έξοδο 9.

 Η τάση στην αναλογική είσοδο θα μεταβάλλεται από 0 έως 1024 καθώς η τάση αναφοράς του A/D είναι 5V. Το duty cycle μεταβάλλεται από 0 έως 255 και επομένως η αναλογική είσοδος θα διαιρείται με το 4.

 Πηγαίος κώδικας


int ledPin = 9;                           // LED connected to digital pin 9

int potPin=2;                            // potentiometer connected to analog pin 2

void setup() {

pinMode(ledPin, OUTPUT);

}

void loop() {

int dutyCycle=analogRead(potPin);

analogWrite(ledPin, dutyCycle/4);     // sets the duty cycle (range from 0 to 255)

}

Παράδειγμα-3

 Αυτό το παράδειγμα απεικονίζει την τιμή του ποτενσιομέτρου στη οθόνη LCD. Η τιμή από το A/D είναι σε μορφή hex και απεικονίζεται σε δεκαδική μορφή με τη συνάρτηση print(val,10).

</pre>
#include <LiquidCrystal.h>

&nbsp;

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

int val;

int potPin=2;                            // potentiometer connected to analog pin 2
<pre>char text1[]=”The analog input is:”;</pre>
&nbsp;

void setup() {

lcd.begin(20,4);                    // defines LCD type

lcd.clear();

lcd.setCursor(0,1);               // set the cursor to column 0, line 1

lcd.print(text1);                     // print a message to the LCD

}

&nbsp;

void loop() {

val=analogRead(potPin);

lcd.setCursor(8,2);               // set cursor to the most significant digit of indication

lcd.print("    ");                      // blank 4 places

if (val<=9)                            // set the cursor to the right position

lcd.setCursor(11,2);

else if (val<=99)

lcd.setCursor(10,2);

else if (val<=999)

lcd.setCursor(9,2);

else

lcd.setCursor(8,2);

lcd.print(val, 10);                  // print the value in decimal

delay(2000);                         // delay for stable indication

}
<pre>

Παράδειγμα-4

 Σε αυτό το παράδειγμα χρησιμοποιείται ο αισθητήρας θερμοκρασίας LM35 για να διαβαστεί η  θερμοκρασία περιβάλλοντος και να απεικονιστεί στο LCD. Τα χαρακτηριστικά του είναι:

  • Βαθμονόμηση σε ˚ Celsius (Centigrade)
  • Γραμμική έξοδο με  + 10.0 mV/˚C
  • Ακρίβεια 0.5˚C (at +25˚C)
  • Κλίμακα λειτουργίας από −55˚ έως +150˚C
  • Τάση λειτουργίας 4 έως 30 volts

</pre>
#include <LiquidCrystal.h>

&nbsp;

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

int val;

int potPin=2;                            // potentiometer connected to analog pin 2
<pre>char text1[]=”The temperature is:”;</pre>
&nbsp;

void setup() {

lcd.begin(20,4);                    // defines LCD type

lcd.clear();

lcd.setCursor(0,1);               // set the cursor to column 0, line 1

lcd.print(text1);                     // print a message to the LCD

}

&nbsp;

void loop() {

val=analogRead(potPin);

lcd.setCursor(8,2);               // set cursor to the most significant digit of indication

lcd.print("    ");                      // blank 4 places

if (val<=9)                            // set the cursor to the right position

lcd.setCursor(11,2);

else if (val<=99)

lcd.setCursor(10,2);

else if (val<=999)

lcd.setCursor(9,2);

else

lcd.setCursor(8,2);

lcd.print(val/10, 10);             // print the value in decimal

delay(2000);                         // delay for stable indication

}
<pre>
Tags: ,

Leave a Reply