Show Posts
Pages: 1 ... 6 7 [8] 9 10 11
106  International / Français / Re: Relai bistable pour va et vient on: January 15, 2013, 11:54:11 am
Après suite de mes recherches, je me demandais si ce schéma pourrait fonctionner en faisant des adaptations. Le soucis c'est qu'il faut que le relai monostable revienne en position repos avant que le relai bistable passe dans l'autre position. Est'il possible de créer un "retard" en A et B?

107  International / Français / Re: Relai bistable pour va et vient on: January 13, 2013, 04:20:52 pm
en multipliant les bistables, tu ne maitrise pas la liaison mécanique impérative des R/T 
C'est sur, l'un lâchera avant l'autre.
J'ai trouvé çà : http://clavellouxlucie.free.fr/stpi/
108  International / Français / Re: Relai bistable pour va et vient on: January 13, 2013, 03:47:44 pm
C'est ce que je vois, sinon je mets deux 2RT, ou un 2RT et un 1RT.
109  International / Français / Re: Relai bistable pour va et vient on: January 13, 2013, 02:53:06 pm
il en existe pratiquement que de 2 types
- les 2 bobines en commande directes
- les 2 bobines avec inversion du sens de courant de commande

Je suis entrain de chercher le relai, mais je n'y arrive pas.
Je cherche "relai bistable 4RT 10A".
Qu'il y ait une bobine avec inversion de sens de courant ou deux bobines (une pour chaque état) m'importe peu, quoique intuitivement, je pense que le schéma doit être plus simple avec un modèle "deux bobines".
110  International / Français / Relai bistable pour va et vient on: January 13, 2013, 01:08:44 pm
Bonjour,

Je cherche un schéma (que je n'arrive pas à trouver avec google) pour raccorder à une carte Arduino, un relai bistable 4RT pour faire un troisième point de commande d'un va et vient.
2RT pour émuler le permutateur, et 1RT pour connaitre la position du relai.

Le schéma de puissance ne me pose pas de problème, c'est le schéma de commande ou je n'ai pas les compétences (résistances, transistors, diodes et autres...).

Merci
111  International / Français / Re: Reset Software. on: January 13, 2013, 07:53:46 am
Merci à vous deux pour ces explications claires et précises. Je regarde la solution logicielle du rollover de millis().



Edit : j'utilise bien millis() sous la forme :
Code:
if ( (millis() - date_avant) > TEMPS) )
Par contre, je ne savais pas qu'en C, pour une variable unsigned long, le résultat d'une soustraction donnant un résultat négatif, il est ajouté 2^32 (modulo 2^32). Donc pas de gestion à gérer lorsque millis() repasse à zéro.
112  International / Français / Re: Reset Software. on: January 13, 2013, 06:18:07 am
D'autant qu'il ne faut pas oublier que le watchdog est contraignant car il faut le réarmer périodiquement pour qu'il ne reset pas la carte à tout bout de champs.

Je comptais faire un reset avec le watchdog tous les 45 jours afin d'éviter la gestion du passage à zéro de millis() au bout d'un peu plus de 49 jours.

Code:
#include <avr/wdt.h>

const unsigned long FCT_MAX=45*86400*1000;

void reset_software(void) {
  wdt_enable(WDTO_30MS);
  for(;;);
}

setup() {
}

loop() {
  if (millis()>FCT_MAX)
  {
    reset_software();
  }
}

Ton commentaire me laisse penser que je risque d'avoir des resets intempestifs ("réarmer périodiquement"?).
113  International / Français / Re: Rendre deux boutons poussoirs inactifs on: January 10, 2013, 01:53:09 pm
Ce que tu demandes, ce n'est que de la programmation, donc oui c'est possible.
Pour le soft reset, tu as un topic sur la première page, bien le lire jusqu'au bout!!!
114  International / Français / Re: Projet domotique on: January 10, 2013, 01:19:20 pm
Pour faire les essais d'attribution d'IP (ASK,CHG), je charge le même programme sur deux cartes. Je suis au stade de mise au point et à chaque rechargement, il faut modifier pour chaque carte son adresse MAC, cela devient lourd même si il s'agit de commenter une ligne et en décommenter l'autre.
Code:
byte maMac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
//byte maMac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 };

