13
Παίζοντας με μια shield SIM900 και έναν Arduino MEGA προστρέχοντας σε βοήθεια στο νήμα
http://www.hlektronika.gr/forum/showthread.php?t=87726
...μου μπήκε η ιδέα πως θα μπορούσα να έχω μια φωνητική επιβεβαίωση στις εντολές που δέχεται το modem.
Αναρρωτήθηκα λοιπόν αν θα μπορούσα να αποθηκεύσω ηχητικά μηνύματα στην ενσωματωμένη mcroSD (πάνω αριστερά στη φωτογραφία) και με κάποιον τρόπο χωρίς επιπλέον εξαρτήματα
και κόπο, να τα ακούω με ένα μικρό μεγάφωνο. Βρήκα λοιπόν πως μπορεί κάποιος να αναπαράγει αρχεία .wav απ' ευθείας απο οποιοδήποτε PWM pin, χωρίς εξωτερικό DAC και σε ποιότητα τέτοια
που όταν την άκουσα, έβαλα τα γέλια απο τη χαρά μου!!! Καταπληκτική!!! Είπα λοιπόν να μοιραστώ τη διαδικασία μαζί σας, μπορεί σε κάποιους να φανεί χρήσιμη! Δεν είναι απαραίτητο όλο
αυτό το στήσιμο, αρκεί ένας mocroSD reader και ο arduino σας!
Ξεκινώντας, έπρεπε να αντιμετωπίσω το εξής ζήτημα: οι microSD κάρτες ελέγχονται απο το δίαυλο SPI που όμως αντιστοιχεί σε διαφορετικά pins απο arduino σε arduino (μιλώ για το Hardware SPI).
Έτσι για να δουλέψει η παραπάνω διαμόρφωση, έπρεπε να χρησιμοποιηθεί Software SPI πρωτόκολλο αλλά σε αντιστοιχία των pins ενός UNO.
Χάρη στη βιβλιοθήκη SdFat https://github.com/greiman/SdFat/blo...s/SoftwareSpi/ αλλά και επίσης στην
https://github.com/TMRh20/TMRpcm/wiki για απ' ευθείας ασύγχρονη ανάγνωση αρχείων .wav απο κάρτα microSD (και με κάποιες μετατροπές
για τις ανάγκες μου), κατόρθωσα να ακούω πολύ καλής ποιότητας ήχο απ' ευθείας απο ένα οποιοδήποτε PWM pin ενός arduino, με τη βοήθεια ενός
μικρού μεγαφώνου χωρίς ενισχυτή (!!!). Ομολογώ, δεν το περίμενα!
Εννοείται πως για να υλοποιηθεί αυτό, το μόνο που χρειάζεται είναι ένα μικρό μοντουλάκι αναγνώστη microSD κάρτας, έναν level converter απο 5 στα 3.3V,
ένα μικρό μεγαφωνάκι, ένας arduino (οποιοσδήποτε!) και προεραιτικά ένα μοντουλάκι ενίσχυσης για μεγαλύτερη ένταση στον ήχο:
Τα αρχεία πρέπει να έχουν συγκεκριμένο format: μονοφωνικά, 32000Hz, 8bit
Για να γίνει αυτό, χρησιμοποίησα το ανοιχτού κώδικα, επεξεργασίας ήχου Audacity http://www.audacityteam.org/
Αποθήκευση ως .wav απ' ευθείας στην κάρτα και για την αναπαραγωγή, απ' ευθείας κλήση στον κώδικα, αφού οριστεί πρώτα ποιο PWM pin θα είναι η ακουστική έξοδος και το επίπεδο
της έντασης:
Κώδικας:audio.speakerPin = 5; audio.setVolume(2);Κώδικας:#include <SPI.h> #include <SdFat.h> #include <TMRpcm.h> #include <Wire.h> //=========================================== const uint8_t SOFT_MISO_PIN = 12; const uint8_t SOFT_MOSI_PIN = 11; const uint8_t SOFT_SCK_PIN = 13; const uint8_t SD_CHIP_SELECT_PIN = 10; //=========================================== SdFatSoftSpi<SOFT_MISO_PIN, SOFT_MOSI_PIN, SOFT_SCK_PIN> sd; SdFile file; TMRpcm audio; //=========================================== void setup() { Wire.begin(); audio.speakerPin = 5; audio.setVolume(2); if (!sd.begin(SD_CHIP_SELECT_PIN)) { Serial.println("SD FAIL!"); return; }else { Serial.println("SD OK!"); } audio.play("MY_FILE.wav"); } //=========================================== void loop() { }
Και για του λόγου το αληθές, αύριο φωτογραφίες και βιντεάκι.
Άλλη προσέγγιση στο ίδιο ζήτημα, εδώ:
https://www.arduino.cc/en/Tutorial/SimpleAudioPlayer, αλλά χρησιμοποιεί τους 16bit DAC ενός arduino DUE.