Professional Documents
Culture Documents
Blink led
Pulsador
Lectura analógica
ARDUINO Y RASPBERRY
Estableceremos la comunicación por el puerto serie entre Arduino y Raspberry Pi.
Este ejemplo consiste en encender un led por el pin 8 del Arduino para esto conectaremos el Arduino y la
Raspberry , ambos por el puerto USB .
Código Arduino
int led = 8;
void setup () {
pinMode(led, OUTPUT); //LED 8 como salida
Serial.begin(9600); //Inicializo el puerto serial a 9600 baudios
}
void loop () {
if (Serial.available()) { //Si está disponible
char c = Serial.read(); //Guardamos la lectura en una variable char
if (c == 'H') { //Si es una 'H', enciendo el LED
digitalWrite(led, HIGH);
} else if (c == 'L') { //Si es una 'L', apago el LED
digitalWrite(led, LOW);
}
}
}
Antes de escribir el código, tendremos que instalar la librería 'python-serial' para que no
nos de error en la ejecución:
Código Python
import serial
print("Comenzando!")
while True:
comando = raw_input('Introduce un comando: ') #Input
arduino.write(comando) #Mandar un comando hacia Arduino
if comando == 'H':
print('LED ENCENDIDO')
elif comando == 'L':
print('LED APAGADO')
Ahora haremos una lectura de varios componentes que habrá conectados a Arduino. Serán
un LDR, un botón y un potenciómetro.
Desde Raspberry Pi, y mediante un código en Python (muy sencillo), mandaremos
comandos al Arduino para que nos devuelva los datos que esté leyendo. Si por ejemplo
mandamos una 'P', nos devolverá el valor del potenciómetro. Si mandamos una 'B', Arduino
nos informará de si el botón está pulsado o no. Finalmente, si mandamos una 'L', podremos
leer el valor del LDR.
Código Arduino
int LDRPin = 0;
int valor;
int min = 0;
int max = 1023;
int boton = 8;
void setup () {
Serial.begin(9600);
pinMode( boton, INPUT );
}
void loop () {
if(Serial.available()) {
char c = Serial.read();
if (c=='B') {
valor = digitalRead(boton);
if (valor == 0) {
Serial.println("Boton no pulsado"); // Arduino lo está escribiendo
} else {
Serial.println("Boton pulsado");
}
} else if (c=='L') {
valor = analogRead(LDRPin);
valor = map(valor, min, max, 0, 100); // el min es 0 y el max es 1023 ya que
es a 10 bits
Serial.println(valor);
} else if (c=='P') {
Serial.println(analogRead(1)); // en el 1 está el valor del potenciómetro
}
}
}
CODIGO PYTHON
import serial
import time
while True:
var = raw_input("Introducir un Comando: ")
arduino.write(var)
time.sleep(0.1) # tiempo
while arduino.inWaiting() > 0: // lo lee
txt += arduino.read(1) # lo almacena en txt, esto es igual como en c++, a++
# Salto de linea
print txt
txt = ''
arduino.close()
Únicamente hemos añadido una parte del código, que se encarga de esperar a que Arduino
se comunique con él, es decir, que devuelva los datos que se le han pedido:
while arduino.inWaiting() > 0:
txt += arduino.read(1)
print txt
txt = ''
ls /dev/tty*