Fjärrstyrning av eluttag m.m. via dator

Berätta om dina pågående projekt.
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Fjärrstyrning av eluttag m.m. via dator

Inlägg av Zajber »

Tänkte dela med mig av mitt första "färdiga" projekt som faktiskt är rätt användbart.
Köpte ett gäng fjärrstyrda el-uttag på media-markt för två veckor sen och tänkte att dom där hade varit bra att kunna styra över internet.
Till detta projekt använde jag en PIC16f88 samt en MAX232CPE med 1uF kondingar. Även en RF-sändare från Kjell och en spänningsregulator. Mycket basic med andra ord.

Sagt och gjort så hookade jag upp skopet till ett av uttagen och började mäta tider och koder. Efter ett par dagar så hade jag "hela" protokollet klart och införskaffade mig en 443.92MHz sändare från Kjell & Co för 99 spänn. Värt att notera är att detta inte är nexa-protokollet, tror jag. Då mina nexa uttag inte svara på denna fjärrkontroll.

Spenderade sedan några kvällar med att optimera timingen och gjorde klart lite sub-rutiner för att anropa dom olika enheterna och kanalerna.

Därefter slängde jag med lite tidigare kod för att kommunicera via RS232/VT100(?) och gjode ett enkelt meny-system.
Skärmavbild 2010-09-25 kl. 21.41.14.png
Dom två sita lägena är inte riktigt klara ännu. Men datorläget är iaf påbörjat. Tanken med detta är att om man skriver ett script via t.ex. PHP eller ett GUI på datorn så ska detta läge automatiskt kallas genom att trycka "O". Därefter så skrivs inga tecken ut till skrämen utan den stannar i en evighetsloop som bara tar emot olika kommandon. T.ex. om man skickar ascii "1" så kommer den att aktivera enhet 1 på den aktuella kanalen. Skickas "5" istället så släcks enhet 1 (Det går max att köra 4 enheter på varje kanal).

Custom-läget kommer att implementeras senare för att kunna anpassa enheten till nya mottagare. Där ska man själv kunna välja timing och kombination av kod som ska skickas. Kommer att testa detta mot mitt bil-larm senare. :)

Har detta lilla system kopplat till min server som kör ubuntu med mycket bra uptime, så jag har testat ett par gånger att från skolan köra SSH på mobilen till servern och därefter minicom för att kommunicera med com-porten. Klockrent.

Några saker som just nu ligger på todo-listan:
1. Skickar man MÅNGA knapptryckningar samtidigt så hänger sig pic:en och jag har därför aktiverat watchdog-funktionen för att inte får problem om den skulle hänga sig, detta måste fixas.
2. Koden går att optimera mycket mer!
3. Custom funktionen är inte skiven ännu.
4. Ett webb-interface speciellt anpassat för mobila enheter.

Lite bilder:
IMG_0209.JPG
IMG_0214.JPG
IMG_0215.JPG
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av Zajber »

Här kommer koden som ligger på pic:en just nu:

Kod: Markera allt

#include <stdio.h>
#include <htc.h>
#include "usart.h"

/* A simple demonstration of serial communications which
 * incorporates the on-board hardware USART of the Microchip
 * PIC16Fxxx series of devices. */

#define _XTAL_FREQ 4000000 
#define ASCII_ESC 27

//Config bitarna:
__CONFIG(INTIO & WDTDIS & PWRTEN & BOREN & LVPDIS & UNPROTECT & MCLRDIS & DEBUGDIS );
__CONFIG(FCMDIS & IESODIS & WDTEN );


void digital_menu(void);
void aktivera_enhet(void);
void deaktivera_enhet(void);
void etta(void);
void nolla(void);
void send_cmd(char cmd[30]);
void selector(char chan, char sub, char onoff);
void valj_kanal(void);
void kod_lage(void);

char kanal	=	0;

