Mostrando entradas con la etiqueta SKETCH. Mostrar todas las entradas
Mostrando entradas con la etiqueta SKETCH. Mostrar todas las entradas

Sketch Robot seguidor de líneas

int VelocidadMotor1 = 5; //ENA

int VelocidadMotor2 = 9; //ENB

int Motor1A = 6; //IN2

int Motor1B = 7; //IN1

int Motor2C = 8; //IN4

int Motor2D = 10; //IN3

int infraPin = 1; // izquierdo - pin del infrarrojos utilizado como entrada digital

int infraPin1=4; // derecho

int valorInfra = 0; // Valor inicial de la lectura digital del infrarrojos izquierdo

int valorInfra1 = 0; // derecho

void setup() {

delay(5000);

pinMode(infraPin, INPUT);

pinMode(infraPin1, INPUT);

pinMode(Motor1A,OUTPUT);

pinMode(Motor1B,OUTPUT);

pinMode(Motor2C,OUTPUT);

pinMode(Motor2D,OUTPUT);

pinMode(VelocidadMotor1, OUTPUT);

pinMode(VelocidadMotor2, OUTPUT);

analogWrite(VelocidadMotor1, 250); //motor izquierdo

analogWrite(VelocidadMotor2, 250); //motor derecho

digitalWrite(Motor1A, LOW);

digitalWrite(Motor1B, LOW);

digitalWrite(Motor2C, LOW);

digitalWrite(Motor2D, LOW);

}

void loop() {

valorInfra = digitalRead(infraPin); // valor de la entrada que lee el infrarrojo izquierdo

valorInfra1 = digitalRead(infraPin1); // derecho

// 0 = blanco / 1 = negro

if(valorInfra == 0 && valorInfra1 == 0){ // Hacia delante

digitalWrite(Motor1A, HIGH);

digitalWrite(Motor2D, HIGH);

delay(20); // Tiempo para control de velocidad

digitalWrite(Motor1A, LOW);

digitalWrite(Motor2D,LOW);

delay(20); // Tiempo para control de velocidad

}

if(valorInfra == 0 && valorInfra1 == 1){ // Giro derecha

digitalWrite(Motor1A, LOW);

digitalWrite(Motor2D,LOW);

delay(25);

digitalWrite(Motor1A, LOW);

digitalWrite(Motor2D,HIGH);

delay(20);

}

if(valorInfra == 1 && valorInfra1 == 0){ // Giro izquierda

digitalWrite(Motor1A,LOW);

digitalWrite(Motor2D, LOW);

delay(25);

digitalWrite(Motor1A,HIGH);

digitalWrite(Motor2D, LOW);

delay(20);

}

if(valorInfra == 1 && valorInfra1 == 1){ // STOP

digitalWrite(Motor1A, LOW);

digitalWrite(Motor1B, LOW);

digitalWrite(Motor2C, LOW);

digitalWrite(Motor2D, LOW);

}

}

Sketch para el control de un robot mediante del bluetooth

//Sketch para controlar el funcionamiento de un robot móvil mediante un teléfono móvil y utilizando la señal de bluetooth

#include <SoftwareSerial.h>
int pinE1=10;
int pinI1=9;
int pinI2=8;
int pinE2=11;
int pinI3=12;
int pinI4=13;
//Pin para el LED

SoftwareSerial ModuloHC05 (5, 6); //pin TX, pin RX
 

void adelante(){
digitalWrite(pinE1,HIGH);
digitalWrite(pinI1,HIGH);
digitalWrite(pinI2,LOW);
digitalWrite(pinE2,HIGH);
digitalWrite(pinI3,HIGH);
digitalWrite(pinI4,LOW);
}
void atras(){
digitalWrite(pinE1,HIGH);
digitalWrite(pinI1,LOW);
digitalWrite(pinI2,HIGH);
digitalWrite(pinE2,HIGH);
digitalWrite(pinI3,LOW);
digitalWrite(pinI4,HIGH);
}
void girarDerecha(){
digitalWrite(pinE1,HIGH);
digitalWrite(pinI1,HIGH);
digitalWrite(pinI2,LOW);
digitalWrite(pinE2,HIGH);
digitalWrite(pinI3,LOW);
digitalWrite(pinI4,HIGH);
}
void girarIzquierda(){
digitalWrite(pinE1,HIGH);
digitalWrite(pinI1,LOW);
digitalWrite(pinI2,HIGH);
digitalWrite(pinE2,HIGH);
digitalWrite(pinI3,HIGH);
digitalWrite(pinI4,LOW);
}

