Tercera / Quarta Setmana

Les tasques d’aquestes dues setmanes han sigut:

  • Provar el sensor i rebre la temperatura d’aquest.
  • Emmagatzemar la temperatura a la base de dades.
  • Mostrar temperatura a la interfície.
  • Comunicar RPi amb Arduino.
  • Control de la llum amb arduino.
  • Controlar el nivell de llum desde la RPi.
  • Reproducció media a través d’HDMI.
  • Reproducció a través de web (scripts)
  • Reproducció videos de youtube

Provar sensor de temperatura i rebre la temperatura d’aquest.

Primer de tot s’ha de connectar correctament el sensor de temperatura en la raspberry pi:

Cable vermell: 3,3V

Cable negre: Terra

Cable blau: senyal, es pot connectar a diferents pins, que s’han de configurar a l’hora de fer el programa

raspsensortemp

Un cop s’ha connectat el sensor es pot começar a configurar la raspberry pi. Per fer-ho s’han seguit els seguents passos:

Primer s’ha d’obrir l’archiu config.txt de la carpeta boot “sudo nano /boot/config.txt” i un cop obert cal afegir al final de l’archiu la seguent frase: “dtoverlay=w1-gpio”. Un cop guardats els canvis s’ha de fer un reset de la placa.

Un cop la placa s’ha reiniciat, s’han d’executar dos comandes per executar el modprobe i carregar els mòduls correctes. Per fer-ho s’han executat aquestes comandes:

sudo modprobe w1-gpio

sudo modprobe w1-therm

Un cop fet això s’ha d’entrar al directori  cd /sys/bus/w1/devices,  i un cop a dins executar “ls”. Al fer això el Sistema ens deixa veure els fitxers

Un cop mostrat el directori del sensor, s’ha d’executar la comanda cd amb el número de serie corresponent al sensor com es mostra en la imatge:

shellsensor

Finalment s’executa la comanda “cat w1_slave” i apareixeran dos línies, la última amb el valor de la temperatura en Celsius multiplicat per 1000.

Funcionament del sensor desde phyton:

Per agafar el valor del sensor de temperatura, s’ha de llegir el fitxer w1_slave i es guarda a la variable text.  Aquesta variable s’ha de tractar i s’han d’agafar el valors necessaris, en el nostre cas la temperatura. Un cop tenim la temperatura guardada com a float es divideix per mil i ja es pot mostrar el resultat final de temperatura.

tfile = open (“/sys/bus/w1/devices/28-000008da1286/w1_slave”)

text = tfile.read()

tfile.close()

secondline = text.split(“\n”)[1]

temperaturedata = secondline.split(” “)[9]

temperature = float(temperaturedata[2:])

temperature = temperature / 1000

Guardar temperatura a la base de dades:

Un cop establerta la connexió amb la base de dades, hem de buscar la taula que ens interessa i ficar-li els valors que volem, per fer-ho s’ha introduït la següent comanda:

curs.execute (“””INSERT INTO tempdat (tdate, ttime, zone, temperature)    

VALUES(CURRENT_DATE(), NOW(), %s, %s)”””,          

(‘local’, temperature ))

Finalment s’ha de fer un commit de la base de dades per a guardar els valors que s’han introduït.

db.commit()

Mostrar temperatura per interfície.

Per mostrar la temperature ens hem hagut de connectar per php a la base de dades. El sistema es gairebé igual que amb el Python. Primerament s’ha hagut d’establir la connexió amb una taula concreta de la base de dades. En aquest cas és la taula “ temps”.

$conexio = mysql_connect(“localhost”, “root”,”gilalex”);                                  

mysql_select_db(“temps”, $conexio);                                                                                          

 mysql_query (“SET NAMES ‘utf8′”);

Un cop connectats guardem en la variable “result” el valor de  l’últim valor entrat en la base de dades, d’aquí que s’hagi ordenat de la manera que es veu a continuació:

$result = mysql_query(“SELECT temperature FROM tempdat ORDER BY tdate DESC LIMIT 1;” );