void main(void){
	

	OSCCON 	= 0b01100000;
	TRISA 	= 0b00100000;
	TRISB	= 0b00000000;
	WDTCON	= 0b00010111;
	ANSEL 	= 0; 			//ALL INPUTS DIGITAL
	ADCON0 	= 0;			//AD MODULE OFF
	CMCON 	= 7;	 		//COMPARATORS OFF 
	PORTA 	= 0xFF;
	PORTB	= 0x00;

	INTCON=0;	// purpose of disabling the interrupts.

	init_comms();	// set up the USART - settings defined in usart.h

	unsigned char port_a;
	char cmd;
	char choice;
	unsigned char i;

	port_a = PORTA;

	while(1){
		puts( "\033[2J" );
		printf ("\n\r--------------------------------------------------");
		printf("\r\n\nAOS v 1.3");
		printf("\r\n\n");
		
		printf ("\n\rHuvudmeny: ");
		printf ("\n\r*********");
		printf ("\n\n\r - A - Aktivera enheter");
		printf ("\n\r - D - Deaktivera enheter");
		printf ("\n\r - K - Byt kanal");
		printf ("\n\r - C - Custom signal");
		printf ("\n\r - O - Datorläge (Avslutas med Q)");
		printf ("\n\n\r     Aktuell kanal: %d",kanal);
		printf ("\n\n\r#:");

		cmd=getche();

		
		switch(cmd){
			case 0x61:
				aktivera_enhet();
			break;
			case 0x64:
				deaktivera_enhet();
			break;
			case 0x6B:
				valj_kanal();
			break;
			case 0x63:
				//Custom kod funktion här!
			break;
			case 0x6F:
				kod_lage();
			break;
			}
	
		}
}


void aktivera_enhet(void){
	char cmd;		

	puts( "\033[2J" );
	printf ("\n\rVälj enhet att aktivera: ");
	printf ("\n\r1 - Enhet 1");
	printf ("\n\r2 - Enhet 2");
	printf ("\n\r3 - Enhet 3");
	printf ("\n\r4 - Enhet 4");
	printf ("\n\rA - Alla enheter på kanalen");
	printf ("\n\n\r#:");



	
	cmd = getch();
	
			switch(cmd){
			case 0x31:
				selector(kanal,1,1);
			break;
			case 0x32:
				selector(kanal,2,1);
			break;
			case 0x33:
				selector(kanal,3,1);
			break;
			case 0x34:
				selector(kanal,4,1);
			break;
			case 0x61:
				selector(kanal,1,1);
				selector(kanal,2,1);
				selector(kanal,3,1);
				selector(kanal,4,1);
			break;
			}
	
	
}

void deaktivera_enhet(void){
	char cmd;		
	
	puts( "\033[2J" );
	printf ("\n\rVälj enhet att aktivera: ");
	printf ("\n\r1 - Enhet 1");
	printf ("\n\r2 - Enhet 2");
	printf ("\n\r3 - Enhet 3");
	printf ("\n\r4 - Enhet 4");
	printf ("\n\rA - Alla enheter på kanalen");
	printf ("\n\n\r#:");
	
	cmd = getch();
	
			switch(cmd){
			case 0x31:
				selector(kanal,1,0);
			break;
			case 0x32:
				selector(kanal,2,0);
			break;
			case 0x33:
				selector(kanal,3,0);
			break;
			case 0x34:
				selector(kanal,4,0);
			break;
			case 0x61:
				selector(kanal,1,0);
				selector(kanal,2,0);
				selector(kanal,3,0);
				selector(kanal,4,0);
			break;
			}
	
	
}

void kod_lage(void){

char cmd;

while(1){
	
	cmd = getch();
	
			switch(cmd){
			case 0x31:
				selector(kanal,1,1);
			break;
			case 0x32:
				selector(kanal,2,1);
			break;
			case 0x33:
				selector(kanal,3,1);
			break;
			case 0x34:
				selector(kanal,4,1);
			break;
			case 0x35:
				selector(kanal,1,0);
			break;
			case 0x36:
				selector(kanal,2,0);
			break;
			case 0x37:
				selector(kanal,3,0);
			break;
			case 0x38:
				selector(kanal,4,0);
			break;
			case 0x6B:
				printf("%d",kanal);
			break;
			case 0x71:
				main();
			break;
			}

}
}


