diumenge, 24 de novembre de 2013

Tot parat

Fa temps que no publico res, vaig tenir uns problemes amb la LCD o l'I2C, no ho tinc clar, tampoc en vaig demanar de nous per sortir de dubtes, però si que tinc de camí una Arduino Mega 2560.

Tot i que el blog, és claríssim que va sobre la Raspberry Pi, faré unes probes per descartar el possible error.

Dir que he probat les 2 LCD que tinc i els resultat són semblants, les he probat connectades directament als GPIO i sols sembla funciona la meitat de la pantalla.

Bé, esperarem a que m'arribi l'Arduino i poder fer probes tant pel port I2C com a les LCD directament.

Enllaços a clons Arduinos Mega 2560 a dx.com:
Mega 2560 R3 ATmega2560-16AU Board + USB Cable for Arduino - Black + Blue
Mega2560 ATmega2560 Microcontroller Development Board w/ USB Cable for Arduino

dijous, 17 d’octubre de 2013

Wifi, compilar driver per TL-WN725N

Tal i com vareu poder veure en un altre entrada, ja he fet funcionar el wifi, el millor de tot és que amb el mètode de configuració manual puc utilitzar els 2 dongles wifi sense problemes, el TL-WN721 i el TN-WN725.

Per el TL-WN725 vaig seguir els passos de les següents pàgines, ja que el controlador de la v2 (que és la que tinc, la v1 no cal fer res)

Compile and install driver for TP-Link TL-WN725N version 2 in Raspbian

git clone https://github.com/liwei/rpi-rtl8188eu.git
git clone --depth 1 git://github.com/raspberrypi/linux.git rpi-linux
git clone --depth 1 git://github.com/raspberrypi/firmware.git rpi-firmware
cd rpi-linux
make mrproper
zcat /proc/config.gz > .config
make modules_prepare
cp ../rpi-firmware/extra/Module.symvers .
cd ../rpi-rtl8188eu
CONFIG_RTL8188EU=m make -C ../rpi-linux M=`pwd`
sudo rmmod 8188eu
sudo install -p -m 644 8188eu.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless
sudo depmod -a
sudo modprobe 8188eu

Triga una estona a compilar, però un cop fet no hi ha cap problema, després sols cal configurar l'arxiu /etc/interfaces com comento en una entrada anterior: Previsió del temps

dimarts, 15 d’octubre de 2013

Problemes de corrent

Doncs això sembla, els 5V del port I2C i els que agafa el wifi són massa per la RPI, no puc tenir les dues coses connectades, de fet, a vegades fins i tot tinc problemes si ho faig per ethernet, tindré que alimentar a part el wifi o l'I2C.

Ja veurem com ho fem.

PD: Ja tinc les resistències!

dilluns, 14 d’octubre de 2013

Previsió del temps

Mentre no arriben alguns components que he demanat, m'he posat a fer probes.

Per començar he fet funcionar el wifi, he utilitzat un dongle que tenia vell ja que el que havia comprat per aquesta finalitat no tenia el driver integrat i sembla que el compilat no li ha fet massa profit.

Els que he fet servir són:

TP-LINK TL-WN721N (aquest si que ha funcionat)
TP-LINK TL-WN725N (el que no ha funcionat)

la diferència principal és que el 725 és en format micro, per tant no ocupa massa i és ideal si es vol posar tot dintre una carcassa, però mentre faig probes, el 721 ja em servirà.

Això si, he tingut que fer la configuració a mà ja que el GUI del raspbian no detecta el dongle (tot i que inicialment si ho feia i funcionava, coses rares...)

Per fer-ho he utilitzar el codi trobat a Adafruit (setting-up-wifi-with-occidentalis) i afegint aquest codi al /etc/network/interfaces
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
   wpa-scan-ssid 1
   wpa-ap-scan 1
   wpa-key-mgmt WPA-PSK
   wpa-proto RSN WPA
   wpa-pairwise CCMP TKIP
   wpa-group CCMP TKIP
   wpa-ssid "My Secret SSID"
   wpa-psk "My SSID PSK"
 
iface default inet dhcp

El que també he estat provant, és rebre previsió del temps i dades actualitzades, per aquest fi he volgut fer servir el servei de yahoo! que és molt utilitzat, he trobat dues vies per fer-lo servir.

1. python-weather-api

Aquesta api que podem instal·lar i per tant importar en les nostres feinetes en python permet agafar dades del temps amb yahoo!, weather.com i NOAA.
Les probes han estat una mica confuses, per començar en torna la informació en json i que no controlo gens ni mica i ls segons i mes important és que el buscador de IDs per identificar el lloc que volem que ens agafi les dades, no retornava correctament el codi de Sils, si de Girona per exemple, però en canvi el de Sils m'el retornava malament i em donava error al fer la crida. Un cop l'he trobat no hi ha hagut cap problema i tot perfecte.

