Google+

Δευτέρα 26 Σεπτεμβρίου 2016

LSM303DLHC 3-axis Accelerometer and Magnetometer

Το LSM303DLHC είναι ένα επιταχυνσιόμετρο (accelerometer) και μια ψηφιακή πυξίδα (magnetometer).


Μπορείτε να το βρείτε σε module, διαθέσιμο στο ebay και για τη σύνδεση με το Arduino χρησιμοποιείται ο δίαυλος I2C (SDA, SCL), τροφοδοσία +5V και GND. Με τη χρήση του, μπορείτε να δημιουργήσετε ενδιαφέροντα, διαδραστικά project. Για παράδειγμα, με χρήση του κώδικα για Arduino και Processing, δημιουργούμε μια "ψηφιακή πυξίδα" που μας βοηθάει να βρούμε την κατεύθυνση του μαγνητικού Βορρά της Γης.



Σχετικό βίντεο:


Σχετικά λινκ:
Pololu - LSM303DLHC 3D Compass and Accelerometer Carrier
Instructables - Arduino / Processing - SIX AXIS GYRO & ACCELEROMETER
Instructables - Night sky explorer
Adafruit Learn - LSM303

Tilt Angle Sensor



Ένας Tilt Sensor ανιχνεύει, μηχανικά, τον κάθετο ή οριζόντιο προσανατολισμό (σε ένα εύρος γωνίας ~15°).



Με το Arduino συνδέεται σε ένα Digital pin και GND*. Αν και δεν έχει λεπτομερή ακρίβεια όσο ένα επιταχυνσιόμετρο (accelerometer), πολύ εύκολα και με ένα μικρό κομμάτι κώδικα, μπορεί να δοκιμαστεί η λειτουργία του με ένα LED:
//Sparkfun tilt sensor simple sketch code with debouncing

// these constants won't change:
const int ledPin = 13;      // led connected to digital pin 13
const int tiltSensor = 2; // the piezo is connected to analog pin 0

// these variables will change:
int sensorReading;      // variable to store the value read from the sensor pin
int ledState = LOW;       // variable used to store the last LED status, to toggle the light
int tiltState;            // the current reading from the input pin
int lastTiltState = HIGH; // the previous reading from the input pin

long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50;    // the debounce time; increase if the output flickers

void setup() {
 pinMode(ledPin, OUTPUT); // declare the ledPin as as OUTPUT
 pinMode(tiltSensor, INPUT); // declare the tiltSensor as as INPUT
}

void loop() {
  // read the sensor and store it in the variable sensorReading:
  sensorReading = digitalRead(tiltSensor);    
  
  // check to see if the sensor was tilted
  // (i.e. the input went from HIGH to LOW), and you've waited 
  // long enough since the last change to ignore any noise:  

  // If the tilt changed, due to noise or tilting: 
  if (sensorReading != lastTiltState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  } 
   if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer
    // than the debounce delay, so take it as the actual current state:
    
    // if the button state has changed:
    if (sensorReading != tiltState){
      tiltState = sensorReading;
      
    // if the sensor reading is low
      if (sensorReading == LOW) {
        // make the status of the ledPin to go on:
        ledState = HIGH;   
        // update the LED pin itself:        
        digitalWrite(ledPin, ledState);
        // dalay the LED on for one second:
        delay(500);
      }
      // otherwise if it is high
      else if (sensorReading == HIGH){
        // make the status of the ledPin to stay off:
        ledState = LOW;
        // update the LED pin itself:
        digitalWrite(ledPin, ledState);
      }
    }
   }
  // save the reading.  Next time through the loop,
  // it'll be the lastButtonState:
  lastTiltState = sensorReading; 
  // delay to avoid overloading the serial port buffer:
  delay(100);  
}
Μερικά στιγμιότυπα:



Σχετικά λινκ:
Sparkfun - Tilt Sensor
Arduino.cc Tutorial - Debounce

* Η σύνδεση μόνο με Digital pin και GND, επαφίεται στην ύπαρξη των ενσωματωμένων pull-up resistor του Arduino, σε κάθε άλλη περίπτωση, θα έπρεπε να προσθέσουμε μια σύνδεση με τα +5V μέσω μιας αντίστασης pull-up.

Πέμπτη 22 Σεπτεμβρίου 2016

OH3144 Hall Effect Magnetic Sensor

Με έναν αισθητήρα OH3144, έχουμε τη δυνατότητα να ανιχνεύσουμε την παρουσία μαγνητικού πεδίου, το οποίο αντίστοιχα δημιουργεί τάση Low/High στο signal pin, σύμφωνα με την αρχή λειτουργίας του Hall Effect. Στο παρακάτω βίντεο αναπαρίσταται, σχηματικά, το φαινόμενο:


Με την παραπάνω τεχνική, υλοποιείται ουσιαστικά ένας "ανέπαφος διακόπτης" (contact-less switch) ο οποίος έχει πολλές χρήσεις και εφαρμογές, όπως στη δημιουργία μετρητών ή ανιχνευτών αντικειμένων, ροής, ταχύτητας, κ.α.

Με το Arduino συνδέεται πολύ εύκολα, με χρήση +5V, GND και ενός digital pin:

Στιγμιότυπο ενός module με το OH3144:

Σχετικά λινκ:
Arduino and Hall Effect Sensor
Arduino Hall Effect Sensor Tutorial