void valj_kanal(void){
	char cmd,x=0;		
	
	puts( "\033[2J" );
	printf ("\n\rVälj kanal: ");
	printf ("\n\rQ - Öka kanal ");
	printf ("\n\rA - Minska kanal ");
	printf ("\n\n\r  Aktuell kanal: %d",kanal);

	printf ("\n\n\r#:");
	


	cmd = getch();
		
		switch(cmd){
			case 0x71:
				kanal=kanal + 1;
			break;
			case 0x61:
				kanal=kanal - 1;
			break;
			default:
			break;
		}
	
}


void etta(void){
	RB1 = 1;
	//__delay_us(988);
	__delay_us(970);
	RB1	= 0;
	//__delay_us(342); // Direktanrop
	__delay_us(328); 




}

void nolla(void){
	
	RB1	= 1;
	//__delay_us(320);
	__delay_us(304);
	RB1 = 0;
	__delay_ms(1);
	//__delay_us(10);


}

void selector(char chan, char sub, char onoff){

char cmd[] = {1,1,1,1,1,1,1,1,1,1,1,1};
char tmp;

tmp = chan;

if ((tmp/16)==1){
	cmd[4]=0;
}
tmp = tmp%16;

if ((tmp/8)==1){
	cmd[3]=0;
}
tmp = tmp%8;

if ((tmp/4)==1){
	cmd[2]=0;
}
tmp = tmp%4;

if ((tmp/2)==1){
	cmd[1]=0;
}
tmp = tmp%2;

if ((tmp/1)==1){
	cmd[0]=0;
}

if (sub==4){
	cmd[8]=0;
}
if (sub==3){
	cmd[7]=0;
}
if (sub==2){
	cmd[6]=0;
}
if (sub==1){
	cmd[5]=0;
}
// Av eller på?

if (onoff==1){
	cmd[10]=0;
}
if (onoff==0){
	cmd[11]=0;
}


	send_cmd(cmd);

}



void send_cmd(char cmd[]){

char i,j;

for(j=0;j<=5;j++){

	for(i=0;i<=11;i++){

		nolla();

		switch(cmd[i]){
			case 0:
				nolla();
			break;

			case 1:	
				etta();
			break;
		
			default:
			break;

			}
	}
	nolla();
	__delay_ms(10);
}


}
Användarvisningsbild
jesper
Inlägg: 722
Blev medlem: 12 juni 2006, 16:04:08
Ort: Laem Mae Phim, Thailand

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av jesper »

Härligt, tycker om dessa projekt.

Du kanske kan göra en sida på Wiki'n som beskriver protokollet och enheternas funktion lite mer detaljerat? Gärna med bilder.
Det är lite bökigt att ta sig genom koden för att förstå detaljerna.

Det finns redan beskrivning på NEXAs självlärande enheter här och jag har lagt upp beskrivning på JULA's enheter här.
Användarvisningsbild
ElectricMan
Inlägg: 4874
Blev medlem: 21 februari 2007, 20:22:48
Skype: ElectricManSwe
Ort: Luleå
Kontakt:

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av ElectricMan »

För mobilt webinterface, kolla in detta http://www.jqtouch.com/
Johanb
Inlägg: 3406
Blev medlem: 26 mars 2006, 22:26:12
Ort: Smedjebacken

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av Johanb »

Måste ju fråga var man köper billigaste inbyggnadsbara dimrarna för såna här prylar :)
Användarvisningsbild
MiaM
Inlägg: 12844
Blev medlem: 6 maj 2009, 22:19:19

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av MiaM »

Trevligt:

Tips: det är kanske bra att göra "datorläget" så att kretsen svarar med 1-2 tecken för varje kommando så att datorn "hör" att sladden är inkopplad.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av Korken »

Gillar sånna här projekt skarpt! (Lite för att jag själv sitter i sånna tankar)

Hur fungerar sändaren? Bara på/av på bärvågen eller?
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av Zajber »

Jag kan ev. fixa ihop en liten guide till protokollet senare.

MiaM: Det där med att svara på kommando är ju smart, så vet man att enheten har tagit emot kommandot, det är ju inte helt omöjligt att watchdog:en startar om samtidigt som den skickar ett kommando.

