Ebenhaëzer Tracking System

Uit EurosWiki
Versie door Stebrinke (overleg | bijdragen) op 5 jun 2009 om 12:04 (Check voor slaapcode toegevoegd n.a.v. idee Helmich)
Naar navigatie springen Naar zoeken springen

Het Ebenhaëzer Tracking System is een systeem waarmee de actuele positie van de Ebenhaëzer gevolgd kan worden via internet. Steven, Gart, Willem, Menno T en een tijdje later ook Helmich werken aan een systeem gebaseerd op een GPS, microcontroller en een oude mobiele telefoon. Het oorspronkelijke idee was op basis van SMS, maar later bleek GPRS goedkoper te zijn. Inmiddels zijn we in een vergevorderd stadium: waardoor we met met nog wat handmatige handelingen een route zichtbaar hebben.

Deze pagina bevat op dit moment een overzicht van de ideeën en voortgang van het project. Iedereen is vrij hier zaken aan toe te voegen.

Helmich: Ik heb even getracht alles een goede plek te geven. Herschrijving moet nog.

Planning

Deze sectie bevat de directe planning van de ontwikkelaars, verder verzamelde informatie is in de volgende sectie te vinden.

Doel

Het doel is om een systeem te maken dat periodiek GPS coördinaten van de EH (later eventueel andere boten) logt en deze via een telefoon netwerk (GSM/GPRS/UMTS) doorstuurt naar een internetserver in Enschede. Als de ETS buiten GSM bereik is blijft de buffer staan en wordt verzonden zodra er weer bereik is.Van daaruit kunnen deze coördinaten via de Euros website opgevraagd worden waarmee er een route in een kaart geplot kan worden. Steven kan hier wel iets moois van maken met zijn waterkaart. Uiteraard moet er getracht worden de kosten binnen de perken te houden. Alle componenten worden in een 'broodtrommel' geplaatst en deze wordt in de koekoek van de EH bevestigd, zodat we er makkelijk bij kunnen voor updates. Voor netjes wegwerken is het GPS huisje een mogelijke optie voor later.


Eisen

  • Lage initiële kosten (een nieuwe systeem kan al voor 160 euro gekocht worden)
  • Power on = up & running


Wie gaat wat doen?

Helmich

  1. Op zoek naar een andere telefoon waar Java automatisch kan starten.
  2. Zoekt uit hoe we de knoppen mechanisch aan kunnen sturen.
  3. Voert live test uit op de EH

Gart

  1. Zoekt uit hoe we de knoppen elektronisch aan kunnen sturen.
  2. Microcontroller opbouwen zodat we 3 logische uitgangen kunnen aansturen. Voeding = 12 Volt

Menno

  1. Zoekt naar een bootloader.

Steven

  1. Testen hoe programma starten werkt. Programma starten moet met microcontroller.
  2. Testen hoe BT verbinding maken werkt. Gebeurt automatisch.
  3. Testen hoe uploaden werkt. Moet eenmalig worden geaccepteerd door microcontroller. Daarna worden de coördinaten netjes verstuurd.
  4. Opslaan van geüploade coördinaten. Worden opgeslagen in een database.
  5. Testen of we de nauwkeurigheid van de GPS kunnen voorspellen en zo loze punten kunnen vermijden.
  6. Interface om opgeslagen coördinaten te bekijken. Eerste versie draait.

TODO list

korte termijn

  • microcontroller
    • PCB met optocouplers bouwen > beta
    • batterij voeding pcb (uC kan praktisch uitgeschakeld worden dus misschien voldoet alleen een batterij wel)
    • microcontroller PCB aansluiten aan GSM > beta
    • comperator functie uitzoeken
    • sleepfunctie + wake up uitzoeken
  • Inbouwen in behuizing
  • Voeding voor ETS regelen
  • Voedingssocket plaatsen in de EH koekkoek

