Eso de arriba es el circuito de arduino, consta de dos ldr que en la imagen aparecen a la izquierda y a la derecha , y un botón. Están conectados a entradas de arduino y lo que hace el programa de arduino es mandar información sobre el estado de las ldr (solo manda un 0 o un 1 dependiendo de que la entrada analógica supere un límite o no) y el botón (si está pulsado o no).
Ya en el ordenador he hecho dos programas en python que reciben información del puerto de arduino.
Por ahora os enseño el segundo que hice con ayuda de pygame. Consiste en que crea una ventana con un cuadrado en su interior y dependiendo de si tapas o no los ldr (si le dejas de dar luz) se moverá hacia un lado u otro, el botón sirve para cambiar el color del cuadrado.
Os muestro un vídeo :
Se pueden usar las dos manos a la vez, pero como estaba grabando tenía una mano ocupada.
Os dejo los códigos :
El de arduino :
Código
int ldrD = 0; int ldrI = 5; int boton = 3; int umbral = 150; void setup() { Serial.begin(9600); } void loop() { int luzD = analogRead(ldrD); int luzI = analogRead(ldrI); if (digitalRead(boton) == HIGH) { Serial.print("1"); } else { Serial.print("0"); } if (luzD < umbral) { if (luzI< umbral) { Serial.println("11"); } else { Serial.println("01"); } } else { if (luzI < umbral) { Serial.println("10"); } else { Serial.println("00"); } } delay(100); }
Y el de python :
Código
import pygame,serial,random ser = serial.Serial('/dev/ttyUSB4',9600) # Modificar por vuestro puerto pygame.init() x,y = 500,500 avance = 5 class cosa(pygame.sprite.Sprite): def __init__(self,screen): self.color = 255 self.me = pygame.Surface([50,50]) self.me.fill((self.color,self.color,self.color)) self.positionx = 0 self.positiony = 0 self.screen = screen def update(self): leido = ser.readline() if leido[1] == '1' : self.positiony+=avance else : self.positiony-=avance if leido[2] == '1': self.positionx+=avance else : self.positionx-=avance if leido[0] == '1': self.colorear() self.comprobarcoordenadas() self.screen.blit(pygame.Surface([x,y]),(0,0)) self.screen.blit(self.me,(self.positionx,self.positiony)) pygame.display.flip() def comprobarcoordenadas(self): if self.positionx > x : self.positionx-=avance if self.positionx < 0 : self.positionx+=avance if self.positiony > y : self.positiony-=avance if self.positiony < 0 : self.positiony+=avance def colorear(self): self.color = (self.color+1)%255 self.me.fill(((self.color+random.randint(0,255))%255,(self.color+random.randint(0,255))%255,self.color)) screen = pygame.display.set_mode([x, y]) caja = cosa(screen) while 1: caja.update()
Quien quiera usar el de python tendrá que instalar pygame y pyserial.
Aquí os dejo otro que sirve para mover el ratón con el mismo circuito :
Código
#!/usr/bin/python import serial import Xlib.display from Xlib.ext import xtest from Xlib import X class MouseControl: def __init__(self): self.display = Xlib.display.Display() self.screen = self.display.screen() self.root = self.screen.root self.mousex = 500 self.mousey = 500 def arriba(self): self.mousey += 10 if self.mousey > 780 : self.mousey-=10 self.root.warp_pointer(self.mousex,self.mousey) self.display.sync() def abajo(self): self.mousey -= 10 if self.mousey<0 : self.mousey +=10 self.root.warp_pointer(self.mousex,self.mousey) self.display.sync() def izquierda(self): self.mousex -= 10 if self.mousex < 0 : self.mousex+=10 self.root.warp_pointer(self.mousex,self.mousey) self.display.sync() def derecha(self): self.mousex += 10 if self.mousex > 1020 : self.mousex-=10 self.root.warp_pointer(self.mousex,self.mousey) self.display.sync() def click(self): xtest.fake_input(self.display, X.ButtonPress, 1) xtest.fake_input(self.display, X.ButtonRelease, 1) self.display.sync() ser = serial.Serial('/dev/ttyUSB4',9600) #Modificar por vuestro puerto mouse = MouseControl() while 1 : leido = ser.readline() print mouse.mousex ," ", mouse.mousey if leido[0] == '1': mouse.click() if leido[1] == '1': mouse.arriba() else : mouse.abajo() if leido[2] == '1': mouse.derecha() else : mouse.izquierda()
El que quiera usar este tendrá que instalar además Xlib para python.
Solo funciona en linux.