Κυριακή 28 Φεβρουαρίου 2021

Μετρήσεις υγρασίας και θερμοκρασίας ατμόσφαιρας με τον αισθητήρα DHT11

 Περιγραφή

Με τον αισθητήρα DHT11 μετράμε την υγρασία και την θερμοκρασία της ατμόσφαιρας και τυπώνουμε τις τιμές σε οθόνη LCD I2C. 



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



  • Arduino Uno
  • αισθητήρας DHT11
  • οθόνη LCD I2C

Κώδικας

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  

#define DHTPIN 2    
#define DHTTYPE DHT11   

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));

  dht.begin();
  
  lcd.init();
  lcd.clear();         
  lcd.backlight();
}

void loop() {
 
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  Serial.print(F("HUMI: "));
  Serial.print(h);
  Serial.println(F("%"));
  Serial.print(F("TEMP: "));
  Serial.print(t);
  Serial.println(F("°C "));

  lcd.setCursor(0,0); 
  lcd.print(F("TEMP: "));
  lcd.print(t);
  lcd.print(F(" oC"));
  lcd.setCursor(0,1);
  lcd.print(F("HUMI: "));
  lcd.print(h);
  lcd.print(F(" %"));
  

}

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

Αισθητήρας βροχόπτωσης σε ψηφιακή λειτουργία: προειδοποίηση με 2 LED και buzzer

 Περιγραφή

Ο αισθητήρας βροχόπτωσης μπορεί να ανιχνεύει σταγόνες νερού επειδή η παρουσία των σταγόνων νερού στην επιφάνειά του έχει σαν αποτέλεσμα την μεταβολή της αντίστασής του. Συγκεκριμένα:

  • Περισσότερο νερό στην επιφάνεια σημαίνει καλύτερη αγωγιμότητα και έτσι μικρότερη αντίσταση.
  • Λιγότερο νερό στην επιφάνεια σημαίνει χειρότερη αγωγιμότητα και, έτσι, μεγαλύτερη αντίσταση.

Ο αισθητήρας παράγει τάση εξόδου ανάλογη της αντίστασης, και έτσι, μπορούμε να προσδιορίσουμε εάν βρέχει ή όχι. Λειτουργεί με δύο τρόπους, αναλογικό ή ψηφιακό, και διαθέτει δύο εξόδους σήματος, Α0 και D0 αντίστοιχα. Εδώ ο αισθητήρας λειτουργεί με ψηφιακό τρόπο. Αρχικά, περιστρέφοντας το ποτενσιόμετρο της πλακέτας, θα καθορίσουμε την ευαισθησία του αισθητήρα, με βαθμονόμηση όπως περιγράφεται στην ανάρτηση εδώ. Ο αισθητήρας σε ψηφιακή λειτουργία δίνει στην έξοδο D0 δύο δυνατές τιμές LOW ή HIGH, που ισοδυναμούν με τις δυνατές τιμές ON ή OFF ενός διακόπτη. Στην πλακέτα του αισθητήρα, ένα ενσωματωμένο LED πληροφορεί για αυτήν την κατάσταση ON/OFF.

Όταν βρέχει, η έξοδος είναι ΟΝ, η κόκκινη λυχνία LED ανάβει και το buzzer ηχεί, διαφορετικά η πράσινη λυχνία είναι αναμμένη.

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

  • Arduino Uno
  • Αισθητήρας βροχόπτωσης
  • Κόκκινο LED
  • Πράσινο LED
  • 2x 220Ω αντιστάτες
  • Breadboard και καλώδια
Η έξοδος του αισθητήρα συνδέεται στην ψηφιακή είσοδο 3. Οι λυχνίες συνδέονται στις ψηφιακές εξόδους 8 και 9 και προστατεύονται με 2 αντιστάτες 220Ω. Το buzzer συνδέεται στην ψηφιακή έξοδο 10.

Κώδικας

