Você está na página 1de 7

Arduino

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 .

Encender led desde la Raspberry Pi con Python

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:

sudo apt-get install python-serial

Código Python
import serial

arduino = serial.Serial('/dev/ttyACM0', 9600)

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')

arduino.close() #Finalizamos la comunicacion

Ejecutamos el código Python con


python nombre.py
Leer Valores con Arduino y Raspberry

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

arduino=serial.Serial('/dev/ttyACM0',baudrate=9600, timeout = 3.0)


arduino.open()
txt=''

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 = ''

Ejecutaremos el código de la siguiente manera:


python nombre.py

ls /dev/tty*