Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Un capteur de proximité analogique simple avec interface numérique (pour Raspberry Pi) [dernière mise à jour :7 février 2014]

Raspberry Pi possède une puce Broadcom BCM2835, qui contrôle 26 broches GPIO (entrée/sortie à usage général). Il existe une bibliothèque C ou un package python RPi.GPIO disponible en ligne qui peut être utilisé pour contrôler les broches. Le package RPi.GPIO est inclus par défaut dans la plupart des systèmes Raspberry Pi, tels que Raspbian, une version RPi du système Linux Debian.

Un inconvénient de RPi, par rapport à arduino, est qu'il n'a pas de broche analogique. Toutes les broches GPIO sont purement numériques. Par exemple, si la broche A est une broche de sortie, elle ne peut sortir que LOW (0V) ou HIGH (3,3V), représenté par 0 ou 1. Si la broche A est une broche d'entrée, pour toute tension inférieure à 0,8V appliquée sur la broche A , il le considère comme LOW ou 0 ; pour toute tension supérieure à 1,3 V (étonnamment faible en fait !), elle la considère comme ÉLEVÉE ou 1 [réf : RPi GPIO].
Dans le monde réel, cependant, un 0 ou 1 purement se produit rarement. Nous obtenons toujours des informations qui peuvent avoir une valeur continue dans sa gamme. Par exemple, la température peut être de 10C ou 50F, ou 100C ou 212F. Ces nombres contiennent plus d'informations que simplement « froid » ou « chaud ». Une distance peut être de 2 cm ou 10 m, et il ne suffit pas de savoir seulement « près » ou « loin ».

Il existe des méthodes pour pallier cet inconvénient. RPi prend en charge l'interface SPI ou I2C, de sorte que nous pouvons utiliser un convertisseur analogique-numérique (ADC) externe et utiliser l'interface SPI ou I2C pour obtenir un signal quasi-analogique via ces ADC, tels que MCP3008, TLC549, MCP23017, etc. Ces puces coûtent généralement plusieurs dollars. Cependant, avec des capteurs commerciaux supplémentaires, l'ensemble peut coûter plus de 20 $ à 30 $, et il est difficile de rendre le système compact. Pour un projet robotique, il faut généralement plus d'un capteur, et le coût peut s'additionner facilement.

En fait, dans de nombreuses situations, il est effectivement possible d'éviter d'utiliser ces périphériques externes, et toujours capable d'obtenir analogique signaux via le numérique épingles !

La clé est de convertir le signal analogique en durée. Parce que le temps est toujours analogique !

Je construis un simple capteur de proximité infrarouge utilisant plusieurs LED infrarouges, un phototransistor, un transistor 2N3904 NPN, un condensateur céramique 100nF et plusieurs résistances de faible puissance. Et je suis capable d'obtenir une lecture analogique.

Tous les éléments sont parmi les moins chers du marché électronique.

Peu importe les LED, les phototransistors ou les transistors NPN utilisés. Ils sont à peu près les mêmes.

La seule chose qui pourrait avoir un peu d'importance est le condensateur de 100 nF (0,1 uF). J'ai utilisé une céramique à profil bas, ce qui n'est probablement pas le meilleur choix. Un condensateur céramique ou film de classe 1 conviendra mieux ici.

Connectez les fils +5V et GND à une alimentation externe 5V, connectez également le fil GND à la terre des broches GPIO du Raspberry Pi. Choisissez une broche GPIO, disons, la broche A comme déclencheur et connectez-la au fil de déclenchement. Choisissez une autre broche GPIO, disons, la broche B, comme entrée/sortie de signal et connectez-la au fil OUT.