Korken: Sändaren är superenkel, aktiv hög 5v ger motsvarande respons på mottagarna då inte 5v i mottagarna utan 12v.
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av Zajber »

Så nu har jag tagit det hela ett steg till. Iphone-app, eller rättare sagt en Webapp anpassad för iphone.

Jag har skrivit en konsol-applikation som tolkar kommandon och sedan vidarebefodrar detta till serieporten. Programmet heter "ser" och anropas t.ex "./ser -a 3" som då aktiverar enhet 3 på den aktuella kanalen.

Detta har jag sedan tagit vidare och implementerat till ett php-script som anropar "ser" och aktiverar kommandot man valt via GET-strängar, enkelt och osäkert. :)

Därefter har jag "kodat" och format en webbapp med hjälp av IWebKit som jobbar mot detta php-script som ser ut som följer;
IMG_0255.PNG
IMG_0257.PNG
IMG_0259.PNG
Toppnice
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av Korken »

Riktigt coolt!
Fixa en Andriod-app oxo så har du ett deal! ;)

Ungefär hur lång räckvidd har du med sändaren?
Edit: Hittade liknande på Kjell & Co för 99kr: 50-219. Kan det vara samma protokoll på dessa?
danielr112
Inlägg: 8092
Blev medlem: 18 januari 2009, 00:48:24
Ort: Alvesta, Småland

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av danielr112 »

Om man inte vill bygga så finns ju tellstick redan ute :) Fast att bygga en är ju skojigare ibland.
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av Zajber »

Korken skrev:Riktigt coolt!
Fixa en Andriod-app oxo så har du ett deal! ;)

Ungefär hur lång räckvidd har du med sändaren?
Edit: Hittade liknande på Kjell & Co för 99kr: 50-219. Kan det vara samma protokoll på dessa?
I praktiken borde webbappen funka direkt i android då den körs på en webbserver. Jag kommer även att vidareutveckla webb-konceptet och köra lite statistik över vilka enheter som startats och när.

Räckvidden är hela lägenheten jag bor i, den är ganska stor. Jag har inte gjort några tester utanför ännu. Det borde inte vara några större problem att boosta signalen eller byta sändarmodul till en bättre, t.ex. den från Swech.

Kollade på Kjell.Com nu och ser förljande;
Systemet bygger på 4 olika huskoder I, II, III och IV samt enhetskoderna 1-2-3-4. Således kan fjärrkontrollen styra 16 olika mottagare individuellt
Så förmodligen funkar inte min nuvarande kod med dessa då systemet jag kör nu klarar (2^4)*4 enheter. Men det borde inte ta mer än någon kväll att lista ut protokollet på kjelles och implementerar det i min nuvarande kod. 99kr är ju rätt billigt. :)

Det hade varit kul att kunna styra flera olika sorters enheter som Tellstick.
Ang. Tellstick, som sagt det är roligare att bygga det själv, dessutom är tellsticken väldigt dyr i mina mått mätta. :)
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av Korken »

Tråkigt att det inte var samma.
Jag äger tyvärr ingen logikanalysator eller liknande, så har ingen möjlighet, men får annars testa Julas självlärande.
Då jag för nuvarande har 12 uttag jag vill styra och nog allt fler i framtiden så Kjells skulle inte räcka så långt när jag tänker efter.

Tellstick har jag kollat mycket på, men som du säger så är den dyr, vill också helst bygga egen pga det.
För vet man bara hur några system fungerar så är det inte några problem att implementera fler.
danielr112
Inlägg: 8092
Blev medlem: 18 januari 2009, 00:48:24
Ort: Alvesta, Småland

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av danielr112 »

Dyr vill jag inte påstå. Du får ju räkna in din tid att bygga den andre. Material för att bygga egen är kanske 300 sek. Sedan tar det ett par timmar att snickra ihop den och få den funktionsdudlig. Och då är du uppe en bit över deras pris ;)
Nerre
Inlägg: 27195
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Fjärrstyrning av eluttag m.m. via dator

Inlägg av Nerre »

För att inte tala om att det redan finns en massa färdig programvara för att köra mot Tellstick.
Skriv svar