2. adafruit forecast.py for pi thermal printer

Buscant buscant he trobat aquest codi, el que m'ha interessat d'aquest codi és que per agafar les dades no utilitzar llibreries externes, yahoo! posa a disposició dels usuaris un servei RSS que podem obtenir mitjançant una URL com la següent:


On w= és l'ID que assigna yahoo al poble que volem i que simplement l'hem de copiar de la URL qual el busquem per http://weather.yahoo.com/spain/.

El valor u=c ens retorna les dades en graus Celsius (c) o Farenheit (f) i així evitar tenir qeu fer nosaltres la conversió.

Per capturar la URL es fa servir urllib i despres es parseja amb parseString que xml.dom.minidom, molt senzill de poder accedir a les dades en un moment.

Aquests sistema també m'agrada perquè et retorna una versió en text del temps com per exemple "partly cloudy (day)", aquest text també esta associat a un codi, per tant podem generar una traducció senzilla a partir d'un vector, o en interficies gràfiques associar a una imatge.

Aquest és el mètode que faré servir.

M'he trobat un problema però, al voler fer-la servir en python3, que és a ón faig funcionat les llibreries per connectar amb la LCD. No és problema greu, ja que el sistema de urllib a python3 ha migrat cap a urllib.request i ha estat tant senzill com canviar l'import a urllib.request i urllib.urlopen(...) a urllib.request.urlopen(...) i tot funciona a la perfecció!

En la pròxima entrada molt segurament parli de com obtenir les IPs d'eth0, wlan0 i la nostra IP d'internet, necessàries per poder connectar a la nostre raspberry i que les poguem mostrar per pantalla.

dilluns, 16 de setembre de 2013

Recopilatòri (software)

Bé, el que vull fer aquí és un petit recopilatòri del programari utilitzat, per si passa alguna desgràcia poder recuperar feina feta ben ràpid.

Per començar he requerit instalar quick2wire, la base sobre la que treballa la llibreria que interactua amb la LCD, aquesta informació l'he tret dels següents links:

Installing the Think Bowl I2C Libraries for Python
I2C Python Library - LCD with the Raspberry Pi

Però primer hem d'instal·lar algo, crec que eren les setuptools per poder instal·lar quick2wire (deixo aquesta dada com a confirmació), quan volguem instal·lar mitjançant:

sudo python3 setup.py install

Ja ens donarà l'error si ens falta alguna cosa per instal·lar.

Molt important és que executem el setup.py amb python3 i no amb python, ja que quick2wire funciona sobre python3.

Aquests passos són suficients per al correcte funcionament amb la LCD, la comanda declarar i per poder treballar amb la capa I2C de mjkdz i perquè treballi correctament amb els pins és:

lcd = i2c_lcd.i2c_lcd(0x20, 1, 4, 5, 6, 0, 1, 2, 3, 7)

Si s'ha canviat el port 0x20 s'ha de tenir en compte.

Amb això ja tindrem la LCD funcionant.

diumenge, 15 de setembre de 2013

Ja funciona la LCD!

He aconseguit fer funcionar la LCD! Per fí!

Els problemes han estat dos, el primer que la "faixa" de cables que feia servir estava mal puntejada, el pin de contrast estava girant amb el RS. El segon, és que per algun motiu no es podia regular el contrast.

El primer problema ha tingut fàcil solució, i ja he pogut connectar i enviar comandes a la LCD, tot OK, però no sortia res a pantalla, quan toquetejava el pin de contrast aconseguia veure els caràcters escrits, per tant sabia que el problema estava en que el contrast tenia un problema!?

Després de cercar alguna possible solució per un munt de foros he trobat algú que havia posat una resistència de 3,9Kohms puntejada amb el pin de terra (o això he entès), per tant, he buscar totes les resistències que he pogut, al final un aparell de 1K, posades en sèrie, puntejat al pin terra de la LCD i... ZAS! Ja tenim test!

Pantalla LCD 16x02 amb I2C a dx.com: Meeeno IIC LCD-1602 Blue Screen LCD Module Shield for Arduino
Pantalla LCD 16x02 sense I2C a dx.com: 1602A 16 x 2 Lines White Character LCD Module w/ Blue Backlight (DC 5V)

dimecres, 11 de setembre de 2013

Tornem-hi!

Doncs això, m'he demanat una altre RBP i mentre acabo de mirar quin problema pot tenir la vella o l'envio a reparar, podré continuar amb el projecte, ara tinc que reprendre una mica el punt en el que estava, no vaig guardar còpia de res, per pràcticament no tenir res fet, tot sigui dit.

Intentar trobar què era el que creia haver solucionat en el moment que va petar tot i creuar els dits perquè no torni a petar altre cop.

