Saturday, December 11, 2010

CiberObjeto 2 -- Arduino

El siguiente paso fue mirar más detenidamente lo que significa en computación un bit o un byte, las diferencias entre análogo y digital.




Nos acercamos a programar con Arduino usando los puertos análogos con una fotocelda y un potenciómetro (http://wiring.org.co/learning/basics/photoresistor.html & http://arduino.cc/en/Tutorial/AnalogReadSerial )





int sensor = 0;

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

void loop (){
//Serial.println(sensor); // imprimir resultados
delay(1000); // pausa entre variable y variable/
sensor = analogRead (0); // lee el sensor sgun el pin de entrada
if (sensor >= 512) {
Serial.println("esta oscuro");
}
else {
Serial.println("esta claro");
}
}





Para luego pasar a un programa que nos permite distribuir los valores análogos de la fotocelda a un speaker que genera notas músicales con los cambios de luz en el ambiente.

const int soundPin = 9;

int sensor = 0;

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

void loop (){
sensor = analogRead (0); // lee el sensor sgun el pin de entrada
if (sensor >= 0&&sensor<=128) {
play(1);
}
else if (sensor >= 129&&sensor<=256){
play(2);
}
else if (sensor >= 257&&sensor<=384){
play(3);
}
else if (sensor >= 385&&sensor<=512){
play(4);
}
else if (sensor >= 513&&sensor<=640){
play(5);
}
else if (sensor >= 641&&sensor<=768){
play(6);
}
else if (sensor >= 769&&sensor<=896){
play(7);
}
else if (sensor >= 897&&sensor<=1023){
play(8);
}
}

void play (int val){
switch (val){
case 1:
digitalWrite(soundPin, HIGH);
delayMicroseconds(1915);
digitalWrite(soundPin, LOW);
delayMicroseconds(1915);
case 2:
digitalWrite(soundPin, HIGH);
delayMicroseconds(1700);
digitalWrite(soundPin, LOW);
delayMicroseconds(1700);

case 3:
digitalWrite(soundPin, HIGH);
delayMicroseconds(1519);
digitalWrite(soundPin, LOW);
delayMicroseconds(1519);

case 4:
digitalWrite(soundPin, HIGH);
delayMicroseconds(1432);
digitalWrite(soundPin, LOW);
delayMicroseconds(1432);

case 5:
digitalWrite(soundPin, HIGH);
delayMicroseconds(1275);
digitalWrite(soundPin, LOW);
delayMicroseconds(1275);
case 6:
digitalWrite(soundPin, HIGH);
delayMicroseconds(1136);
digitalWrite(soundPin, LOW);
delayMicroseconds(1136);
case 7:
digitalWrite(soundPin, HIGH);
delayMicroseconds(1014);
digitalWrite(soundPin, LOW);
delayMicroseconds(1014);
case 8:
digitalWrite(soundPin, HIGH);
delayMicroseconds(956);
digitalWrite(soundPin, LOW);
delayMicroseconds(956);
}
Serial.println(val);
}


Tuesday, November 17, 2009

Delay 5v a 110/220v








Pare este circuito, usamos un optocoplador y un triac, para hacer encender la lámpara desde un blink de arduino.

Monday, November 16, 2009

pre amplificador micrófono

signos de microelectrónica

CiberObjetos   (día 3)


Circuito pre amplificador con un transistor npn.





Armando los circuitos




Ejercicio en casa

Sábado 14 de noviembre

salida digital a 110v

+ 5v --- 110v control. (circuito con optocoplador y triac)

internal timer (variables & words length)

LM35 (temperatura)

Preamplificador para audio

PWM sonido

Como algo nuevo en el código programamos una funcion "play()" y también usamos la estructura switch y case, para generar diferentes sonidos.



int sound=10;
int switcher=5;
int val=0;
int val2=0;
int into=0;
void setup(){
pinMode(sound, OUTPUT);
pinMode(switcher, INPUT);

}
void play(int val){
switch(val){
case 1:
digitalWrite(sound,HIGH);
delayMicroseconds(1700);
digitalWrite(sound,LOW);
delayMicroseconds(1700);
break;
case 2:
digitalWrite(sound,HIGH);
delayMicroseconds(1950);
digitalWrite(sound,LOW);
delayMicroseconds(1950);
break;
case 3:
digitalWrite(sound,HIGH);
delayMicroseconds(900);
digitalWrite(sound,LOW);
delayMicroseconds(900);
break;
}
}
void loop(){
val2=digitalRead(switcher);
if (val2==1){
into=1;
play(into);
}else{
into=2;
play(into);
}
}

fotocelda + dos salidas digitales

int potPin = 0; // select the input pin for the potentiometer
int val = 0; // variable to store the value coming from the sensor
int led1=7; // digital output 1
int led2=6; // digital output2
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
Serial.begin(9600);
}

void loop() {
val = analogRead(potPin); // read the value from the sensor
if(val >= 512){
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
}else{
digitalWrite(led2, HIGH);
digitalWrite(led1, LOW);
}
delay(200);
}