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

viernes, julio 15, 2011

Botonera para servos con Arduino UNO

Trasteando de nuevo con Arduino he hecho un montaje casero para almacenar y reproducir con sendos pulsadores la posición de un servo que se maneja o, mejor dicho, sigue a un potenciómetro. Esto me ha permitido jugar un poco con la librería Servo.h y las instrucciones para escribir y leer datos en la EEPROM de 1Kb que lleva el modelo Arduino UNO.

Ahí va la inmortalización del evento de pruebas:



El código fuente:
 
/*
Potentiometer-Servo-button-command
Author: Jorge Muñoz Rodenas jorgeroden1@gmail.com
License: GPL v.3
Date: 14/7/2011
Version: 0.2 (alpha)
Description: to do
 */

#include <eeprom.h>
#include <servo.h>

Servo myservo1;  
Servo myservo2;

// Constants

const int buttonPinMem1 = 2;               // digital pin Mem button1
const int buttonPinAct1 = 3;               // digital pin Act button1
const int buttonRelease = 12;              // digital pin RELEASE button
const int servo1Pin = 10;                  // Servo1 PWM pin
const int servo2Pin = 11;                  // Servo2 PWM pin
const int ledPin =  13;                    // the number of the LED pin (soldered on board)
const int potpin1 = 0;                     // analog pin used to connect the potentiometer1
const int potpin2 = 1;                     // analog pin used to connect the potentiometer2
const int addr0 = 0;                       // EEPROM 1st address  (Mem1-servo 1)
const int addr1 = 1;                       // EEPROM 2nd address  (Mem1-servo 2)

// Variables  

int val1 = 0;
int val2 = 0; 
int posPot1 = 0;
int posPot2 = 0;
byte pos1, pos2;                             //Servo position
int buttonStateMem1 = LOW;                   // memory pushbutton1 status
int buttonStateAct1 = LOW;                   // action pushbutton1 status
int buttonStateRelease = LOW;
boolean running = true;

void setup() {
  
   myservo1.attach(servo1Pin);                     // attaches the servo on pin 9 (digital) to the servo object 
   myservo2.attach(servo2Pin);                    // attaches the servo on pin 10 (digital) to the servo object 
   pinMode(ledPin, OUTPUT);          
   pinMode(buttonPinMem1, INPUT);  
   pinMode(buttonPinAct1, INPUT);  
}

void loop(){
    
  //Reads analog input
  
  val1 = analogRead(potpin1);              // reads the value of the potentiometer (value between 0 and 1023)   
  val1 = map(val1, 0, 1023, 0, 179);       // scale it to use it with the servo (value between 0 and 180) 
  val2 = analogRead(potpin2);              // reads the value of the potentiometer (value between 0 and 1023) 
  val2 = map(val2, 0, 1023, 0, 179);       // scale it to use it with the servo (value between 0 and 180)   
  
  //Reads digital input
  
  buttonStateMem1 = digitalRead(buttonPinMem1);
  buttonStateAct1 = digitalRead(buttonPinAct1);
  buttonStateRelease = digitalRead(buttonRelease);
  
  //Servo 1 and 2
  
  if (running == true)
  {
    myservo1.write(val1);
    myservo2.write(val2);
  }
 
 // Program 1
 
  if (buttonStateMem1 == HIGH) {    
    
    digitalWrite(ledPin, HIGH);          //LED 13 on
    EEPROM.write(addr0, val1);
    EEPROM.write(addr1, val2);
    digitalWrite(ledPin, LOW);           //LED 13 off
          
  } 
  
  if (buttonStateAct1 == HIGH) {     
 
    running = false;
    digitalWrite(ledPin, HIGH);                 //LED 13 on
    pos1 = EEPROM.read(addr0);
    pos2 = EEPROM.read(addr1); 
    myservo1.write(pos1);                       // sets the servo position according to the scaled value 
    myservo2.write(pos2);                       // sets the servo position according to the scaled value 
    digitalWrite(ledPin, LOW);                  //LED 13 off

    } 
 
    // Release button
  
  if (buttonStateRelease == HIGH) {    
    digitalWrite(ledPin, HIGH);                 //LED 13 on
    running = true;   
    delay(40);
    digitalWrite(ledPin, LOW);                 //LED 13 off      
  } 
   
}


Sobre el tema de las conexiones, los pines vienen en el software aunque si alguien lo quiere montar, y tiene dudas de cómo se conectan los servos, pulsadores y potenciómetros aquí dejo unos garabatos a mano (hoy paso del Eagle) a modo de recordatorio.

Ciao!


lunes, abril 28, 2008