int R_LED = 8;
int G_LED = 9;
int buzzer= 10;
int rainSensor = 3;
int rain_ON;
void setup()
{
pinMode(R_LED, OUTPUT);
pinMode(G_LED, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(rainSensor, INPUT);
digitalWrite(G_LED, LOW);
digitalWrite(R_LED, LOW);
digitalWrite(buzzer, LOW);
}
void loop()
{
rain_ON = digitalRead(rainSensor);
delay(2000);
if (rain_ON == 0)
{
digitalWrite(R_LED, LOW);
digitalWrite(G_LED, HIGH);
digitalWrite(buzzer, LOW);
}
else
{
digitalWrite(R_LED, HIGH);
digitalWrite(G_LED, LOW);
digitalWrite(buzzer, HIGH);
}
}


Αισθητήρας βροχόπτωσης σε αναλογική λειτουργία: προειδοποίηση με 2 LED

 Περιγραφή

Ο αισθητήρας βροχόπτωσης μπορεί να ανιχνεύει σταγόνες νερού επειδή η παρουσία των σταγόνων νερού στην επιφάνειά του έχει σαν αποτέλεσμα την μεταβολή της αντίστασής του. Συγκεκριμένα:

  • Περισσότερο νερό στην επιφάνεια σημαίνει καλύτερη αγωγιμότητα και έτσι μικρότερη αντίσταση.
  • Λιγότερο νερό στην επιφάνεια σημαίνει χειρότερη αγωγιμότητα και, έτσι, μεγαλύτερη αντίσταση.

Ο αισθητήρας παράγει τάση εξόδου ανάλογη της αντίστασης, και έτσι, μπορούμε να προσδιορίσουμε εάν βρέχει ή όχι. Λειτουργεί με δύο τρόπους, αναλογικό ή ψηφιακό, και διαθέτει δύο εξόδους σήματος, Α0 και D0 αντίστοιχα. Εδώ ο αισθητήρας λειτουργεί με αναλογικό τρόπο.

Όταν βρέχει, η κόκκινη λυχνία LED ανάβει, διαφορετικά η πράσινη λυχνία είναι αναμμένη.

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


  • Arduino UNO
  • Αισθητήρας βροχόπτωσης
  • Κόκκινο led
  • Πράσινο led
  • 2 x 220Ω αντιστάτες
  • Breadboard και καλώδια
Η έξοδος του αισθητήρα συνδέεται στην αναλογική Α0. Οι λυχνίες συνδέονται στις ψηφιακές εξόδους 8 και 9 και προστατεύονται με 2 αντιστάτες 220Ω.

Κώδικας

int greenLED = 9;
int redLED = 8;
int thresholdValue = 790;

void setup(){
  pinMode(A0, INPUT);
  pinMode(greenLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  digitalWrite(greenLED, LOW);
  digitalWrite(redLED, LOW);
}

void loop() {
  int sensorValue = analogRead(A0);
  if(sensorValue < thresholdValue){
    digitalWrite(greenLED, LOW);
    digitalWrite(redLED, HIGH);
  }
  else {
    digitalWrite(greenLED, HIGH);
    digitalWrite(redLED, LOW);
  }
  delay(2000);
}


Αισθητήρας βροχόπτωσης σε ψηφιακή λειτουργία: βαθμονόμηση (καθορισμός τιμής κατωφλίου)

 Περιγραφή

Ο αισθητήρας βροχόπτωσης μπορεί να ανιχνεύει σταγόνες νερού επειδή η παρουσία των σταγόνων νερού στην επιφάνειά του έχει σαν αποτέλεσμα την μεταβολή της αντίστασής του. Συγκεκριμένα:

  • Περισσότερο νερό στην επιφάνεια σημαίνει καλύτερη αγωγιμότητα και έτσι μικρότερη αντίσταση.
  • Λιγότερο νερό στην επιφάνεια σημαίνει χειρότερη αγωγιμότητα και, έτσι, μεγαλύτερη αντίσταση

Λειτουργεί με δύο τρόπους, αναλογικό ή ψηφιακό, και διαθέτει δύο εξόδους σήματος, Α0 και D0 αντίστοιχα. Εδώ ο αισθητήρας λειτουργεί με ψηφιακό τρόπο.

Για να δίνει ακριβείς μετρήσεις ο αισθητήρας, συνιστάται να έχει βαθμονομηθεί. Η μονάδα (module) διαθέτει ενσωματωμένο ποτενσιόμετρο για τη βαθμονόμηση της ψηφιακής εξόδου (D0) και ένα LED. Περιστρέφοντας το κουμπί του ποτενσιόμετρου, ορίζεται ένα κατώφλι. Έτσι, όταν η ποσότητα νερού υπερβαίνει την τιμή κατωφλίου, η λυχνία LED ανάβει και η ψηφιακή έξοδος (D0) δίνει την τιμή LOW.

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




Αισθητήρας βροχόπτωσης σε αναλογική λειτουργία: εκτύπωση τιμών στην σειριακή οθόνη

Περιγραφή

Ο αισθητήρας βροχόπτωσης μπορεί να ανιχνεύει σταγόνες νερού επειδή η παρουσία των σταγόνων νερού στην επιφάνειά του έχει σαν αποτέλεσμα την μεταβολή της αντίστασής του. Συγκεκριμένα:

  • Περισσότερο νερό στην επιφάνεια σημαίνει καλύτερη αγωγιμότητα και έτσι μικρότερη αντίσταση.
  • Λιγότερο νερό στην επιφάνεια σημαίνει χειρότερη αγωγιμότητα και, έτσι, μεγαλύτεραη αντίσταση.

Ο αισθητήρας παράγει τάση εξόδου ανάλογη της αντίστασης, και έτσι, μπορούμε να προσδιορίσουμε εάν βρέχει ή όχι. Λειτουργεί με δύο τρόπους, αναλογικό ή ψηφιακό, και διαθέτει δύο εξόδους σήματος, Α0 και D0 αντίστοιχα. Εδώ ο αισθητήρας λειτουργεί με αναλογικό τρόπο.

Στην σειριακή οθόνη εκτυπώνονται οι αναλογικές τιμές τάσης όταν η επιφάνεια είναι στεγνή και όταν έχουμε ψεκάσει με σταγόνες νερού. Αυτές οι τιμές πρέπει να είναι γνωστές όταν θέλουμε να δημιουργήσουμε αυτοματισμούς που βασίζονται στον αισθητήρα βροχόπτωσης όπως για παράδειγμα όταν βρέχει ένας λαμπτήρας LED ανάβει ή ένα buzzer ηχεί. Στις περιπτώσεις αυτές, μπορούμε να χρησιμοποιούμε τις τιμές 0-1023, ωστόσο η λειτουργία του αισθητήρα δεν είναι τόσο αποδοτική.

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


Η έξοδος του αισθητήρα συνδέεται στην αναλογική Α0.

Κώδικας

void setup() {
pinMode(A0,INPUT);
Serial.begin(9600); 
}

void loop() {
Serial.println(analogRead(A0));  
delay(2000);
}




Δευτέρα 15 Φεβρουαρίου 2021

Καρδιακοί παλμοί με αισθητήρα και την πλακέτα Arduino

Περιγραφή

Μετράμε τους καρδιακούς παλμούς με αισθητήρα. Οι τιμές τυπώνονται σε LCD I2C οθόνη και ελέγχεται η αξιοπιστία συγκρίνοντας με αντίστοιχο αισθητήρα smartwatch.


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

Περισσότερα για τον αισθητήρα, σε προηγούμενη ανάρτηση εδώ, όπου οι τιμές τυπώνονται στην σειριακή οθόνη. 


Κώδικας


#define USE_ARDUINO_INTERRUPTS true   
#include <PulseSensorPlayground.h>    
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  

//  Variables
const int PulseWire = 0;       
const int LED13 = 13;       
int Threshold = 550;          
                               
PulseSensorPlayground pulseSensor;  

void setup() {   

  Serial.begin(9600);          

 
  pulseSensor.analogInput(PulseWire);   
  pulseSensor.blinkOnPulse(LED13);       
  pulseSensor.setThreshold(Threshold);   

     if (pulseSensor.begin()) {
    Serial.println("We created a pulseSensor Object !");  
   }

  lcd.init();
  lcd.clear();         
  lcd.backlight();
}

void loop() {

int myBPM = pulseSensor.getBeatsPerMinute();  

if (pulseSensor.sawStartOfBeat()) {            
 Serial.println("♥  A HeartBeat Happened ! "); 
 Serial.print("BPM: ");                        
 Serial.println(myBPM);                     
}

  lcd.setCursor(0,0); 
  lcd.print("BPM: ");
  lcd.print(myBPM);
 
  delay(20);                    

}

  

Ένα LASER εκπέμπει σήμα SOS! ! !

 Περιγραφή

Ένα laser εκπέμπει . . .  _  _  _  . . .  SOS! 

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

Η είσοδος του laser συνδέεται στην ψηφιακή έξοδο 13 στην πλακέτα, στην οποία είναι και το ενσωματωμένο BUILT_IN LED.  

  • Arduino Uno
  • Laser module

Κώδικας

void setup()
{
  pinMode(13, OUTPUT);
}

void loop()
{
  digitalWrite(13, HIGH);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, LOW);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, HIGH);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, LOW);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, HIGH);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, LOW);
  delay(300); // Wait for 3000 millisecond(s)
  digitalWrite(13, HIGH);
  delay(300); // Wait for 3000 millisecond(s)
  digitalWrite(13, LOW);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, HIGH);
  delay(300); // Wait for 3000 millisecond(s)
  digitalWrite(13, LOW);
  delay(1000); // Wait for 1000 millisecond(s)
  digitalWrite(13, HIGH);
  delay(300); // Wait for 3000 millisecond(s)
  digitalWrite(13, LOW);
  delay(300); // Wait for 3000 millisecond(s)
  digitalWrite(13, HIGH);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, LOW);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, HIGH);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, LOW);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, HIGH);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, LOW);
  delay(700); // Wait for 7000 millisecond(s)
  digitalWrite(13, HIGH);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, LOW);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, HIGH);
  delay(100); // Wait for 1000 millisecond(s)
  digitalWrite(13, LOW);
  delay(700); // Wait for 7000 millisecond(s)
}