Pour mesurer la distance d'un objet, nous envoyons un signal de déclenchement pour activer les LED infrarouges. La lumière émise par ces LED est ensuite réfléchie par l'objet devant le capteur. Le phototransistor au milieu collecte la lumière réfléchie et génère un courant proportionnel. Ce courant est utilisé pour intégrer la tension aux bornes du condensateur (I=CdV/dt). En surveillant le temps nécessaire à la tension du condensateur pour atteindre un certain seuil, nous avons une idée de la quantité de courant générée par le phototransistor, ou de manière équivalente, de la quantité de lumière réfléchie. Apparemment, plus l'objet est proche, plus la lumière réfléchie est. En calibrant soigneusement la synchronisation du capteur, nous devrions être en mesure d'obtenir une mesure assez précise de la distance.

Voici la séquence détaillée des opérations.1. Mettre le condensateur à zéro

Définissez d'abord la broche B comme une broche de sortie et définissez-la sur zéro.

GPIO.setup(PIN_B,GPIO.OUT)
GPIO.output(PIN_B,0)
time.sleep(0.01)

Cela déchargera toute tension résiduelle sur le condensateur. Notez que le temps RC pour décharger le condensateur est t=RC=500ohm * 100nF =50 us =0,00005 sec. En maintenant zéro volt sur la broche B pendant 200RC, nous nous assurons que le condensateur est complètement déchargé (la tension résiduelle doit être e-200 =10-87 fois la tension résiduelle d'origine).2. Définir la broche B comme entrée

Maintenant, nous utilisons la broche B comme broche d'entrée pour obtenir des données du phototransisto.
GPIO.setup(PIN,GPIO.IN)

3. Allumez les LED

Il est temps d'allumer les LED infrarouges.

GPIO.setup(PIN_A,GPIO.OUT)
GPIO.sortie(PIN_A,1)

Cela définira la tension de la broche de déclenchement à 3,3 V. Étant donné que le nœud BE de 2N3904 chute de 0,7 V, la tension aux bornes de R1 est de 2,6 V. Le courant à travers R1 est alors I=2.6V/4.3kΩ=0.6mA. 2N3904 amplifie ensuite ce courant d'environ 150 fois, résultant en un courant d'environ 100 mA de son collecteur à l'émetteur. Chacune des LED conduira environ 50 mA pendant une courte période.4. Chronométrage de la durée de la broche B restant LOW

Commencez à mesurer combien de temps il faut au condensateur pour atteindre le seuil de RPi afin que la broche B devienne HAUT

counter=0
t1=time.clock()*1000
while(GPIO.input(PIN_B)==0)&(counter<1e4) :
counter =counter+1
deltat=heure.horloge()*1000-t1

deltat est la durée pendant laquelle la broche B reste LOW. Étant donné que deltat est proportionnel à l'inverse du courant du phototransistor (ou quantité de lumière réfléchie ), et le courant du phototransistor est à peu près proportionnel à l'inverse de la distance , deltat est à peu près proportionnel à la distance .
deltat∝1I∝1lumière∝distance

Le terme (contre<1e4) est d'éviter la situation où l'intégration du condensateur prend trop de temps en raison d'un courant de phototransistor extrêmement faible ou, de manière équivalente, d'une distance infinie.

Pour plus de détails :Un simple capteur de proximité analogique avec interface numérique (pour Raspberry Pi) dernière mise à jour 7 février 2014]


Processus de fabrication

  1. Mesure des températures avec un capteur DS18B20 1 fil et Raspberry Pi
  2. Capteur de température 1 fil DS1820 au Raspberry Pi (GPIO directement)
  3. L'intégration des données du capteur avec le microprocesseur Raspberry Pi
  4. Capteur à ultrasons (HC-SR04) + Raspberry Pi
  5. Capteur de suivi de ligne avec RPi
  6. Lecture de capteurs analogiques avec une broche GPIO
  7. Système de capteur de mouvement infrarouge DIY pour Raspberry Pi
  8. Capteurs analogiques sans entrées analogiques sur le Raspberry Pi
  9. Capteur de thermomètre numérique Raspberry Pi à 1 fil (DS18B20)