Simple motor, motor simple

Del blog de raul he sacado este pedazo de video donde se ve cómo construir un motor con pocos componentes. Parece fácil, lo intentaré montar con mis alumnos.


www.Tu.tv

martes, febrero 12, 2008

electronics for teens V: NTC+Darlington

Aquí dejo un circuito que detecta un umbral de temperatura y pone en marcha un ventilador para refrigerar el ambiente. Lo nuevo es que he usado un par Darlington encapsulado en BC517.




lunes, octubre 29, 2007

electronics for teens IV: Skybot

Ya he conseguido montar el kit del microrrobot que llegó a mis manos hace un par de semanas. Se llama Skybot y toda la información sobre él se puede obtener aquí. El robot en sí es algo similar a algún otro modelo que se puede conseguir mediante revistas especializadas, pero la gran ventaja de Skybot es que es un robot libre, es decir, se dispone de toda la información para su diseño y construcción (también se puede comprar el kit); por cierto, tiene un altísimo nivel de detalle la documentación que se adjunta para montar el robot.
La tarjeta controladora está basada en el PIC 16F87A y se puede programar en C de forma sencilla. Los diseñadores se han currado una formidable herramienta escrita en Python para que la descarga de cada programa al robot (a través del USB del laptop) sea algo trivial. Lo he probado con Debian Lenny y todo ha ido fetén.
Creo que me va a ser muy útil con los alumnos, tanto para usarlo como robot móvil como para manejar otros proyectos utilizando la tarjeta controladora de forma independiente.
He grabado un video muuuy casero (como siempre), para inmortalizar el momento, cargando el típico programa "...pasea sobre la línea negra sin salirte, por favor..." que viene como demo en el kit.
De paso, aprovecho para soltar de forma explícita mensajes subversivos sin ningún pudor (de alguna manera tenía que aprovechar las pegatinas de la FSF).



Enhorabuena a Andrés y demás desarrolladores.

jueves, marzo 01, 2007

electronics for teens III: NTC+LM741 (A.O.)

Este circuito hace la función de un "refrigerador por convección". Cuando el sensor de temperatura NTC se calienta lo suficiente (esto se ajusta con la resistencia variable) apaga el LED y pone en marcha el ventilador que enfría la NTC y provoca a su vez, mediante el relé, que se pare el ventilador. La resistencia variable de 47K está ajustada en el vídeo a 17,9K. Componentes: Amplificador Operacional LM741, NTC 20K, resistencia variable 47K, resistencias 4x10K, Relé 12V, Motor DC 12V, diodo 1N4007, transistor NPN BC237B (vale cualquiera de propósito general), LED, Resistencia 100 ohmios (en el esquema 640 ohm).
Aquí está el esquema:

y el vídeo casero:

domingo, febrero 25, 2007

curso electrónica para profesores de Tecnología

La semana que viene voy de ponente a un curso de electrónica práctica para profesores de Tecnología de Educación Secundaria. En principio está organizado para ayudar a los profesores no especialistas en electrónica a recopilar y probar circuitos para montar con sus alumnos. Es una forma de proporcionar material y, a la vez, crear un foro de intercambio de ideas. Espero que salga bien y ayude a crear futuros grupos de trabajo y poder generar así buen material para el aula que tanta falta nos hace. Necesitamos hacer un grupo fuerte porque las cosas se están poniendo muy en contra con la nueva legislación, aunque ese es otro tema...
Publico aquí las transparencias a través de slideshare. No hay que decir que se admiten críticas, escarnios, etc...

miércoles, febrero 21, 2007

electronics for teens II: LDR+NPN

Esto es un "detector crepuscular", es decir el sensor de luz (LDR) hace que se encienda un LED cuando oscurece. Es un circuito de lo más simple que admite muchas variantes. Lo mejor es que se monta en dos minutos y da un resultado vistoso. Componentes : R=12K, LDR, LED, transistor NPN (2N3904). Os adjunto el esquema y un video casero donde se puede ver el efecto que se consigue.

Video

jueves, enero 04, 2007

electronics for teens I: LEDs+ C.I. 555

Abro una nueva sección donde iré colgando material de electrónica para alumnos de ESO y Bachillerato. No garantizo nada pero según vaya probando circuitos los iré subiendo.
Empiezo la serie con un diseño de 10 LEDs que se encienden y apagan de forma secuencial a través de un CI 555 y un contador Johnson (4017). El circuito es el siguiente:

Me he reconciliado con Youtube. He montado el circuito en una placa de pruebas y lo he grabado en pleno funcionamiento...a ver cómo queda la jugada:

Regards