void parar(){
digitalWrite(pinE1,LOW);
digitalWrite(pinI1,HIGH);
digitalWrite(pinI2,LOW);
digitalWrite(pinE2,LOW);
digitalWrite(pinI3,HIGH);
digitalWrite(pinI4,LOW);
}
void setup() {

Serial.begin(9600);
ModuloHC05.begin(9600);
pinMode(pinE1,OUTPUT);
pinMode(pinI1,OUTPUT);
pinMode(pinI2,OUTPUT);
pinMode(pinE2,OUTPUT);
pinMode(pinI3,OUTPUT);
pinMode(pinI4,OUTPUT);
}

void loop() {
char dato;
if (ModuloHC05.available()) { //Llega algo por bluetooth?
dato=ModuloHC05.read(); //Leer el dato recibido
Serial.write(dato); //Mostrar el dato por el monitor serie

if (dato=='1') adelante(); //Si el dato recibido es "1", el robot avanza adelante
if (dato=='0') atras(); //Si el dato recibido es "0", el robot retrocede
if (dato=='3') girarDerecha(); //Si el dato recibido es "3" el robot gira a la derecha
if (dato=='2') girarIzquierda(); // Si el dato recibido es "2" el robot gira a la izquierda
if(dato=='5') parar(); //Si el dato recibido es "5", el robot se detiene
}


}

Sketch para el control de un robot seguidor de luz

// Sketch de para el robot seguidor de luz

//El robot incorpora dos ldrs

int E1=12;

int I1=11;

int I2=10;

int E2=7;

int I3=8;

int I4=9;

int ldr1=0;

int nivelLuz1=0;

int nivelLuz2=0;

int ldr2=1;

void setup()

{

Serial.begin(9600);

pinMode(E1, OUTPUT);

pinMode(I1, OUTPUT);

pinMode(I2, OUTPUT);

pinMode(E2, OUTPUT);

pinMode(I3, OUTPUT);

pinMode(I4, OUTPUT);

}

void loop()

{

nivelLuz1=analogRead(ldr1);

Serial.println(nivelLuz1);

nivelLuz2=analogRead(ldr2);

Serial.println(nivelLuz2);

if (nivelLuz1>450 && nivelLuz2>450)

{

adelanteMotor1();

adelanteMotor2();

}

if (nivelLuz1<450 && nivelLuz2<450)

{

pararMotor1();

pararMotor2();

}

if (nivelLuz1<450 && nivelLuz2>450)

{

derechaMotor1();

pararMotor2();

}

if (nivelLuz1>450 && nivelLuz2<450)

{

pararMotor1();

izquierdaMotor2();

}

}

void adelanteMotor1()

{

digitalWrite(E1, HIGH);

digitalWrite(I1, HIGH);

digitalWrite(I2, LOW);

}

void adelanteMotor2()

{

digitalWrite(E2, HIGH);

digitalWrite(I3, HIGH);

digitalWrite(I4, LOW);

}

void pararMotor1()

{

digitalWrite(E1, LOW);

}

void pararMotor2()

{

digitalWrite(E2, LOW);

}

void atrasMotor1()

{

digitalWrite(E1, HIGH);

digitalWrite(I1, LOW);

digitalWrite(I2, HIGH);

}

void atrasMotor2()

{

digitalWrite(E2, HIGH);

digitalWrite(I3, LOW);

digitalWrite(I4, HIGH);

}

void derechaMotor1()

{

digitalWrite(E1, HIGH);

digitalWrite(I1, HIGH);

digitalWrite(I2, LOW);

}

void derechaMotor2()

{

digitalWrite(E2, LOW);

digitalWrite(I3, LOW);

digitalWrite(I4, LOW);

}

void izquierdaMotor1()

{

digitalWrite(E1, LOW);

digitalWrite(I1, LOW);

digitalWrite(I2, LOW);

}

void izquierdaMotor2()

{

digitalWrite(E2, HbIGH);

digitalWrite(I3, HIGH);

digitalWrite(I4, LOW);

}

Sketch para el control del robot polilla

/*Robot que incorpora como sensor una ldr*/

int E1=12;
int I1=11;
int I2=10;
int E2=7;
int I3=8;
int I4=9;
int ldr=0;
int nivelLuz=0;

void setup()
{
Serial.begin(9600);
pinMode(E1, OUTPUT);
pinMode(I1, OUTPUT);
pinMode(I2, OUTPUT);
pinMode(E2, OUTPUT);
pinMode(I3, OUTPUT);
pinMode(I4, OUTPUT);
}

void loop()
{
nivelLuz=analogRead(ldr);
Serial.println(nivelLuz);

if (nivelLuz>50 && nivelLuz<338)
{
adelante();
delay(1000);
}
if (nivelLuz>338 && nivelLuz<679)
{
atras();
delay(1000);
}
if (nivelLuz<50)
{
parar();
delay(1000);
}
}