Potser per facilitar la feina acabo demanant algun estri més, com un cable per connectar directament a la RBP a la protoboard.

Ja que crec que el problema de l'antiga va ser algun creuament amb algun cable connectat a una sortida del GPIO.... no surt molt del pressupost, uns 10€ i ja tindria tant el cable com la peça que va connectada a la protoboard.

Ja veurem, potser de cara al mes que ve!

dissabte, 1 de juny de 2013

Primera baixa

Doncs bé, sembla que ja hi ha la primera baixa entre els components (que ja tinc tots) i aquest no és mes que la propia Raspberry... alguna cosa ha passat, de fet ja feia uns dies que feia coses rarres i acaba de deixar de donar qualsevol tipus de senyal... aixi que tocarà esperar a reparar-la.

Què hi farem!

En tot cas us poso una mica al dia del que he anat mirant.

Primer és que l'adatador I2C per utilitzar en les LC 16x2 sembla ser que no té un piout 1-1 i que s'ha de remapejar fent servir les llibreries que hi ha per LCDs en python, ha estat en aquest moment (mentre estava en la consola de python) que ha deixat de responde, així que no sé si anava per bon camí.

Els links que he trobat documentació al respecte són els següents:

[SOLVED] MJKDZ brand I2C Controller working with 1602 LCD
I2C Python Library - LCD with the Raspberry Pi

Tindrem que esperar una mica a poder saber si els problemes que havia tingut eren per això!

dimecres, 8 de maig de 2013

Sense tocar, com?

Si recordeu, fa unes setmanes vaig comentar una idea que em va passar pel cap per interactuar amb l'aparell sense tocar-lo, mitjançant un sensor d'ultrasons que detectava la proximitat dels objectes.

He decidit provar un altre sistema (i mes econòmic), els infrarojos.

Diferències que em puc trobar i la forma d'interactuar amb nosaltres?

Infrarojos: La seva utilitat no va gaire més lluny que la de saber si hi ha un objecte aprop o no, però, i si en fem servir diversos? 2 o 3 en línia  Podem saber si la ma passa de dreta a esquerra o a l'invers, poden moure els menús o valors amunt i avall. El seu cost és molt inferior al dels ultrasons, per $2 podem tenir 10 unitats.

Ultrasons: A part de saber si un objecte és davant o no, ens permet calcular la distància, acostant o apropant la mà podríem incrementar o decrementar un valor, no ho veig tant clar per navegar per els menús.

Dir que aquesta idea m'ha vingut després de veure una demostració en viu del Samsung S4, que permet penjar i despenjar trucades passant la ma per sobre, evidentment no serà el mateix sistema, però crec que pot estar força aconseguit.

El seu cost es situa als $2 la unitat.

dijous, 25 d’abril de 2013

Suscipiens temperatus

Ja hem fet hem fet les primeres proves per llegir la temperatura amb el DS18B20 i han anat fantàstiques, seguint les instruccions de Raspberry Pi Spy ha funcionat a a perfecció.

Comentar que jo he demanat el component soldat en una PCB que pel que he pogut comprobar porta un LED que em permet saber si està o no funcionant i ja porta les resistències soldades, pel que m'estalvio espai en components i males soldadures que puguin fer les meves tremoloses mans!



pi@raspberrypi /sys/bus/w1/devices/28-0000045bcb4e $ cat w1_slave
68 01 4b 46 7f ff 08 10 05 : crc=05 YES
68 01 4b 46 7f ff 08 10 05 t=22500
pi@raspberrypi /sys/bus/w1/devices/28-0000045bcb4e $ cat w1_slave
85 01 4b 46 7f ff 0b 10 5f : crc=5f YES
85 01 4b 46 7f ff 0b 10 5f t=24312
pi@raspberrypi /sys/bus/w1/devices/28-0000045bcb4e $ cat w1_slave
69 01 4b 46 7f ff 07 10 5e : crc=5e YES
69 01 4b 46 7f ff 07 10 5e t=22562

Aquestes són les dades que ha agafat, el valor que ens interessa és el t=xxxxx que és la temperatura en milers, per tant, hem obtingut lectures de 22,5 - 24,312 - 22,562.

La temperatura central l'he pres llavors de deixar uns segons un dit a sobre del sensor.

Ara queda treballar amb python i picar una mica de codi :)

dimecres, 24 d’abril de 2013

Entre € i $

Voldria comentar una mica el cost que esta suposant el desemvolpament d'aquest projecte, tenint en compte que pràcticament he partit de 0 en components, passo a llistar les compres realitzades, aquests estan arrodonides i inclouen despeses de transport.

Raspberry Pi (RS Components): 40€
Adaptador I2C per a LCDs de 16x2 (ebay): 2,65$
Sensor DS18D20 (ebay): 3$
Cablejat per protoboard tipus dupond (MM i MF) (ebay): 4,5$

Material que ja tenia:

Protoboard
LCD 16x2 (que possiblement substitueixi per una més moderna amb retroil·luminació)

PROXIMITAT

Vull fer una petita nota al respecte d'una idea que he tingut, afegir un altre mòdul per interactuar amb el termostat a part dels 2 botons.

Una idea molt senzilla seria copiar el sistema del Nest que al cap i a la fi és una roda (potenciòmetre seria correcte?) que permetria sumar o restar  a l'opció que tenim sel·leccionada, però crec que podem anar més enllà.

La idea esbogerrada és utilitzar un sensor d'ultra sons per mesurar la proximitat, potser no tant friki com podria ser amb un Theremin que funciona mitjançant la proximitat i tot, sino alguna cosa més binaria com passar la mà per sobre o no passar-la. Quedaria tot més net de botons (que els dos ja esterien amagats) i no crec que ocupi tant com per fer més gran el termostat...

És una idea que seguire treballant, crec que és interessant i l'ús d'aquests sistemes pot ser molt interessant :)
Ja comencen a arribar els components que vaig demanar, sols em falta el conversor de LCD 1602 a I2C i ja els tindré tot, a la que pugui demanaré per fer el prototip final de PCB, amb pins verticals i en angle i alguna coseta més.

Quan pugui començaré a fer probes amb el sensor de temperatura :)

divendres, 12 d’abril de 2013

Funcionalitats

He estat pensant una mica en les funcionalitats que vull que tingui el termostat i faré un resum de les que crec interessants:

Control de temperatura extetior: Aquest cas és interessant si a 1 o 2 hores vista hi ha una caiguda important de temperatures i volem avançar l'activació de la caldera. Aquest avís arrivaria mitjançant SMS o email (em decanto més cap el segon)

Control via webapp: Com vaig dir, crec que és la millor manera per poder exterioritzar el control del termostat, no dependre de cap sistema, tot en php/python/html/etc per tant de pujar, baixar i/o programar el nostre termostat.

Configuració: La idea és que no es tingui que accedir per ssh per realitzar qualesvol tipus de configuració, ni connectar pantalles ni res per l'estil, l'aparell ja tindrà una pantalla i aquesta ha de ser suficient per interactuar amb l'usuari, realitzar un sistema mínim de menús per poder mostrar per pantalla, però... com ens movem per ells?

Interactuar fisicament: Per poder interactuar físicament amb el termostat no vull implementar més de dos botons (potser un tercer de resset) i per tant amb aquests 2 s'ha de poder interactuar amb el sistema. Un click, dos clicks, mantenir apretat i mantenir apretat els 2, en total 7 convinacións possibles, crec que suficients, ja veurem a l'hora de la veritat

Informació: Quina informació ens ha de mostrar la pantalla? En temps de repòs indicarem simplement la temperatura, possiblement humitat si la podem medir i temperatura exterior, mitjançant qualsevol servei online que ens dongui aquesta dada. Altre informació a poder mostrar, segurament per menus, seria la IP de la xarxa a la que ens hem conectat, per tant de no tenir que fer un scan de IPs a la xarxa, al igual que la MAC, tant de la wifi com de la ethernet.

Connexió: Ja he donat la pista, ethernet perquè la porta integrada la Raspberry i Wifi per independitzar-la del wifi, el més possible és que el router no sigui al costat de la toma del termostat.

Aquestes son les coses que em passen pel cap, ja aniré profunditzant en cada tema, i en el del menú, crec que s'ha de mirar per poder fer un menú còmode de moure's, tot i que no veig que requereixi gaires nivells, evidentment amb 2 botons no es poden fer configuracions com IP i altres que requereixin una entrada alfanumèrica.

diumenge, 7 d’abril de 2013

Primer post, exposició.

Iniciem aquest blog explicant el projecte:

E lque es vol aconseguir és un termostat programable, controlat per webapp i que a mes ens envii avisos per SMS o via correu electrònic.

Per fer el projecte en basarem en el mini ordinador Raspberry Pi que ens permet controlar múltiples entrades i sortides amb el seu port GPIO, a mes és molt fàcil de programar amb diversos llenguatges i amb moltes llibreries ja a punt de fer-les servir.

Per aquest projecte he triat els següent components:

Raspberry Pi B
Pantalla LCD 16x2 (que ja tenia)
Sensor DS18B20

No vaig escollir aquests components per res especial, el sensor DS18B20 té un marge d'error de +/- 0.5º i no s'encareix gaire en comparació amb altres que a més mesuren la humitat. En tot cas no descarto agafar un altre que la medeixi si així puc obtenir informació mes fiable o fer un càlcul de la sensació de temperatura.

Esperarem que vagin arriban els elements i anirem pensant com montar-ho tot, per ara, paciència :)