Lange termijn / optimalisatie

  • microcontroller
    • alternatieve voeding pcb??
  • Java software aanpassen aan onze wensen
    • Bluetooth watchdog?
    • Kwaliteit GPS fix meenemen
  • Inkomende gesprekken blokkeren (dat kan helaas niet omdat het beveiligingswachtwoord van de nokia niet bekend is :( )


Afgerond

  • Uitvinden op welke GPRS GSM's we een taskmanager kunnen draaien en vinden. (eentje die symbian als OS draait?http://en.wikipedia.org/wiki/Symbian_OS)
  • kijken hoe eenvoudig we externe powerschakelaars kunnen maken (als dat ook bij de GPS ook eenvoudig is , zou ik mooi voor bluetooth gaan)
  • microcontroller
    • microcontroller programmer regelen
  • Java software aanpassen aan onze wensen
    • Upload tijd bepalen > 15 minuten lijkt ok
    • Logtijd bepalen > 30 seconden
    • Logafstand bepalen > is nog afhankelijk van de afwijking
  • Behuizing regelen
  • Nokia 6230i autoadapter regelen
  • Server software
    • Stilstandtijd voor nieuwe track bepalen > 45 minuten

Benodigdheden

  • Behuizing (=tupperwarebox aanwezig)
  • Autolader (voedings adapter) nokia 6230i (= besteld; 21-05-2009)
  • Glaszekering houder + zekering (loods)
  • Sigarettenstekker
  • 2 aderig snoer (loods)



Methode/Principe

Heel basic bestaat zo'n systeem uit de volgende dingen:
GPS ontvanger - Controller - Mobiel internet modem In ons geval bestaan de controller en GPRS modem uit een apparaat: een GSM Op de GSM draait onze software die de communicatie tussen de GPS ontvanger en GPRS modem op zich neemt. De huidige (2009) nieuwe gsm's/handhelds kunnen eigenlijk direct al wat wij willen, maar ons budget is daarvoor nog ontoereikend. Het systeem wordt geacht automatisch aan te gaan zodra er mensen op de boot zijn (de stroom gaat dan aan op de boot). Bij het aangaan moet dus de telefoon en de software opgestart worden. Zodra het systeem draait worden er gps lokaties gelogd en om eenbepaalde tijd via (GPRS) internet geupload naar een server in enschede. Deze server verwerkt de lokaties in een leuk kaartje dat online op internet staat. Hiermee kunnen pappie en mammie kijken waar hun kroost zoal uithangt in de weekenden.


Hardware

Mobiel op de boot

Belangrijkste dingen die er nodig zijn:

  • GPS ontvanger
  • GSM met GPRS

Binnen de vereniging was er een Nokia 6230i beschikbaar. De kortste slag om deze telefoon te laten communiceren is via bluetooth. Een bluetooth gps ontvanger kon niet beschikbaar gesteld worden binnen de vereniging dus is er een RoyalTek Bluetooth GPS Receiver, RBT-2001 aangeschaft. Deze heeft als voordeel dat die vanzelf aan gaat als er voedingspanning op gezet wordt (simpelweg omdat er een 'gewone' on/off switch op zit).

Features

De Nokia 6230i:http://nds1.nokia.com/phones/files/guides/Nokia_6230i_UG_nl.pdf
Firmware: V03.50 13-sept-2005

  • kan geen symbian op
  • draait Java
  • heeft bluetooth (gemakkelijk softwarematig toegankelijk)
  • heeft een soort seriële poort: FBUS (http://en.wikipedia.org/wiki/FBus) (niet gemakkelijk softwarematig toegankelijk)
  • heeft een IR poort (gemakkelijk softwarematig toegankelijk)
  • heeft een USB poort (met een CA-53 of een DKU-2 kabel op de PC aan te sluiten = gewoon kabel)
  • kan via GPRS mobiel het internet bereiken

Pinbezetting POP port:

Pin Name Function
1 Vin 5V Input
2 Gnd Ground
3 ACI Auto-Connect-Ignition ( automatic recognition of connected accessories ) (short with pin 2 for handsfree recognition)
4 V Out Connected to pin 3 in DKU-2 usb data cable
5 USB PwrDet USB Power Detection (only used for USB connection)
6 F-Bus Rx Serial data bus (receive)
7 F-Bus Tx Serial data bus (transmit)
8 Gnd Ground
9 X Mic N audio input -
10 X Mic P audio input +
11 HS Ear L N (Headset) left audio output -
12 HS Ear L P (Headset) left audio output +
13 HS Ear R N (Headset) right audio output -
14 HS Ear R P (Headset) right audio output +

Pin 1 is the one with a small distance to the other pins.





Specificaties RoyalTek RBT-2001

  • 20 kanaals (Sirf III/WAAS)
  • Afmetingen: 7,0 x 4,1x 2,5
  • Gewicht (inclusief batterijen): 62 gram
  • Input stroom (intern): 680mAh Lithium-Ion (oplaadbaar)
  • Input voltage (extern)
  • DGPS-gereed
  • Externe antenne mogelijk
  • Op PC aan te sluiten
  • Werkt 6 uur continu op lithium-ion batterij
  • LED voor status-indicatie

SIMkaart

Willem heeft een prepaid Simyo simkaart met mobiel internet beschikbaar voor dit doel. https://www.simyo.nl/selfcare/servlet/ServiceMobileInternet?uid=7202 Simyo gebruikt het KPN netwerk. In juni 2009 rekent het simyo prepaid abbonement per dag af voor het dataverkeer in stappen van 1kB. 1 euro /MB.

Automatisch starten

Om het systeem autoamtisch aan te laten gaan moeten de volgende dingen gebeuren±

  • GSM inschakelen
  • GPS inschakelen
  • Applicatie starten

Om de GSM in te schakelen moet de powerknop 3 seconden ingedrukt worden.

De GPS gaan vanzelf aan als die stroom krijgt.

Het automatisch starten van Java software is nogal lastig. Sommige telefoons hebben de eigenschap "Nokia-MIDlet-auto-start: yes", het is echter onduidelijk welke telefoons dit ondersteunen. Waarschijnlijk alleen telefoons die meerdere applicaties tegelijk kunnen draaien en dat zijn alleen de nieuwere modellen.

Met behulp van de Push Registry is het wel mogelijk om de applicatie te starten bij een inkomende event, bijvoorbeeld een SMS. Dus het zou te doen moeten zijn om de applicatie op te laten starten met behulp van een SMS. Via Google Calendar kunnen we waarschijnlijk wel zorgen dat de telefoon dagelijks een SMS krijgt. Dit is dus een mogelijkheid, alleen het systeem wordt dan dus slechts eenmaal per dag automatisch gestart. Aangezien de stroom er iedere keer bij het aan en van walstroom halen even af gaat, is dit geen ideale oplossing. Er is ook een Alarm-actie, die de applicatie op een ingestelde tijd kan laten starten. In MIDP 2.0 kan er één alarm per applicatie gemaakt worden, altijd als de applicatie start moet je dus opnieuw het alarm zetten.

Het Nokia Series 40 platform vraagt de gebruiker elke keer om bevestiging voor het programma echt gestart wordt door een Push-actie. Voor ons is dit dus geen handige optie.

Bronnen:

Mogelijke andere opties zijn:

  1. Altijd aanlaten; hiervoor is een extra accu nodig omdat in de standby stand BT nog aan staat en veel stroom eet.
  2. Elektronisch starten door aan de knoppen te solderen.
  3. Mechanisch starten door de knoppen in te drukken.

Uiteindelijke bleek dat optie 2 de korste slag was.


Elektronische aanpassingen

In de figuur zie je een opengemaakte Nokia 7250i, waarbij het printje met de knoppen te zien is. Na wat prutsen bleek dat de knoppen heel eenvoudig maak contactjes zijn dmv twee ringetjes die met elkaar moeten worden verbonden.

opengewerkte nokia 7250i


Op deze manier zijn er 20 verschillende knoppen op deze telefoon, die in een matrixvorm aangesloten zijn. Het is dus mogelijk om met 5 + 4 = 9 signalen het hele keypad aan te sturen. Het volgende figuur verduidelijkt een en ander. Voor het schakelen van een knop kan heel simpel een transistortje icm een weerstandje gebruikt worden, die de twee ringen als het ware kortsluit. De basis van de transistor zit dan aan een microcontroller uitgang. Hier heb ik even mee geëxperimenteerd in dit werkt uitstekend. Maar bij nader inzien kan de transistor oplossing misschien niet omdat dan alle massa's aan elkaar moeten liggen en dat is niet het geval. Optocouplers zouden hier kunnen voldoen

elektrisch schema achter het keypad van de nokia 7250i. Bij nader inzien kan de transistor oplossing misschien niet omdat dan alle massa's aan elkaar moeten liggen en dat is niet het geval. Optocouplers zouden hier kunnen voldoen

De toetsen waaraan gesoldeerd is kunnen niet meer op de oude manier bediend worden. Om toch ook nog handmatige bediening mogelijk te maken (bijv. voor software updates) zijn naast de aansturing van de microcontroller nog externe drukschakelaars nodig.

Vraag: Wat willen we?:

  • Alleen de 3 knoppen nodig voor het aanzetten en opstarten van de software solderen
  • Alle 9 lijnen solderen > microcontroller alles laten doen

(helmich denkt de eerste optie, en dan 3 drukschakelaars parallel voor manuele bediening) => Gart denkt ook de eerste optie

Uit nader onderzoek blijkt dat de transistor optie niet helemaal werkt omdat er geen gezamelijke massa is. De transistors zijn vervangen door optocouplers, die als nog aangestuurd worden door de uC.

Bestand:Aanuitgsm.JPG
schema met uC?

Beschrijving uC programma:
If:
IO1(sense): 0>1
then:
IO2(powerknop) > 'aan' op tijdstip 0-3 seconden (telefoon gaan aan)
IO3(keuzetoets) > 'aan' op tijdstip 20-20.1 seconden (snelkeuze opties komen in beeld; 'verzameling' staat boven aan)
IO4(selecttoets) > 'aan' op tijdstip 22-22.1 seconden (map 'verzameling' wordt gekozen)
IO4(selecttoets) > 'aan' op tijdstip 25-25.1 seconden (start eurostrack programma)

IO3(keuzetoetse) > 'aan' op tijdstip 28-28.1 seconden (bevestig netwerktoegang)


If:
IO1(sense): 1>0
then:
IO2(powerknop) > 'aan' op tijdstip 0-2 seconden (telefoon gaan uit)


Dit is voor een ideale situatie. Maar het gebeurd ook dat de stroom op de EH er ff af is (tijdens het opstarten) de UC krijgt dan nog geen trigger dat de GSM uit moet maar gaat zelf wel uit. Bij de volgende start gaat de GSM dus uit ipv aan. Hier moeten we nog ff op dokteren.

Microcontroller algoritme

De microcontroller heeft de volgende taken:

  • De telefoon aan zetten en het ETS programma opstarten zodra de massapik omgezet wordt.
  • De telefoon uitzetten als de massapik er langer dan een bepaalde tijd af is.

(na een week stilstaan is de GPS accu leeg. dus als je dan de voeding en schakeld, gaat alles wel aan. Maar als je vervolgens heel ff de voeding eraf hebt gaat de GPS wel weer uit omdat zijn accu leeg is. Dan verliezen beide hun communicatie. Er is een reset nodig om die communicatie weer op te zetten. > Dus alles uit als de stroom er ff afgaat)

Als input zijn de volgende twee signalen beschikbaar:

  • Massapik status
  • Telefoon status

In principe hoeft de microcontroller dus alleen maar iets te doen aan het begin en aan het eind van een evenement. In de tussentijd kan deze in slaapstand gezet worden. De massapik ingang kan dan als interrupt dienen om hem uit de slaapstand te halen.

Op dit moment hebben we alleen het aan en uit zetten nog maar geïmplementeerd. Een probleem kan nu nog ontstaan als de massapik eventjes wordt aangeschakeld en binnen de opstartfase van de telefoon weer uit. In de volgende cyclus is het dan mogelijk dat de microcontroller de telefoon uitzet in plaats van aan. Dit gaan we op vangen door dmv van een signaal (2.7 volt) van de telefoon af te tappen die aangeeft of die aan is.

We hebben ween Atmel attiny2313 uC:
http://www.atmel.com/dyn/resources/prod_documents/DOC2543.PDF

We hebben een aantal pinnen van de uC nodig:
Voeding:
PIN 20 - Vcc - voeding microcontroller
PIN 10 - GND - massa microcontroller

Comperator: (kijkt of de telefoon aan is. die 2.7v van de telefoon is waarschijnlijk te laag om als IO te dienen, vandaar de comperator)
PIN 12 - positieve ingang comparator - AIN0 - naar niets: (interne) referentie spanning (1.1 volt)
PIN 13 - negatieve ingang comperator - AIN1 - naar GSM 'Vout'

Opmerking: De interne referentiespanning kan alleen op AIN0 ingesteld worden. Dit betekend dat de GSM op de negatieve AIN1 moet. Hierdoor werkt het bitje geinventeerd. Geen probleem maar wel ff opletten in de software.


IO voor om te kijken of de EH boordspanning aan is, tevens INTERRUPT pin om uit de slaapstand te komen:
We moeten een Pin Change Interrupt hebben > dus poorten "PCINTO(n)"
PIN14 - IO - ingang - PB2/PCINT2
PIN 6 - IO ingang - PD2/INT0 -
PIN 12 - IO ingang - PB0/PCINT0 (maar deze pin hebben we al nodig voor de comperator) is omgezet naar INT0

IO om de knoppen aan te sturen:
PIN 7 - IO uitgang - PD3 - naar optocoupler Aan/uit knop
PIN 8 - IO uitgang - PD4 - naar optocoupler keuze knop
PIN 9 - IO uitgang - PD5 - naar optocoupler select knop

DEZE PIN OUT IS NOG NIET DOORGEVOERD IN DE ONDERSTAANDE SCRIPTS!!

Let er bij AVR studio op dat je ook daad werkelijk de goed HEX file upload. Dat moet je nog apart instellen bij de programmer opties.




Hardware test script

  • Bij het opstarten gaat de aan/uit knop ff aan, daarna de keuze knop en daarna de selectknop.
  • Bij signaal "EH voeding" aan moet de selectknop aan gaan
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>

// PD2/INT0 PIN6 = EH voedingssignaal
// PB1/AIN0 PIN13 = GSM Vout signaal

// PD3 PIN7 = aanuitknop
// PD4 PIN8 = keuze knop
// PD5 PIN9 = selectknop


void init() 								// Initialisatie poorten timer en interrups
	{
		DDRD = 0x78; 						// PORTD PD3-PD6 als uitgang; PORTD PD0-PD2 als ingang
		PORTD = 0;							// Zet alle D uitgangen laag

		DDRB = 0; 							// PORTB PB0-PB7 volledig als ingang
		PORTB = 0; 							// geen pull-up aan

//		PCMSK = (1 << INT0); 				// activeer INT0 (PB2) voor pin-change detectie
//		GIMSK = (1 << PCIE); 				// schakel pin-change interrupt in
  
//		set_sleep_mode(SLEEP_MODE_PWR_DOWN); // meest energie zuinige slaap modus

//		DIDR=0x03;							//disable digital input buffer to reduce power consumption
	
		// Analog Comparator initialization
		// Analog Comparator: ON
		// Analog Comparator Analog comparator bandgap select: on
//		ACSR=0x60;

 
	}


/*
 * Hoofdprogramma
 */
int main()
{
  init();

//poorten testen
	PORTD |= (1 << PD3);		// Activeer aan/uit knop
	_delay_ms(500);
	PORTD &= ~(1 << PD3);		// Deactiveer aan/uit knop
	_delay_ms(100);			

	PORTD |= (1 << PD4);		// Activeer keuzeknop
	_delay_ms(500);
	PORTD &= ~(1 << PD4);		// Deactiveer keuze knop
	_delay_ms(100);			

	PORTD |= (1 << PD5);		// Activeer selectknop
	_delay_ms(500);
	PORTD &= ~(1 << PD5);		// Deactiveer select knop
	_delay_ms(100);			



 
	while(1)						// oneindige loop
		{
			
		if (bit_is_set(PIND, PD2))    // voeding is aan
			{ 
				PORTD |= (1 << PD5);   //selectknop aan
			} 

		if (bit_is_clear(PIND, PD2))  //voeding is uit
			{ 
				PORTD &= ~(1 << PD5);   //selectknop uit
			}

     }
    
  return 0;
}




comperator test script. >> comparator werkt op deze manier
Comperator is ingesteld met interne referentie spanning op de positieve ingang. GSM Vout signaal komt op de negatieve ingang.
De juiste bit wordt wel uitgelezen, met AVR studio was het niet mogelijk(?) om de comperator zelf te testen.
Zo geprogrammeerd dan de led van de aanuitknop aan moet gaan aan als de GSM aan is.

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>

// PD2/INT0 PIN6 = EH voedingssignaal
// PB1/AIN0 PIN13 = GSM Vout signaal

// PD3 PIN7 = aanuitknop
// PD4 PIN8 = keuze knop
// PD5 PIN9 = selectknop


void init() 								// Initialisatie poorten timer en interrups
	{
		DDRD = 0x78; 						// PORTD PD3-PD6 als uitgang; PORTD PD0-PD2 als ingang
		PORTD = 0;							// Zet alle D uitgangen laag

		DDRB = 0; 							// PORTB PB0-PB7 volledig als ingang
		PORTB = 0; 							// geen pull-up aan

		PCMSK = (1 << INT0); 				// activeer INT0 (PB2) voor pin-change detectie
		GIMSK = (1 << PCIE); 				// schakel pin-change interrupt in
  
		set_sleep_mode(SLEEP_MODE_PWR_DOWN); // meest energie zuinige slaap modus

		DIDR=0x03;							//disable digital input buffer to reduce power consumption
	
		// Analog Comparator initialization
		// Analog Comparator: ON
		// Analog Comparator Analog comparator bandgap select: on
		ACSR=0x60;

 
	}


/*
 * Hoofdprogramma
 */
int main()
{
  init();

//poorten testen
	PORTD |= (1 << PD3);		// Activeer aan/uit knop
	_delay_ms(500);
	PORTD &= ~(1 << PD3);		// Deactiveer aan/uit knop
	_delay_ms(100);			

	PORTD |= (1 << PD4);		// Activeer keuzeknop
	_delay_ms(500);
	PORTD &= ~(1 << PD4);		// Deactiveer keuze knop
	_delay_ms(100);			

	PORTD |= (1 << PD5);		// Activeer selectknop
	_delay_ms(500);
	PORTD &= ~(1 << PD5);		// Deactiveer select knop
	_delay_ms(100);	
  


	while(1)						// oneindige loop
		{
			
		if (bit_is_set(ACSR, ACO))    // GSM is uit  (poort werk geinventeerd)
			{ 
				PORTD &= ~(1 << PD3);   //PD3 uit
			} 

		if (bit_is_clear(ACSR, ACO))  // GSM is aan  (poort werk geinventeerd)
			{ 
				PORTD |= (1 << PD3);   //PD3 aan
			}


     }
    
  return 0;
}






BETA!! Sleepfunctie code:
INT0 (PIN6) (=voeding EH) is ingesteld om de uC uit de sleep krijgen. Deze code zet ff alle uitgang 200ms hoog tijdens start up. Daarna:

  • Als voeding EH = aanwezig > alle uitgang een voor een hoog > daarna slaapstand
  • Als voeding EH = afwezig > alle uitgangen laag, 2 seconden wachten en in de slaapstand

Door de een signaal aan te bieden op INT0 (= voeding EH aan/uit zetten) moet de uC weer wakker worden. stroom verbruik gaat dan omhoog. In slaap stand moet het verbruik rond de 6 uA zijn.
Nog even spelen met die "sei(); // globale interrupts aan" Nog niet helemaal duidelijk waar die moeten. Als de comperator gebruik maakt van een interne referentie moet die ook nog uitgeschakeld worden Zie ook: http://www.nongnu.org/avr-libc/user-manual/group__avr__sleep.html

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>

// PB2/PCINT2 PIN14 = EH voedingssignaal
// PB1/AIN0 PIN13 = GSM Vout signaal

// PD3 PIN7 = aanuitknop
// PD4 PIN8 = keuze knop
// PD5 PIN9 = selectknop


void slapen_gaan()
	{
		PORTD = 0; 					// alle poorten laag zetten om stroomverbruik te verlagen
//		ACSR = (1 << ACD);			// comparator uitschakelen	
		sleep_enable(); 			// slaap modus toegestaan
		sei(); 						// globale interrupts aan, om te zorgen dat de uC uit de slaapstand kan komen
		sleep_cpu();   				// slaapstand
		sleep_disable();  			// slaap modus toestaand uitzetten als de uC weerwakker wordt (voorkomt onverwachts in slaapmodus)
		
		// na de slaapstand is de uC uitgeweest en begint opnieuw aan het hoofdprogramma
	}



void init() 								// Initialisatie poorten timer en interrups
	{
		DDRD = 0x78; 						// PORTD PD3-PD6 als uitgang; PORTD PD0-PD2 als ingang
		PORTD = 0;							// Zet alle D uitgangen laag (geen pull-up aan)

		DDRB = 0; 							// PORTB PB0-PB7 volledig als ingang
		PORTB = 0; 							// Zet alle D uitgangen laag (geen pull-up aan)

		PCMSK = (1 << PCINT2); 				// stel: PCINT2 (PB2) in op pin-change detectie
		GIMSK = (1 << PCIE); 				// schakel pin-change interrupt in

//		ACSR = (1 << ACBG);  //comparator instellen op bandgap
  
//		set_sleep_mode(SLEEP_MODE_PWR_DOWN); // slaap modus. lijkt erop dat hier idle ipv power down ingesteld wordt
		MCUCR = (1 << SM0); 				//slaapmodes instellen op 'power down'
//		sei(); 								// globale interrupts aan
		cli(); 								//globale interrupt uitschakelen

	}


/*
 * Hoofdprogramma
 */
int main()
	{
  	init();

//	_delay_ms(1);				// uC de tijd geven weer stabiel te worden

	//even de poorten testen
	PORTD |= (1 << PD3);		// Activeer aan/uit knop
	PORTD |= (1 << PD4);		// Activeer keuzeknop
	PORTD |= (1 << PD5);		// Activeer selectknop
	_delay_ms(200);
	PORTD &= ~(1 << PD3);		// Deactiveer aan/uit knop
	PORTD &= ~(1 << PD4);		// Deactiveer keuze knop
	PORTD &= ~(1 << PD5);		// Deactiveer select knop
	_delay_ms(100);			

 

	while(1)						// oneindige loop
		{


		if (bit_is_set(PINB, PB2))  // voeding is aan
			{ 
			PORTD |= (1 << PD3);   	//aan/uit knop aan
			_delay_ms(200);
			PORTD &= ~(1 << PD3);	//aan/uit knop uit
									
			PORTD |= (1 << PD4);   	//keuzeknop aan
			_delay_ms(200);
			PORTD &= ~(1 << PD4);	//keuzeknop uit

			PORTD |= (1 << PD5);	//selectknop aan
			_delay_ms(200);
			PORTD &= ~(1 << PD5);   //selectknop uit
			
			slapen_gaan();			//we zijn klaar, hop in de slaapstand
			} 

		else 						//voeding is uit, dus geen actie
			{ 
			PORTD = 0;				// alles uit
			_delay_ms(2000);			
			slapen_gaan();			// hop in de slaapstand	
			}


    	}
    
  return 0;
}




Werkende C code, nog met oude pin bezetting en zonder comparator en sleep functie:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>

// PB0/PCINT0 PIN = EH voedingssignaal
// PB1/ PIN = GSM Vout signaal

// PD2 PIN = aanuitknop
// PD3 PIN = keuze knop
// PD4 PIN = selectknop


/*
 * Initialisatie poorten timer en interrups
 */

void init() {
	DDRD = 0x7f; 				// PORTD PD0-PD6 als uitgang

	DDRB = 0; 					// PORTB PB0-PB7 volledig als ingang
	PORTB = (1 << PB0) | (1 << PB1); // PB0, massapik ingang, en PB1, telefoon status ingang, pull-up aan

	PCMSK = (1 << PCINT0); 		// activeer PCINT0 (PB0) voor pin-change detectie
	GIMSK = (1 << PCIE); 		// schakel pin-change interrupt in

	PORTD = 0;					// Zet alle uitgangen laag
}

/**
 * Delay for 19.6 sec
 */
void delay_long() {
	_delay_ms(6553); // Sleep the maximum amount (6.5 sec)
//	_delay_ms(6553); // Sleep the maximum amount (6.5 sec)
//	_delay_ms(6553); // Sleep the maximum amount (6.5 sec)
}

/**
 * Push the on-off button of the GSM long enough to turn it on or off,
 * and wait afterwards until the GSM is really on or off.
 */
void gsm_onoff() {
	// Activeer aan/uit knop gedurende 3 sec
	PORTD |= (1 << PD2);
	_delay_ms(3000);
	PORTD &= ~(1 << PD2); 		// Deactiveer aan/uit knop
	delay_long(); 				// Wacht tot GSM daadwerkelijk aan- of uit is
}

/**
 * Turn the GSM on and start the program. If the GSM is already on, it is turned off first.
 */
void gsm_start() {
	if (bit_is_set(PINB, PB1)) { // GSM is aan, eerst uitzetten
		gsm_onoff();
	}

	// GSM aanzetten
	if (bit_is_clear(PINB, PB1)) {
		gsm_onoff();
	}

	PORTD |= (1 << PD3);		// Activeer keuze knop gedurende 0.1 sec
	_delay_ms(100);
	PORTD &= ~(1 << PD3);		// Deactiveer keuze knop
	_delay_ms(3000);			// wacht tot 22 sec

	PORTD |= (1 << PD4);		// Activeer select knop gedurende 0.1 sec
	_delay_ms(100);
	PORTD &= ~(1 << PD4);		// Deactiveer select knop
	_delay_ms(3000);			// wacht tot 25 sec

	PORTD |= (1 << PD4);		// Activeer select knop gedurende 0.1 sec
	_delay_ms(100);
	PORTD &= ~(1 << PD4);		// Deactiveer select knop
	_delay_ms(3000);			// wacht tot 28 sec

	PORTD |= (1 << PD3);		// Activeer keuze knop gedurende 0.1 sec
	_delay_ms(100);
	PORTD &= ~(1 << PD3);		// Deactiveer keuze knop
}

/*
 * Hoofdprogramma
 */
int main() {
	init();

	// Oneindige loop
	while (1) {
		if (bit_is_clear(PINB, PB0) && bit_is_set(PINB, PB1)) { // Spanning is weg en GSM is aan, GSM uitzetten
			gsm_onoff();
		} else if (bit_is_set(PINB, PB0) && bit_is_clear(PINB, PB1)) { // GSM is uit en er is wel spanning, zet de GSM aan
			gsm_start();
		}
		if (bit_is_set(PINB, PB0) == bit_is_set(PINB, PB1)) { // Alles is in orde, dus ga lekker slapen
			//TODO: Voeg slaapcode toe
		}
	}

	return 0;
}



Voeding

Het hele ETS systeem zal met 12 volt gevoed worden. Dit omdat we voor de telefoon en GPS ontvanger al een 12 volt adapter hebben. Voor implementatie op de EH is een korte kabel nodig in de koekoek, daar zitten al ANP stekkers aan de socket van de huidige GPS. Met wat ANP verdeelstekkertjes en evt. een nieuw socket is de ETS te voeden. In de ETS box moet de 12 volt verbonden worden met:

  • De GSM adapter
  • De GPS ontvanger adapter
  • De microcontroller PCB
  • Een diode in serie om schade door ompolen te voorkomen


Behuizing

De behuizing zou een 'tupperware' trommel van b.v. de action kunnen zijn. Wel een beetje degelijk model die niet bij de eerste torsie al open springt. Met het geluidsisolerende schuim van hans dat in de loods ligt kunnen alle delen 'fixed' in de trommel geplaatst worden. In de behuizing moet komen:

  • GSM
  • GPS muis
  • Micorcontroller PCB
  • 2x Adapter

Een trommel waar 4 'dikke' gsm's inkunnen is waarschijnlijk groot genoeg.




Statisch in Enschede

Features

Omdat we toch euros blijven en natuurlijk niks te makken hebben willen we proberen de kosten een beetje in de hand te houden. Gewenst: Uitleg van wat de server in enschede precies doet.

  • Opslaan ontvangen data in database
  • Nieuw tracks definieren na 45 minuten stilstand
  • Interfacing na waterkaart

Howto




Software

Mobiel op de boot

Howto

Met de Nokia Suite kun je heel eenvoudig .jar applicaties installeren op je telefoon. Verbind je telefoon met de computer, start Nokia Suite, klik op Toepassingen installeren, selecteer de .jar bestanden en klik op het groene pijltje. Binnen no-time staat ze erop en kun je ze gebruiken via het menu, Toepassing => Verzameling

Nokia Suite op je desktop PC/laptop:
handleiding:
http://nds1.nokia.com/files/support/global/phones/software/Nokia_PC_Suite_UG_dut.pdf
software:
http://europe.nokia.com/get-support-and-software/download-software/nokia-pc-suites/compatibility-and-download#163

Communicatie kan via IR, bluetooth of een kabel. Communicatie gaat best aardig, soms moet je een 2 poging doen met installeren maar de Java applicaties draaien. :)



ETS software

Steven heeft het programma GPS Track aangepast. Er is een extra 'ETS' menu in het options menu waar de boot en log en upload tijden naar de ETS server gekozen kunnen worden.

Bij het installeren mbv NokiaSuite moet er op gelet worden dat het .jad (dat door de compiler aangemaakt wordt) bestand niet in dezelfde map staat als de applicatie (.jar), dan gaat het mis bij het installeren ('ongeldige toepassing'). Verder gaat installeren ook wel eens gewoon mis > gewoon nog een keer proberen. Na het installeren bij de optie van het programma toegang geven aan de connectiviteit.

Helaas kan de optie 'netwerktoegang'(=gprs) niet op 'altijd toestaan' gezet worden. De uC moet dus ook deze stap bevestigen. Bij het starten van de applicatie moeten we dus direct even data (0kb) versturen zodat er netwerktoegang gevraagd wordt en de uC dit nog even kan bevestigen. Daarna wordt, zolang de toepassing draait, die toegang niet meer gevraagd en kunnen we 'gaan met die banaan'.

Features

  • Bij opstarten direct GPRS verbinden zoeken zodat dit bevestigd kan worden door de uC
  • Zo min mogelijk bevestigen bij opstarten
  • GPS apparaat keuze
  • Bootkeuze optie
  • logtijd variabel
  • upload tijd variabel
  • verplaatsing meenemen
  • tijd meesturen (vaste tijdzone)
  • meetpunten meesturen
  • Bufferen als er geen GPRS netwerk is
  • Nieuwe track maken naar x aantal minuten stil liggen (huidige: 5 minuten. Is dat goed?)
  • 1x GPS lokatie loggen bij het aanzetten van de ETS & versturen?? (ligt aan de kosten)
  • niet belangrijke meetpunten uitfilteren (bv: alle tussenliggende punten van een rechte lijn, of alleen als de koers veranderd)



Openstaande vragen

  • Wat gebeurt er als er geen GPS aanwezig is?
    • Waarschijnlijk gaat het verbinden gewoon mis en werkt het systeem niet tot de stroom er opnieuw op gaat.
  • Wat gebeurt er als er geen GPS fix is?
    • Het systeem blijft draaien maar logt geen nieuwe coördinaten.
  • Wat gebeurt er bij geen GPRS netwerk?
    • Waarschijnlijk gaat het verzenden mis, waarna de niet verzonden coördinaten bij de volgende zendpoging worden meegenomen.
  • Buitenlandse netwerken blokken?
    • Waarschijnlijk vaart de EH zo weinig in Duitsland dat dit geen grote kostenpost gaat worden. Mocht ons beltegoed echter te snel opraken, dan kunnen we hier altijd nog naar kijken.
  • Wat gebeurd er als de gsm gebeld wordt?
    • De software draait gewoon door, als je afsluit zie een gemist bericht.

Broncode



Statisch in Enschede

Features

Howto

Broncode



Testing

Zaterdag 16mei (introweekend):

  • logtijd: 30 seconden
  • logafstand: 50 mtr
  • uploadtijd: 15 min
  • GPSlokatie: aan de zijwand van de roef, vlakbij de radio (3-5 satellieten)
  • GSMlokatie: in de roef, in het vakje onder de radio

Commentaar:
Er ontstaat een vrij grote afwijking (>50 mtr) waardoor er veel loze punten komen als we stil liggen in de haven. De route komt wel mooi in beeld bij het varen. De resolutie is wel te zien maar nog niet te grof. De tijden kwamen s'ochtends niet goed door bij de server. Steven heeft in de ochtend de server nog aangepast zodat de tijden smiddags wel klopten.

Zondag 17mei(introweekend):

  • logtijd: 30 seconden
  • logafstand: 10 mtr
  • uploadtijd: 15 min
  • GPSlokatie: in de voorkant van de koekkoek (9-10 satellieten)
  • GSMlokatie: in de roef, in het vakje onder de radio

Commentaar:
De gps is nu in de koekkoek geplaatst. De ontvangst is nu stukken beter en de afwijking veel kleiner. De logafstand is op 10 meter gezet Er zijn toch nog een paar kleine loze punten gelogd. Waarschijnlijk zijn die weg als we op 20 mtr logafstand gaan zitten. Maar dat kunnen we in enschede testen. De route kwam nog wat netter in beeld omdat de resolutie kleiner is. Aantal datapunten is waarschijnlijk ook hoger... (steven??). Wel heb je het 'probleem' dat als je stil ligt er helemaal niet geupload wordt. Op de site zie je dus wel dat de ETS aangemeld is maar je weet nog niet waar de EH ligt zolang deze nog aan de kant ligt. Misschien is het dus handig om bij het aanzetten even de lokatie up te loaden. Maar dat wordt dus een pakketje met maar een logpunt. Dat zal relatief duur zijn.

Ma 18 mei 23.25h

  • logtijd: 30 seconden
  • logafstand: 20 mtr
  • uploadtijd: 15 min
  • GPSlokatie: raam stud.k. helmich (4-8 satellieten)
  • GSMlokatie: studeerkamer

Commentaar:
Veel punten bij stilstandaande GPS. Gecancelled Het lijkt erop dat de GPS refresh rate sneller is (1 seconde?) Door de afwijking liggen de gemeten punten een paar meter van elkaar. De afgelegde afstand wordt over die punten bepaald. Dus dan heb je algauw 20 mtr, terwijl we wel op dezelfde plek staan. Beter zou zijn om de afstand te bepalen over punten met een interval van onze logtijd (30 seconden). Opmerking: Dit is een conclusie naar aanleiding van de gegevens in het scherm van de GSM. Steven denkt dat de ETS software de afstand wel om de 30 seconden bepaald. Maar dan is het wel weer vreemd dat er meetpunten geupload worden. We moeten even de afstand meten tussen de gelogde punten om te kijken naar welke afstand de software precies kijkt.

Ma 18 mei 00.00h (nieuwe meting)

  • logtijd: 30 seconden
  • logafstand: 50 mtr
  • uploadtijd: 15 min
  • GPSlokatie: raam stud.k. helmich (4-8 satellieten)
  • GSMlokatie: studeerkamer

Commentaar:
4 pnt. upload over de hele nacht. Zie verhaal bij vorige test


Di 19 mei 0800h (vervolg meting)

  • logtijd: 30 seconden
  • logafstand: 50 mtr
  • uploadtijd: 15 min
  • GPSlokatie: raam stud.k. helmich (4-8 satellieten)
  • GSMlokatie: studeerkamer

Commentaar:
Vervolg van de nacht. Om 0800h mee op reis naar almelo.


Di 19 mei 0915h (nieuwe meting)

  • logtijd: 30 seconden
  • logafstand: 50 mtr
  • uploadtijd: 15 min
  • GPSlokatie: raam kantoor (6-8 satellieten)
  • GSMlokatie: kantoor

Commentaar:
Nieuwe meting.

Wo 20 mei 0715h (nieuwe meting)

  • logtijd: 30 seconden
  • logafstand: 50 mtr
  • uploadtijd: 15 min
  • GPSlokatie: raam studeerkamer (xx satellieten)
  • GSMlokatie: studeerkamer

Commentaar:
Nieuwe meting.


Wensen

  • Snelheid meenemen in de routes
  • Geen bluetooth maar kabel gebruiken (stroom besparing)




Doorontwikkelingsinfo

In dit deel staat nog informatie die wij gewonnen hebben. NIe direct van toepassing op het huidige systeem, maar misschien nog handige voor een opvolger/alternatief.

Opties

Mogelijke opties zijn:

  • Krijg een telefoon werkend als GPRS modem vanaf een pc. Als dat werkt, kunnen we daarna kijken of we dat vanaf een microcontroller kunnen draaien.

Dit zou te behalen moeten zijn door bijvoorbeeld een kleine Linux pc met een (USB) gps ontvanger en (USB) GPRS modem te laten draaien. Het probleem is echter dat een complete pc laten draaien nogal lomp is: relatief groot een eet veel stroom. Dus dat willen we eigenlijk niet doen.
Een GPRS modem aansturen vanaf een microcontroller zou wel mogelijk moeten zijn, je moet dan TCP/IP over PPP implementeren en een TCP/IP implementatie hebben we al gevonden, dan is het alleen nog de vraag hoe moeilijk PPP is.


  • Zoek een Open Source telefoon, of eentje met instelmogelijkheden (smartphones etc).

Optie is super, omdat we dan de hele telefoon opnieuw kunnen programmeren, maar voor zover bekend bestaan deze telefoons nog nauwelijks en zijn ze erg duur.


Mogelijke alternatieve GPS opties:

In het GPS tracking programmaatje op de 6230i kan ik een optie 'seriële communicatie' kiezen incl baudrate etc. daarna vraagt de telefoon of ik verbinding via IR wil maken. Ziet er dus naar uit dat een verbinding via IR opgezet kan worden. (Moeten we nog wel ff zorgen dat ik niet steeds hoef te bevestigen (volgens Steven heeft dat met de rechten die Java heeft te maken, maar hij weet niet of dat op alle telefoons in te stellen is, zoek hiervoor een maintenance menu > dat kan bij de optie van de applicatie> "toegang applicatie > communicatie > altijd toestaan)). Op deze site wordt dat beschreven: http://www.trackr.eu/faq/
Relatief veel werk en foutkans. Waarschijnlijk is het stroomverbruik weinig kleiner dan bij bluetooth. Stroom verbruik kan misschien verlaagd worden door een tweak uit te voeren: Maak wel die IR naar TTL converten maar haal de LEDjes er tussen uit en verbind die door. Het signaal gaat nu dus direct vanuit de GSM de converter in, hiervoor zou minder stroom nodig moeten zijn.

Willem heeft een bedrade GPS ontvanger beschikbaar voor dit doel. Uit deze ontvanger komt een NMEA signaal op TTL niveau. Het signaal kan eenvoudig omgezet worden naar RS232 niveau.

taskmanagersoftware draaien op de GSM (dat kan niet op alle GSM's) zodat de tracker automatisch opstart bij bootup

Ander toestel

De Nokia 7250i:

  • kan geen symbian op
  • draait Java
  • heeft IR (gemakkelijk softwarematig toegankelijk)
  • heeft een seriële poort (met een DKU-5 of een CA-42 kabel op de PC aan te sluiten = kabel + serieel>USB converter) (niet gemakkelijk softwarematig toegankelijk)
  • kan via GPRS mobiel het internet bereiken

linkjes naar IR naar TTL/RS232 converters: (belangrijkste is de conversie van IR naar TTL/RS232. De conversie van RS232 naar TTL is alleen een spanningsniveau conversie)
http://www.tildesign.nl/content/downloads/icl3221_datasheet.pdf
http://www.edaboard.com/ftopic84368.html
http://www.maxim-ic.com/appnotes.cfm/an_pk/3024


Mechanisch toetsen bedienen

Mechanisch toetsen bedienen kan mbv een servo. (Iets als dit:[1] maar dan kleiner) Elk uiteinde van de servoarmpje bedient een toets, dat zijn dus 2 toetsen. De stand van het armpje kan geregeld worden door de duty-cycle van een 50Hz bloksignaal naar de servo aan te passen.

  • toets 1 wordt ingedruk bij een duty-cycle van ong. van 25%
  • er worden geen toetsen ingedrukt bij een duty-cycle van ong. van 50%
  • toets 2 wordt ingedruk bij een duty-cycle van ong. van 75%

Een 50Hz bloksignaal met een variable duty-cycle kan worden gemaakt mbv een microcontroller.


Gerelateerde linkjes

Info over de telefoons:
http://gathering.tweakers.net/forum/list_messages/1186709///gprs%2Cgsm%2Cals%2Cmodem
http://gathering.tweakers.net/forum/list_messages/1079840?data%5Bfilter_keywords%5D=installeren&data%5Bboolean%5D=AND
http://www.a-netz.de/nokia6230port.en.php
http://pinouts.ru/CellularPhones-Nokia/nokia_pop_pinout.shtml

Communicatie via datakabel:
http://www.forum.nokia.com/info/sw.nokia.com/id/2a2ec089-6f2e-47cb-a150-d11a94eb80ad/MIDP_Using_Cable_Connection_In_Nokia_Devices_v1_0.zip.html

Toepasbare software:
http://www.qcontinuum.org/gpstrack/
http://www.trackr.eu/faq/
http://www.trekbuddy.net
http://sportstracker.nokia.com/nts/main/index.do
http://gathering.tweakers.net/forum/list_messages/1115438/0

Kant en klaar alternatief:
http://www.gpsshop.nl/product/56901/snooper-gps-tracker.html
(onbekend wat de operationele kosten zijn)

Info die weg kan

Oude optie zonder microcontroller:

Bestand:GSM OnOff schakeling.JPG
Helmichs bedachte schema voor: Automatisch GSM aan bij power on. Werking nog maar eens even checken :p