Grâce à vous, j'ai vu un commentaire disant que des données pouvaient être mise dans l'EEPROM. J'avais déjà vu le nom de la librairie sans jamais avoir osé regarder de plus près en me disant que cela devait être une prise de tête. Qu'elle fut ma surprise en voyant la simplicité pour écrire et lire dans cette mémoire. J'ai donc fait un sketch pour mettre en dur l'adresse MAC de chaque carte.

Code:
/* Permet de stocker une adresse MAC dans l'EEPROM de la carte.
   Depuis l'adresse 0 jusqu'à l'adresse 5.
  
   Le code suivant est à ajouter dans votre sketch pour récupérer
   l'adresse MAC stockée dans l'EEPROM.
  
   #include <EEPROM.h>
  
   byte mac[6];
  
   void setup()
   {
     for (int i = 0; i < 6; i++)
     {
       mac[i]=EEPROM.read(i);
     }
   }
  
   void loop
   {
   }                                                             */
  
#include <EEPROM.h>

byte mac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

void setup()
{
  Serial.begin(9600);
  delay(5000);
  
  Serial.println("Ecriture de la MAC address dans l'EEPROM");
  for (int i = 0; i < 6; i++)
  {
    //EEPROM.write(i, mac[i]); // A décommenter lorsqu'on est sur du résultat
                               /* Après l'éxecution de ce sketch, recommentez cette ligne
                                  et rechargez le sketch afin d'éviter la réécriture dans
                                  l'EEPROM à chaque reboot de la carte */
    Serial.print(i);
    Serial.print(" ");
    Serial.println(mac[i],HEX);
  }
  
  Serial.println("Vérification de l'écriture de la MAC address dans l'EEPROM");
  for (int i = 0; i < 6; i++)
  {
    Serial.print(i);
    Serial.print(" ");
    Serial.print(EEPROM.read(i),HEX);
    Serial.println();
  }  
}

void loop()
{
}
115  International / Français / Re: Reset Software. on: January 09, 2013, 04:44:49 pm
......., ta carte est bonne pour la poubelle.

Il faudrait peut être mettre un avertissement en tête du topic pour éviter la même mésaventure à d'autres!!!

