Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

  • Viestiketjun aloittaja Viestiketjun aloittaja Deleted member 1344
  • Aloituspäivämäärä Aloituspäivämäärä
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Toni, onko tästä koodista se ip osoite jotenki piilotettu vai miten en sitä huomaa , vai onko se poistettu tuon UDPn takia ?
https://github.com/ToniA/arduino-wp-heatpump-controller
tuollahan tuo olikin rivillä 1248 että hakee dhcpllä.

päissäni tässä suunnitelin että laitan serverin työstämään kun se jo valmiiksi mittailee lämpötiloja 1wirella.
laittaa sen sitten komentelemaan ulko,sisä ja takkahuoneen lämpötilojen perustella tota arduinoa.
ja jonkin sortin www liittymä esim phplla voisi väsätä jos haluaa ohittaa automatisoinnin.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Suosittelen opettelemaan Gitin käytön alkeet ;D Meinasin tosiaan että pääsen helpommalla kun vaihdan sen käyttämään DHCP:tä. Muutenhan esim. tuo kommunikointi-esimerkki Pythonilla käyttää UDP-broadcastia, eli laitteen IP-osoitetta ei edes tarvitse tietää.

Muutoshistoria:
https://github.com/ToniA/arduino-wp-heatpump-controller/commits/master

Muutos jossa mm. staattinen IP vaihtuu DHCP:n käyttöön:
https://github.com/ToniA/arduino-wp-heatpump-controller/commit/c84e042d27109c1993764a140d7ac7b00e8adc7b

Meinasin tässä alkaa vääntämään etäohjausta mökkipumpullekin, sen verran testasin jo Arduinon GSM-shieldiä että sain sillä lähetettyä SMS:n, vastaanotto ei vielä jostain syystä oikein pelittänyt.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

täytyy opetella gittiä tai sainkin repot jo koneelleni synkattua :)
olikos tässä nyt viimeisimmät mitsun IR koodit ?
https://github.com/ToniA/arduino-wp-heatpump-controller

edit: äh yritän päästä jyvälle tuosta koodista ja niistä IR koodeista.
niin meniköhän uusiksi? en tuota alun litaniaa huomannut että piti muuttaa mitsulle sopivaksi, olen koko ajan kellottanut näillä panasonicin asetuksilla
Koodi:
#define MARK_THRESHOLD_BIT_HEADER 2000 // Value between BIT MARK and HEADER MARK
#define SPACE_THRESHOLD_ZERO_ONE 800 // Value between ZERO SPACE and ONE SPACE
#define SPACE_THRESHOLD_ONE_HEADER 1400 // Value between ONE SPACE and HEADER SPACE
#define SPACE_THRESHOLD_HEADER_PAUSE 8000 // Value between HEADER SPACE and PAUSE SPACE (Panasonic only)
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

timop sanoi:
täytyy opetella gittiä tai sainkin repot jo koneelleni synkattua :)

Seuraavaksi perustat sitten oman Github-tilin ja ruvetaan tekemään yhteistyötä ;D

timop sanoi:
olikos tässä nyt viimeisimmät mitsun IR koodit ?
https://github.com/ToniA/arduino-wp-heatpump-controller

edit: äh yritän päästä jyvälle tuosta koodista ja niistä IR koodeista.
niin meniköhän uusiksi? en tuota alun litaniaa huomannut että piti muuttaa mitsulle sopivaksi, olen koko ajan kellottanut näillä panasonicin asetuksilla

Joo, mulla on tapana lykätä kaikki valmis samantien Githubiin. Nyt aletaan kyllä olemaan siinä vaiheessa, että voisi pitää Githubissa kehityshaaran/haarat ja masterin irti toisistaan, ja päivittää masteria vain kun on muutos joka todistettavasti toimii.

Kyllä tuo arvot toimivat Mitsulle. Vanha Panasonic CKP ei toimi noilla, mutta ainakin Panasonic (DKE:stä alkaen), Fujitsu ja Mitsu toimivat noilla arvoilla. Noiden kanssa ei ole niin tarkkaa, noissa pitää olla sellaiset numeroarvot jotka vain osuvat riittävän suurella varmuudella eripituisten symbolien väliin. Jos ollaan liian lähellä, se näkyy siinä että bitit menevät satunnaisesti väärin, eikä tarkistussummakaan täsmää
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

joo o, kyllä mielelläni autan jos mitä osaan, pitää vielä opetella tuota koodin värkkäystä aika paljon ennenkuin ilkeää mitään julkaista ::)

taisin noista IR koodeista päästä vihdoin eilis illan kähmyrässä perille :)
varmistan vielä eli jos on Isee päällä ja kun seon ympätty tuohon Modeen niin esim Heatissä se 0x40 lisätään 0x08 arvoon ? ja sama sen FAN lukeman kanssa kun sama bitti on yhdistetty vanen kanssa.