void adelante()
{
digitalWrite(E1, HIGH);
digitalWrite(I1, HIGH);
digitalWrite(I2, LOW);
digitalWrite(E2, HIGH);
digitalWrite(I3, HIGH);
digitalWrite(I4, LOW);
}

void parar()
{
digitalWrite(E1, LOW);
delay(1000);
digitalWrite(E2, LOW);
delay(1000);
}

void atras()
{
digitalWrite(E1, HIGH);
digitalWrite(I1, LOW);
digitalWrite(I2, HIGH);
digitalWrite(E2, HIGH);
digitalWrite(I3, LOW);
digitalWrite(I4, HIGH);
}

Sketch para el control de robot controlado por ultrasonidos

#include <Servo.h>

Servo servoMotor;
int pinE1=13;
int pinI1=12;
int pinI2=11;
int pinE2=7;
int pinI3=6;
int pinI4=5;
const int PinTrig=10;
const int PinEcho=9;
const float VelSon=34000.0;
float distancia;
int distancia_45;
int distancia_90;
int distancia_135;

void setup(){
pinMode(pinE1,OUTPUT);
pinMode(pinI1,OUTPUT);
pinMode(pinI2,OUTPUT);
pinMode(pinE2,OUTPUT);
pinMode(pinI3,OUTPUT);
pinMode(pinI4,OUTPUT);
Serial.begin(9600);
pinMode(PinEcho,INPUT);
pinMode(PinTrig,OUTPUT);
Serial.begin(9600);
servoMotor.attach(3);
}

void adelante(){
digitalWrite(pinE1,HIGH);
digitalWrite(pinI1,HIGH);
digitalWrite(pinI2,LOW);
digitalWrite(pinE2,HIGH);
digitalWrite(pinI3,HIGH);
digitalWrite(pinI4,LOW);
}

void atras(){
digitalWrite(pinE1,HIGH);
digitalWrite(pinI1,LOW);
digitalWrite(pinI2,HIGH);
digitalWrite(pinE2,HIGH);
digitalWrite(pinI3,LOW);
digitalWrite(pinI4,HIGH);
}

void girarDerecha(){
digitalWrite(pinE1,HIGH);
digitalWrite(pinI1,HIGH);
digitalWrite(pinI2,LOW);
digitalWrite(pinE2,HIGH);
digitalWrite(pinI3,LOW);
digitalWrite(pinI4,HIGH);
}

void girarIzquierda(){
digitalWrite(pinE1,HIGH);
digitalWrite(pinI1,LOW);
digitalWrite(pinI2,HIGH);
digitalWrite(pinE2,HIGH);
digitalWrite(pinI3,HIGH);
digitalWrite(pinI4,LOW);
}

void parar(){
digitalWrite(pinE1,LOW);
digitalWrite(pinI1,HIGH);
digitalWrite(pinI2,LOW);
digitalWrite(pinE2,LOW);
digitalWrite(pinI3,HIGH);
digitalWrite(pinI4,LOW);
}

long iniciarTrigger(){
digitalWrite(PinTrig,LOW);
delayMicroseconds(200);
digitalWrite(PinTrig,HIGH);
delayMicroseconds(100);
digitalWrite(PinTrig,LOW);
unsigned long tiempo= pulseIn(PinEcho,HIGH);
distancia=tiempo*0.000001*VelSon/2.0;
return(distancia);
}

void loop() {

distancia_90=iniciarTrigger();
servoMotor.write(90);
Serial.print(distancia);
Serial.print("cm");
Serial.println();

delay(100);
while(distancia_90>20)

{
adelante();
distancia_90=iniciarTrigger();
}
if(distancia_90<40)

{
delay(100);
parar();
delay(1000);
servoMotor.write(45);
distancia_45=iniciarTrigger();
delay(500);
servoMotor.write(135);
distancia_135=iniciarTrigger();
delay(500);
if(distancia_45>distancia_135)

{
girarDerecha();
delay(350);
}
else

{
girarIzquierda();
delay(350);
}
}
}

Sketch para leer la distancia de un sensor de ultrasonidos

Sketch para leer la distancia a un objeto obtenida en el sensor de ultrasonidos. Se ha creado una función la la intención de ahorrar código dado que vamos a utilizar este sensor en un robot móvil y así conseguimos simplificar el código.

#define EchoPin 2
#define TriggerPin 3

long distancia;

long tiempo;

