EJERCICIOS DE PROGRAMACIÓN EN ARDUINO
1.- Realice un programa para generar el algoritmo de la serie de Fibonacci
(0, 1, 1, 2, 3, 5, 8, 13, 21, … ) desplegándola en el monitor serie, como ésta es infinita, que
solamente se desplieguen los primero siete números.
a) 0
1
1
2
3
5
8
0
1
1
2
3
5
:
y así sucesivamente hasta apagar
b) 0, 1, 1, 2, 3, 5, 8, …fin (sólo una vez)
c) 0, 1, 1, 2, 3, 5, 8, … fin (sólo cuando se envía desde el monitor serie, la letra I)
2.-
a) Realice el programa de inversión de giro de un motor trifásico, como el realizado en la
primera y segunda práctica de la materia (control combinacional), de modo que el motor
funciona sólo mientras se pulsa uno de los pulsadores, si se pulsan simultáneamente ambos
pulsadores, el motor no funcione.
b) Realice el programa de inversión de giro de un motor trifásico en modo secuencial, según el
grafo mostrado a continuación:
t2 Motor
CW
0
Motor t4
parado
t4
t3 Motor
CCW
3.- Sin hacer uso de librerías, programe control de un motor paso a paso monopolar en paso
simple de 15 grados por pulso y funcione a una velocidad de 5rpm:
a) El eje del motor gire una vuelta completa en un sentido de giro, supongamos horario, luego
de ello pare durante un segundo, posteriormente revierta su sentido de giro otra vuelta en
sentido anti horario, pare durante un segundo y se repita el ciclo. El monitor serial debe
desplegar el mensaje del sentido de rotación.
b) Mediante un pulsador se inicie el proceso cíclico explicado en el anterior inciso y, mediante
otro pulsador se pare el funcionamiento del motor.
SOLUCIÓN
1.- a)
void setup()
{
Serial.begin(9600);
}
void loop()
{
int a=0;
int b=1;
int contador=0;
Serial.println(a);
delay(1000);
Serial.println(b);
delay(1000);
while (contador<5)
{
contador++;//contador=contador+1
int c=a+b;
Serial.println(c);
a=b;
b=c;
delay(1000);
}
delay(1000);
}
1.- b)
void setup()
{
int a=0;
int b=1;
int contador=0;
Serial.print(a);
Serial.print(",");
delay(1000);
Serial.print(b);
Serial.print(",");
delay(1000);
while (contador<5)
{
contador++;
int c=a+b;
Serial.print(c);
Serial.print(",");
a=b;
b=c;
delay(1000);
}
delay(1000);
Serial.println("...fin");
}
void loop()
{
}
1.- c)
int dato;
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available())
{
// read dataread trough serial communication
dato = Serial.read();
if (dato=='I')
{
int a=0;
int b=1;
int contador=0;
Serial.print(a);
Serial.print(",");
delay(1000);
Serial.print(b);
Serial.print(",");
delay(1000);
while (contador<5)
{
contador++;
int c=a+b;
Serial.print(c);
Serial.print(",");
a=b;
b=c;
delay(1000);
}
delay(1000);
Serial.println("...fin");
}
}
}
2.- a)
int estadoCW, estadoCCW;
const int CW=2;
const int CCW=3;
void setup()
{
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4,OUTPUT);//accionamiento CW
pinMode(5,OUTPUT);//accionamiento CCW
}
// the loop function runs over and over again forever
void loop() {
estadoCW=digitalRead(CW);
estadoCCW=digitalRead(CCW);
if(estadoCW == LOW && estadoCCW == HIGH)
{
digitalWrite(4, HIGH);
Serial.println("CW");
delay(100);
}
else if(estadoCW == HIGH && estadoCCW == LOW)
{
digitalWrite(5,HIGH);
Serial.println("CCW");
delay(100);
}
else
{
digitalWrite(4,LOW);
digitalWrite(5,LOW);
Serial.println("parado");
delay(100);
}
}
2.- b)
int t2=1,t3=1,t4=1;
int etapa0=0,etapa1=0,etapa2=0;
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(13,OUTPUT);//CW
pinMode(12,OUTPUT);//CCW
pinMode(2,INPUT_PULLUP);//t2
pinMode(3,INPUT_PULLUP);//t3
pinMode(4,INPUT_PULLUP);//t4
etapa0=1;
}
void loop()
{
// put your main code here, to run repeatedly:
t2=digitalRead(2);
t3=digitalRead(3);
t4=digitalRead(4);
if (etapa0==1 && t2==0 && t3==1 && t4==1)
{
etapa1=1;
etapa2=0;
etapa0=0;
Serial.println("etapa 1");//CW
}
else if (etapa0==1 && t2==1 && t3==0 && t4==1)
{
etapa2=1;
etapa1=0;
etapa0=0;
Serial.println("etapa 2");//CCW
}
else if ((etapa1==1 && t4==0) || (etapa2==1 && t4==0))
{
etapa0=1;
etapa1=0;
etapa2=0;
Serial.println("etapa 0");//parado
}
if (etapa1==1)
{
digitalWrite(13,HIGH);
Serial.println("CW");
delay(100);
}
else if (etapa2==1)
{
digitalWrite(14,HIGH);
Serial.println("CCW");
delay(100);
}
else if (etapa0==1)
{
digitalWrite(13,LOW);
digitalWrite(14,LOW);
Serial.println("parado");
delay(100);
}
}