Τετάρτη 21 Σεπτεμβρίου 2016

TTP224 Capacitive Touch Sensor


Το TTP224 είναι ένα module που ενσωματώνει 4 αισθητήρες αφής (4-channel capacitive touch sensor), μπορείτε να το χρησιμοποιήσετε στα project σας και είναι πολύ απλό στην υλοποίηση.

Δεσμεύοντας μερικά Digital Pin, ένα για κάθε sensor pad (το TTP224 υποστηρίζει 4) και με τροφοδοσία +5V, μπορείτε να το οδηγησέτε με ένα Arduino. Παρακάτω, το διάγραμμα σύνδεσης:

Με τον ακόλουθο κώδικα, μπορείτε να παρακολουθείτε στο serial monitor μόλις πατήσετε τον αισθητήρα:
int i;

void setup()
{
//set pins 4 - 7 as inputs
for(i=4; i<=7; i++)
{
pinMode(i, INPUT);
}
Serial.begin(9600);
}

void loop()
{
for(i=4; i<=7; i++)
{
if(digitalRead(i) == HIGH)
{
//I'm using pins 4 - 7 so subtract 3 to match
//numbering on module
Serial.println(i-3);
}
}
delay(100);
}
Παρακάτω, μερικά στιγμιότυπα:



Σχετικά λινκ:
Instructables - TTP224 Module Options
Arduino and TTP224
Ebay - TTP224 4-channel Capacitive Touch Sensor Module

DS1302 Real Time Clock

Το DS1302 είναι ένα Real Time Clock (RTC) ή αλλιώς, TimeKeeping Chip το οποίο, όπως προϊδεάζει και το όνομά του, μας παρέχει την ώρα και την ημερομηνία και μας βοηθάει να δημιουργήσουμε time critical εφαρμογές.


Ένα module βασισμένο στο DS1302, μπορεί πολύ εύκολα να συνδεθεί με το Arduino, κάνοντας χρήση 3 pin για την σειριακή επικοινωνία (CE, CLK, CE) και 2 για την τροφοδοσία, η τελευταία προτιμάται να είναι στα +3.3V, αν και υπάρχει ανοχή μέχρι και τα +5V. Παρακάτω, το διάγραμμα σύνδεσης:


Το DS1302, στα pin 2 και 3, έχει την ανάγκη ενός εξωτερικού κρυσταλλικού ταλαντωτή και στα pin 8 και 4, μιας μπαταρίας που τροφοδοτεί την ενσωματωμένη RAM, μεγέθους 31byte. Σε άλλες εκδοχές, όπως αυτή του DS3231, ο κρύσταλλος είναι ενσωματωμένος και σε αυτή του DS1387, ενσωματώνεται ακόμη και μια επαναφορτιζόμενη μπαταρία.


Μπορείτε να βρείτε έτοιμα module ή να κατασκευάσετε με τα αντίστοιχα part, δικό σας από την αρχή:


Κατεβάζουμε τις απαραίτητες βιβλιοθήκες DS1302RTC.h και Time.h και είμαστε έτοιμοι να δοκιμάσουμε παραδείγματα κώδικα:




Σχετικά λινκ:
DS1302 Real Time Clock
Adafruit - What is an RTC
PJRC - Time Library
DS3102 coding guide

Τρίτη 20 Σεπτεμβρίου 2016

7-Segment Displays & LED Matrix

Σε πολλά Arduino project, απαιτείται η εμφάνιση ενημερωτικών μηνυμάτων προς το χρήστη και για το λόγο αυτό, σε παλαιότερα post έχουμε αναφερθεί στο πως μπορούμε να συνδέσουμε οθόνες TFT και LCD (character & graphics) ώστε να διευρύνουμε τους τρόπους διάδρασης.

Εναλλακτικά, μπορεί κάποιος να χρησιμοποιήσει και οθόνες με LED και πιο συγκεκριμένα 7-segment displays ή LED Matrix:











Κυκλοφορούν πληθώρα από module για όλα τα γούστα, που ενσωματώνουν από 1x7-segment display, μέχρι και 64x16 ή ακόμη μεγαλύτερα! Τα περισσότερα έχουν ως κοινό χαρακτηριστικό, το ολοκληρωμένο οδήγησης MAX72xx. Το συγκεκριμένο IC υποστηρίζει, εγγενώς, μέχρι 16x16 συστοιχία, αλλά μπορεί να συνδεθεί αλυσιδωτά (daisy chain) και με άλλα ίδια, ώστε να οδηγηθούν περισσότερα led. Η σύνδεσή του με έναν μικροελεγκτή επιτυγχάνεται μέσω SPI.

Παρακάτω, μια τυπική σχηματική διάταξη για τη διασύνδεση με Arduino:



Η απαραίτητη βιβλιοθήκη LedControl.h είναι διαθέσιμη στο Github και στο ebay μπορείτε να βρείτε αντίστοιχα φθηνά led module w/ Maxim72xx driver. Η υλοποίηση είναι σχετικά εύκολη, αφού το μόνο που θα χρειαστείτε, είναι να συνδέσετε τα Arduino pin, υπεύθυνα για το SPI (MOSI,MISO,CLK,SS), με το module και αντίστοιχα να τα ορίσετε στον κώδικά σας.

Παρακάτω, μερικά screenshot και video από τη λειτουργία:







Περισσότερες πληροφορίες διαθέσιμες και στο Arduino Playground.