Partage
  • Partager sur Facebook
  • Partager sur Twitter

Arduino & Switch de fin de course

Sujet résolu
27 juillet 2016 à 14:12:13

Bonjour à tous,

j'aimerai connecter sur mon arduino un switch de fin de course comme celui ci :

Cependant le montage n'est pas assez clair dans ma tete :S

Je pense qu'il va falloir brancher une pin au +5v de l'arduino et l'autre pin à une entrée digital qui sera configuré en input.

Sachant que le switch sera en position fermer une grande majorité du temps quelle est la résitance à choisir pour éviter un maximum la consommation de courant ?

merci d'avance de votre aide !

  • Partager sur Facebook
  • Partager sur Twitter
27 juillet 2016 à 14:35:40

Salut,

Sur ce type de switch, tu as du NO/NF, il suffit de faire en sorte que le circuit soit ouvert la majeure partie du temps, après ce n'est qu'une question de logique de programmation...

  • Partager sur Facebook
  • Partager sur Twitter

Bonhomme !! | Jeu de plateforme : Prototype.

27 juillet 2016 à 14:52:08

reçu mais dans le cas ou je suis en circuit fermé il va quand même falloir choisir une résistance pour limiter le courant :S
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
28 juillet 2016 à 12:13:00

Tiens c'est un ancien sujet qui m'a permis de comprendre le fonctionnement des boutons avec un arduino

https://openclassrooms.com/forum/sujet/arduino-probleme-de-lecture-de-bouton?page=1#message-91180811

  • Partager sur Facebook
  • Partager sur Twitter
28 juillet 2016 à 12:32:19

Ya deux manières de  faire, pullup et pulldown, qui sont symétriques

Voyons pull up (tirer vers le haut).

Quand l'interrupteur est ouvert, la tension de la sortie devrait être 5v. Pour faire ça, la sortie est reliée à Vcc (+5v) par l'intermédiaire d'une résistance de pull up. 

Quand il est fermé, il relie la sortie au GND = 0v, et un courant est débité à travers la résistance. Une résistance de 10 K fera l'affaire, ce qui limite la fuite à  0,5 mA.

EDIT: pour pulldown, c'est l'inverse évidemment. L'interrupteur est relie à 5v et à la sortie, qui est "tirée vers le bas" par une résistance vers GND. Et donc fermé => 5v, ouvert 0v.

Il y a sûrement des raisons de préférer l'un à l'autre, mais lesquelles ? :-)

-
Edité par michelbillaud 29 juillet 2016 à 9:04:06

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
29 juillet 2016 à 8:34:04

t'aurais pas  une doc de ton truc pour commencer ?
  • Partager sur Facebook
  • Partager sur Twitter
29 juillet 2016 à 9:36:43

A savoir aussi, il y a une résistance de pullup intégrée dans les arduinos. Comme ça on a juste à brancher l'interrupteur (ou bouton poussoir) à GND et à l'entrée voulu.

Il suffit de configurer avec le mode INPUT_PULLUP. Démo :

// les sorties (12, 13) s'éteignent 
// quand on appuie sur les boutons
// reliés aux entrées 2 et 3.

void setup()
{
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(12, OUTPUT); 
  pinMode(13, OUTPUT); 
}

void loop()
{
  int b2 = digitalRead(2);
  int b3 = digitalRead(3);
  
  digitalWrite(12, b2 ? HIGH : LOW);
  digitalWrite(13, b3 ? HIGH : LOW);
 
}



-
Edité par michelbillaud 29 juillet 2016 à 9:36:53

  • Partager sur Facebook
  • Partager sur Twitter
29 juillet 2016 à 14:21:02

michelbillaud a écrit:

A savoir aussi, il y a une résistance de pullup intégrée dans les arduinos. Comme ça on a juste à brancher l'interrupteur (ou bouton poussoir) à GND et à l'entrée voulu.

Il suffit de configurer avec le mode INPUT_PULLUP. Démo :

// les sorties (12, 13) s'éteignent 
// quand on appuie sur les boutons
// reliés aux entrées 2 et 3.

void setup()
{
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(12, OUTPUT); 
  pinMode(13, OUTPUT); 
}

