Étape 4: Intégrant des capteurs de lumière partie 2
Par préférence personnelle, j’aime avoir le analogRead() fonction 0(min) retour si la cellule photoélectrique est sombre et 1023(max) s’il détecte une lumière vive. Nous pouvons résoudre ce problème en utilisant le logiciel. Il n’y a aucun changement dans le circuit.
À cette section de code :
SensorLeft = analogRead(LeftSensor) ;
Delay(1) ;
Nous pouvons ajouter :
SensorLeft = 1023 - analogRead(LeftSensor) ;
Delay(1) ;
Cela retire tout ce que la valeur les retours de fonction analogRead() de 1023 (qui est la valeur max, qu'elle peut retourner).
De cette façon, il va inverser ce que jamais la valeur les retours analogRead().
Par exemple, si la valeur de analogRead() est x
x = 0
Valeur de la sonde = 1023 - x
Valeur de la sonde = 1023-0
Valeur de la sonde = 1023
x = 1023
Valeur de la sonde = 1023 - x
Valeur de la sonde = 1023-1023
Valeur de la sonde = 0
Cette méthode peut servir à inverser n’importe quelle valeur, aussi longtemps que vous connaissez la valeur maximale, qu'elle sera de retour.
Par exemple, si un capteur renvoie un maximum de 255 :
Val = 255 - valeur capteur
Télécharger ce code sur la carte Arduino et testez-le.
Copier le code à partir de ce moment :
/****************************************************************************************************************
* Programme de lecture deux LDRs
* créé par : Anuj
* (c) tous droits réservés
*
*
* Installation physique :
* Deux LDRs reliés au sol et broche analogique 1(Right) et broche analogique 2(left)
*
*
******************************************************************************************************************/
À l’aide d’Arduino Duemilinove
Définitions de pin - attache une variable à une broche.
const int RightMotor = 2 ; Cette broche est utilisée pour activer ou désactiver le moteur droit. Connecté à la base d’un transistor NPN.
const int LeftMotor = 3 ; Cette broche est utilisée pour activer ou désactiver le moteur gauche. Connecté à la base d’un transistor NPN.
const int RightSensor = 1 ; Cette broche est utilisée pour lire la valeur du capteur droit.
const int LeftSensor = 2 ; Cette broche est utilisée pour lire la valeur du capteur gauche.
Définitions de variable
int SensorLeft ; Cette option stocke la valeur de l’axe gauche capteur à utiliser plus tard dans le sketch
int SensorRight ; Cette option stocke la valeur de l’axe droit capteur à utiliser plus tard dans le sketch
la méthode setup() s’exécute une fois lorsque le programme est exécuté. Lors de la
Arduino est réinitialisé, la setup() sera exécutée une fois de plus.
void setup() {}
pinMode (entrée, LeftSensor) ; Définit cette broche en tant qu’entrée. L’Arduino lira les valeurs de cette broche.
pinMode (entrée, RightSensor) ; Définit cette broche en tant qu’entrée. L’Arduino lira les valeurs de cette broche.
digitalWrite (A1, élevé) ; Permet une résistance pullup interne
digitalWrite (A2, élevé) ; Permet une résistance pullup interne
Serial.Begin(9600) ; Permet une connexion série par le biais de l’Arduino USB ou UART (bornes 0 & 1). Notez que le débit en bauds correspond à 9600
Serial.println ("\nReading capteurs de lumière.") ; Placé à la fin de void Setup() pour qu’il soit s’exécute une seule fois, juste avant le void Loop()
}
la méthode loop() exécute maintes et maintes fois,
aussi longtemps que l’Arduino a pouvoir
void loop() {}
SensorLeft = analogRead(LeftSensor) ; Ce lit la valeur de la sonde, puis l’enregistre à l’entier correspondant.
Delay(1) ; ce retard permet au convertisseur analogique/numérique IC récupérer pour la prochaine lecture.
SensorRight = analogRead(RightSensor) ; Ce lit la valeur de la sonde, puis l’enregistre à l’entier correspondant.
Delay(1) ; ce retard permet au convertisseur analogique/numérique IC récupérer pour la prochaine lecture.
Cette section de l’esquisse est utilisée pour imprimer les valeurs de la
capteurs à travers de la série de l’ordinateur. Utile pour déterminer
Si les capteurs fonctionnent et si le code fonctionne aussi correctement.
Ceci est connu comme le débogage.
Serial.Print ("capteur à gauche =") ; Imprime le texte à l’intérieur des guillemets.
Serial.Print(SensorLeft) ; Imprime la valeur de la sonde de gauche.
Serial.Print("\t") ; Imprime un onglet (espace).
Serial.Print ("capteur à droite =") ; Imprime le texte à l’intérieur des guillemets.
Serial.Print(SensorRight) ; Imprime la valeur de la sonde de droit.
Serial.Print("\n") ; Imprime une nouvelle ligne après toutes les données nécessaires sont affichées.
}
Ne copiez pas quoi que ce soit au-delà de ce point.
Maintenant il faut des capteurs à utiliser avec notre robot, mais nous ne sommes pas tout à fait encore fait. Nous avons besoin d’un moyen de comparer ces valeurs. En utilisant uniquement ces valeurs, nous pouvons déterminer si un capteur est lire une valeur plue ou moins puis l’autre capteur, ou si ils sont exactement les mêmes.
Maintenant, à cause de beaucoup d’autres facteurs tels que des divergences mineures dans la fabrication de LDR, gigue, EMI, etc., les valeurs pour le capteur de lumière sera rarement être exactement les mêmes. Donc au lieu de cela, nous pouvons utiliser un autre entier afin de déterminer si elles sont environ les mêmes. Nous pouvons y parvenir en utilisant le calcul de la différence entre les deux capteurs de lumière. Nous pouvons soustraire la valeur d’un capteur par la valeur de l’autre capteur et puis de trouver la valeur absolue du capteur. Ceci renverra la différence des deux capteurs et nous pouvons l’utiliser immédiatement ou enregistrer sur un autre entier, dans le cas où nous avons besoin de l’utiliser plus d’une fois. La valeur finale peut être utilisée pour déterminer si les capteurs sont en train de lire deux valeurs distinctes ou si elles sont assez semblables. La valeur est élevée, plus la différence. À l’aide d’un if déclaration, je peux dire, si les valeurs des capteurs sont dans des incréments de 100 des uns des autres, pour ce faire.
Si (SensorDifference < = 100) {}
Exécuter ce.
}
Ferroutage hors notre code précédent qui doit être encore être en cours d’exécution sur la carte Arduino,
Nous pouvons utiliser les deux entiers qui contiennent la valeur des capteurs à calculcate la différence et l’enregistrer dans un nouveau entier.
Le nouveau code ressemble à ceci. Les changements sont en caractères gras.
/****************************************************************************************************************
* Programme de lecture deux LDRs
* créé par : Anuj
* (c) tous droits réservés
*
*
* Installation physique :
* Deux LDRs reliés au sol et broche analogique 1(Right) et broche analogique 2(left)
*
*
******************************************************************************************************************/
À l’aide d’Arduino Duemilinove
Définitions de pin - attache une variable à une broche.
const int RightMotor = 2 ; Cette broche est utilisée pour activer ou désactiver le moteur droit. Connecté à la base d’un transistor NPN.
const int LeftMotor = 3 ; Cette broche est utilisée pour activer ou désactiver le moteur gauche. Connecté à la base d’un transistor NPN.
const int RightSensor = 1 ; Cette broche est utilisée pour lire la valeur du capteur droit.
const int LeftSensor = 2 ; Cette broche est utilisée pour lire la valeur du capteur gauche.
Définitions de variable
int SensorLeft ; Cette option stocke la valeur de l’axe gauche capteur à utiliser plus tard dans le sketch
int SensorRight ; Cette option stocke la valeur de l’axe droit capteur à utiliser plus tard dans le sketch
int SensorDifference; / / cette valeur est utilisée pour déterminer la différence entre la gauche et la droite
la méthode setup() s’exécute une fois lorsque le programme est exécuté. Lors de la
Arduino est réinitialisé, la setup() sera exécutée une fois de plus.
void setup() {}
pinMode (entrée, LeftSensor) ; Définit cette broche en tant qu’entrée. L’Arduino lira les valeurs de cette broche.
pinMode (entrée, RightSensor) ; Définit cette broche en tant qu’entrée. L’Arduino lira les valeurs de cette broche.
digitalWrite (A1, élevé) ; Permet une résistance pullup interne
digitalWrite (A2, élevé) ; Permet une résistance pullup interne
Serial.Begin(9600) ; Permet une connexion série par le biais de l’Arduino USB ou UART (bornes 0 & 1). Notez que le débit en bauds correspond à 9600
Serial.println ("\nReading capteurs de lumière.") ; Placé à la fin de void Setup() pour qu’il soit s’exécute une seule fois, juste avant le void Loop()
}
la méthode loop() exécute maintes et maintes fois,
aussi longtemps que l’Arduino a pouvoir
void loop() {}
SensorLeft = analogRead(LeftSensor) ; Ce lit la valeur de la sonde, puis l’enregistre à l’entier correspondant.
Delay(1) ; ce retard permet au convertisseur analogique/numérique IC récupérer pour la prochaine lecture.
SensorRight = analogRead(RightSensor) ; Ce lit la valeur de la sonde, puis l’enregistre à l’entier correspondant.
Delay(1) ; ce retard permet au convertisseur analogique/numérique IC récupérer pour la prochaine lecture.
SensorDifference = abs(SensorRight = SensorLeft) ;
Cette section de l’esquisse est utilisée pour imprimer les valeurs de la
capteurs à travers de la série de l’ordinateur. Utile pour déterminer
Si les capteurs fonctionnent et si le code fonctionne aussi correctement.
Ceci est connu comme le débogage.
Serial.Print ("capteur à gauche =") ; Imprime le texte à l’intérieur des guillemets.
Serial.Print(SensorLeft) ; Imprime la valeur de la sonde de gauche.
Serial.Print("\t") ; Imprime un onglet (espace).
Serial.Print ("capteur à droite =") ; Imprime le texte à l’intérieur des guillemets.
Serial.Print(SensorRight) ; Imprime la valeur de la sonde de droit.
Serial.print("\t"); / / imprime un onglet (espace).
Serial.print ("capteur différence =") ; Imprime le texte à l’intérieur des guillemets.
Serial.Print(SensorDifference) ;
Serial.Print("\n") ; Imprime une nouvelle ligne après toutes les données nécessaires sont affichées.
}