void setup(){

Serial.begin(9600);

pinMode(TriggerPin, OUTPUT); /*activación del pin 9 como salida: para el pulso de ultrasonido*/

pinMode(EchoPin, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/

}


void loop(){

distancia=medirDistancia();
}

//Función que nos devuelve la distancia al objeto

long medirDistancia()
{
digitalWrite(TriggerPin,LOW); /* Por cuestión de estabilización del sensor*/

delayMicroseconds(5);

digitalWrite(TriggerPin, HIGH); /* envío del pulso ultrasónico*/

delayMicroseconds(10);

tiempo=pulseIn(EchoPin, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que deja de hacerlo, LOW, la longitud del pulso entrante*/

distancia= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/

/*Monitorización en centímetros por el monitor serial*/

Serial.println("Distancia ");

Serial.println(distancia);

Serial.println(" cm");

delay(100);
}

Sketch para controlar el movimiento de un servomotor

En este articulo voy a ir incluyendo sketch para controlar el funcionamiento de un servomotor

Código para girar el servomotor de 0º a 180º (0-90º-180º)

// Incluímos la librería para poder controlar el servo

#include <Servo.h>

// Declaramos la variable para controlar el servo
Servo servoMotor;

void setup() {
// Iniciamos el monitor serie para mostrar el resultado
Serial.begin(9600);

// Iniciamos el servo para que empiece a trabajar con el pin 9
servoMotor.attach(9);
}

void loop() {

// Desplazamos a la posición 0º
servoMotor.write(0);
// Esperamos 1 segundo
delay(1000);

// Desplazamos a la posición 90º
servoMotor.write(90);
// Esperamos 1 segundo
delay(1000);

// Desplazamos a la posición 180º
servoMotor.write(180);
// Esperamos 1 segundo
delay(1000);
}

Girando grado a grado el servomotor

Para ello incrementa el ángulo de 0 a 180º a razón de 1º cada 15ms, posteriormente realiza la operación contraria de 180º a 0º, para finalmente reiniciar el bucle.

#include <Servo.h>

Servo myservo; // crea el objeto servo

int pos = 0; // posición del servo

void setup() {
myservo.attach(9); // vincula el servo al pin digital 9
}

void loop() {
//varia la posición de 0 a 180, con esperas de 15ms
for (pos = 0; pos <= 180; pos += 1)
{
myservo.write(pos);
delay(15);
}

//varia la posicion de 0 a 180, con esperas de 15ms
for (pos = 180; pos <= 0; pos -= 1)
{
myservo.write(pos);
delay(15);
}
}

Movimiento del servomotor 0º-45º-90, movimiento pensado para colocar un sensor de ultrasonidos en el servomotor y así poder controlar el movimiento de un robot móvil

// Incluímos la librería para poder controlar el servo
#include <Servo.h>

// Declaramos la variable para controlar el servo
Servo servoMotor;

void setup() {
// Iniciamos el monitor serie para mostrar el resultado
Serial.begin(9600);

// Iniciamos el servo para que empiece a trabajar con el pin 9
servoMotor.attach(9);
}

void loop() {

// Desplazamos a la posición 0º
servoMotor.write(00);
//Esperamos 1 segundo
delay(1000);

// Desplazamos a la posición 90º
servoMotor.write(45);
// Esperamos 1 segundo
delay(1000);

// Desplazamos a la posición 180º
servoMotor.write(90);
// Esperamos 1 segundo
delay(1000);
// Desplazamos a la posición 90º
servoMotor.write(45);
// Esperamos 1 segundo
delay(1000);

}

Sketch del puente levadizo

Descripción del proyeco: Puente levadizo controlado por Arduino

Programa

#define EA 9
#define I1 8
#define I2 10
#define pinPulsador 0 // Pin digital de entrada para el pulsador
int pinLDR_S = 0; //A0, Pin analógico para LDR superior
int pinLDR_I = 1; //A1, Pin analógico para LDR inferior
int valorLDR_S = 0;
int valorLDR_I = 0;
int velocidad=200;
int estadoPulsador=HIGH;

void subir()
{
analogWrite(EA, velocidad);
digitalWrite(I1, HIGH);
digitalWrite(I2, LOW);
}

void bajar()
{
analogWrite(EA, velocidad);
digitalWrite(I1, LOW);
digitalWrite(I2, HIGH);
}
void parar()
{
digitalWrite(I1, LOW);
digitalWrite(I2, LOW);
}
void setup()
{
pinMode(EA, OUTPUT);
pinMode(I1, OUTPUT);
pinMode(I2, OUTPUT);
pinMode (pinPulsador, INPUT);

}


void loop()
{
estadoPulsador = digitalRead(pinPulsador); //Leer estado del pulsador

valorLDR_S= analogRead(pinLDR_S);
valorLDR_I= analogRead(pinLDR_I);

if ( estadoPulsador == LOW && valorLDR_I>300)

{
while(valorLDR_S >300)
{
subir();
valorLDR_S= analogRead(pinLDR_S);
delay(300);
}
parar();
}
if(estadoPulsador==LOW && valorLDR_S>300)
{
while(valorLDR_I >300)
{
bajar();
valorLDR_I= analogRead(pinLDR_I);
delay(300);
}
//parar motor
parar();
}
}