Je verrai bien un [ATTENTION TOPIC A LIRE JUSQU'AU BOUT].
116  International / Français / Re: Projet domotique on: January 09, 2013, 01:31:03 pm
Je suis toujours dans le cas ou le serveur DHCP n'est pas joignable. Sur une remise en tension après coupure de courant, toutes les cartes démarrent ensemble. Toutes ont par défaut l'adresse IP 10.0.0.0, l'IP 10.0.0.1 est réservée à la passerelle Linux. Lorsque une demande ASK arrive, si les deux cartes demandent la même IP, la carte compare son adresse MAC avec celle de l'autre carte, si son adresse MAC est plus petite, elle demande à l'autre carte de changer d'IP par la demande CHG.

Code:
void chg(void)
{
  byte tempsDeFct[4];
  byte i;
 
  udp.beginPacket(monBroadcast, udpPort);
  udp.write("CHG");
  udp.write(maMac,6);
  millis2JHMS(millis(),tempsDeFct);
  udp.write(tempsDeFct,4);
  for (i=0;i<4;i++)
  {
    udp.write(sonIP[i]);
  }
  udp.write(saMac,6);
  udp.endPacket();
}

La commande CHG est aussi appliquée si la carte a déjà son IP de choisie et que l'autre carte veut la même IP.

Comparaison des deux adresses MAC.
Code:
boolean plusGrand(byte *tmac1, byte *tmac2)
{
  byte i;
  for(i=0;i<6;i++)
  {
    if ( tmac1[i] < tmac2[i] )
    {
      return false;
    }
    if ( tmac1[i] > tmac2[i] )
    {
      return true;
    }
  }
}

A ce stade, je suis tombé sur un problème puisque je commençais par affecter une première IP.
Code:
IPAddress IPTemp(10, 0, 0, 0);
IPAddress IPgateDNS(10, 0, 0, 1);
IPAddress monIP(10, 0, 0, 2);
IPAddress monBroadcast(10, 255, 255, 255);
IPAddress monMask(255, 0, 0 ,0);

Ethernet.begin(maMac, IPTemp, IPgateDNS, IPgateDNS, monMask);

Et lorsque la carte, pour une même monIP, n'avait pas reçu de réponse à ses 10 demandes ASK, je lui changeais son IP avec :
Code:
Ethernet.begin(maMac, monIP, IPgateDNS, IPgateDNS, monMask);

Lors d'envoi de nouvelles trames UDP, le programme restait bloqué sur l'instruction
Code:
udp.endPacket();

Le changement d'IP à chaud ne lui faisait pas plaisir.
En regardant dans le code de la librairie EthernetUDP il y a une instruction qui n'est nulle part commentée : stop()
Il faut donc faire:
Code:
          Ethernet.begin(maMac, monIP, IPgateDNS, IPgateDNS, monMask); //changement IP à chaud
          udp.stop(); //stopper
          udp.begin(udpPort); //redémarrer
117  International / Français / Re: Projet domotique on: January 08, 2013, 12:49:40 pm
Toute ce qui suit était avant que je découvre la librairie EEPROM (mais ça, j'en parlerai après).

L'affectation des adresses IP est prévue grâce à un serveur DHCP (j'aime bien ce type de configuration qui permet de gérer l'ensemble de mes adresses IP dans une seule table). Seulement, que ce passe t'il si il est injoignable ou si il y a une coupure de courant. Au rétablissement du courant, les arduino auront largement finis les 15 requêtes DHCP discover avant que le serveur DHCP soit de nouveau en ligne. Je me suis dit qu'elles devaient être assez grandes pour se débrouiller toutes seules à partir du moment ou elles peuvent discuter ensemble.

D’où la première trame ASK qui dit voici mon adresse MAC, j'aimerai bien prendre cette adresse IP.

Code:
ASK MaMACaddress MonTempsDeFct MonIPchoisie/Demande si adresse IP disponible
  3         6             4                 4       /17 bytes

Code:
const byte ASK_BOUCLE=10;
byte askBoucle = ASK_BOUCLE;
IPAddress monIP(10, 0, 0, 2);
IPAddress monBroadcast(10, 255, 255, 255);
byte maMac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
const unsigned int udpPort = 10666;

..............................................
void ask(void)
{
  byte i;
  byte tempsDeFct[4];

  askBoucle--;
  udp.beginPacket(monBroadcast, udpPort);
  udp.write("ASK");
  udp.write(maMac,6);
  millis2JHMS(millis(),tempsDeFct);
  udp.write(tempsDeFct,4);
  for (i=0;i<4;i++)
  {
    udp.write(monIP[i]);
  }
  udp.endPacket(); 
}

Dans le setup, après 15 DHCP discover infructueux, la fonction ask est appelée un maximum de 10 fois (ASK_BOUCLE) toute les 5 secondes. Sans réponse monIP est affectée à la carte, sinon askBoucle est remise à la valeur ASK_BOUCLE et monIP passe à l'IP suivante.

Code:
IPAddress ipPlus1(IPAddress tip)
{
  tip[3]++;
  if(tip[3] > 254)
  {
    tip[3] = 1;
    tip[2]++;
    if(tip[2] > 254)
    {
      tip[2] = 0;
      tip[1]++;
      if(tip[1] > 254)
      {
        tip[3] = 2;
        tip[2] = 0;
        tip[1] = 0;
      }
    }
  }
  return tip;
}
118  International / Français / Re: transfert sans fil des données EEPROM d'un arduino a l'autre? on: January 08, 2013, 11:52:31 am
Pour l'EEPROM, il me semble qu'elle est donnée pour 100000 effacements/écritures.
Suivant ce que tu as à faire, ce n'est pas forcement le bon choix.
119  International / Français / Re: Reset Software. on: January 08, 2013, 11:46:56 am
Hello,
Bon, au lieu de faire un copier/coller du code, j'ai écrit le code, et la plus d'erreur.
Je le charge dans la carte, et la aie, aie, aie.
La led 13 clignote à fond, mon programme ne me donne plus la main.
Je ne peux plus accéder à la carte pour recharger le programme original
Que puis faire
JP

Ou comment faire un loop avec le setup.
Une condition dans le sketch aurait été la bienvenue.

Code:
#include <avr/wdt.h>

void setup() {
  if (millis()>10000) {
    wdt_enable(WDTO_15MS);
    for(;;);
  }
}

void loop() {

}

Je sens que d'autres vont se faire piéger.
120  International / Français / Re: [RESOLU]Ajouter un port USB pour clavier on: January 07, 2013, 04:00:29 pm
Ouaaaaa, un protocole de communication révolutionnaire de chez M. Igloo.
Pages: 1 ... 6 7 [8] 9 10 11