Gratateur switch pour animation de noël

Portrait de CAVICon

Salutations,

j'ai en projet d'animer des guirlandes de noël (via des triac via des transistor car amperage) et pour ceci il me faut pas mal de place pour dire quelle guirlande s'allume quand.
Le timing sera donc important, et la place nécessaire.

J'ai donc ajouté une carte ethernet et inclu une micro SD de 1 go (j'ai donc 1'080'000'000 octets de libre, et oui je saute de joie^^)

Le soucis premier est que la carte n'est pas totalement vide, et même avec un téléphone il reste des traces.

J'ai donc buché sur un script de formatage durant environ 4h en epluchant les sources .cpp, j'ai pas dutout réussi, donc j'ai copié un code existant et l'ai mixé pour qu'il fonctionne et soit comprégensible (la broche 4 n'avait pas été bien définie, et c'était en anglais)

Et voici le resultat :

- - - -

#include <SD.h>
#include <SPI.h>

const int SDChipSelect = 4;
// SS pin on the SD card.
// Other pins connected to normal SPI

File root;
int DeletedCount = 0;
int FolderDeleteCount = 0;
int FailCount = 0;
String rootpath = "/";//dossier à vider completement

void setup()
{
  Serial.begin(9600);
  pinMode(SDChipSelect,OUTPUT);

  if (!SD.begin(SDChipSelect)) {
    Serial.println("Erreur d'initialisation...");
    return;
  }
  Serial.println("Bienvenue !");
 
  root = SD.open("/");
  rm(root, rootpath);

  if( !DeletedCount && !FailCount && !FolderDeleteCount ){}else{
    Serial.print("Suppression de ");
    Serial.print(DeletedCount);
    Serial.print(" fichier");
    if( DeletedCount != 1 ){
      Serial.print("s");
    }
    Serial.print(" et de ");
    Serial.print(FolderDeleteCount);
    Serial.print(" dossier");
    if ( FolderDeleteCount != 1 ){
      Serial.print("s");
    }
    Serial.println(" de la carte SD.");
    if( FailCount > 0 ){
      Serial.print("Erreurs de suppression pour ");
      Serial.print(FailCount);
      Serial.print(" item");
      if( FailCount != 1 ){
        Serial.print("s");
      }
    }
  }
  Serial.println("Fin.");
}

void loop()
{
  while(1){
    // nada
  }
}

void rm(File dir, String tempPath) {
  while(true) {
    File entry =  dir.openNextFile();
    String localPath;

    Serial.println("");
    if (entry) {
      if ( entry.isDirectory() )
      {
        localPath = tempPath + entry.name() + rootpath + '\0';
        char folderBuf[localPath.length()];
        localPath.toCharArray(folderBuf, localPath.length() );
        rm(entry, folderBuf);

        if( SD.rmdir( folderBuf ) )
        {
          Serial.print("Suppression du dossier : ");
          Serial.println(folderBuf);
          FolderDeleteCount++;
        }
        else
        {
          Serial.print("Impossible de supprimer le dossier : ");
          Serial.println(folderBuf);
          FailCount++;
        }
      }
      else
      {
        localPath = tempPath + entry.name() + '\0';
        char charBuf[localPath.length()];
        localPath.toCharArray(charBuf, localPath.length() );

        if( SD.remove( charBuf ) )
        {
          Serial.print("Suppression de : ");
          Serial.println(localPath);
          DeletedCount++;
        }
        else
        {
          Serial.print("Erreur de suppression de : ");
          Serial.println(localPath);
          FailCount++;
        }
      }
    }
    else {
      // break out of recursion
      break;
    }
  }
}

- - - -

 

Bonne utilisation à ceux qui veulent vider un dossier ou toute la carte,

j'ai trouvé les composants qu'il faut pour utiliser environ 20µA de l'arduino ;) (transistor qui commande un triac, easy)

Je vais tester avec 4/5 guirlandes, puis tenterait de faire matrice de 5x5 avec une pin supp pour l'état à insérer. (le tout avec condensateurs etc)

[ce qui devrait donner un jolie bordel contenant 25 prises alimentées ou non en courant secteur, géré par les pins 3 + 5 à 13 (la 4 est exclu car utilisée par sd) et la pin 2 pour l'état 1 ou 0]
En cas de fail (par exemple la "prise" passe de 0 à 1 puis 0, le condensateur sera là pour éviter les pics de courant, je tenterais de calculer comment faire pour avoir 10ms de latence pour un controle propre.

 

Voilà tout, j'espère pouvoir réaliser tout ce merdier avant noël et faire de belles vidéos pour quelques euros :) [ Oui, je sais qu'il existe un boitier à 8 prises en usb, mais ça coute 400€ donc fok ;) ]

Portrait de Alex

Pourquoi une carte SD?

Perso je partirais sur un Arduino avec un module RTC (Real Time Clock). Ensuite suivant le nombre de sorties tu peux utiliser soit une carte Mega soit un 74HC595.

Des fonctions sleep si nécessaire et puis c'est parti, ta maison devient une discothèque!