ja tuosta wp_heatpumpcontroller.ino tiedoston koodista Mitsun osalta ,
eikö nämä voi vaihtaa jos haluaa sen Iseen offille? en sitä pidä päällä normaalistikaan.
Koodi:
#define MITSUBISHI_AIRCON1_MODE_AUTO 0x60 // Operating mode
#define MITSUBISHI_AIRCON1_MODE_HEAT 0x48
#define MITSUBISHI_AIRCON1_MODE_COOL 0x58
#define MITSUBISHI_AIRCON1_MODE_DRY 0x50

eli olisi näin ilman Isee:tä
#define MITSUBISHI_AIRCON1_MODE_AUTO 0x20 // Operating mode
#define MITSUBISHI_AIRCON1_MODE_HEAT 0x08
#define MITSUBISHI_AIRCON1_MODE_COOL 0x18
#define MITSUBISHI_AIRCON1_MODE_DRY 0x10
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Just noin.

Mulla on tähän mennessä ollut ajatuksena tehdä tästä aika geneerinen, eli säädetään toimintatilaa, puhallusta ja lämpötilapyyntiä, muuten on sitten joku 'järkevä' setti perusasetuksia. Eli esim. Mitsun ja Panan kohdalla se 'template'. Muuten menee niin mallikohtaiseksi, esim. Panasonic ja Mitsubishi antavat säätää ilmanohjausläppiä, kun taas esim. Carrier ja Fujitsu antavat vain liikuttaa pykälän kerrallaan. Älypuhelimen käyttöliittymän on kuitenkin tarkoitus olla sama kaikille, eli siinä on rullaavat valitsimet noille kolmelle asialle ja sitten vielä erillinen 'virtakytkin'. Sekin voisi tietysti olla käyttöliittymän kannalta yksi toimintatila, 'OFF'.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

yksinkertainen kuulostaa aina hyvältä, tämmönen alottelijakin pääsee perille aiheesta ;D

automatisointi mitä tässä omassa kämpässä pystyy edes pumpulla tekemään tai on järkevää on oikeastaan kahteen suuntaan puhallus eteen ja puhallus alas.
swingillä (vaaka+pysty) olen nyt käyttäny jotta levittää paremmin lämpöä erihuoneisiin.

keväisin ja syksyisin on tarve puhaltaa alas kun ylös puhallus turhaan lämmittää olohuonetta joka lämpiää jo auringosta muutenkin.
noi kaksi voisi tehdä sen templaten kanssa että aina swingi jossei muuta käsketä/mitata :)
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Toni, millä timer kirjastolla toi arduino-wp-heatpump-controller on käännetty?
latasin jonkun githubista muttei se kelvannut.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Se on ihan tämä: http://playground.arduino.cc/Code/Timer

Pikkuveli oli ostanut Arduino Megan, ja siihen Keypad (sis. LCD-näyttö) ja Ethernet -shieldit. Vähän oli jumppaa että keksittiin miten IR-signaali saadaan ulos pinnistä 46, kun timer2:n takana oleva jäi LCD:n käyttöön. Ethernet shield ei toimi vieläkään LCD:n kanssa yhdessä, kiikastaa kai pinnistä 10. Sille tulee kyllä ihan erilainen systeemi, mutta käytetään tuota jo toteutettua Carrierin IR-protokollaa.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

tuon latasinkin aiemmin mutta herjasi jostain, puuttui näemmä oikeudet tavan userille.

nyt kirjastot ladattu myös aJSON,kääntäminen antaa vielä herjaa
Koodi:
heatpump_control_20131208.ino:209:38: error: variable ‘heatpumpModelData’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
heatpump_control_20131208.ino: In function ‘void sendPanasonicCKPOnOff(boolean, boolean)’:
heatpump_control_20131208.ino:302:32: error: variable ‘ON_msg’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
heatpump_control_20131208.ino:303:33: error: variable ‘OFF_msg’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
heatpump_control_20131208.ino:304:36: error: variable ‘CANCEL_msg’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
heatpump_control_20131208.ino: In function ‘void sendPanasonic(byte, byte, byte, byte, byte, byte)’:
heatpump_control_20131208.ino:359:54: error: variable ‘panasonicProgmemTemplate’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
heatpump_control_20131208.ino: In function ‘void sendMidea(byte, byte, byte)’:
heatpump_control_20131208.ino:428:38: error: variable ‘temperatures’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
heatpump_control_20131208.ino:430:32: error: variable ‘OffMsg’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
heatpump_control_20131208.ino:431:31: error: variable ‘FPMsg’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
heatpump_control_20131208.ino: In function ‘void sendCarrier(byte, byte, byte)’:
heatpump_control_20131208.ino:505:38: error: variable ‘temperatures’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
heatpump_control_20131208.ino: In function ‘void sendFujitsu(byte, byte, byte)’:
heatpump_control_20131208.ino:569:33: error: variable ‘OFF_msg’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
heatpump_control_20131208.ino: In function ‘void loop()’:
heatpump_control_20131208.ino:1295:23: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]

Edit: alennuin vielä kokeilee wintoosassa ja siinä kääntö ja lataus meni ongelmitta läpi.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

ei tuo jostain syystä nyt hae edes osoitetta dhcp serveriltä.
irroitin sen RESET-A0 piuhan ni sai osoitteen, ei tosin säädä pumppua.

edit: komento ei tee mitään, kameralla tarkistin niin kyllä se ledi kuitenkin vilkkuu, liekö vääränlainen IR ledi (TSAL6400)?
ei auttanut vaikka siirsin aivan viereen, kokeilin myös pienemmillä vastus arvoilla. tuo ledi on kyllä todistettavasti toiminut jäsen abc123:n m1brs1a piirillä, etuvastus oli 59ohm.

Koodi:
pcltä: 
echo '{"command":"command","fan":4,"identity":"02:26:89:37:C7:D2","mode":2,"model":"mitsubishi_fd","power":1,"temperature":24}' | socat -v - UDP4:192.168.1.255:49722,broadcast

serial monitorissa:
Starting... 
Reading MAC address from EEPROM
MAC: 02:26:89:37:C7:D2
Obtaining IP address from DHCP server...
IP address from DHCP server: 192.168.1.36

Started

Loop start: free RAM: 710
Received UDP packet of size 23
From 192.168.1.12, port 52347
Parsing JSON
Command: identify
Sending a UDP response: {"command":"identify","identity":"02:26:89:37:C7:D2"
Loop end: free RAM: 710
Loop start: free RAM: 710
Received UDP packet of size 121
From 192.168.1.12, port 37324
Parsing JSON
Command: command
Sending a UDP response: {"command":"command","identity":"02:26:89:37:C7:D2"
Loop end: free RAM: 710
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Joo, nuo 'const' -määreen puuttumiset ovat selviä koodivirheitä, Windowsin puolella kääntäjä ei näköjään ole turhan tarkka noista. Korjaan nuo.

Mulla tosiaan on sillä tavalla viallinen Ethernet-shield (kaikki kolme) että piti tehdä tuo viritys jotta vehje boottaa kunnolla.

Mulla on kaksi Ardua, joten voin lähettää koodin toisesta toiseen, ja katsoa miltä se näyttää. Mutta kun ei ole Mitsun pumppua, niin en pääse suoraan vertaamaan miltä se näyttää oikean kaukosäätimen lähettämään dataan verrattuna. Mutta testasin nyt vielä miltä Ardun lähettämä data näyttää, tän voisi vielä tarkistaa kertaalleen aitoa kaukosäädintä vastaan.

Lähetys:
Koodi:
from socket import *
sock = socket(AF_INET, SOCK_DGRAM)
sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)

# Send a command to a controller
sock.sendto('{"command":"command","fan":2,"identity":"02:26:89:28:25:C5","mode":2,"model":"mitsubishi_fd","power":1,"temperature":16}', ('255.255.255.255', 49722))
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes

Ja toisessa Ardussa vastaanotin sanoo:
Koodi:
Number of symbols: 293
Symbols:
Hh110001001101001101100100100000000000000000000100000100100000000000000011100111101000011000000000000000000000000000001000000000100000000011100110Hh110001001101001101100100100000000000000000000100000100100000000000000011100111101000011000000000000000000000000000001000000000100000000011100110
Timings (in us): 
PAUSE SPACE:  0
HEADER MARK:  3450
HEADER SPACE: 1580
BIT MARK:     380
ZERO SPACE:   276
ONE SPACE:    1131
23,CB,26,01,00,20,48,00,C0,79,61,00,00,00,10,40,00,67,23,CB,26,01,00,20,48,00,C0,79,61,00,00,00,10,40,00,67
Looks like a Mitsubishi FD-25 protocol
Checksum matches
POWER ON
MODE HEAT
I-See: ON
Plasma: ON
Temperature: 16
FAN 1
VANE: SWING
WIDE VANE: SWING

Eli jos nuo 'space' ja 'mark' ovat kutakuinkin kohdallaan, ja kuvio muuten näyttää järkevältä, niin luulisi pumpun ymmärtävän sitä.

Koodi käyttää 40 kHz kantoaallon taajuutta, sekin on vain arvaus joka toimii hyvin Panasonicin kanssa. Siinäkin voisi kokeilla eri arvoja, esim. 38 kHz.
Koodi:
  // 40 kHz PWM frequency
  enableIROut(40);

Niin, mulla on muuten 1 kOhm etuvastus tuossa ledissä. 59 ohmia kuullostaa kovin vähältä? Ainakin vilkkuu kirkkaasti jos testailee silmämääräisesti, näkyvän valon alueella olevalla ledillä?
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

noilla samoilla asetuksilla mitsun kakesta
Koodi:
Number of symbols: 294
Symbols:
Hh110001001101001101100100100000000000000000000100000100100000000000000011100111100100101000000000000000000000000000001000000000100000000000011010WHh110001001101001101100100100000000000000000000100000100100000000000000011100111100100101000000000000000000000000000001000000000100000000000011010
Timings (in us): 
PAUSE SPACE: 16460
HEADER MARK: 3490
HEADER SPACE: 3379
BIT MARK: 380
ZERO SPACE: 299
ONE SPACE: 1141
23,CB,26,01,00,20,48,00,C0,79,52,00,00,00,10,40,00,58,23,CB,26,01,00,20,48,00,C0,79,52,00,00,00,10,40,00,58
Looks like a Mitsubishi FD-25 protocol
Checksum matches
POWER ON
MODE HEAT
I-See: ON
Plasma: ON
Temperature: 16
FAN 1
VANE: SWING
WIDE VANE: SWING

mietin tässä juuri, voisin purkaa telkkarin taustavalosta toisen unon, saisi testattua ja vertailtua noita signaaleita.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Haa, huomaatko eron? Tuossa on vissiin samanlainen tauko kahden lähetyksen välissä mitä Panasonicilla, ja se on jäänyt kokonaan huomioimatta... Eli ensin eka datapurske, sitten pitäisi olla n. 16000 us mittainen tauko (joka nyt puuttuu) ja sitten sama purske toiseen kertaan. Eli se 'W' merkki tuossa bittidatan puolessavälissä.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

joo. hitto kun en pääse noista space/mark luvuista oikein perille siis miten niitä laskeskellaan :-[

edit: ehdit jo näköjään päivittää koodia ja nyt se verify menee läpi linuxissakin, kiitos !
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Koitas nyt viimeisintä versiota Githubista.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Jihaa ! sehän pelaa ! ;D
Erittäin ISO kiitos.
IR ledi saa olla aika lähellä pumppua n. 40cm päässä tuottaa hieman hankaluuksia mutta eiköhän tuosta jotenkin selvitä.
voisi kokeilla jaksaako siirtää cat5 kaapelia pitkin.
semmonen kysymys voiko tämän kommentoida pois ?
kun mitsussa ei ole moista ominaisuutta? ellei sitten käytä jotain kombinaatiota jossa menee jäähdytykselle ja pyynti 31.
#define MITSUBISHI_AIRCON1_MODE_FAN 0x00 // ????

toinen kysymys onko mode alkaen 0sta vai 1stä? eli jos haluan heatin ni laitanko 2 vai 1
edit : ei mitään tuoltahan se koodista selviää alkaa 1:stä

Mitsun kakessa on koodi Type: KM09D 0052376 jos haluat sen lisätä tuohon koodiin.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

No niin, ei tää ihan helppo ole etänä :) Mutta nyt sitten tosiaan myös Mitsubishi alkoi pelittämään. Bugeja löytyy vielä ihan varmasti, mutta perusteet alkavat olla kunnossa.

Hienointahan tässä on se, että ei tarvita mitään eksoottista rautaa, nyt saa tehtyä 'melkein mitä vaan' liimaamalla olemassaolevia softamokkuloita toisiinsa.

Muokkasin vielä vähän kommentteja, Mitsun tauon ajoitusta sekä laitoin siihen nyt 'FAN' moden, eli jäähdytys 31 asteen pyynnillä.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Loistavaa !
tein testejä erilaisilla IR ledeillä, nyhdin kiinasta joskus tilaamastani universal AC kakesta (ei toiminut mitsun kanssa) IR ledin sekä tiputin etuvastuksen siihen 59ohmiin ni nyt se kantaa jo pitemmästä matkasta, n. 3metrin päästä vielä toimii!
tuosta IR ledistä ei ole tarkempaa tietoa, on niitä toinen jos hajoaa, nostetaan vastuksen arvoa vaikka sitten ;D

vielä yksi kysymys, mihin tätä tarvitaan?
// Initialize the hardware watchdog
// Watchdog requires ADABOOT to work
// See:
// * http://www.ladyada.net/library/arduino/bootloader.html
// * http://www.grozeaion.com/electronics/arduino/131-atmega328p-burning-bootloader.html
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Mitä pienempi vastus, sitä kirkkaammin ledi vilkkuu. 1k on siitä turvallinen, että ledi saa olla vaikka koko ajan päällä, eikä se mene siitä rikki. Lediähän voi hetkellisesti ajaa melkoisella ylivirralla, eikä sitä tässä softassa pidetäkään päällä kun lyhyitä pulsseja kerrallaan. Tietty aina voi tulla joku softabugi joka pistää ledin palamaan koko ajan ja sitten nousee savu jos vastus on kovasti liian pieni.

Tuo watchdog-yhteensopiva boottiloaderi-juttu on tarpeen ainakin ATmega328:n kanssa, boottiloaderi kun ei muuten selviä watchdogin aiheuttamasta resetistä. Jaa, mikä se sitten on? No, aina voi tulla sellainen bugi että laite on jumissa. Jos watchdog on päällä, laite tekee resetin 8 sekunnin kuluttua siitä kun funktiota 'feedWatchdog' (ks. koodin lopusta) on viimeksi kutsuttu. Eli boottaa automaattisesti sen sijaan että jäisi jumiin. Mä käytän aina kaikissa systeemeissä watchdogia.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Virrankestoha noillakin on eri kuten tavan ledeillä, Pitääpä testailla isommalla vastuksella vielä.
eli tarviiko sitä watchdogia flässätä arduinoon kuten noissa linkeissä oli?

Sent from my Nexus 7 using Tapatalk 4
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Watchdog ei ole pakollinen, eikä sitä tarvitse flashata. Siis jos ei välitä sen toiminnasta. Watchdogin ideana on se, että jos laitteen softa menee sekaisin, se tekee resetin automaattisesti.

Homma toimii näin:

1. Watchdog alustetaan setup() -funktiossa, esim. laukeamaan 8 sekunnin päästä viimeisestä nollauksesta
Koodi:
void setup() {
  wdt_enable(WDTO_8S);
  ...
}

2. Softa nollaa watchdog-laskurin ennen tuon 8 sekunnin kulumista (laskettuna edellisestä nollauksesta), esim. mä olen käyttänyt 2 sekunnin ajastinta (asetetaan setup() -funktiossa, käyttää Timer-kirjastoa)
Koodi:
#include <Timer.h>

Timer timer;

void setup() {
  ...
  timer.every(2000, feedWatchdog);
}

void feedWatchdog()
{
  wdt_reset();
}

3. Jos softa syystä tai toisesta menee sekaisin niin että feedWatchdog jää kutsumatta yli 8 sekunnin jaksoksi, ATmega tekee resetin ihan hardiksella -> softa käynnistyy alusta, ihan kuten olisi painettu reset-nappia.


Tämä kaikki siksi että on ikävää että mahdollisesti hankalassa paikassa, tai hankalan etäisyyden päässä oleva laite on jumissa. Nyt se toipuu siitä automaattisesti.

Boottiloaderi pitää korvata siksi, että vakio ei tue watchdogia. Resetti kyllä tapahtuu, mutta softa ei lähde uudelleen käyntiin.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

ok kiitos selvennyksestä, meinasin laittaa arduino telldus ohjattavan pistorasian perään ni saan sen nollattua joka tapauksessa :)

kokeilin vaihdella etuvastuksia alle 1kohm ja ei tuosta matkasta lähtenyt edes 220ohmilla joten jätän tuon toimivan 59ohm, jos palaa niin vaihdetaan lediä sitten ja mietitää uudelleen sijoitusta ja isompaa vastusta :P

tein myös koodiin jo lisäyksiä jotta saan tuon Vanen säädön pelaamaan jolla on itselläni enempi tarvetta, eli nuo Fan2 nopeuden vane säädöt ylös keskelle ja alas.
saa tietenkin vapaasti lisätä kun on omaa koodiasi ;D
Koodi:
#define MITSUBISHI_AIRCON1_FAN_AUTO 0x78 // Fan speed - mixed with vertical swing...
#define MITSUBISHI_AIRCON1_FAN1 0x79 // 2 Fan1 speed - mixed with vertical swing...
#define MITSUBISHI_AIRCON1_FAN2 0x7A // 3 Fan2 speed - mixed with vertical swing...
#define MITSUBISHI_AIRCON1_FAN3 0x7B // 4 Fan3 speed - mixed with vertical swing...
#define MITSUBISHI_AIRCON1_FAN4 0x7C // 5 Fan4 speed - mixed with vertical swing...
#define MITSUBISHI_AIRCON1_FAN5 0x4A // 6 Fan2 vane up
#define MITSUBISHI_AIRCON1_FAN6 0x5A // 7 Fan2 vane up -2
#define MITSUBISHI_AIRCON1_FAN7 0x6A // 8 Fan2 vane down 

"{\"model\":\"mitsubishi_fd\",\"displayName\":\"Mitsubishi FD\",\"numberOfModes\":5,\"minTemperature\":16,\"maxTemperature\":31,\"numberOfFanSpeeds\":8}"



  switch (fanSpeedCmd)
  {
    case 1:
      fanSpeed = MITSUBISHI_AIRCON1_FAN_AUTO;
      break;
    case 2:
      fanSpeed = MITSUBISHI_AIRCON1_FAN1;
      break;
    case 3:
      fanSpeed = MITSUBISHI_AIRCON1_FAN2;
      break;
    case 4:
      fanSpeed = MITSUBISHI_AIRCON1_FAN3;
      break;
    case 5:
      fanSpeed = MITSUBISHI_AIRCON1_FAN4;
      break;
    case 6:
      fanSpeed = MITSUBISHI_AIRCON1_FAN5;
      break;
    case 7:
      fanSpeed = MITSUBISHI_AIRCON1_FAN6;
      break;
    case 8:
      fanSpeed = MITSUBISHI_AIRCON1_FAN7;
      break;
  }
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Tulipa taas hakattua päätä seinään, alkaa olla melkoinen viha-rakkaus -suhde Arduinon kanssa. Nimittäin yhdistin tuon IR-ohjauskoodin GSMSHIELD-kirjaston mukana tulevaan SMS-vastaanotto/lähetysesimerkkiin ja ihmettelin mikä piru on pielessä kun SMS:n lähetys ei onnistu.

No, löytyihän se ongelma sieltä. Alunperin tuo mun koodi käyttää PWM-pinniä 3, josta jouduin siirtymään pinniin 9 koska tuo GSM/GPRS shield käyttää pinnejä 2 ja 3 kommunikointiin. Missään ei vaan lukenut että pinni 9 on ko. shieldin softaresetti, mutta 'sokea Reettakin' näkee sen kun katsoo johdotuksia ja tarkistaa asian yleismittarilla. Sitten seuraava kysymys olikin, että jos timer1 ohjaa PWM:ää pinneissä 9 ja 10, niin miten pinni 10 otetaan käyttöön. Eikä tarvinnut edes mennä ATmega328:n datalehteä kauemmas kalaan.

Alkaa olla vähän sellainen olo että nää hommat toimivat paremmin jos ensin uhraa kaksi mustaa kanaa ja sitten heittää suolaa vasemman olkapään yli ;D

Mutta nyt on sitten koemielessä saatu Panasonic CKP-pumppu päälle ja pois päältä tekstiviestillä. Varsinainen käyttötarkoitus on mökillä, Ulti Pro Plus 13 FP:n etäohjaukseen.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Toni sanoi:
Alkaa olla vähän sellainen olo että nää hommat toimivat paremmin jos ensin uhraa kaksi mustaa kanaa ja sitten heittää suolaa vasemman olkapään yli ;D

Riittejä on näköjään erilaisia :D
Meilläpäin heitetään kananluut lattialle ja tanssitaan ympärillä ;D
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Aloittelin refaktorointia, eli aloin purkamaan tuota koodia uudelleenkäytettäviin luokkiin. Miltäs tällainen interface näyttäisi:
Koodi:
#include <Arduino.h>

#include "PanasonicCKPHeatpumpIR.h"
#include "CarrierHeatpumpIR.h"

IRSender irSender(3); // IR led on Duemilanove digital pin 3, using PWM timer2
HeatpumpIR *heatpumpIR[] = {new PanasonicCKPHeatpumpIR(), new CarrierHeatpumpIR(), NULL};

void setup()
{
  Serial.begin(9600);
  delay(500);

  Serial.println("Starting...");
}

void loop()
{
  int i = 0;
  
  do {
    heatpumpIR[i]->send(irSender, POWER_ON, MODE_HEAT, FAN_AUTO, TEMPERATURE_24, VDIR_UP, HDIR_AUTO);
  }
  while (heatpumpIR[++i] != NULL);

  delay(1000);
}

Tuossa tuo iloisesti vilkuttelee (tosin vihreää) lediä pöydällä, tällä koodinpätkällä (kirjastot toki tarvitaan). Tää on vielä pahasti työn alla, mutta kyllä tää tästä.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

No niin, refaktorointi on valmis: https://github.com/ToniA/arduino-heatpumpir

Yksinkertainen esimerkki kirjaston käytöstä: https://github.com/ToniA/arduino-heatpumpir/blob/master/examples/simple/simple.ino

Saa antaa palautetta, ja otan mielelläni parannusehdotuksia vastaan :)
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Tyhmä kysymys, voiko noita kirjastoja muokata suoraan (.c ja .h tiedostoja) vai pitääjö ne vielä jotenkin kääntää ennen arduinon kääntöä?

Sent from my Nexus 7 using Tapatalk 4
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Kirjastot laitetaan henkilökohtaiseen libraries-hakemistoon, eli esim. mulla tuo on hakemistossa C:\Users\Toni\Documents\Arduino\libraries\HeatpumpIR. Katso esimerkit alihakemistosta examples (esimerkiksi 'simple': Arduino IDE: File -> Examples -> HeatpumpIR -> simple). Sitten vain käännät ohjelman joka käyttää ko. kirjastoa, se kääntää joka kerta tuon kirjaston sorsista ja ottaa sen mukaan. Homman ideana on siis se, että kirjaston käyttö nostaa softan abstraktiotasoa, itse ohjelmassa ei tarvitse välittää infrapunaohjauksen yksityiskohdista. Eli jos kirjastoa muuttaa, seuraava sitä käyttävä softan käännös kääntää myös kirjaston uusiksi (ainakin mun Arduino Enhanced Release 1.0.5 Windowsissa tekee niin).

Enkä ole vielä saanut aikaiseksi ilmanohjausläppien, I-See:n ja Ion-moodin asetuksia Mitsulle. Meinasin seuraavaksi jatkaa aiheella HeatpumpIR-kirjasto sekä GSM Shield, eli etäohjaus tekstiviestillä. Demo toimii jo. Ja sitä Windows Phone -appistakin pitäisi vielä parantaa.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Juurikin noin helppoa se on. Pitää vaan muistaa sammuttaa Arduino IDE softa välissä ettei käy kuin allekirjoittaneelle että hetken vaikutti ettei libraryä löydykkään käännöksen yhteydessä :).
Just välähti aamulla että tällähän saan tehtyä sen automaattisen pyynnin nostajan/laskijan sulatuksen jälkeiseen 600sec "pakkasjarru" omituisuuden hallintaan. Mun käytössä käy ainakin niin pakkasjaksolla, että kun tehtaantoimesta panassa on rajoitettu kompura tehot puoleen -10 asteen jälkeen ensimmäisen 600secan ajaksi, niin käytännössä pitäisi tuoksi ajaksi nostaa pyyntiä jokunen aste. Jos ei nosteta niin kompuraa pyöritetään jollain 300W tehoilla eikä sillä saada kiukkua kunnolla aikaan joten puhalluskin pysyy LOW tasolla. Olen manuaalisesti muutaman kerran tuota kokeillut mutta automaatiseksi tuo ois saatava. Takan yhteisvaikutus tuo pakkasrajoittimen kanssa muuttaa tilanteen vielä pahemmaksi.

Teen siis setupin jossa LT ntc anturi haistelee kennoa ja noukkii sieltä sulatuksen aloituksen(kenno kylmäksi). Tuosta kohtaan laitetaan pyyntiä lisää ja timer päälle 900sec ajaksi jonka jälkeen takaisin alkuperäiseen pyyntiin.


EDIT: nyt on Duemilanove board tilattu.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

timop sanoi:
Jihaa ! sehän pelaa ! ;D
Erittäin ISO kiitos.
IR ledi saa olla aika lähellä pumppua n. 40cm päässä tuottaa hieman hankaluuksia mutta eiköhän tuosta jotenkin selvitä.
voisi kokeilla jaksaako siirtää cat5 kaapelia pitkin.
semmonen kysymys voiko tämän kommentoida pois ?
kun mitsussa ei ole moista ominaisuutta? ellei sitten käytä jotain kombinaatiota jossa menee jäähdytykselle ja pyynti 31.
#define MITSUBISHI_AIRCON1_MODE_FAN 0x00 // ????

toinen kysymys onko mode alkaen 0sta vai 1stä? eli jos haluan heatin ni laitanko 2 vai 1
edit : ei mitään tuoltahan se koodista selviää alkaa 1:stä

Mitsun kakessa on koodi Type: KM09D 0052376 jos haluat sen lisätä tuohon koodiin.

Mitsun FD mallissa on ihan oikea fan toimintokin saadaan käytöön esim ef mallin kauko säätimellä. Yritän asennella softat arduinoon jottra saan napattua koodin talteen.
Laita vielä vinkki lista meten teen niin hoidan pois.. Uno R3 ja Duemilanove GPS mokkula hyllyssä.. Mitsun kaket FA GA mallista EF malliin saakka toimivat ristiin en ole vielä testannut uutta FH enkä SF mallin kakea vanhemppin malleihin..
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Tässä kytkentä koodin jäljitykseen
http://learn.adafruit.com/ir-sensor/using-an-ir-sensor
Ja Tonin koodi
https://github.com/ToniA/Raw-IR-decoder-for-Arduino


Sent from my GT-I9295 using Tapatalk 2
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Softa toimii hyvin, mutta en löydä speksejä TSOP 1738 irda vastaaottimelle siis kantakytkentää.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Google kuvahausta löytyy
http://static.electro-tech-online.com/imgcache/2638-tsop1738.GIF

Sent from my Nexus 7 using Tapatalk 4
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

EF kakella FAN toiminto:


Number of symbols: 294
Symbols:
Hh110001001101001101100100100000000000000000000100000111000001000000001100000111100000000000000000000000000000000000000000000000000000000010111000WHh110001001101001101100100100000000000000000000100000111000001000000001100000111100000000000000000000000000000000000000000000000000000000010111000
Timings (in us):
PAUSE SPACE: 10920
HEADER MARK: 3350
HEADER SPACE: 1530
BIT MARK: 420
ZERO SPACE: 277
ONE SPACE: 1100
23,CB,26,01,00,20,38,08,30,78,00,00,00,00,00,00,00,1D,23,CB,26,01,00,20,38,08,30,78,00,00,00,00,00,00,00,1D
Looks like a Mitsubishi FD-25 protocol
Checksum matches
POWER ON
MODE unknown
I-See: OFF
Plasma: OFF
Temperature: 24
FAN AUTO
VANE: SWING
WIDE VANE: MIDDLE


JA seuraavaksi 10-asteen ylläpito

Number of symbols: 294
Symbols:
Hh110001001101001101100100100000000000000000000100000100000000000000001100000000100000000000000000000000000000000000000000000001000000000010110011WHh110001001101001101100100100000000000000000000100000100000000000000001100000000100000000000000000000000000000000000000000000001000000000010110011
Timings (in us):
PAUSE SPACE: 12780
HEADER MARK: 3350
HEADER SPACE: 1510
BIT MARK: 420
ZERO SPACE: 278
ONE SPACE: 1100
23,CB,26,01,00,20,08,00,30,40,00,00,00,00,00,20,00,CD,23,CB,26,01,00,20,08,00,30,40,00,00,00,00,00,20,00,CD
Looks like a Mitsubishi FD-25 protocol
Checksum matches
POWER ON
MODE HEAT
I-See: OFF
Plasma: OFF
Temperature: 16
FAN AUTO
VANE: AUTO1?
WIDE VANE: MIDDLE
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Ylläpitolämpötila:

10-astetta I-Save
23,CB,26,01,00,20,08,00,30,40,00,00,00,00,00,20,00,CD
16-astetta I-Save
23,CB,26,01,00,20,08,00,30,40,00,00,00,00,00,00,00,AD
17-astetta I-Save
23,CB,26,01,00,20,08,01,30,40,00,00,00,00,00,00,00,AE
18-astetta I-Save
23,CB,26,01,00,20,08,02,30,40,00,00,00,00,00,00,00,AF

Tulkinta 6=08 15=20 ja 7=00 -> 10-asteen ylläpito

Lähinnä 15=20 -> ylläpito tieto...
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Pitäisköhäm nuo erottaa omakseen, fd25ssa minimi on 16.
Yritän kokeilala tuota fan toimintoa tänään.

Sent from my Nexus 7 using Tapatalk 4
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Kokeilkaapa nyt tätä, menikö oikein: https://github.com/ToniA/Raw-IR-decoder-for-Arduino

Tuolla on nyt myös esimerkkikytkis Duemilanovelle, saman softan pitäisi kääntyä sellaisenaan Megalla, mutta IR-vastarin datapinni tulee nastan digital 2 sijasta nastaan digital 4.

EDIT: Päivitin HeatpumpIR-kirjastoa. Mitsusta on nyt kaksi mallia, 'MitsubishiFDHeatpumpIR' ja 'MitsubishiFEHeatpumpIR'. FE-mallin pitäisi tukea ylläpitolämmitystä. Ilmanohjauksen säätökin voi ehkä toimia.
 
Vs: Ilmalämpöpumpun etäohjaus Arduinolla ja älypuhelimella

Mitsun toimivat elecric mallit toimivat toistensa kakeilla samoilla komennoilla samat toiminnot ei siis mene sekaisin vaikkei laite jotain komento tunnistakkaan tekee minkä pystyy.. ihan hyvin voi olla samassa kirjastossa..

Ylläpito komento saa EF,SF,FH toimimaan ylläpidossa (10-astetta) muilla malleilla joissa tuota tukea ei ole toimii 16-astetta...(FA,GA;FD;GE)..
 
Takaisin
Ylös Bottom