Κυριακή 14 Φεβρουαρίου 2021

Προειδοποίηση με άναμμα LED όταν ο ήχος ομιλιών ξεπεράσει μια τιμή κατωφλίου

 Περιγραφή

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

 

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



  • Arduino Uno
  • αισθητήρας ήχου (μικρόφωνο)
  • 2 x LED διαφορετικού χρώματος (εδώ κόκκινου και λευκού)
  • 2 x 220Ω
Το αναλογικό σήμα του μικροφώνου συνδέεται στην Α0. Το μικρόφωνο τροφοδοτείται σε τάση 3,3V ώστε να έχει μικρότερο θόρυβο. Το λευκό και κόκκινο LED συνδέονται στην 2 και 3 αντίστοιχα. 

Κώδικας

#define sampleWindow 10 
#define LEDtime 1000 
#define threshold 10 

#define MIC_IN A0 
#define LED_LOUD 2 
#define LED_QUIET 3 
#define V_MIC 3.3 

int sample;
long startLED;
float values[QTY_SAMPLES];
float sum;
int index;


float rollingAverage(float num) {
  sum -= values[index];
  values[index] = num;
  sum += values[index];
  index++;
  index = index % QTY_SAMPLES;
  return sum / QTY_SAMPLES;
}


void setup()
{
  Serial.begin(9600);
  pinMode(LED_QUIET, OUTPUT);
  pinMode(LED_LOUD, OUTPUT);
  pinMode(MIC_IN, INPUT);
  float sum = 0;
  int index = 0;
}


