Kendziorra - Arduino UNO Barebone MicroSD+Power Shield
Last Arduino/ESP8266 project (click to open)

User Rating: 0 / 5

Star InactiveStar InactiveStar InactiveStar InactiveStar Inactive
 



Arduino UNO Barebone MicroSD-Power Shield

Alle ontwerpen gemaakt in Fritzing
(klik miniatuur)


Barebone SD+Power Shield op stripboard
(materiaalkosten met stripboard in 2013 € 9,91)

Voor als dit artikel je interesse wekt:
Dan vindt je hier alle Arduino Barebone projecten en andere Arduino artikelen.
Downloads voor Fritzing-bestanden, sketches (programma code) en andere Arduino projecten vindt je op mijn Download pagina

Wat zou een Arduino UNO Barebone MicroSD+Power Shield voor je kunnen betekenen:
Kleiner in maten en prijs als "kant en klaar" en naar eigen behoefte aan te passen. Wel wat meer moeite. Zeer geschikt om een of meerdere Barebones en Shields te voeden. Let wel op de maximale belasting van de Power Supply. Eenvoudig gegevens opslaan en/of lezen met een MicroSD-card.

Onderdelenlijst met prijsindicatie:
Die vindt je hier.

Arduino Barebone UNO en Barebone Shields:
Die vindt je hier.


Barebone stack met SD+Power Shield.
Het Arduino SD-library en de buffers nemen nog nogal wat ruimte in beslag.
Kom je met het geheugen klem te zitten kijk dan eens naar mijn Multi Masters artikel.

Strokeboard onderbrekingen:
Print de betreffende afbeelding en gebruik die als kras- of aftekenmal (het ouderwets carbonpapier is hierbij wel erg makkelijk, kantoor-boekhandel). Met een paar spijkertje van ∅1 mm in de hoekgaatjes prikken voor je het met tape stevig vast plakt. De afbeelding zit in het PSD-bestand welke bij het download-ZIP is bijgesloten.



Schema en PCB (printed circuit board):
In het Fritzing-bestand bevindt zich ook het schema en een PCB-layout voor als je deze print zelf wilt etsen.

Power Supply:
Dat is een goedkope breadboard uitvoering van DFRobot. Op een breadboard prikken is niet verplicht (toch?) dus waarom niet ook hier gebruiken. Past mooi in de maatvoering van mijn Barebone UNO en mijn Barebone Shields.

  • Input voltage: 6-12V (Power Jack) 5V (USB)
  • Centraal positive DC2.1 power jack
  • Output voltage:3.3V/5V
  • Output current:500mA
  • Aan/Uit schakelaar
  • Power status LED
  • Pin Header 5/3.3V output

MicroSD adapter:
Ik heb een standaard MicroSD adapter uit mijn rommelbak gepakt en er een haakse pin header op gesoldeerd. SD werkt op 3.3V en dat levert de Power Supply ook. De pinnen van een Atmaga328 leveren 5V dus de inkomende drie signalen, SS, MOSI en SCK, moeten met een spanningsdeler worden aangepast. Dat doe je met weerstandjes van 1K8 en 3K3. Het van de SD uitgaande signaal MISO is weliswaar ook 3.3V maar de Atmega328 ziet alles boven de 2V als een hoog signaal, daar is dus geen aanpassing voor nodig.

LET OP! Voor het solderen de pin header in een male header steken. Doe je dat niet dan verschuiven en/of verdraaien de pinnen daar de kunststof pinnenhouder zeer snel zacht wordt, zo heb je ook gelijk meer houvast zonder je vingers te branden. Makkelijk is ook om de adapter met een paar strookjes tape op het werkblad vast te zetten. Je moet snel solderen daar ook de adapter niet goed tegen de warmte van een soldeerbout kan. Eerst alles even snel vertinnen en daarna pas vast solderen is, naar mijn mening, de beste methode (vertinnen is soldeer laten vloeien en dan het overtollige er snel afvegen).

Filesystem:
Ik heb het SD kaartje als FAT32 geformatteerd, dat gaat hier prima. Arduino.cc geeft aan FAT16 (max. 2GB) en FAT32 (max. 32GB), maar heeft een voorkeur voor FAT16 (???). Kaartjes groter dan 16 GB kun je niet gebruiken. SDHC heb ik niet geprobeerd, dat zou wel moeten werken, maar SDHC heeft voor Arduino toch geen meerwaarde.
LET OP! Arduino werkt met "short name" bestandnamen dus het oude DOS 8.3 format (FILENAME.EXT - 12345678.123).

Software library SD.h:
Dat is een makkie, als alles zo simpel zou zijn. Informatie over de SD-Library kun je hier vinden (daar staan ook diverse voorbeelden). Natuurlijk kun je de Arduino SD-bestanden ook op andere systemen lezen en bewerken.

Een eenvoudig voorbeeld:
Hieronder een voorbeeld met tekst; in het blauw de SD-code, in het groen de weg te schrijven en terug te lezen tekst. Voor het werken met de Stream Operator << kijk je eerst even bij mijn artikel serialprint, dat maakt het uitwisselen van data een stuk gemakkelijker.

#include <SD.h> //include SD library
#include <Streaming.h> // alternatief voor .print(ln)

File myFile; //stream pointer

void setup()
{
  Serial.begin(9600);
  Serial << "Initialiseer de SD card... ";
  pinMode(10, OUTPUT); // SS (SD - Set Select)
  if (!SD.begin(10)) { // initialiseer het kaartje, bij false mislukt
    Serial << "Kan SD niet initialiseren\n";
    return; //exit setup(), we stoppen er mee
  }
  Serial << "SD is gereed.\n";
  SD.remove("test.txt"); // wist testbestand anders wordt het steeds langer (append)
  //open bestand test.txt voor lezen en schrijven:
  myFile = SD.open("test.txt", FILE_WRITE); 
  // Bestand is geopend:

  if (myFile) { 
    Serial << "Schrijven naar test.txt... ";
    myFile << " SD card communicatie over de SPI-bus.\n" <<
      " Vier draden: Select, Clock, DataInput,\n" <<
      " DataOutput en natuurlijk VCC (3.3V) en GND.\n" <<
      " Schrijven naar MicroSD via een een doodgewone\n" << 
      " MicroSD-adapter met aangesoldeerde haakse pin-header.\n" <<
      " Verder nog 6 weerstandjes als spanningsdeler\n" <<
      " want SD-Input werkt met 3,3V signalen.\n" <<
      " Natuurlijk kun je de MicroSD ook met een\n" <<
      " standaard kaartlezer uitlezen\n"; 
    myFile.close(); // Schrijven gereed, bestand sluiten
    Serial << "OK, bestand gesloten.\n";
  } else { 
    // Bestand kon niet worden geopend:
    Serial << "ERROR: Openen bestand test.txt\n"; 
  }

  // Heropen het bestand voor lezen:
  myFile = SD.open("test.txt");
  if (myFile) { // Bestand is open...
    Serial << endl << "De tekst in test.txt lezen en weergeven:\n"; 
    // Lees tot aan het einde:
    while (myFile.available()) {
      Serial << char(myFile.read()); // lees byte voor byte en toon het
    }
    Serial << endl;
    // Bestand sluiten:
    myFile.close();
  } else {
    // Bestand kon niet worden geopend:
    Serial << "ERROR: Openen bestand test.txt\n";
  }
  Serial << "Klaar!\n";
}

void loop()
{
  // Hier valt nog niets te doen
}

De uitvoer naar Arduino monitor geeft het resultaat weer: