martes, 4 de abril de 2017

Arduino Project 15: Hackeando botones

Necesitaremos:
  • 1 resistencia de 220 Ω
  • 1 octoacoplador
  • 1 circuito para hackear (una bombilla es lo más sencillo en este caso)
Utilizaremos un octoacoplador para poder controlar otros circuitos con nuestra placa de Arduino (o similares asiáticos).

Haremos las siguientes conexiones (el circulito azul representa el circuito que queremos hackear).
Podemos añadir un botón:


El código, muy sencillo en este caso es el siguiente:


const int optoPin = 2;

void setup() {
  pinMode(optoPin, OUTPUT);
}

void loop() {
  digitalWrite(optoPin, HIGH);   
  delay(5000);               
  digitalWrite(optoPin, LOW);   
  delay(1000);               
}

La simulación en circuits.io:







Esta vez se nos ha indicado que no es necesario contruirlo en formato físico para optar a la mejor nota, pues puede resultar complicado e incluso peligroso al trabajar con otros circuitos.

Hasta aquí las prácticas.

domingo, 2 de abril de 2017

Arduino Project 14: Retocar el logo de Arduino

Para esta práctica necesitaremos:
  • 1 potenciómetro
  • Ordenador
Esta práctica es algo diferente al resto, ya que se centra más en la programación, en concreto, en establecer una conexión entre el ordenador y nuestra placa Arduino (o similar más barato) a traves de un puerto serial, para controlar, en este caso, el color del logo de Arduino.
Podemos utilizar la conexión serial para enviar datos de ida y vuelta al IDE de Arduino.
Podríamos usarla para otras aplicaciones.

Usaremos este código en el Arduino:

void setup(){
  Serial.begin(9600);
}

void loop(){
  Serial.write(analogRead(A0/4));
  delay(1);
}

Y este otro en la interfaz del ordenador. Lo cargaremos en un entorno llamado Processing, que enconraremos en processing.org :

import processing.serial.*;
Serial myPort;

PImage logo;

int bgcolor = 0;

void setup(){
  colorMode(HSB, 255);
  
  logo = loadImage("http://arduino.cc/logo.png");
  size(logo.width, logo.height);
  
  println("Available sreial ports:");
  println(Serial.list());
  
  myPort = new Serial(this, Serial.list()[0], 9600);
}

void draw(){
  if (myPort.available() > 0){
    bgcolor = myPort.read();
    print.ln(bgcolor);
  }
  
  background(bgcolor, 255, 255);
  image(logo, 0, 0);
}


La simulación en circuits.io muestra las conexiones y si abrimos el monitor serial, cambiaran los caracteres con el potenciómetro, pero no se puede ver al logo cambiar de color hasta que no lo conectemos al ordenador y abramos el programa de Processing, con el código correspondiente, y lo ejecutemos también.



En este caso, no he realizado la construcción en físico ni lo he grabado ya que se nos indicó que podía dar problemas.


Arduino Project 13: Lampara táctil

Material necesario:
  • 1 resistencia de 220 Ω
  • 1 resistencia de 1 MΩ
  • 1 LED
  • Algo de papel de aluminio
El objetivo de esta práctica, es hacer un sistema que encienda la bombilla al tocar la "antena" de papel de aluminio.

Realizaremos las siguientes conexiones, colocando además algo de papel de aluminio en el extremo del cable que sobresale.



Como siempre, aquí va el código:


#include <CapacitiveSensor.h>
CapacitiveSensor capSense = CapacitiveSensor(4,2);

int threshold = 1000;

const int ledPin = 12;

void setup(){
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT)
}

void loop(){
  long sensorValue = capSensor.capacitiveSensor(30);
  Serial.println(sensorValue);
  
  if(sensorValue > threshold){
    digitalWrite(ledPin, HIGH);
  }
  else{
    digitalWrite(ledPin, LOW);
  }
  delay(10);
}