void loop()
{

 int signalMax = 0;
  int signalMin = 1024;
  unsigned long startMillis = millis(); 

    while (millis() - startMillis < sampleWindow)
  {
    sample = analogRead(MIC_IN);
    if (sample > signalMax)
    {
      signalMax = sample;  // save the new maximum
    }
    else if (sample < signalMin)
    {
      signalMin = sample;  // save the new minimum
    }
  }

  
  float amplitude = signalMax - signalMin;  
  float millivolts = rollingAverage(amplitude) * V_MIC / 1.024; 
  Serial.println(millivolts);

    if (millivolts > threshold) {
    digitalWrite(LED_LOUD, HIGH); digitalWrite(LED_QUIET, LOW);
    startLED = millis();
  } else if (millis() - startLED > LEDtime) {
    digitalWrite(LED_LOUD, LOW); digitalWrite(LED_QUIET, HIGH);
  }
}


Έλεγχος σερβοκινητήρα με αισθητήρα κάμψης

 Περιγραφή

Ένας αισθητήρας κάμψης (flex sensor) ελέγχει τη γωνία ενός σερβοκινητήρα. 
 

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


  • Arduino Uno
  • αισθητήρας κάμψης
  • σερβοκινητήρας
  • 1 x 10ΚΩ
Ο αισθητήρας συνδέεται ως διαιρέτης τάσης στην αναλογική είσοδο A0 με χρήση της αντίστασης 10ΚΩ. Το σήμα για το έλεγχο της γωνίας του σερβοκινητήρα δίνεται από την  ~11 ( ακίδα PWM). 
Για το έργο και την προσομοίωση στο tinkercad πατήστε στην εικόνα

Κώδικας

Ο αισθητήρας δεν δίνει εύρος 0-1023 όπως για παράδειγμα ένα ποτενσιόμετρο, έτσι χρειάζεται να βρούμε το εύρος και να το αντιστοιχίσουμε στις 0 έως 180ο του σερβοκινητήρα. Στην σειριακή οθόνη τυπώνουμε την Α0 για 0 μοίρες και για 180 μοίρες (πλήρης κάμψη του αισθητήρα). Οι τιμές είναι 539 και 810 αντίστοιχα. Αυτό το εύρος τιμών σημειώνεται στην συνάρτηση map. 
#include <Servo.h>

Servo servo_11;

void setup()
{
  pinMode(A0, INPUT);
  servo_11.attach(11, 500, 2500);
  Serial.begin(9600);

}

void loop()
{
  servo_11.write(map(analogRead(A0), 539, 810, 0, 180));
  Serial.println(analogRead(A0));
  delay(10); 
}

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

Ενδείξεις υγρασίας εδάφους με αισθητήρα και 2 LED

Περιγραφή

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

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


  

  • Arduino Uno
  • αισθητήρας υγρασίας εδάφους
  • 2 x LED διαφορετικού χρώματος (εδώ κόκκινου και πράσινου)
  • 2 x 220Ω

Ο αισθητήρας συνδέεται στον αναλογικό ακροδέκτη A1, οι τιμές τάσης του αισθητήρα μετατρέπονται σε τιμές 0-1023 που εμφανίζονται στη σειριακή οθόνη. Ορίζουμε μια ελάχιστη τιμή – τιμή κατωφλίου –  ας πούμε 500. Όταν η τιμή στην A1 είναι μικρότερη αυτής της τιμής, τότε στην σειριακή οθόνη τυπώνεται "NO NEED FOR WATERING". Ενώ, όταν η τιμή στην A1 είναι μεγαλύτερη, τυπώνεται "NEED FOR WATERING". Επίσης, δύο λαμπτήρες LED κόκκινου και πράσινου χρώματος έχουν συνδεθεί στους ακροδέκτες 10 και 9, μέσω αντιστάσεων 220Ω δίνοντας οπτική πληροφορία να πότισμα ή μη πότισμα, αντίστοιχα. 

Κώδικας

int rainPin = A1;
int greenLED = 9;
int redLED = 10;
int thresholdValue = 500;

void setup(){
  pinMode(rainPin, INPUT);
  pinMode(greenLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(rainPin);
  Serial.print(sensorValue);
  if(sensorValue < thresholdValue){
    Serial.println(" - No need for watering");
    digitalWrite(redLED, LOW);
    digitalWrite(greenLED, HIGH);
  }
  else {
    Serial.println(" - Need for watering");
    digitalWrite(redLED, HIGH);
    digitalWrite(greenLED, LOW);
  }
  delay(1000);
}

Τρίτη 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); 
}