Documentos de Académico
Documentos de Profesional
Documentos de Cultura
necesitará alimentación
El Firmawe ejecutará una pequeña
inicialización y luego un bucle Leer
Valores
continuo de lectura de valores y
envío de salidas digitales por los
pines.
Filosofía uso de montajes con Arduino
Una de las características que hace
tan potente el desarrollo con
Arduino es la existencia de
centenares de modulos que están
preparados para ser conectados
directamente a arduino y realizan
funciones especificas.
arrastrar
Arduino tiene cargado un Firmware disponible en la web de S4a que lee
continuamente el puerto serie e interpreta que debe hacer.
Basicamente tiene ordenes del tipo “dime que hay en el pin XX” y “escribe
en el pin yy”.
R= 200 ohms
El Lenguaje Usado está basado en C, Int led = 13;
genera ficheros con extensión (.ino) : voidsetup() {
pinMode(led, OUTPUT);
}
voidloop() {
digitalWrite(led, HIGH)
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
Instrucciones:
int variable = valor;
pinMode(pin,OUTPUT/INPUT);
digitalWrite(numero, HIGH/LOW);
delay (milisegundos);
El uso de delay() impide hacer acciones paralelas mientras esta instrucción está
activa. (verdad a medias ---- ya veremos las interrupciones ….).
previousMillis = currentMillis;
Instrucciones:
Control
If (Condicion) ! Acción
Constantes
Niveles Lógicos
false: se define como 0 (cero).
true: es cualquier número distinto que 0 (normalmente 1)
Niveles de Voltaje
HIGH: 5[V] en una salida y mayor que 3[V] en una entrada.
LOW: 0[V] en una salida y menor que 2[V] en una entrada.
Tipos de Datos
int delayVal()
{
int v; // crea una variable temporal 'v'
v= analogRead(pot); // lee el valor del potenciómetro
v /= 4; // convierte 0-1023 a 0-255
return v; // devuelve el valor final
}
1º: Todos encendidos , todos apagados, alternativos (el multi blink!)
2º : Recorre hacia arriba encendiendo y hacia abajo apagando los leds con un retraso entre cada acción de 200 ms
3º: haz 5 veces:
encender hacia arriba y apagar desde abajo
4º : empieza desde el centro y enciende en paralelo hacia afuera volviendo al centro apagandolo
5º : haz el coche fantastico ☺
El concepto de la subrutina.
a-Mete todo el código en diferentes subrutinas y llama a la serie completa 1,2,3,4,5
b-Pon un parámetro a la subrutina para determinar la velocidad de una de las series y escribe un loop
donde se hace dicha subrutina cada vez mas rápido.
c-Por ejemplo empezar con retrasos de 300 ms y llegar a retrasos de 30 ms y volver a empezar.
void loop()
{
int x = 1;
for (int i = 0; i > -1; i = i + x){
analogWrite(PWMpin, i);
if (i = 255) x = -1;
delay(10);
}
}
setup(){
Int pot=3;
pinMode(pot, INPUT);
loop(){
delay(leePotenciometroYloDevuelveDivididoPor4(());
}
int leePotenciometroYloDevuelveDivididoPor4(){
int v; // crea una variable local v
v= analogRead(pot); // lee el valor del potenciómetro, pot es global
v /= 4; // convierte 0-1023 a 0-255
return v; // devuelve el valor final
}
setup(){
Int pot=3;
pinMode(pot, INPUT);
loop(){
delay(leePotenciometroYloDevuelveDivididoPorX(4)); // espera según lo que lea en
pin 3 partido por lo que diga el parámetro, en este caso 4
}
int leePotenciometroYloDevuelveDivididoPorX(int divisor)
{
int v; // crea una variable local v
v= analogRead(pot); //usa variable global pot
v = v/divisor; // divide por el valor enviado por parámetro
return v; // devuelve el valor final
}
Sintaxis
while (expresion){
// sentencia(s)
}
Ejemplo
Int var = 0;
while (var < 200){ do
// haz algo {
var++; delay(50);
} x = readSensors();
} while (x < 100);
Instrucciones:
int variable = valor; // estado del POTENCIOMETRO 0-1023
// valor de parpadeo
Int pin = A3 // constante de pin analógico!!!!!!!
Control
If (Condicion) ! Acción
Conversión
void setup() {
for (int estaLectura = 0; estaLectura < numLecturas; estaLectura++) {
lecturas[estaLectura] = 0; }
}
void loop() {
total = total - Lecturas[readIndex];
lecturas[readIndex] = analogRead(inputPin);
total += Lecturas[readIndex];
readIndex += 1;
if (readIndex >= numLecturas) readIndex = 0;
media = total / numLecturas;
delay(1);
}
switch (var) {
case 1:
//hacer algo cuando sea igual a 1
break;
case 2:
//hacer algo cuando sea igual a 2
break;
default:
// si nada coincide, ejecuta el "default"
// el "default" es opcional
}
- Modificar el programa anterior para que muestre por el monitor
serie los valores leidos en el pin analógico
- Avanzado : https://www.arduino.cc/en/Tutorial/SerialEvent
- Cuando se produce un evento serie se ejecuta el código
Sólo algunos pines digitales tienen PWM
analogWrite(pin, valor);
En un led : Brillo variable
En un servo: Ángulo de giro
A- Crear un script que vaya desde 0 a 255 y de nuevo a cero en PWM sobre un led
Un servo es un motor con un interfaz digital que permite ángulos precisos
mediante PWM.
Se quiere mover un servo a distintas posiciones según el potenciometro
marque más o menos resistencia
Librería servo
#include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(9);
myservo.write(90); //servo.read() devuleve el último valor pasado a write
}
void loop() {}
Medir la distrancia mediante un sensor SR04 Ultrasonic Sensor:
Verde: Via libre (> distancia) Rojo : Obstáculo cerca
Poner distancia en Serial.println()
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Medir la distrancia mediante un sensor SR04 Ultrasonic Sensor:
digitalWrite(TrigPin, LOW)
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
En el código:
#include "DHT.h”
float h = dht.readHumidity();
float t = dht.readTemperature();
Incluir la librería , copiando el archivo desde : http://bit.ly/1U0fQZH
en arduino/libraries (en Windows en Archivos de programa), si no existe el
directorio , crearlo. Mostrar hora real en puerto serie. Investiga otras
funciones y utiliza el reloj para mostrar una alarma en un led a las en punto.
En el código:
#include <DS1307RTC.h>
#include <Time.h> void print2digits(int number) {
#include <Wire.h> if (number >= 0 && number < 10) {
Serial.write('0');
if (RTC.read(tm)) { }
print2digits(tm.Hour); Serial.print(number);
print2digits(tm.Minute);; }
print2digits(tm.Second);
Serial.print(tm.Day);
Serial.print(tm.Month);
Serial.print(tmYearToCalendar(tm.Year));
}
#include <SoftwareSerial.h>
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(57600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.println("Goodnight moon!");
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(57600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.println("Goodnight moon!");