Un cop guardat el valor de la temperatura  es mostra en una taula tots els valors que s’han guardat en la varibale “result”. En aquest cas només s’en mostra un ja que s’ha establert el límit en un valor.

echo “<table border=’0px’ width=’100%’ >

  <tr>  </tr>”;

 while($row = mysql_fetch_array($result))

 {

      echo “<tr>”;

      echo “<td>” . $row[‘temperature’] . ” ºC </td>” ;

      echo “</tr>”;

           }

echo “</table>”;

Un cop fet aixó es torna a tancar la connexió amb la base de dades.

mysql_close();                               

                                                                                                                                   

interficie

Comunicar RPi amb Arduino

Per fer la comunicació entre les dos plataformes necessitem generar un script a la RPi per tal de que comuniqui amb el codi que tindrà l’Arduino descarregat. A aquesta comunicació l’hem anomenat Raspduino:

raspduinoscript

Si la comunicació es correcta al terminal rebrem un text que ens demanarà que introduim una comanda, en el nostre cas enviant “1”, “2” o “3” li donarem una ordre diferent a l’arduino:

arduinorasp

Com es pot observar al codi el que farem es comunicar a través de serie la RPi amb l’arduino i anirem llegint aquest port per interpretar el que rebem.

Control de la llum amb Arduino

Per controlar el nivell de llum el que farem és connectar la llum a controlar a una de les sortides PWM de l’Arduino, en el nostre cas hem utilitzat el PIN 9. Per controlar el pols que volem enviar de sortida escriurem la comanda analogWrite(“sortidaquehemhabilitat”, “nivell PWM”) El nivell de PWM varia de 0 a 255, hem dividit la intensitat en 3 nivell de manera que hem intentat dividir el valor 255 en 3: 85.

Podem veure com funciona el PWM de l’arduino:

pwm-arduino

Controlar el nivell de llum desde la RPi

Bàsicament com hem explicat anteriorment enviarem 1, 2 i 3 segons la intensitat que vulguem, de cara a la propera setmana desenvoluparem un script per poder executar segons la intensitat que hàgim escollit a través de la web.

Reproducció media a través d’HDMI.

Després de buscar i provar diferents mètodes ens hem decantat finalment per utilitzar un reproductor pre-instal·lat a la RPi el qual és molt complet, ens permet reproduir fins i tot vídeos de youtube.

Per reproduir una cançó o vídeo ens és suficient amb posar la comanda omxplayer localitzacióarxiu:

omxplayer

Un cop executada la comanda podem donar “subordres” sobre el mitjà que estem reproduint:

comandes-omxplayer

Reproducció a través de web (scripts)

En el nostre cas haurem d’executar aquesta acció a través d’un script en el que farem cridar l’acció al terminal:

python-reproduir

Per parar la reproducció matarem el procés per tal de que no reproduïm dos arxius a la vegada:

python-parar

En determinades ocasions ens podem trobar que el nostre usuari no tingui permisos per accedir a un códec de reproducció de vídeo, per poder donar permisos al nostre usuari introduirem la següent comanda al terminal:

permisos-reproduir

Un cop tenim fets els scripts els hem de fer executables, això ho farem a través de la ordre:

chmod x+

D’aquesta manera no caldrà entrar a dins de l’script i executar el mòdul.

En quant al .php per fer les proves hem fet un índex buit amb dos botons, un per reproduir i un per parar:

phpomx

El que fem és cridar un altre php en funció de si volem reproduir o parar:

phpreproduir

phpparar

Reproducció vídeos de youtube

Podem reproduir vídeos directament de youtube, per fer això necessitem tenir instal·lat el paquet youtube-dl el qual ens permetrà reproduir els vídeos desde la línia de comandes / python.

Per instal·lar-ho farem servir la ordre de terminal:

sudo pip install –upgrade youtube_dl

Un cop instal·lat, desde terminal o bé python executarem la següent comanda al shell per reproduir:

sudo omxplayer `youtube-dl -g -f best `

  • Amb la comanda -g li estem dient que busqui l’adreça web.
  • Amb la comanda -f best li estem dient que executi el millor format de reproducció.