Τρίτη 9 Φεβρουαρίου 2021

Έλεγχος LED RGB με 3 ποτενσιόμετρα

 Περιγραφή

3 ποτενσιόμετρα ελέγχουν τις ποσότητες του κόκκινου, του πράσινου και του μπλε σε RGB LED.

Εξαρτήματα και συνδέσεις



  • Arduino Uno
  • RGB LED (εδώ κοινής καθόδου)
  • 3 x 220Ω
  • 3 x ποτενσιόμετρα
Οι ακροδέκτες R, G και B συνδέονται σε τρεις PWM ακροδέκτες στην πλακέτα Arduino μέσω τριών αντιστάσεων 220Ω, ενώ ο τέταρτος ακροδέκτης συνδέεται στην γείωση. Τα 3 ποτενσιόμετρα συνδέονται με το μεσαίο ακροδέκτη στις αναλογικές εισόδους A0, A1 και Α2.  
Για το έργο και την προσομοίωση στο Tinkercad πατήστε στην εικόνα

Κώδικας

Οι 1024 τιμές από κάθε ποτενσιόμετρο αντιστοιχίζονται στις 255 τιμές της εξόδου για κάθε ένα χρώμα.

int red = 0;
int green = 0;
int blue = 0;

void setup()
{
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop()
{
  red = map(analogRead(A0), 0, 1023, 0, 255);
  green = map(analogRead(A1), 0, 1023, 0, 255);
  blue = map(analogRead(A2), 0, 1023, 0, 255);
  analogWrite(9, red);
  analogWrite(10, blue);
  analogWrite(11, green);
}

Σάββατο 6 Φεβρουαρίου 2021

Μετρήσεις θερμοκρασίας με τον αισθητήρα LM35 και τύπωση στην φορητή οθόνη LCD 16x2 I2C

Περιγραφή

Ο αισθητήρας LM35 συνδέεται στην αναλογική είσοδο Α0 και οι τιμές της θερμοκρασίας του περιβάλλοντος εμφανίζονται στη φορητή οθόνη υγρών κρυστάλλων.

Συνδέσεις


Κώδικας

Στον κώδικα έχει χρησιμοποιηθεί η βιβλιοθήκη LiquidCrystal_I2C.h και για τις μετρήσεις του αισθητήρα LM35 έχει οριστεί η τάση αναφοράς 1,1 V,  όπως αναλυτικά περιγράφεται στην ανάρτηση εδώ

Κώδικας IDE

 #include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2); 

float temperature; //η μεταβλητή της θερμοκρασίας
int reading; //η μεταβλητή που διαβάζει τον αισθητήρα
int LM35Pin = 0; // η είσοδος του σήματος του αισθητήρα

void setup() {
  analogReference(INTERNAL); 
  lcd.init();
  lcd.clear();         
  lcd.backlight();      // έλεγξε τον φωτισμό
 }

void loop() {
    reading = analogRead(LM35Pin);
    temperature = reading / 9.31;

    lcd.setCursor(0,0);   //ξεκίνα από τον χαρακτήρα 0 στη γραμμή 0
    lcd.print("Temperature: oC"); //τύπωσε το λεκτικό 
    lcd.setCursor(0,1);   //μετακίνησε τον χαρακτήρα 0 στη γραμμή 1
    lcd.print(temperature); //τύπωσε την τιμή της μεταβλητής 
    delay(1000);
}

Παρασκευή 5 Φεβρουαρίου 2021

Μετρήσεις θερμοκρασίας με τον αισθητήρα LM35

Ο αισθητήρας LM35

Περιγραφή 

Με τον αισθητήρα LM35 μπορούμε να μετρήσουμε τη θερμοκρασία. Πρόκειται για ένα ολοκληρωμένο κύκλωμα (integrated circuit - IC) της Texas Instruments LM35 που διαθέτει ακρίβεια και έχει χαμηλό κόστος. Χρησιμοποιεί ένα εύρος θερμοκρασιών από −55°C έως 150°C. Το datasheet του αισθητήρα βρίσκεται εδώ. Ο αισθητήρας είναι αναλογικός, γραμμικός και μετρά 10mV ανά βαθμό Κελσίου. Με άλλα λόγια για αύξηση της θερμοκρασίας περιβάλλοντος κατά 1 βαθμό Κελσίου, η τάση στην αναλογική είσοδο θα αυξηθεί κατά 10mV. Ο αισθητήρας LM35 δίνει στην έξοδο τάση από 0 έως 1V. 
Το IC φέρει 3 ακροδέκτες (pin) και στην πλακέτα arduino συνδέουμε ως εξής:
  • το αριστερό pin τροφοδοτείται με τάση 5V
  • το μεσαίο pin συνδέεται στη γείωση
  • το δεξί pin συνδέεται σε ένα αναλογικό κανάλι εισόδου της όπως εδώ στον ακροδέκτη A0.

Κώδικας

Στον κώδικα IDE, η είσοδος (τάση) κωδικοποιείται (από τον 10-bit μετατροπέα ADC) και αποθηκεύεται στη μεταβλητή reading. Συγκεκριμένα, η τιμή που επιστρέφει η συνάρτηση analogRead είναι μία τιμή από 0 έως 1023, η οποία χρειάζεται να μετατραπεί σε θερμοκρασία 0C. Είπαμε πριν ότι, κάθε 0,01V του αισθητήρα LM35 αντιστοιχεί σε 1 0C και πως ο αισθητήρας LM35 δίνει τάση από 0 έως 1V. Όμως, ο μετατροπέας ADC του Arduino έχει μέγιστη τιμή τάσης μέτρησης τα 5V. Αυτό σημαίνει πως δεν εκμεταλλευόμαστε το 80% του εύρους μέτρησης. Για να πετύχουμε το μέγιστο εύρος μέτρησης θα πρέπει να αλλάξουμε την τάση αναφοράς του μετατροπέα ADC σε 1.1V. 
Αφού ορίσουμε την τάση αναφοράς, πολλαπλασιάσουμε την reading με 1,1/ (0,01*1024) = 1/ 9,31
Τέλος, ελέγχουμε τη θερμοκρασία περιβάλλοντος στη σειριακή οθόνη.

Κώδικας IDE

float temperature;
int reading;
int LM35Pin = 0;

void setup()
{
    analogReference(INTERNAL); //Ορισμός της τάσης αναφοράς σε 1,1 V
    Serial.begin(9600);
}

void loop()
{
    reading = analogRead(LM35Pin);
    temperature = reading / 9.31; //Υπολογισμός θερμοκρασίας
    Serial.println(temperature);
    delay(1000);
}

Πέμπτη 4 Φεβρουαρίου 2021

H oθόνη LCD 16x2 I2C

 Περιγραφή


 Η οθόνη υγρών κρυστάλλων εμφανίζει 2 γραμμές 16 χαρακτήρων (όχι, όμως, το ελληνικό αλφάβητο) και συνδέεται με το πρωτόκολλο επικοινωνίας I2C, με 2 καλώδια στις αναλογικές ακίδες A4 A5 και τα 2 καλώδια της τροφοδοσίας και της γείωσης. To module στο πίσω μέρος διαθέτει ποτενσιόμετρο για την ρύθμιση της αντίθεσης της οθόνης.

Συνδέσεις 

 Οι ακροδέκτες SCL και SDA συνδέονται στις δύο τελευταίες αναλογικές ακίδες Α5 και Α4 αντίστοιχα.  

Κώδικας 

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  

void setup() {

  lcd.init();

  lcd.clear();         

  lcd.backlight();      // έλεγξε τον φωτισμό!

  

  // Τύπωση το όνομα της ομάδας σου στην 1η γραμμή και το σχολείο σου στη 2η γραμμή

  lcd.setCursor(0,0);

  lcd.print("arduino.TEAM-21!");

  lcd.setCursor(0,1);   1

  lcd.print("1st GYMN @Koropi");

}

void loop() {

}


Τετάρτη 3 Φεβρουαρίου 2021

Arduino: το LED ανάβει με αισθητήρα ήχου

Περιγραφή

Ένας λαμπτήρας LED στην ακίδα 13 της πλακέτας ανάβει και σβήνει μέσω του μικροφώνου και ενός σύντομου ήχου με τα χέρια ή τη φωνή. Το module λειτουργεί ως διακόπτης ON/OFF είτε χρησιμοποιώντας μια τιμή κατωφλίου και την εντολή if στον κώδικα (software) είτε ρυθμίζοντας την ευαισθησία με το ποτενσιόμετρο (hardware). Αναλυτικότερα, για αυτές τις δύο τεχνικές:
1.     Με πειραματισμό μπορούμε να βρούμε μια αποτελεσματική τιμή κατωφλίου παρακολουθώντας μεταβολές στις τιμές εξόδου πχ στη σειριακή οθόνη, όπως στο σκετς της αναλογικής λειτουργίας
2.     Με την αυξομείωση της λεγόμενης ευαισθησίας, περιστρέφοντας με ένα μικρό κατσαβίδι το ποτενσιόμετρο στον μπλε αντιστάτη της πλακέτας του μικροφώνου, όπως στο σκετς της ψηφιακής λειτουργίας.

Συνδέσεις

LED on pin 13 and GND
"+" 
to a 5V power output οn the board
G to a ground on the board
AΟ σε κάποια αναλογική ακίδα του Arduino, εδώ στην A0, ή
DO σε κάποια ψηφιακή ακίδα του Arduino
, εδώ στην 2

Αναλογική λειτουργία

Όταν το επίπεδο του ήχου που διαβάζει η A0 είναι μεγαλύτερο της τιμής κατωφλίου, αν η LED είναι αναμμένη, τότε σβήνει, ενώ αν η LED σβηστή, τότε ανάβει. Η τιμή κατωφλίου στο σκετς ορίζεται ως 525, αλλά επειδή εξαρτάται κάθε φορά από τις ιδιαίτερες συνθήκες, πιθανά να χρειαστεί διαφορετική τιμή.

Κώδικας

int buttonstate = 0;
int ledstate = 0;

void setup() {
pinMode(13, OUTPUT); 
pinMode(A0, INPUT); 
Serial.begin(9600); //για τον ορισμό κατωφλίου
}

void loop(){
buttonstate = analogRead(A0);
ledstate = digitalRead(13);
Serial.println(buttonstate);
if (ledstate == HIGH && buttonstate > 525) { 
delay(250);
digitalWrite(13, LOW); 
delay(250);
}
if (ledstate == LOW && buttonstate > 525) { 
delay(250);
digitalWrite(13, HIGH); 
delay(250);
}
}

Ψηφιακή λειτουργία

Όταν η ψηφιακή ακίδα 2 διαβάζει 1 ή HIGH, αν η LED είναι αναμμένη, τότε σβήνει, ενώ αν η LED σβηστή, τότε ανάβει. Η ψηφιακή τιμή 1/HIGH ή 0/LOW προέρχεται από την σύγκριση της τιμής του μικροφώνου με την τιμή από το ποτενσιόμετρο στον LM393. Χρειάζεται να προηγηθεί πειραματισμός με αυξομείωση της λεγόμενης ευαισθησίας, περιστρέφοντας με ένα μικρό κατσαβίδι το ποτενσιόμετρο στον μπλε αντιστάτη της πλακέτας του μικροφώνου. Το LED2 του module ανάβει (πράσινο χρώμα) για την ψηφιακή τιμή 1/HIGH. Όταν περιστρέφω δεξιόστροφα, η τιμή από το ποτενσιόμετρο ελαττώνεται και από κάποια θέση και μετά θα δούμε το LED2 να ανάβει (1/HIGH). Έτσι, επιστρέφουμε σε μια θέση πριν το σημείο αυτό ώστε το LED2 να είναι σβηστό (0/LOW), και να ανάβει με τον σύντομο ήχο χεριών ή φωνής, αλλάζοντας το 0/LOW σε 1/HIGH.

Κώδικας

int buttonstate;
int ledstate;
void setup() {
pinMode(13, OUTPUT); 
pinMode(2, INPUT); 
}
void loop(){
buttonstate = digitalRead(2);
ledstate = digitalRead(13);
if (ledstate == HIGH && buttonstate == 1) { 
delay(250);
digitalWrite(13, LOW); 
delay(250);
}
if (ledstate == LOW && buttonstate == 1) { 
delay(250);
digitalWrite(13, HIGH); 
delay(250);
}
}


Arduino: Μέτρηση καρδιακών παλμών με αισθητήρα

Περιγραφή

Οι καρδιακοί παλμοί εμφανίζονται σε σειριακή οθόνη. Στο IDE γίνεται εγκατάσταση της βιβλιοθήκης pulsesensor playgroung και χρησιμοποιούμε το σκετς BMP to serial.

Εξαρτήματα και συνδέσεις

Κώδικας

Εγκατάσταση βιβλιοθήκης

 Άνοιγμα Παραδείγματος








Τρίτη 2 Φεβρουαρίου 2021

Hello world! Το πρώτο μας έργο: Έλεγχος της φωτοβολίας ενός LED με ποτενσιόμετρο!!

Περιγραφή

Η φωτοβολία ενός λαμπτήρα LED ελέγχεται με ένα ποτενσιόμετρο. 
Αυτό είναι το πρώτο μας έργο, πριν το lockdown, πριν την διακοπή των μαθημάτων στο σχολείο, πριν όλα γίνουν από απόσταση... όμως, παρά τις δυσκολίες να βρισκόμαστε, εμείς συνεχίσαμε, προσαρμοστήκαμε και συνεχίσαμε διαδικτυακά με τις συναντήσεις μας να γίνονται ακόμα και στις ..γιορτές.


Εξαρτήματα

  • 1 Arduino Uno R3
  • 1 Ποτενσιόμετρο 10 kΩ
  • 1 αντίσταση 220 Ω
  • 1 κόκκινο LED

Συνδέσεις

Τα εξαρτήματα συνδέονται (α) απευθείας στην πλακέτα και (β) με χρήση breadboard. 

Για το έργο και την προσομοίωση στο tinkercad πατήστε στην εικόνα



Κώδικας

Στον κώδικα χρησιμοποιούμε τη συνάρτηση map για να αντιστοιχίσουμε τις 1024 δυνατές τιμές του 10-bit μετατροπέα ADC της αναλογικής εισόδου Α0, στις 256 δυνατές τιμές της ψευδοαναλογικής εξόδου ~11.  

void setup()
{
  pinMode(A0, INPUT);
  pinMode(11, OUTPUT);
}

void loop()
{
  analogWrite(11, map(analogRead(A0), 0, 1023, 0, 255));
  delay(100); 
}