void loop()
{
  int b2 = digitalRead(2);
  int b3 = digitalRead(3);
  
  digitalWrite(12, b2 ? HIGH : LOW);
  digitalWrite(13, b3 ? HIGH : LOW);
 
}



-
Edité par michelbillaud il y a environ 4 heures

Donc pas besoin d'une résistance de 10kOHM ?

  • Partager sur Facebook
  • Partager sur Twitter
29 juillet 2016 à 14:29:13

Jerome75140 a écrit:

michelbillaud a écrit:

A savoir aussi, il y a une résistance de pullup intégrée dans les arduinos. Comme ça on a juste à brancher l'interrupteur (ou bouton poussoir) à GND et à l'entrée voulu.

Il suffit de configurer avec le mode INPUT_PULLUP.Donc pas besoin d'une résistance de 10kOHM ?


Absolument aucun besoin, puisque la résistance de pullup est intégrée dans le microcontrôleur, exprès pour. Il suffit de lui demander de s'en servir. Voir :

http://cybergibbons.com/uncategorized/arduino-misconceptions-1-need-to-use-external-pull-up-resistors/

La version en assembleur, pour PORTD2 et PORTD3, qui correspondent aux pins 2 et 3 de l'UNO
	
	ldi r16,~((1<<DDD2)|(1<<DDD3)) ; D2 et D3 en entrée
	out DDRD,r16
	
	ldi r16,(1<<PORTD2)|(1<<PORTD3) ; D2 et D3 avec pullups
	out PORTD,r16



-
Edité par michelbillaud 29 juillet 2016 à 14:44:13

  • Partager sur Facebook
  • Partager sur Twitter
1 août 2016 à 13:23:00

Je vais essayer avec la résistance de pull up interne et mesurer avec un multimetre histoire d'être sur qu'il s'active correctement
  • Partager sur Facebook
  • Partager sur Twitter
1 août 2016 à 15:10:21

J'ai essayé (C et assembleur), ça marche.   Si tu as oublié de passer en PULLUP, ça se verra, ton entrée sera flottante quand l'interrupteur sera ouvert.

Ce que ça fait, à la base

- passer à 0 les bits du registre de direction du port (DDRx) qui correspondent aux pins voulues (ce qui les met en sortie)

- envoyer 1 sur les bits correspondant du PORTx pour activer le pull up

ensuite, il n'y a plus qu'à lire sur PINx

	;;  Utilisation des boutons 2 et 3 (PD2 PD3)
	;;  en entrée PULLUP


	
.include "./m328Pdef.inc"

main:
	
	ldi r16,~((1<<DDD2)|(1<<DDD3)) ; D2 et D3 en entrée
	out DDRD,r16
	
	ldi r16,(1<<PORTD2)|(1<<PORTD3) ; D2 et D3 avec pullups
	out PORTD,r16
	
	ldi r16,0b11111111	; port B en sortie
	out DDRB,r16
		
loop:	in r16,PIND
	andi R16,(1<<PIND2)|(1<<PIND3) ; masquage
	out PORTB,r16
	rjmp loop
	

(affichage sur port B)

-
Edité par michelbillaud 1 août 2016 à 15:14:01

  • Partager sur Facebook
  • Partager sur Twitter
20 février 2018 à 15:06:31

.

-
Edité par TheoSchittttttttly 20 février 2018 à 15:08:07

  • Partager sur Facebook
  • Partager sur Twitter
3 septembre 2023 à 9:15:49 - Message modéré pour le motif suivant : Message complètement hors sujet


3 septembre 2023 à 10:10:24

@ApolosBarkWendeZombre Bonjour, merci de ne pas squatter le sujet résolu des autres pour une nouvelle question, créer votre propre sujet.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Hors sujet

Ton message est hors sujet. Afin de garder un forum clair où chaque fil de discussion répond à une problématique, il est nécessaire de ne pas multiplier les sujets à l'intérieur du même fil de discussion. Merci de créer ton propre sujet à l'aide du bouton bleu « Créer un sujet » en haut à droite du forum adéquat.

Je ferme ici.

  • Partager sur Facebook
  • Partager sur Twitter