El código se analiza fácilmente. Se usaran las librerias de CapacitiveSensor para hacer del papel de plata un panel sensible.

Este el el resultado de simular en circuits.io, sin la construcción completa, ya que faltan materiales:




La simulación no funciona ya que no existe nada parecido al papel de alumnio en la lista de componentes del constructor de circuitos de circuits.io ni se puede añadir la libreria correspondiente, sin embargo, se aprecian el montaje y el código.

Y por último, una foto del circuito en formato físico:


Arduino Project 12: Sistema de seguridad

Necesitaremos los siguientes materiales:
  • 1 botón
  • 1 buzzer
  • 3 LEDS (rojo, verde y amarillo)
  • 3 resistencias de 220 Ω
  • 1 resistencia de 10 kΩ
  • 1 resistencia de 1 MΩ
  • 1 servo
  • 1 condensador de 100 uF
La practica consistirá en hacer una cerradura que controlaremos con nuestra placa Arduino (o similar).
El esquema con las conexiones viene a continuación, en la imagen:





Cargaremos el siguiente código en nuestra placa:

#include <Servo.h>

Servo myServo;

const int piezo = A0;
const int switchPin = 2;
const int yellowLed = 3;
const int greenLed = 4;
const int redLed = 5;

int knockVal;
int switchVal;

const int quietKnock = 10;
const int loudKnock = 1053;

boolean locked = false;
int numberOfKnocks = 0;

void setup(){
  myServo.attach(9);
  pinMode(yellowLed, OUTPUT);
  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(switchPin, INPUT);
  Serial.begin(9600);

  digitalWrite(greenLed, HIGH);
  myServo.write(0);
  Serial.println("The box is unlocked!");
} //end of setup()

void loop(){
  if(locked == false){
  switchVal = digitalRead(switchPin);
    if(switchVal == HIGH){
      locked = true;
      digitalWrite(greenLed, LOW);
      digitalWrite(redLed, HIGH);
      myServo.write(90);
      Serial.println("The box is locked!");
      delay(1000);
    } //end of nested if()
  } //end of outer if()

  if(locked == true){
    knockVal = analogRead(piezo);
    if(numberOfKnocks < 3 && knockVal > 0){
      if(checkForKnock(knockVal) == true){
        numberOfKnocks ++;
      }
      //subtract knocks made so far from three
      Serial.print(3-numberOfKnocks);
      Serial.print(" more knocks to go");
    }
 
    if(numberOfKnocks >=3){
      locked = false;
      myServo.write(0);
      delay(20);
      digitalWrite(greenLed, HIGH);
      digitalWrite(redLed, LOW);
      Serial.println("The box is unlocked!");
      numberOfKnocks = 0;
    } //end of if(numberOfKnocks..)
  } //end of if(locked==true)
} //end of loop

boolean checkForKnock(int value){
  if(value > quietKnock && value < loudKnock){
    digitalWrite(yellowLed, HIGH);
    delay(75);
    digitalWrite(yellowLed, LOW);
    Serial.print("Valid knock of value ");
    Serial.println(value);
    return true;
  }

  else{
    Serial.print("Bad knock value ");
    Serial.println(value);
    return false;
  }
}

Este código no está comentado ya que tras haber hecho el resto de prácticas, está bastante claro que hace cada parte, ya que no hay nada especial

El código hará que se se habrá y cierre la cerradura (movimiento del servo) al hacer vibrar el buzzer 3 veces, y que se quede cerrada de nuevo al pulsar el botón, además de que quede indicado su estado mediante las bombillas.

Nos dará el siguiente resultado al simular en circuits.io, sin cambios en el código aunque haya que cambiar el buzzer por un botón, ya que el buzzer no puede ser usado como entrada en la simulación.

Nos dará el siguiente resultado al simular en circuits.io:



Y el funcionamiento, ya construido en formato físico, es el siguiente: