Blog que recull els treballs en programació i robòtica a l'Institut Badalona VII (Arduino, Lego Mindstorms, Raspberry Pi i impressió 3D).
I a l'Institut Hipàtia d'Alexandria de Lliçà d'Amunt
dijous, 8 de desembre del 2011
Info sobre el track liner sensor sen0017
Aquí hi ha una mica d'informació (connexió dels cables)
Output connector: 3-wire interface (1 - signal, 2 - power is, 3 - power losses)
He probat un programa amb aquest sensor, a casa tinc un que funciona, l'intentaré trobar, pero aquest que he fet no acaba de funciona com esperava. El led 13 que be amb la placa no s'apaga segons el sensor. T'atjunto el programa:
int sensorPin = A0; // selecciona el pin de entrada para el potenciómetro int ledPin = 13; // selecciona el pin para el LED
void setup() {
// declara el ledPin como salida (OUTPUT): pinMode(ledPin, OUTPUT); pinMode(sensorPin, INPUT); }
void loop() {
// lee el valor del sensor: int Lectura = analogRead(sensorPin); Serial.print( Lectura);
if ( Lectura > 0){ digitalWrite(ledPin, 255); } if ( Lectura < 0){ digitalWrite(ledPin, 0); } }
Sóc l'eudald, he fet el programa de seguidor de linea, te'l penjo:(el programa que te penjat avans ja l'he solucionat)
// SEGUIDOR DE LINEA
/* --------Digitació dels cables-------- Sensor: El cable gris es per la senyal (AO) El cable vermell es per la alimentació (5v) El cable negre es per la negre (GND)
Mecanisme cotxe: El pin digital 3 , Releuno (Cable Groc) El pin digital 6, Reledos (Cable tronja) El pin digital 9, Reletres (Cable verd) El pin digital 12, Relecuatro (Cable blau)
*/
//------Donem noms a les conexions------- int sensorPin = A0; // selecciona el pin de entrada para el sensor
int Releuno = 3; // El pin digital 3 l'anomenem Releuno int Reledos = 6; // El pin digital 6 l'anomenem Reledos int Reletres = 9; // El pin digital 9 l'anomenem Reletres int Relecuatro = 12; //El pin digital 12 l'anomenem Relecuatro
//-----------Iniciem les dades de la placa------- void setup() { pinMode(Releuno, OUTPUT); // Com per exemple ha de saber que tots els pins amb els que treballarem pinMode(Reledos, OUTPUT); // son sortides per aixó utilitzem l'opció del pinMode() que el que fa es pinMode(Reletres, OUTPUT); // establir els pins, als que anteriorment els hem donat noms, com a sortida. pinMode(Relecuatro, OUTPUT); Serial.begin(9600); // inicia la comunicació serial
}
//------Iniciem el bucle------------- void loop() {
En aquest apartat he fet una seguretat al circuit, de forma que si algu intentes programar que una branca del circuit quedes en curcircuit aquest apartat ho evitaria, ES MOLT IMPORTANT QUE SEMPRE QUE ES TREBALLI AMB EL COTXE AL PRINCIPI DEL VOID LOOP ES POSI AQUEST APARTAT, SINO PODRIEM PROGRAMAR MALAMENT I CREAR UN CURCIRCUIT, amb aquest apartat tenim la seguretat de no crear curcircuit*/
if ( Releuno > 0){ // si el releuno esta ences el reledos sempre estara apagat digitalWrite(Reledos,0); } if ( Reledos > 0){ // si el reledos esta ences el releuno sempre estara apagat digitalWrite(Releuno,0); } if ( Reletres > 0){ // si el reletres esta ences el relecuatre sempre estara apagat digitalWrite(Relecuatro,0); } if ( Relecuatro > 0){ // si el relecuatre esta ences el reletres sempre estara apagat digitalWrite(Reletres,0); }
/* ---------------------------------------Moviment--------------------------------------------------- -Si activem el Releuno la roda de la esquerre gira endevant -Si activem el Reletres la roda de la dreta gira endevant --Per que avanci el Cotxe s'hauran d'activar el Releuno i el Reletres.
-Si activem el Reledos la roda de la esquerre gira endarrera -si activem el Relecuatro la roda de la freta gira endarrera --Per que el cotxe vagi endarrera s'hauran d'activar els dos ultims. */
// PROGRAMA DE MOVIMENT: Aqui ja vindrien les ordres que segueix per moures.
int Lectura = analogRead(sensorPin); // lee el valor del sensor: // La lectura del sensor va de 0 al 1004
He probat un programa amb aquest sensor, a casa tinc un que funciona, l'intentaré trobar, pero aquest que he fet no acaba de funciona com esperava. El led 13 que be amb la placa no s'apaga segons el sensor. T'atjunto el programa:
ResponEliminaint sensorPin = A0; // selecciona el pin de entrada para el potenciómetro
int ledPin = 13; // selecciona el pin para el LED
void setup() {
// declara el ledPin como salida (OUTPUT):
pinMode(ledPin, OUTPUT);
pinMode(sensorPin, INPUT);
}
void loop() {
// lee el valor del sensor:
int Lectura = analogRead(sensorPin);
Serial.print( Lectura);
if ( Lectura > 0){
digitalWrite(ledPin, 255);
}
if ( Lectura < 0){
digitalWrite(ledPin, 0);
}
}
Sóc l'eudald, he fet el programa de seguidor de linea, te'l penjo:(el programa que te penjat avans ja l'he solucionat)
Elimina// SEGUIDOR DE LINEA
/* --------Digitació dels cables--------
Sensor:
El cable gris es per la senyal (AO)
El cable vermell es per la alimentació (5v)
El cable negre es per la negre (GND)
Mecanisme cotxe:
El pin digital 3 , Releuno (Cable Groc)
El pin digital 6, Reledos (Cable tronja)
El pin digital 9, Reletres (Cable verd)
El pin digital 12, Relecuatro (Cable blau)
*/
//------Donem noms a les conexions-------
int sensorPin = A0; // selecciona el pin de entrada para el sensor
int Releuno = 3; // El pin digital 3 l'anomenem Releuno
int Reledos = 6; // El pin digital 6 l'anomenem Reledos
int Reletres = 9; // El pin digital 9 l'anomenem Reletres
int Relecuatro = 12; //El pin digital 12 l'anomenem Relecuatro
//-----------Iniciem les dades de la placa-------
void setup() {
pinMode(Releuno, OUTPUT); // Com per exemple ha de saber que tots els pins amb els que treballarem
pinMode(Reledos, OUTPUT); // son sortides per aixó utilitzem l'opció del pinMode() que el que fa es
pinMode(Reletres, OUTPUT); // establir els pins, als que anteriorment els hem donat noms, com a sortida.
pinMode(Relecuatro, OUTPUT);
Serial.begin(9600); // inicia la comunicació serial
}
//------Iniciem el bucle-------------
void loop() {
/* --------------------------------------Seguretat--------------------------------------
En aquest apartat he fet una seguretat al circuit, de forma que si algu intentes programar
que una branca del circuit quedes en curcircuit aquest apartat ho evitaria, ES MOLT IMPORTANT QUE
SEMPRE QUE ES TREBALLI AMB EL COTXE AL PRINCIPI DEL VOID LOOP ES POSI AQUEST APARTAT, SINO PODRIEM
PROGRAMAR MALAMENT I CREAR UN CURCIRCUIT, amb aquest apartat tenim la seguretat de no crear curcircuit*/
if ( Releuno > 0){ // si el releuno esta ences el reledos sempre estara apagat
digitalWrite(Reledos,0);
}
if ( Reledos > 0){ // si el reledos esta ences el releuno sempre estara apagat
digitalWrite(Releuno,0);
}
if ( Reletres > 0){ // si el reletres esta ences el relecuatre sempre estara apagat
digitalWrite(Relecuatro,0);
}
if ( Relecuatro > 0){ // si el relecuatre esta ences el reletres sempre estara apagat
digitalWrite(Reletres,0);
}
/* ---------------------------------------Moviment---------------------------------------------------
-Si activem el Releuno la roda de la esquerre gira endevant
-Si activem el Reletres la roda de la dreta gira endevant
--Per que avanci el Cotxe s'hauran d'activar el Releuno i el Reletres.
-Si activem el Reledos la roda de la esquerre gira endarrera
-si activem el Relecuatro la roda de la freta gira endarrera
--Per que el cotxe vagi endarrera s'hauran d'activar els dos ultims. */
// PROGRAMA DE MOVIMENT: Aqui ja vindrien les ordres que segueix per moures.
int Lectura = analogRead(sensorPin); // lee el valor del sensor:
// La lectura del sensor va de 0 al 1004
while ( Lectura < 500){
digitalWrite ( Releuno,HIGH);
digitalWrite ( Reletres,HIGH);
Serial.println("Negre");
}
digitalWrite ( Releuno,HIGH);
digitalWrite ( Reletres,LOW);
Serial.println("Gir.Esquerre");
while ( Lectura < 500){
digitalWrite ( Releuno,HIGH);
digitalWrite ( Reletres,HIGH);
Serial.println("Negre");
}
digitalWrite ( Releuno,LOW);
digitalWrite ( Reletres,HIGH);
Serial.println("Gir.Dreta");
}