Ebenhaëzer Tracking System: verschil tussen versies

Uit EurosWiki
Naar navigatie springen Naar zoeken springen
Hdelange (overleg | bijdragen)
Kvanloobergen (overleg | bijdragen)
k Kasper van Loobergen heeft pagina Ebenhaëzer Tracking System hernoemd naar Ebenhaëzer Tracking System
 
(54 tussenliggende versies door 11 gebruikers niet weergegeven)
Regel 1: Regel 1:
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.
Het '''Ebenhaëzer Tracking System''' (ETS) was een systeem waarmee de actuele positie van de [[Ebenhaëzer]] gevolgd kon worden. Het systeem, gemaakt door Steven, Gart, Willem, Menno T en Helmich is gebaseerd op een Bluetooth GPS, oude mobiele telefoon en een microcontroller.


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.
Het ETS is inmiddels niet meer in gebruik, maar sinds de aanschaf van een [[AIS]]-transponder is de Ebenhaëzer via diverse AIS-trackingwebsites te volgen. De bekendste is [http://www.marinetraffic.com/en/ais/details/ships/shipid:244948/mmsi:244710470/vessel:EBENHAEZER Marinetraffic].


De positie van de Ebenhaëzer werd, indien de boot voer, op vaste tijdsintervallen geregistreerd en via internet geüpload. Daarna was het mogelijk om de gevaren route via de [http://squall.student.utwente.nl/ets/ ETS website] te bekijken.


= Planning =
De precieze werking van het systeem wordt hieronder beschreven.
Deze sectie bevat de directe planning van de ontwikkelaars, verder verzamelde informatie is in de volgende sectie te vinden.


=== Doel ===
= 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 [http://squall.student.utwente.nl/betonning/waterkaart.html waterkaart]. Uiteraard moet er getracht worden de kosten binnen de perken te houden.
Het doel van het systeem is periodiek GPS coördinaten van de EH (later eventueel andere boten) te loggen en deze via een telefoon netwerk (GSM/GPRS/UMTS) doorsturen naar een internetserver. Als er geen GSM bereik is, dienen de coördinaten tijdelijk opgeslagen te worden tot er weer bereik is. Nadat de coördinaten verstuurd zijn, moet het voor iedereen mogelijk zijn om de positie en gevaren route op te vragen. Omdat we als studenten natuurlijk niks te makken hebben, moet er getracht worden de aanschaf en operationele kosten zo laag mogelijk te houden. Verder moet het systeem bij iedere tocht actief zijn, dus moet het automatisch aangaan zodra de massapik er op gaat, anders kan de schipper vergeten het aan te zetten.
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.


De verzamelde data dient op een website gepubliceerd te worden op een zodanige manier dat:
* Groepen na afloop van een evenement aan kennissen en vrienden kunnen laten zien waar ze geweest zijn.
* Deelnemers van evenementen als een [[Instructieweek]] kunnen zien waar de EH uithangt (mits hun telefoon GPRS ondersteunt).
* Alle leden wat leuks hebben om naar te kijken als ze geen zin hebben in studeren.


=== Eisen ===
= Methode/Principe =
* Lage initiële kosten (een nieuwe systeem kan al voor 160 euro gekocht worden)
Het ETS systeem bestaat theoretisch gezien uit de volgende onderdelen:
* Power on = up & running
# GPS ontvanger,
# Mobiel internet modem en
# Controller.
De GPS ontvangt de coördinaten van de boot, de controller verwerkt deze en stuurt ze met behulp van het modem via het internet naar de webserver. De webserver luistert constant of er data van het systeem binnenkomt. Zodra de server data ontvangt, wordt dat opgeslagen in een database en getoond op de [http://squall.student.utwente.nl/ets/ ETS website]. Dit alles gebeurt zonder dat er een enkele menselijke handeling voor nodig is.


In de praktijk gebruiken wij het volgende:
# Bluetooth GPS ontvanger,
# Mobiele telefoon met GPRS functionaliteit en
# Java software op een mobiele telefoon gekoppeld aan een micro-controller.


=== Wie gaat wat doen? ===
Onze controller is dus verdeeld over een micro-controller en een telefoon. Aangezien de telefoon krachtiger is dan de microcontroller, neemt deze nagenoeg al het werk op zich. De micro-controller is slechts aanwezig om het opstarten en afsluiten van het systeem te coördineren.
Helmich
# <s>Op zoek naar een andere telefoon waar Java automatisch kan starten.</s>
# <s>Zoekt uit hoe we de knoppen mechanisch aan kunnen sturen.</s>
# <s>Voert live test uit op de EH</s>


Gart
= Aan boord van de Ebenhaëzer =
# <s>Zoekt uit hoe we de knoppen elektronisch aan kunnen sturen.</s>
# Microcontroller opbouwen zodat we 3 logische uitgangen kunnen aansturen. Voeding = 12 Volt


Menno
{| {{prettytable}}
# <s>Zoekt naar een bootloader.</s>
|-
| bgcolor="#ffbbbb" |
'''''Storing september 2009; De ETS is enkele malen in een storing gevallen. Zoals het nu lijkt komt dat door kortsluiting in draden vanaf het uC PCB naar de gsm-toetsen. Hierdoor worden andere toets-combinaties bediend als bedoelt en start het ETS programma in de gsm dus niet op. Dit kan 'verholpen' worden door ff SUBTIEL de draden tussen het PCB-board en de GSM te bewegen/verleggen waardoor hopelijk de kortsluiting weg is. Komende winter zullen de ETS mensen de boel eens doormeten.'''''
|-
|
'''Fout traceren:'''


Steven
'''De ETS gaat niet aan:'''
# <s>Testen hoe programma starten werkt.</s> Programma starten moet met microcontroller.
# <s>Testen hoe BT verbinding maken werkt.</s> Gebeurt automatisch.
# <s>Testen hoe uploaden werkt.</s> Moet eenmalig worden geaccepteerd door microcontroller. Daarna worden de coördinaten netjes verstuurd.
# <s>Opslaan van geüploade coördinaten.</s> Worden opgeslagen in een database.
# Testen of we de nauwkeurigheid van de GPS kunnen voorspellen en zo loze punten kunnen vermijden.
# Interface om opgeslagen coördinaten te bekijken. Eerste versie draait.


== TODO list ==
Branden de oranje ledjes van de laders?<br/>
===korte termijn===
Ja > uC ligt eruit. Kijk ff of er stekkers los zitten. Zo niet, niet verder klooien en meenemen naar enschede.<br/>
* microcontroller
Nee > ETS krijgt geen 12 voeding vanaf de EH. Zekering in de ETS stekker gesprongen? Heeft het kompashuisje wel stroom?<br/>
** 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 :( )


'''De ETS gaat wel aan maar we zien geen track op internet:'''


===Afgerond===
-Knippert het groene ledje op de GPSontvanger?<br/>
* <s>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)</s>
Ja > GPS ontvanger is o.k.<br/>
* <s>kijken hoe eenvoudig we externe powerschakelaars kunnen maken (als dat ook bij de GPS ook eenvoudig is , zou ik mooi voor bluetooth gaan)</s>
Nee > er is geen gps ontvangst. Haal dat kratje bier van de koekoek af.<br/>
* microcontroller
** <s>microcontroller programmer regelen</s>
* Java software aanpassen aan onze wensen
** <s>Upload tijd bepalen > 15 minuten lijkt ok</s>
** <s>Logtijd bepalen > 30 seconden</s>
** <s>Logafstand bepalen > is nog afhankelijk van de afwijking</s>
* <s>Behuizing regelen</s>
* <s>Nokia 6230i autoadapter regelen</s>
* <s>Server software</s>
** <s>Stilstandtijd voor nieuwe track bepalen > 45 minuten</s>


==Benodigdheden==
* <s>Behuizing (=tupperwarebox aanwezig)</s>
* <s>Autolader (voedings adapter) nokia 6230i (= besteld; 21-05-2009)</s>
* <s>Glaszekering houder + zekering (loods)</s>
* <s>Sigarettenstekker</s>
* <s>2 aderig snoer (loods)</s>
<br/>
<br/>


=Methode/Principe=
-Knippert het blauwe ledje op de gps ontvanger?
Heel basic bestaat zo'n systeem uit de volgende dingen:<br/>
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.


Ja > Verbinding tussen GSM en GPS is ok. Waarschijnlijk gaat er nu op de server in enschede wat mis. Ff bellen. <br/>
Nee > geen verbinding tussen de GSM en GPS ontvanger. Ga naar volgende vraag.<br/>
-Draait het ETS programma wel op de GSM? En is in de [http://squall.student.utwente.nl/ets/log.txt log] te zien dat de ETS zich aanmeld bij het opstarten?<br/>
Nee > klungel ff subtiel met de draden om een sluiting op te heffen en probeer een restart. Kijk of de stappen die de gsm bij het opstarten doorloopt logisch zijn. Zie de tabel [[#Elektronische aanpassingen aan de GSMknoppen| hier]].<br/>
Ja > Het programma maakt geen automatisch contact meer met de gps-ontvanger. Stop het tracen in het ETS programma en stel handmatig opnieuw in dat er bluetooth communicatie gebruikt moet worden.


=Hardware=
- Als het ETS programma start verschijnt dan de melding "ETS uploads started"?
==Mobiel op de boot==
 
Belangrijkste dingen die er nodig zijn:
Nee > Het geheugen waar het ETS programma gebruik van maakt is waarschijnlijk vol. Verwijder enkele oude tracks en kijk of het nu wel werkt
* GPS ontvanger
|-
* GSM met GPRS en interface naar GPS ontvanger
|}


Binnen de vereniging was er een Nokia 6230i beschikbaar.
Deze sectie beschrijft alles wat op de EH aanwezig is zolang het systeem draait.
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===
== Hardware ==
De Nokia 6230i:http://nds1.nokia.com/phones/files/guides/Nokia_6230i_UG_nl.pdf<br/>
Belangrijkste zaken die er op de boot aanwezig zijn, zijn:
Firmware: V03.50 13-sept-2005
* Bluetooth GPS ontvanger,
* kan geen symbian op
* Mobiele telefoon met GPRS en een interface naar GPS ontvanger (Bluetooth),
* draait Java
* Automatisch opstart systeem
* 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:
=== GPS ontvanger ===
{| {{prettytable}}
De kortste slag om de mobiele telefoon met een GPS te laten communiceren is via Bluetooth. Er is een RoyalTek Bluetooth GPS Receiver, RBT-2001 aangeschaft voor dit doel. Deze heeft als voordeel dat hij vanzelf aan gaat als er voedingspanning op gezet wordt (simpelweg omdat er een 'gewone' aan/uit schakelaar op zit).
|-
|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 (U=2.7volt)
|-
|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.  


<br/>
RoyalTek RBT-2001 specificaties:
<br/>
Specificaties RoyalTek RBT-2001  
* 20 kanaals (Sirf III/WAAS)
* 20 kanaals (Sirf III/WAAS)
* Afmetingen: 7,0 x 4,1x 2,5
* Afmetingen: 7,0 x 4,1x 2,5
Regel 159: Regel 88:
* Op PC aan te sluiten
* Op PC aan te sluiten
* Werkt 6 uur continu op lithium-ion batterij
* Werkt 6 uur continu op lithium-ion batterij
* LED voor status-indicatie
* LED's voor status-indicatie


<br/>
Toelichting LED's statusindicatie:
===SIMkaart===
{| {{prettytable}}
Willem heeft een prepaid Simyo simkaart met mobiel internet beschikbaar voor dit doel.
|-
https://www.simyo.nl/selfcare/servlet/ServiceMobileInternet?uid=7202
!'''Led''' || '''Actie''' || '''Uitleg''' || '''Normale situatie op de EH'''
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.
| rowspan="2" | Blauw || Uit || Geen Bluetooth verbinding met GSM || alleen bij het aanzetten
<br/>
|-
| bgcolor="#bbbbff" | Knippert || Bluetooth verbinding met GSM werkt || ja
|-
| rowspan="2" | Groen || bgcolor="#bbffbb" | Aan || GPS is aan, maar nog geen GPS fix gereed || alleen bij het aanzetten
|-
| bgcolor="#bbffbb" | Knippert || GPS is aan en heeft een fix || ja
|-
| rowspan="3" | Rood/Geel || Uit || Batterij is voldoende vol || ja
|-
| bgcolor="#ffbbbb" | Rood || Batterij is bijna leeg || nee
|-
| bgcolor="#ffffbb" | Geel || GPS hangt aan de lader en wordt opgeladen || ja
|}


===Automatisch starten===
=== Mobiele telefoon ===
Om het systeem autoamtisch aan te laten gaan moeten de volgende dingen gebeuren±
Er is een [http://nds1.nokia.com/phones/files/guides/Nokia_6230i_UG_nl.pdf Nokia 6230i] gedoneerd aan het project.
* GSM inschakelen
* GPS inschakelen
* Applicatie starten


Om de GSM in te schakelen moet de powerknop 3 seconden ingedrukt worden.
Nokia 6230i:
Firmware: V03.50 13-sept-2005
* kan geen symbian op
* draait Java
* heeft bluetooth (gemakkelijk softwarematig toegankelijk)
* heeft een soort seriële poort: [http://en.wikipedia.org/wiki/FBus 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


De GPS gaan vanzelf aan als die stroom krijgt.
==== SIMkaart ====
Als provider hebben we voor Simyo prepaid gekozen, vanwege [https://www.simyo.nl/selfcare/servlet/ServiceMobileInternet?uid=7202 de lage kosten voor mobiel internet]. Simyo gebruikt het KPN netwerk.


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.
In juni 2009 rekent het Simyo prepaid abonement per dag af voor het dataverkeer met als kosten 1 euro per MB, berekend in stappen van 1 kB.


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.
=== Automatisch opstarten ===
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.
Om het systeem automatisch aan te laten gaan moeten de volgende dingen gebeuren:
* GSM inschakelen,
* GPS inschakelen en
* ETS applicatie op de mobiele telefoon starten.


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.
Om de GSM in te schakelen moet de powerknop 3 seconden ingedrukt worden. De GPS gaat vanzelf aan als hij stroom krijgt.


Bronnen:
Het automatisch starten van Java software is nogal lastig: hiervoor moeten drie knoppen ingedrukt worden. Daarna moet er nog één keer een knop ingedrukt worden om de software te authorizeren om internet te gebruiken. Voor dit alles zijn twee verschillende knoppen nodig. Deze worden bediend door elektronisch schakelaars die parallel aan de GSM knoppen zijn gesoldeerd en door een microcontroller electrisch worden aangestuurd.
* http://www.clickapps.com/moreinfo.htm?pid=1341&section=J2ME&r=dway
* http://developers.sun.com/mobility/midp/articles/pushreg/
* [http://wiki.forum.nokia.com/index.php/KIJ000394_-_PushRegistry_confirmation_on_Series_40_MIDlets PushRegistry confirmation on Series 40 MIDlets]


Mogelijke andere opties zijn:
==== Elektronische aanpassingen aan de GSMknoppen ====
# Altijd aanlaten; hiervoor is een extra accu nodig omdat in de standby stand BT nog aan staat en veel stroom eet.
[[Afbeelding:Nokia 7250i open.jpg|thumb|300px|right|Opengewerkte Nokia 7250i]]
# Elektronisch starten door aan de knoppen te solderen.
# Mechanisch starten door de knoppen in te drukken.


Uiteindelijke bleek dat optie 2 de korste slag was.
In de afbeelding rechts zie je een opengemaakte Nokia 7250i, waarbij het printje met de knoppen te zien is. De knoppen zijn heel eenvoudige maak contactjes bestaande uit twee ringetjes die met elkaar moeten worden verbonden. 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 onderstaande figuur verduidelijkt een en ander. Voor het schakelen van een knop kan heel simpel een optocoupler gebruikt worden, die de twee ringen als het ware kortsluit. De ingang van de optocoupler zit dan aan een microcontroller uitgang. (Transistoren werken niet omdat er dan een gemeenschappelijke massa gemaakt moet worden.)


[[Afbeelding:Nokia_keypad_7250i.jpg|thumb|300px|centre|Elektrisch schema achter het keypad van de Nokia 7250i. Optcocouplers worden gebruikt om de 2 ringen kort te sluiten waardoor die bewuste toets wordt bediend.]]


=== Elektronische aanpassingen ===
De toetsen waaraan gesoldeerd is kunnen niet meer op de oude manier bediend worden. Om toch ook nog handmatige bediening mogelijk te maken (bijvoorbeeld voor het wijzigen van telefoon instellingen en het doen van software updates) is er parallel aan elke optocoupler ook nog een externe drukschakelaar gesoldeerd.
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.  


[[Afbeelding:Nokia 7250i open.jpg|thumb|300px|centre|opengewerkte nokia 7250i]]
Door gebruik te maken van de snelkeuze functies zijn er 3 knoppen nodig om de ETS te bedienen, namelijk:
* de GSM powerknop,
* de linker keuzetoest en
* de selecttoest.


Om op te starten worden deze op de volgende manier aangestuurd:
{| {{prettytable}}
|-
! Knop || Ingedrukt gedurende (s) || Actie
|-
| Powerknop || 3 || Telefoon gaan aan.
|-
| || ||Wachten tot de GSM opgestart is.
|-
| Keuzetoets || 0,1 || Snelkeuze opties komen in beeld, 'verzameling' staat boven aan.
|-
| || || Wachten tot het menu geopend is.
|-
| Selecttoets || 0,1 || Map 'verzameling' wordt gekozen.
|-
| || || Wachten tot de map geopend is.<br/>
|-
| Selecttoets || 0,1 || EurosTrack programma wordt gestart.
|-
| || || Wachten tot netwerktoegang gevraagd wordt.
|-
| Keuzetoets || 0,1 || Netwerktoegang wordt bevestigd.
|-
|}


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 optocoupler gebruikt worden, die de twee ringen als het ware kortsluit. De ingang van de optocoupler zit dan aan een microcontroller uitgang. Hier heb ik even mee geëxperimenteerd in dit werkt uitstekend. (PS in eerste instantie gebruikten we transistoren maar dat kan niet omdat er dan een gemeenschappelijke massa gemaakt moet worden)
Om de ETS uit te zetten wordt gewoon de powerknop weer 3 seconden ingedrukt.
 
[[Afbeelding:Nokia_keypad_7250i.jpg|thumb|300px|centre|elektrisch schema achter het keypad van de nokia 7250i. Optcocouplers worden gebruikt om de 2 ringen kort te sluiten waardoor die bewuste toets wordt bedient.]]
 
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 er parallel aan de GSM zijde van de microcontroller nog externe drukschakelaars geplaatst.
 
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
 
 
[[Afbeelding:Aanuitgsm.JPG|thumb|300px|centre|schema met uC?]]
Beschrijving uC programma:<br/>
If:<br/>
IO1(sense): 0>1<br/>
then:<br/>
IO2(powerknop) > 'aan' op tijdstip 0-3 seconden (telefoon gaan aan)<br/>
IO3(keuzetoets) > 'aan' op tijdstip 20-20.1 seconden (snelkeuze opties komen in beeld; 'verzameling' staat boven aan)<br/>
IO4(selecttoets) > 'aan' op tijdstip 22-22.1 seconden (map 'verzameling' wordt gekozen)<br/>
IO4(selecttoets) > 'aan' op tijdstip 25-25.1 seconden (start eurostrack programma)<br/>
 
IO3(keuzetoetse) > 'aan' op tijdstip 28-28.1 seconden (bevestig netwerktoegang)<br/>
 
<br/>
If:<br/>
IO1(sense): 1>0<br/>
then:<br/>
IO2(powerknop) > 'aan' op tijdstip 0-2 seconden (telefoon gaan uit)<br/>
<br/>
 
<br/>
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.  
 
=== Microcontroller algoritme ===


De microcontroller heeft de volgende taken:
==== Microcontroller ====
De micro-controller is een [http://www.atmel.com/dyn/resources/prod_documents/DOC2543.PDF Atmel Attiny2313] (willekeurig gekozen uit de onuitputtelijke voorraad van Gart). Deze heeft de volgende taken:
* De telefoon aan zetten en het ETS programma opstarten zodra de massapik omgezet wordt.
* De telefoon aan zetten en het ETS programma opstarten zodra de massapik omgezet wordt.
* De telefoon uitzetten als de massapik er <s>langer dan een bepaalde tijd</s> af is.
* De telefoon uitzetten als de boordspanning 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:
De telefoon wordt niet direct uitgezet als de spanning er af gaat, omdat dan het omschakelen op walstroom er voor zou zorgen dat het systeem even uit gaat. Om te beslissen welke actie het systeem moet ondernemen, is het nodig te weten of het systeem aan of uit zou moeten zijn en wat de huidige status van het systeem (dus de telefoon) is. De benodigde invoer is dus:
* Massapik status
* de aanwezigheid van boordspanning en
* Telefoon status
* de status van de telefoon.


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.
De microcontroller hoeft dus alleen maar iets te doen aan het begin en aan het eind van een evenement. In de tussentijd wordt deze in de slaapstand gezet om stroomverbruik te beperken. De boordspanning van de EH dient als interrupt om de uC uit de slaapstand te halen. Zodra de uC wakker wordt, gaat deze kijken wat er moet gebeuren: alleen als er boordspanning is, zou het systeem aan moeten zijn. Om niet bij elke omschakeling naar walstroom de hele ETS opnieuw op te starten, wordt de telefoon pas uitgeschakeld als de boordspanning er minstens 1 minuut af is.


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.
Om debuggen tijdens het ontwerpen en later op de EH te vergemakkelijken is er een controle LED geplaatst. De geeft de status van het programma weer d.m.v. van een knippercode. De led is altijd aan zolang de uC niet slaapt, maar geeft m.b.v. de signalen IQ(1), IQ(2) of IQ(3) aan wat hij van plan is te doen (zie paragraaf [[#IO|IO]] voor meer informatie over deze knippercode).
<br/>
<br/>
We hebben ween Atmel attiny2313 uC:<br/>
http://www.atmel.com/dyn/resources/prod_documents/DOC2543.PDF<br/>


We hebben een aantal pinnen van de uC nodig:<br/>
===== Boordspanning status =====
'''Voeding:'''<br/>
Er is een pin om te kijken of de EH boordspanning aan is, dit is tevens een interrupt pin om uit de slaapstand te komen.
PIN 20 - Vcc - voeding microcontroller<br/>
De maximale spanning op een IO poort is: Vcc+0,5 Volt. Er wordt een spanningsdeler van twee weerstanden gebruikt om de 12 volt voeding vanuit de EH om te zetten naar 3,7 volt. Om ook de uC wakker te krijgen, moeten we een Pin Change Interrupt hebben, dus gebruiken we poorten "PCINTO(n)".
PIN 10 - GND - massa microcontroller<br/>


'''Comperator: (kijkt of de telefoon aan is. die 2.7v op de "Vout" van de telefoon is waarschijnlijk te laag om als IO te dienen, vandaar de comperator)'''<br/>
===== Telefoonstatus =====
PIN 12 - positieve ingang comparator - AIN0 -  naar niets: (interne) referentie spanning (1.1 volt)<br/>
Het vervelende is dat de telefoon geen pin heeft die eenduidig aangeeft of de telefoon aan of uit staat. Als de telefoon niet aan de lader hangt, bestaat zo'n pin wel. Hangt de telefoon echter wel aan de lader, dan geeft deze pin altijd spanning, ook als de telefoon uit staat. Of de lader wel of geen spanning heeft, wordt bij ons systeem bepaald door de massapik. Het systeem kan hier dus geen invloed op uitoefenen en moet zowel met als zonder laderspanning de status van de telefoon kunnen bepalen. Als oplossing hiervoor gebruiken we twee ingangen:
PIN 13 - negatieve ingang comperator - AIN1 - naar GSM 'Vout' <br/>
* We zetten de achtergrond LED verlichting van de telefoon op 'altijd aan' zolang de telefoon aan de lader zit. Hierdoor kunnen we, als er boordspanning op de EH is, de status van de telefoon uitlezen door te kijken of er spanning over de LEDs staat.
* Een bepaalde pin geeft, als de massapik eraf is, een spanning van 2,7 volt als de telefoon aan is en 0 als de telefoon uit is. Hiermee kunnen we dus de telefoonstatus uitlezen als er geen boordspanning is.
Aangezien de uC weet of er boordspanning is of niet, kan met deze twee signalen de telefoonstatus op ieder moment worden gecontroleerd.


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.
Beide signalen tappen we via een buffer af en sturen die de uC in. Omdat de buffer niet nodig is als de uC in de slaapstand zit, wordt de voeding van de buffer ook vanuit de uC geregeld.
De LED spanning is rond de 3 volt, hiermee kan dus rechtstreeks een IO poort bediend worden.
De 2,7 volt van de lader pin is te laag om een IO poort mee te bedienen, dus dat doen we via de interne comparator van de uC.<br/>
Opmerking: De interne referentiespanning kan alleen op AIN0 ingesteld worden. Dit betekent dat de telefoon op de negatieve AIN1 moet. Hierdoor werkt het bitje geïnverteerd. Geen probleem maar wel ff opletten in de software.<br/>


<br/>
===== Voeding =====
We voeden de uC vanuit de telefoon batterij, dus 3,7 volt.<br/>


'''IO voor om te kijken of de EH boordspanning aan is, tevens INTERRUPT pin om uit de slaapstand te komen:'''<br/>
===== IO =====
We moeten een Pin Change Interrupt hebben > dus poorten "PCINTO(n)"<br/>
De uitvoer bestaat uit 3 poorten om de GSM toetsen aan te sturen, 1 uitgang voor de controle/status led en 1 uitgang voor de voeding van de buffer IC.
PIN14 - IO - ingang - PB2/PCINT2 <br/>
<s>PIN 6 - IO ingang - PD2/INT0 - </s><br/>
<s>PIN 12 - IO ingang - PB0/PCINT0 (maar deze pin hebben we al nodig voor de comperator) is omgezet naar INT0</s><br/>


'''IO om de knoppen aan te sturen:'''<br/>
Een overzicht van de uC pinbezetting:
PIN 7 - IO uitgang - PD3 - naar optocoupler Aan/uit knop<br/>
{| {{prettytable}}
PIN 8 - IO uitgang - PD4 - naar optocoupler keuze knop<br/>
|-
PIN 9 - IO uitgang - PD5 - naar optocoupler select knop<br/>
!Pin || Name || Function
|-
|2 || PD0 || Uitgang naar controle/status indicatie LED
|-
|3 || PD1 || Uitgang naar voeding naar buffer IC
|-
|7 || PD3 || Uitgang naar selectknop
|-
|8 || PD4 || Uitgang naar keuze knop
|-
|9 || PD5 || Uitgang naar aanuitknop
|-
|10 || GND || massa microcontroller
|-
|12 || AIN0 || positieve ingang comparator; naar interne referentie spanning (1.1 volt)
|-
|13 || AIN1 || negatieve ingang comparator; naar de 'lader connector' (via buffer IC)
|-
|14 || PB2 || ingang vanaf telefoon achtergrond LED (via buffer IC met afvlak condensator), werkt alleen als de massapik erop zit
|-
|15 || PB3/PCINT3 || ingang vanaf spanningsdeler EH voeding
|-
|20 || Vcc || voeding microcontroller vanuit GSM accu
|-
|}


<s>DEZE PIN OUT IS NOG NIET DOORGEVOERD IN DE ONDERSTAANDE SCRIPTS!!</s>
[[Afbeelding:ETSschema.jpg|thumb|300px|right|Elektrisch schema om de uC aan te sluiten]]
<br/><br/>


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.
Het systeem heeft het schema dat is weergegeven in de afbeelding rechts. Hierin worden de volgende onderdelen gebruikt:
* Microcontroller: Atmel Attiny 2313.
* Buffer: LM324N.
* Optocoupler: CNY17F.


De code die de uC draait is te vinden [[#code_micro-controller|in de bijlage]].


<br/><br/>
===== Status-LED =====
Hardware test script<br/>
De status van de microcontroller wordt door door middel van een rode LED weergegeven. Deze LED is aan zolang de microcontroller draait, tenzij deze slaapt. De LED geeft de status van het systeem aan met een van de volgende lichtkarakters (1× knipperen betekent LED 1× uit):
* Bij het opstarten gaat de aan/uit knop ff aan, daarna de keuze knop en daarna de selectknop.<br/>
{| {{prettytable}}
* Bij signaal "EH voeding" aan moet de selectknop aan gaan<br/>
|-
<br/>
! Code || Status-LED || Uitleg
Getest: werkt!
|-
<br/>
| || aan || uC is wakker en is aan het wachten of een routine uitvoeren
'''LET OP: Hier wordt nog een verkeerde poort voor het EH voedingssignaal gebruikt!'''
|-
<pre>
| || uit || uC slaapt
#include <avr/io.h>
|-
#include <avr/interrupt.h>
| IQ(1) || knippert 1× || ETS gaat worden opgestart
#include <avr/sleep.h>
|-
#include <util/delay.h>
| IQ(2) || knippert 2× || ETS gaat worden uitgezet
|-
| IQ(3) || knippert 3× || uC gaat in de slaapstand
|-
|}


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


// PD3 PIN7 = aanuitknop
=== Voeding ===
// PD4 PIN8 = keuze knop
Het hele ETS systeem wordt met 12 volt gevoed. Dit omdat we dan 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 is de 12 volt verbonden met:
// PD5 PIN9 = selectknop
* Via een diode met de GSM adapter (om te voorkomen dat er stroom vanuit de GSM accu door de lader terug gaat lopen)
* De GPS ontvanger adapter


Naast de voeding van de EH hebben de mobiele telefoon en GPS-ontvanger ook een interne accu. Hier kan het systeem ook op draaien. Hierbij moet de ETS handmatig opgestart worden met de externe toetsen en de uC moet uitgeschakeld worden anders gaat die de telefoon weer uitzetten. Het uitzetten van de uC kan eenvoudig door de 'laderplug' uit de telefoon te halen. Laden hoeft immers toch niet en de uC heeft zo geen massa en dus geen voeding meer.


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
=== Behuizing ===
PORTB = 0; // geen pull-up aan
De behuizing is een Curver trommel. Lekker 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 zitten:
* Mobiele telefoon met externe knoppen en kabels.
* GPS muis.
* Microcontroller PCB.
* 2x adapter PCB voor voeding GPS en GSM.
* Opvulling.


// PCMSK = (1 << INT0); // activeer INT0 (PB2) voor pin-change detectie
[[Afbeelding:ETSuitgeklapt.jpg|thumb|300px|centre|ETS onderdelen in werkelijkheid]]
// GIMSK = (1 << PCIE); // schakel pin-change interrupt in
[[Afbeelding:ETSinbehuizing.jpg|thumb|300px|centre|ETS in zijn behuizing]]
 
// 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;


== Software ==
===Howto software op de GSM installeren===
Met de [http://europe.nokia.com/get-support-and-software/download-software/nokia-pc-suites/compatibility-and-download#163 Nokia Suite] (zie ook de [http://nds1.nokia.com/files/support/global/phones/software/Nokia_PC_Suite_UG_dut.pdf handleiding]) 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.
   
   
}
Communicatie kan via IR, bluetooth of een kabel. Bij het installeren met behulp van Nokia Suite, moet er op gelet worden dat het .jad bestand (dat door de compiler aangemaakt wordt) 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, in dat geval moet je het gewoon nog een keer proberen.


=== ETS software ===
Steven heeft het programma [http://www.qcontinuum.org/gpstrack/ 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.


/*
Na het installeren moeten de toegangsrechten van connectiviteit van het ETS programma nog even ingesteld worden op 'altijd toestaan'.
* Hoofdprogramma
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 wordt daarom direct data (0kb) verstuurd 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'.
*/
int main()
{
  init();


//poorten testen
'''Features'''
PORTD |= (1 << PD3); // Activeer aan/uit knop
* Bij opstarten direct GPRS verbinden zoeken zodat dit bevestigd kan worden door de uC .
_delay_ms(500);
* Zo min mogelijk bevestigen bij opstarten.
PORTD &= ~(1 << PD3); // Deactiveer aan/uit knop
* GPS apparaat keuze.
_delay_ms(100);
* Optie om boot te kiezen.
* Logtijd variabel.
* Upload tijd variabel.
* Minimale verplaatsing variabel.
* Tijd meesturen (vaste tijdzone).
* Meetpunten meesturen.
* Bufferen als er geen GPRS netwerk is.
* Bluetooth verbinding opnieuw opzetten als de bluetooth communicatie uitvalt.


PORTD |= (1 << PD4); // Activeer keuzeknop
Gewenst:
_delay_ms(500);
* Niet belangrijke meetpunten uitfilteren (bv: alle tussenliggende punten van een rechte lijn, of alleen als de koers verandert).
PORTD &= ~(1 << PD4); // Deactiveer keuze knop
_delay_ms(100);


PORTD |= (1 << PD5); // Activeer selectknop
'''Interessante situaties'''
_delay_ms(500);
* Wat gebeurt er als er geen GPS aanwezig is?
PORTD &= ~(1 << PD5); // Deactiveer select knop
** De ETS software merkt dit na een time-out, en gaat dan opnieuw een verbinding proberen op te zetten.
_delay_ms(100);
* 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?
** Het verzenden mis, waarna de niet verzonden coördinaten bij de volgende zendpoging alsnog worden verzonden.
* Wat gebeurt er als we op een buitenlandse netwerken zitten?
** Simyo biedt in het buitenland geen GPRS aan, dus gebeurt er hetzelfde als bij het vorige punt en hoeven we niet bang te zijn voor hoge kosten.
* Wat gebeurt er als de GSM gebeld wordt?
** De software draait gewoon door, als je afsluit zie een gemist bericht. Bellen tijdens de opstartprocedure zou misschien problemen kunnen veroorzaken, maar de kans dat precies dan wordt gebeld is zeer klein.


=== Broncode ===
Steven heeft de ETS broncode, Helmich en Gart hebben een backup.


= In Enschede=
De data die de GSM upload is dus helemaal gestript. Geen poespas, alleen de bootletter, UTC-tijd en GPS-lokatie. De server in Enschede haalt deze data weer uit elkaar en verwerkt het in een database.


De server regelt o.a. de volgende dingen:
while(1) // oneindige loop
* Opslaan ontvangen data in database
{
* Er wordt een nieuw track gedefinieerd als er 45 minuten lang geen data binnen gekomen is
* Interfacing naar de ETS waterkaart
if (bit_is_set(PIND, PD2))    // voeding is aan
{
PORTD |= (1 << PD5);  //selectknop aan
}


if (bit_is_clear(PIND, PD2))  //voeding is uit
= Ontwerpbeslissingen =
{
Hier zullen de belangrijkste keuzes die gedaan zijn bij het maken van het systeem beschreven worden.
PORTD &= ~(1 << PD5);  //selectknop uit
}


    }
== GPRS ==
   
Het gebruik van SMS is veel makkelijker dan het gebruik van GPRS, aangezien het vanaf een microcontroller mogelijk is om direct SMS berichten te versturen. Voor GPRS is dat een stuk lastiger. GPRS is echter vele malen goedkoper, omdat we zeer weinig data versturen: 10 bytes per coördinaat. Naar schatting zou SMS rond de 50 euro per jaar kosten, waar we met GPRS aan 1 à 2 euro genoeg zouden moeten hebben voor een vaarseizoen.
  return 0;
}
</pre>


<br/><br/><br/>
== Java op de telefoon ==
comperator test script.  >> comparator werkt op deze manier<br/>
Voor het versturen van de data zijn vier verschillende mogelijkheden:  
Comperator is ingesteld met interne referentie spanning op de positieve ingang. GSM Vout signaal komt op de negatieve ingang.<br/>
# door Java op de telefoon,
De juiste bit wordt wel uitgelezen, met AVR studio was het niet mogelijk(?) om de comperator zelf te testen.<br/>
# door andere software op de telefoon,
Zo geprogrammeerd dan de led van de aanuitknop aan moet gaan aan als de GSM aan is.<br/>
# door de microcontroller of
<br/>
# door een PC.
Getest: werkt!
<br/>
'''LET OP: Hier wordt nog een verkeerde poort voor het EH voedingssignaal gebruikt!'''
<pre>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>


// PD2/INT0 PIN6 = EH voedingssignaal
Optie 2 is mogelijk bij een open source besturingssysteem op de telefoon (bijvoorbeeld Symbian) of een telefoon die toestaat software te draaien waarop geen veiligheidsrestricties van toepassing zijn. Helaas gaat dit alleen met de duurdere telefoons en was het voor ons geen optie.
// PB1/AIN0 PIN13 = GSM Vout signaal


// PD3 PIN7 = aanuitknop
Het gebruiken van de telefoon als GPRS modem zou niet moeilijk moeten zijn vanaf een PC. Het gebruik van een PC kost echter te veel ruimte en stroom om in de EH in te bouwen, aangezien we geen dure PC willen aanschaffen. Vanaf een microcontroller is hetzelfde mogelijk, maar lastig te implementeren. Dit komt omdat een telefoon slechts de mogelijkheid biedt om een PPP verbinding op te zetten, waarover de microcontroller dat nog zelf een TCP/IP stack moet opzetten. Dus vallen optie 3 en 4 ook af.
// PD4 PIN8 = keuze knop
// PD5 PIN9 = selectknop


Uit het voorgaande kunnen we concluderen dat optie 1 het beste is, aangezien het gebruik van Java op de telefoon de makkelijkste optie is.


void init() // Initialisatie poorten timer en interrups
== Starten m.b.v. microcontroller ==
{
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.
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);
 


Met behulp van de Push Registry is het wel mogelijk om de applicatie te starten bij een inkomende event, bijvoorbeeld een SMS of een vooraf ingesteld alarm. Helaas vraagt de Nokia uit Series 40 platform de gebruiker elke keer om bevestiging voor het programma echt gestart wordt door een Push-actie. Voor ons is dit dus geen handige optie.


while(1) // oneindige loop
Mogelijke andere opties waren:
{
# Altijd aanlaten; maar hiervoor was het stroomverbruik te hoog.
# Mechanisch starten door de knoppen in te drukken, maar dat leek een beetje omslachtig
if (bit_is_set(ACSR, ACO))    // GSM is uit  (poort werk geinventeerd)
# Elektronisch schakelaars aan de knoppen solderen en deze m.b.v. een microcontroller (uC) elektrisch aan sturen.
{
PORTD &= ~(1 << PD3);  //PD3 uit
}


if (bit_is_clear(ACSR, ACO))  // GSM is aan  (poort werk geinventeerd)
Uiteindelijke bleek de laatste optie het handigst.
{
PORTD |= (1 << PD3);  //PD3 aan
}


= Doorontwikkelingsinfo =


    }
In dit deel staat nog informatie die wij gewonnen hebben en niet direct van toepassing is op het huidige systeem, maar misschien nog nuttig is voor een opvolger/alternatief.
   
  return 0;
}
</pre>
<br/><br/><br/>


== Opties ==


=== IR in plaats van Bluetooth ===


Mogelijke optie is om GPRS GSM + IR GPS te gebruiken. Voor ongeveer 10 euro kunnen we misschien de seriële TTL GPS van Willem ombouwen naar IR (kennis nodig). Zie onderaan op [http://www.lirc.org/receivers.html http://www.lirc.org/receivers.html].


Sleepfunctie code:<br/>
In het GPS tracking programmaatje op de 6230i kan je een optie 'seriële communicatie' kiezen inclusief baudrate etc. Daarna vraagt de telefoon of je verbinding via IR wil maken. Ziet er dus naar uit dat een verbinding via IR opgezet kan worden. Op deze site wordt dat beschreven: [http://www.trackr.eu/faq/ http://www.trackr.eu/faq/]
PCINT2 (PIN14) (=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.<br/>
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
<br/>
Getest: werkt!
<br/>
<pre>
#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);


Dit is relatief veel werk met een lage 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. Maar of het uit kan is de vraag, aangezien de telefoon sowieso geen power management doet als deze aan de lader zit (wat bij ons continu het geval is), is het stroomverbruik waarschijnlijk lastig te beperken.
   
   
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.


while(1) // oneindige loop
=== Gerelateerde linkjes ===
{


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


if (bit_is_set(PINB, PB2))  // voeding is aan
Standaardmodule voor dit soort werk:
{
* [http://www.telit.com/en/products.php?p_id=3&p_ac=show&p=7 Telit GM826-GPS]. Kost zo'n 60$ op Ebay US. Aansturing kan dan via [http://www.telit.com/module/infopool/download.php?id=542 AT extensies] met een m/c, of direct op het ding zelf in [http://www.telit.com/module/infopool/download.php?id=617 python].
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
Linkjes naar IR naar TTL/RS232 converters:
_delay_ms(200);
(Belangrijkste is de conversie van IR naar TTL/RS232. De conversie van RS232 naar TTL is alleen een spanningsniveau conversie.)
PORTD &= ~(1 << PD5);  //selectknop uit
* http://www.tildesign.nl/content/downloads/icl3221_datasheet.pdf<br/>
* http://www.edaboard.com/ftopic84368.html<br/>
slapen_gaan(); //we zijn klaar, hop in de slaapstand
* http://www.maxim-ic.com/appnotes.cfm/an_pk/3024<br/>
}


else //voeding is uit, dus geen actie
Info over de telefoons:
{
* http://gathering.tweakers.net/forum/list_messages/1186709///gprs%2Cgsm%2Cals%2Cmodem<br/>
PORTD = 0; // alles uit
* http://gathering.tweakers.net/forum/list_messages/1079840?data%5Bfilter_keywords%5D=installeren&data%5Bboolean%5D=AND<br/>
_delay_ms(2000);
* http://www.a-netz.de/nokia6230port.en.php<br/>
slapen_gaan(); // hop in de slaapstand
* http://pinouts.ru/CellularPhones-Nokia/nokia_pop_pinout.shtml<br/>
}


Pushregistery:
* http://www.clickapps.com/moreinfo.htm?pid=1341&section=J2ME&r=dway
* http://developers.sun.com/mobility/midp/articles/pushreg/
* [http://wiki.forum.nokia.com/index.php/KIJ000394_-_PushRegistry_confirmation_on_Series_40_MIDlets PushRegistry confirmation on Series 40 MIDlets]


    }
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
  return 0;
}


</pre>
Toepasbare software:
<br/><br/>
* 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


 
= Bijlagen =
BETA!!  Complete code:<br/>
== Code micro-controller ==
In de uC hebben we de volgende code geknald:<br/>
'''Let er bij AVR studio op dat je ook daad werkelijk de juiste HEX file upload. Dat moet je nog apart instellen bij de programmer opties.'''
<pre>
<pre>
#include <avr/io.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/sleep.h>
#define F_CPU 1000000UL  // 1 MHz
#include <util/delay.h>
#include <util/delay.h>


// PB2/PCINT2 PIN14 = EH voedingssignaal (PINB, PB2)
// PB1/AIN0 PIN13 = GSM Vout signaal
// Comperator uitgang = (ACSR, ACO)


// PD3 PIN7 = aanuitknop
// PB3/PCINT3 PIN15 = EH voedingssignaal
// PB2/PCINT2 PIN14 = GSM Led, werkt alleen als er voeding is
// PB1/AIN0 PIN13 = GSM lader, werkt alleen als er geen voeding is, via comparator
// Comparator uitgang = (ACSR, ACO)
 
// PD0 PIN2 = controle led
// PD1 PIN3 = buffer
// PD3 PIN7 = selectknop
// PD4 PIN8 = keuze knop
// PD4 PIN8 = keuze knop
// PD5 PIN9 = selectknop
// PD5 PIN9 = aanuitknop




void init() //Initialisatie poorten timer en interrups
void init() //Initialisatie poorten timer en interrups
{
{
DDRD = 0x78; // PORTD PD3-PD6 als uitgang; PORTD PD0-PD2 als ingang
DDRD = 0x7f; // PORTD PD0-PD6 als uitgang
PORTD = 0; // Zet alle uitgangen laag (geen pull-up aan)
PORTD = 0; // Zet alle uitgangen laag (geen pull-up aan)
DDRB = 0; // PORTB PB0-PB7 volledig als ingang
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
PCMSK = (1 << PCINT3); // stel: PCINT3 (PB3) in op pin-change detectie
GIMSK = (1 << PCIE); // schakel pin-change interrupt in
GIMSK = (1 << PCIE); // schakel pin-change interrupt in


Regel 627: Regel 464:
cli(); //globale interrupt uitschakelen
cli(); //globale interrupt uitschakelen


PORTD |= (1 << PD1); // buffer aan
PORTD |= (1 << PD0); // statusled aan
}
}


Regel 638: Regel 477:
sleep_cpu();  // slaapstand
sleep_cpu();  // slaapstand
sleep_disable();  // slaap modus toestaand uitzetten als de uC weerwakker wordt (voorkomt onverwachts in slaapmodus)
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
// na de slaapstand is de uC uitgeweest en begint opnieuw aan het hoofdprogramma
}
}




void delay_long() // Create long delay for 15 sec
void delay_long() // Create long delay for 20 sec
{
{
_delay_ms(5000); // wait 5 sec
_delay_ms(5000); // wait 5 sec
_delay_ms(5000); // wait 5 sec
_delay_ms(5000); // wait 5 sec
_delay_ms(5000); // wait 5 sec
Regel 652: Regel 491:




void gsm_off() //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() //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.
{
{
PORTD |= (1 << PD3); // Activeer aan/uit knop gedurende 3 sec
PORTD |= (1 << PD5); // Activeer aan/uit knop gedurende 3 sec
_delay_ms(3000);
_delay_ms(3000);
PORTD &= ~(1 << PD3); // Deactiveer aan/uit knop
PORTD &= ~(1 << PD5); // Deactiveer aan/uit knop
delay_long(); // Wacht tot GSM daadwerkelijk uit is
delay_long(); // Wacht tot GSM daadwerkelijk aan of uit is
}
}




void gsm_start() //Turn the GSM on and start the program.  
void ets_start() //Turn the GSM on and start the program.  
{
{
PORTD |= (1 << PD3); // Activeer aan/uit knop gedurende 3 sec
PORTD |= (1 << PD4); // Activeer keuze knop gedurende 0.1 sec om snelkeuze opties te kiezen
_delay_ms(3000);
PORTD &= ~(1 << PD3); // Deactiveer keuze knop
delay_long(); // wacht tot 20 sec
_delay_ms(1900);
PORTD |= (1 << PD4); // Activeer keuze knop gedurende 0.1 sec
_delay_ms(100);
_delay_ms(100);
PORTD &= ~(1 << PD4); // Deactiveer keuze knop
PORTD &= ~(1 << PD4);
_delay_ms(1900); // wacht 2 sec voor openen snelkeuze menu
_delay_ms(1900); // wacht tot 22 sec
 
PORTD |= (1 << PD5); // Activeer select knop gedurende 0.1 sec
PORTD |= (1 << PD3); // Activeer select knop gedurende 0.1 sec om verzamel map te openen
_delay_ms(100);
_delay_ms(100);
PORTD &= ~(1 << PD5); // Deactiveer select knop
PORTD &= ~(1 << PD3); // Deactiveer select knop
_delay_ms(2900); // wacht 3 sec voor openen verzamelmap
_delay_ms(2900); // wacht tot 25 sec
 
PORTD |= (1 << PD5); // Activeer select knop gedurende 0.1 sec
PORTD |= (1 << PD3); // Activeer select knop gedurende 0.1 sec om ets programma te starten
_delay_ms(100);
_delay_ms(100);
PORTD &= ~(1 << PD5); // Deactiveer select knop
PORTD &= ~(1 << PD3); // Deactiveer select knop
_delay_ms(2900); // wacht 3 sec voor starten programma en tot netwerktoegang gevraagd wordt


_delay_ms(2900); // wacht tot 28 sec
PORTD |= (1 << PD4); // Activeer keuze knop gedurende 0.1 sec om netwerktoegang te bevestigen
PORTD |= (1 << PD4); // Activeer keuze knop gedurende 0.1 sec
_delay_ms(100);
_delay_ms(100);
PORTD &= ~(1 << PD4); // Deactiveer keuze knop
PORTD &= ~(1 << PD4); // Deactiveer keuze knop
Regel 690: Regel 523:




void led(int i) {
for (; i > 0; i--) {
PORTD &= ~(1 << PD0);
_delay_ms(500);
PORTD |= (1 << PD0);
_delay_ms(500);
}
_delay_ms(1000);
}




Regel 699: Regel 541:
init();
init();


 
_delay_ms(6000); // wacht 6s voor stabilisatie
if (bit_is_clear(ACSR, ACO))  // de GSM is nog aan(comperator poort werk geinventeerd), eerst uitzetten
{
gsm_off(); // schakel de GSM uit
}
 


// Oneindige loop
// Oneindige loop
while (1)  
while (1)  
{
{
if (bit_is_clear(PINB, PB2) && bit_is_clear(ACSR, ACO)) // Voeding=uit & GSM=aan > GSM uitzetten
if (bit_is_clear(PINB, PB3) && bit_is_clear(ACSR, ACO)) // Voeding is uit en GSM lader is aan: GSM uitzetten
{
gsm_off(); // schakel GSM uit
}
else if (bit_is_set(PINB, PB2) && bit_is_set(ACSR, ACO))  // Voeding=aan & GSM=uit > zet de GSM aan
{
{
gsm_start(); // Start de ETS op
led(1);
// Wacht voor omzetten walstroom
for (int i = 0; i < 10; i++) {
_delay_ms(6000);
}
if (bit_is_clear(PINB, PB3) && bit_is_clear(ACSR, ACO)) // Voeding is uit en GSM lader is aan: GSM uitzetten
{
gsm_onoff(); // schakel GSM uit
}
}
else if (bit_is_set(PINB, PB3) && bit_is_clear(PINB, PB2))  // Voeding is aan en GSM led is uit: GSM aanzetten
{
led(2);
gsm_onoff(); // schakel GSM in
ets_start(); // Start de ETS op
}
}
else // Alles is in orde, dus ga lekker slapen
else // Alles is in orde, dus ga lekker slapen
{
{
led(3);
slapen_gaan(); // hop in de slaapstand
slapen_gaan(); // hop in de slaapstand
}
}
}
}


return 0;
return 0;
}
}
</pre>
</pre>
 
.
<br/>
 
===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
<br/>
 
===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.
<br/>
<br/><br/>
 
 
 
 
==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===
<br/><br/>
 
 
=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:<br/>
handleiding:<br/>
http://nds1.nokia.com/files/support/global/phones/software/Nokia_PC_Suite_UG_dut.pdf<br/>
software:<br/>
http://europe.nokia.com/get-support-and-software/download-software/nokia-pc-suites/compatibility-and-download#163<br/>
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. :) <br/>
 
 
 
=== ETS software ===
Steven heeft het programma [http://www.qcontinuum.org/gpstrack/ 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)
<br/>
 
 
 
'''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===
 
 
 
 
<br/><br/>
==Statisch in Enschede==
===Features===
===Howto===
===Broncode===
 
 
<br/><br/>
=Testing=
 
'''Zaterdag 16mei (introweekend):<br/>'''
* logtijd: 30 seconden<br/>
* logafstand: 50 mtr<br/>
* uploadtijd: 15 min<br/>
* GPSlokatie: aan de zijwand van de roef, vlakbij de radio (3-5 satellieten)<br/>
* GSMlokatie: in de roef, in het vakje onder de radio<br/>
Commentaar:<br/>
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.<br/>
<br/>
'''Zondag 17mei(introweekend):<br/>'''
* logtijd: 30 seconden<br/>
* logafstand: 10 mtr<br/>
* uploadtijd: 15 min<br/>
* GPSlokatie: in de voorkant van de koekkoek (9-10 satellieten)<br/>
* GSMlokatie: in de roef, in het vakje onder de radio<br/>
Commentaar:<br/>
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.<br/>
 
'''Ma 18 mei 23.25h'''
* logtijd: 30 seconden<br/>
* logafstand: 20 mtr<br/>
* uploadtijd: 15 min<br/>
* GPSlokatie: raam stud.k. helmich (4-8 satellieten)<br/>
* GSMlokatie: studeerkamer<br/>
Commentaar:<br/>
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<br/>
* logafstand: 50 mtr<br/>
* uploadtijd: 15 min<br/>
* GPSlokatie: raam stud.k. helmich (4-8 satellieten)<br/>
* GSMlokatie: studeerkamer<br/>
Commentaar:<br/>
4 pnt. upload over de hele nacht. Zie verhaal bij vorige test
 
 
'''Di 19 mei 0800h (vervolg meting)'''
* logtijd: 30 seconden<br/>
* logafstand: 50 mtr<br/>
* uploadtijd: 15 min<br/>
* GPSlokatie: raam stud.k. helmich (4-8 satellieten)<br/>
* GSMlokatie: studeerkamer<br/>
Commentaar:<br/>
Vervolg van de nacht. Om 0800h mee op reis naar almelo.
 
 
'''Di 19 mei 0915h (nieuwe meting)'''
* logtijd: 30 seconden<br/>
* logafstand: 50 mtr<br/>
* uploadtijd: 15 min<br/>
* GPSlokatie: raam kantoor (6-8 satellieten)<br/>
* GSMlokatie: kantoor<br/>
Commentaar:<br/>
Nieuwe meting.
<br/>
 
'''Wo 20 mei 0715h (nieuwe meting)'''
* logtijd: 30 seconden<br/>
* logafstand: 50 mtr<br/>
* uploadtijd: 15 min<br/>
* GPSlokatie: raam studeerkamer (xx satellieten)<br/>
* GSMlokatie: studeerkamer<br/>
Commentaar:<br/>
Nieuwe meting.<br/>
 
 
=Wensen=
* Snelheid meenemen in de routes
* Geen bluetooth maar kabel gebruiken (stroom besparing)
<br/><br/><br/>
 
=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. <br/>
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.<br/>
 
 
* 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:<br/><br/>
*GPRS GSM + IR GPS            > voor +/- 10euro de seriele TTL GPS van willem ombouwen naar IR (kennis nodig). >?>http://www.lirc.org/receivers.html (onderaan)<br/>
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/<br/> </s> 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.<br/>
 
taskmanagersoftware draaien op de GSM (dat kan niet op alle GSM's) zodat de tracker automatisch opstart bij bootup<br/>
 
===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)<br/>
http://www.tildesign.nl/content/downloads/icl3221_datasheet.pdf<br/>
http://www.edaboard.com/ftopic84368.html<br/>
http://www.maxim-ic.com/appnotes.cfm/an_pk/3024<br/>
 
 
 
====Mechanisch toetsen bedienen====
Mechanisch toetsen bedienen kan mbv een servo. (Iets als dit:[http://www.modelflight.com.au/buy_models/images/tt_ds1013_servo_a.jpg] 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:<br/>
http://gathering.tweakers.net/forum/list_messages/1186709///gprs%2Cgsm%2Cals%2Cmodem<br/>
http://gathering.tweakers.net/forum/list_messages/1079840?data%5Bfilter_keywords%5D=installeren&data%5Bboolean%5D=AND<br/>
http://www.a-netz.de/nokia6230port.en.php<br/>
http://pinouts.ru/CellularPhones-Nokia/nokia_pop_pinout.shtml<br/>
<br/>
Communicatie via datakabel:<br/>
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
<br/>
<br/>
Toepasbare software:<br/>
http://www.qcontinuum.org/gpstrack/<br/>
http://www.trackr.eu/faq/<br/>
http://www.trekbuddy.net<br/>
http://sportstracker.nokia.com/nts/main/index.do<br/>
http://gathering.tweakers.net/forum/list_messages/1115438/0<br/>
<br/>
Kant en klaar alternatief:<br/>
http://www.gpsshop.nl/product/56901/snooper-gps-tracker.html<br/>
(onbekend wat de operationele kosten zijn)
 
=Info die weg kan=
Oude optie zonder microcontroller:
[[Afbeelding:GSM OnOff schakeling.JPG|thumb|300px|centre|Helmichs bedachte schema voor: Automatisch GSM aan bij power on. Werking nog maar eens even checken :p]]
 
 
[[categorie:Ebenhaëzer]]
[[categorie:Ebenhaëzer]]
[[categorie:kluswiki]]
[[categorie:kluswiki]]

Huidige versie van 6 feb 2017 om 13:03

Het Ebenhaëzer Tracking System (ETS) was een systeem waarmee de actuele positie van de Ebenhaëzer gevolgd kon worden. Het systeem, gemaakt door Steven, Gart, Willem, Menno T en Helmich is gebaseerd op een Bluetooth GPS, oude mobiele telefoon en een microcontroller.

Het ETS is inmiddels niet meer in gebruik, maar sinds de aanschaf van een AIS-transponder is de Ebenhaëzer via diverse AIS-trackingwebsites te volgen. De bekendste is Marinetraffic.

De positie van de Ebenhaëzer werd, indien de boot voer, op vaste tijdsintervallen geregistreerd en via internet geüpload. Daarna was het mogelijk om de gevaren route via de ETS website te bekijken.

De precieze werking van het systeem wordt hieronder beschreven.

Doel

Het doel van het systeem is periodiek GPS coördinaten van de EH (later eventueel andere boten) te loggen en deze via een telefoon netwerk (GSM/GPRS/UMTS) doorsturen naar een internetserver. Als er geen GSM bereik is, dienen de coördinaten tijdelijk opgeslagen te worden tot er weer bereik is. Nadat de coördinaten verstuurd zijn, moet het voor iedereen mogelijk zijn om de positie en gevaren route op te vragen. Omdat we als studenten natuurlijk niks te makken hebben, moet er getracht worden de aanschaf en operationele kosten zo laag mogelijk te houden. Verder moet het systeem bij iedere tocht actief zijn, dus moet het automatisch aangaan zodra de massapik er op gaat, anders kan de schipper vergeten het aan te zetten.

De verzamelde data dient op een website gepubliceerd te worden op een zodanige manier dat:

  • Groepen na afloop van een evenement aan kennissen en vrienden kunnen laten zien waar ze geweest zijn.
  • Deelnemers van evenementen als een Instructieweek kunnen zien waar de EH uithangt (mits hun telefoon GPRS ondersteunt).
  • Alle leden wat leuks hebben om naar te kijken als ze geen zin hebben in studeren.

Methode/Principe

Het ETS systeem bestaat theoretisch gezien uit de volgende onderdelen:

  1. GPS ontvanger,
  2. Mobiel internet modem en
  3. Controller.

De GPS ontvangt de coördinaten van de boot, de controller verwerkt deze en stuurt ze met behulp van het modem via het internet naar de webserver. De webserver luistert constant of er data van het systeem binnenkomt. Zodra de server data ontvangt, wordt dat opgeslagen in een database en getoond op de ETS website. Dit alles gebeurt zonder dat er een enkele menselijke handeling voor nodig is.

In de praktijk gebruiken wij het volgende:

  1. Bluetooth GPS ontvanger,
  2. Mobiele telefoon met GPRS functionaliteit en
  3. Java software op een mobiele telefoon gekoppeld aan een micro-controller.

Onze controller is dus verdeeld over een micro-controller en een telefoon. Aangezien de telefoon krachtiger is dan de microcontroller, neemt deze nagenoeg al het werk op zich. De micro-controller is slechts aanwezig om het opstarten en afsluiten van het systeem te coördineren.

Aan boord van de Ebenhaëzer

Storing september 2009; De ETS is enkele malen in een storing gevallen. Zoals het nu lijkt komt dat door kortsluiting in draden vanaf het uC PCB naar de gsm-toetsen. Hierdoor worden andere toets-combinaties bediend als bedoelt en start het ETS programma in de gsm dus niet op. Dit kan 'verholpen' worden door ff SUBTIEL de draden tussen het PCB-board en de GSM te bewegen/verleggen waardoor hopelijk de kortsluiting weg is. Komende winter zullen de ETS mensen de boel eens doormeten.

Fout traceren:

De ETS gaat niet aan:

Branden de oranje ledjes van de laders?
Ja > uC ligt eruit. Kijk ff of er stekkers los zitten. Zo niet, niet verder klooien en meenemen naar enschede.
Nee > ETS krijgt geen 12 voeding vanaf de EH. Zekering in de ETS stekker gesprongen? Heeft het kompashuisje wel stroom?


De ETS gaat wel aan maar we zien geen track op internet:

-Knippert het groene ledje op de GPSontvanger?
Ja > GPS ontvanger is o.k.
Nee > er is geen gps ontvangst. Haal dat kratje bier van de koekoek af.


-Knippert het blauwe ledje op de gps ontvanger?

Ja > Verbinding tussen GSM en GPS is ok. Waarschijnlijk gaat er nu op de server in enschede wat mis. Ff bellen.
Nee > geen verbinding tussen de GSM en GPS ontvanger. Ga naar volgende vraag.
-Draait het ETS programma wel op de GSM? En is in de log te zien dat de ETS zich aanmeld bij het opstarten?
Nee > klungel ff subtiel met de draden om een sluiting op te heffen en probeer een restart. Kijk of de stappen die de gsm bij het opstarten doorloopt logisch zijn. Zie de tabel hier.
Ja > Het programma maakt geen automatisch contact meer met de gps-ontvanger. Stop het tracen in het ETS programma en stel handmatig opnieuw in dat er bluetooth communicatie gebruikt moet worden.

- Als het ETS programma start verschijnt dan de melding "ETS uploads started"?

Nee > Het geheugen waar het ETS programma gebruik van maakt is waarschijnlijk vol. Verwijder enkele oude tracks en kijk of het nu wel werkt

Deze sectie beschrijft alles wat op de EH aanwezig is zolang het systeem draait.

Hardware

Belangrijkste zaken die er op de boot aanwezig zijn, zijn:

  • Bluetooth GPS ontvanger,
  • Mobiele telefoon met GPRS en een interface naar GPS ontvanger (Bluetooth),
  • Automatisch opstart systeem

GPS ontvanger

De kortste slag om de mobiele telefoon met een GPS te laten communiceren is via Bluetooth. Er is een RoyalTek Bluetooth GPS Receiver, RBT-2001 aangeschaft voor dit doel. Deze heeft als voordeel dat hij vanzelf aan gaat als er voedingspanning op gezet wordt (simpelweg omdat er een 'gewone' aan/uit schakelaar op zit).

RoyalTek RBT-2001 specificaties:

  • 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's voor status-indicatie

Toelichting LED's statusindicatie:

Led Actie Uitleg Normale situatie op de EH
Blauw Uit Geen Bluetooth verbinding met GSM alleen bij het aanzetten
Knippert Bluetooth verbinding met GSM werkt ja
Groen Aan GPS is aan, maar nog geen GPS fix gereed alleen bij het aanzetten
Knippert GPS is aan en heeft een fix ja
Rood/Geel Uit Batterij is voldoende vol ja
Rood Batterij is bijna leeg nee
Geel GPS hangt aan de lader en wordt opgeladen ja

Mobiele telefoon

Er is een Nokia 6230i gedoneerd aan het project.

Nokia 6230i: Firmware: V03.50 13-sept-2005

  • kan geen symbian op
  • draait Java
  • heeft bluetooth (gemakkelijk softwarematig toegankelijk)
  • heeft een soort seriële poort: 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

SIMkaart

Als provider hebben we voor Simyo prepaid gekozen, vanwege de lage kosten voor mobiel internet. Simyo gebruikt het KPN netwerk.

In juni 2009 rekent het Simyo prepaid abonement per dag af voor het dataverkeer met als kosten 1 euro per MB, berekend in stappen van 1 kB.

Automatisch opstarten

Om het systeem automatisch aan te laten gaan moeten de volgende dingen gebeuren:

  • GSM inschakelen,
  • GPS inschakelen en
  • ETS applicatie op de mobiele telefoon starten.

Om de GSM in te schakelen moet de powerknop 3 seconden ingedrukt worden. De GPS gaat vanzelf aan als hij stroom krijgt.

Het automatisch starten van Java software is nogal lastig: hiervoor moeten drie knoppen ingedrukt worden. Daarna moet er nog één keer een knop ingedrukt worden om de software te authorizeren om internet te gebruiken. Voor dit alles zijn twee verschillende knoppen nodig. Deze worden bediend door elektronisch schakelaars die parallel aan de GSM knoppen zijn gesoldeerd en door een microcontroller electrisch worden aangestuurd.

Elektronische aanpassingen aan de GSMknoppen

Opengewerkte Nokia 7250i

In de afbeelding rechts zie je een opengemaakte Nokia 7250i, waarbij het printje met de knoppen te zien is. De knoppen zijn heel eenvoudige maak contactjes bestaande uit twee ringetjes die met elkaar moeten worden verbonden. 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 onderstaande figuur verduidelijkt een en ander. Voor het schakelen van een knop kan heel simpel een optocoupler gebruikt worden, die de twee ringen als het ware kortsluit. De ingang van de optocoupler zit dan aan een microcontroller uitgang. (Transistoren werken niet omdat er dan een gemeenschappelijke massa gemaakt moet worden.)

Elektrisch schema achter het keypad van de Nokia 7250i. Optcocouplers worden gebruikt om de 2 ringen kort te sluiten waardoor die bewuste toets wordt bediend.

De toetsen waaraan gesoldeerd is kunnen niet meer op de oude manier bediend worden. Om toch ook nog handmatige bediening mogelijk te maken (bijvoorbeeld voor het wijzigen van telefoon instellingen en het doen van software updates) is er parallel aan elke optocoupler ook nog een externe drukschakelaar gesoldeerd.

Door gebruik te maken van de snelkeuze functies zijn er 3 knoppen nodig om de ETS te bedienen, namelijk:

  • de GSM powerknop,
  • de linker keuzetoest en
  • de selecttoest.

Om op te starten worden deze op de volgende manier aangestuurd:

Knop Ingedrukt gedurende (s) Actie
Powerknop 3 Telefoon gaan aan.
Wachten tot de GSM opgestart is.
Keuzetoets 0,1 Snelkeuze opties komen in beeld, 'verzameling' staat boven aan.
Wachten tot het menu geopend is.
Selecttoets 0,1 Map 'verzameling' wordt gekozen.
Wachten tot de map geopend is.
Selecttoets 0,1 EurosTrack programma wordt gestart.
Wachten tot netwerktoegang gevraagd wordt.
Keuzetoets 0,1 Netwerktoegang wordt bevestigd.

Om de ETS uit te zetten wordt gewoon de powerknop weer 3 seconden ingedrukt.

Microcontroller

De micro-controller is een Atmel Attiny2313 (willekeurig gekozen uit de onuitputtelijke voorraad van Gart). Deze heeft de volgende taken:

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

De telefoon wordt niet direct uitgezet als de spanning er af gaat, omdat dan het omschakelen op walstroom er voor zou zorgen dat het systeem even uit gaat. Om te beslissen welke actie het systeem moet ondernemen, is het nodig te weten of het systeem aan of uit zou moeten zijn en wat de huidige status van het systeem (dus de telefoon) is. De benodigde invoer is dus:

  • de aanwezigheid van boordspanning en
  • de status van de telefoon.

De microcontroller hoeft dus alleen maar iets te doen aan het begin en aan het eind van een evenement. In de tussentijd wordt deze in de slaapstand gezet om stroomverbruik te beperken. De boordspanning van de EH dient als interrupt om de uC uit de slaapstand te halen. Zodra de uC wakker wordt, gaat deze kijken wat er moet gebeuren: alleen als er boordspanning is, zou het systeem aan moeten zijn. Om niet bij elke omschakeling naar walstroom de hele ETS opnieuw op te starten, wordt de telefoon pas uitgeschakeld als de boordspanning er minstens 1 minuut af is.

Om debuggen tijdens het ontwerpen en later op de EH te vergemakkelijken is er een controle LED geplaatst. De geeft de status van het programma weer d.m.v. van een knippercode. De led is altijd aan zolang de uC niet slaapt, maar geeft m.b.v. de signalen IQ(1), IQ(2) of IQ(3) aan wat hij van plan is te doen (zie paragraaf IO voor meer informatie over deze knippercode).

Boordspanning status

Er is een pin om te kijken of de EH boordspanning aan is, dit is tevens een interrupt pin om uit de slaapstand te komen. De maximale spanning op een IO poort is: Vcc+0,5 Volt. Er wordt een spanningsdeler van twee weerstanden gebruikt om de 12 volt voeding vanuit de EH om te zetten naar 3,7 volt. Om ook de uC wakker te krijgen, moeten we een Pin Change Interrupt hebben, dus gebruiken we poorten "PCINTO(n)".

Telefoonstatus

Het vervelende is dat de telefoon geen pin heeft die eenduidig aangeeft of de telefoon aan of uit staat. Als de telefoon niet aan de lader hangt, bestaat zo'n pin wel. Hangt de telefoon echter wel aan de lader, dan geeft deze pin altijd spanning, ook als de telefoon uit staat. Of de lader wel of geen spanning heeft, wordt bij ons systeem bepaald door de massapik. Het systeem kan hier dus geen invloed op uitoefenen en moet zowel met als zonder laderspanning de status van de telefoon kunnen bepalen. Als oplossing hiervoor gebruiken we twee ingangen:

  • We zetten de achtergrond LED verlichting van de telefoon op 'altijd aan' zolang de telefoon aan de lader zit. Hierdoor kunnen we, als er boordspanning op de EH is, de status van de telefoon uitlezen door te kijken of er spanning over de LEDs staat.
  • Een bepaalde pin geeft, als de massapik eraf is, een spanning van 2,7 volt als de telefoon aan is en 0 als de telefoon uit is. Hiermee kunnen we dus de telefoonstatus uitlezen als er geen boordspanning is.

Aangezien de uC weet of er boordspanning is of niet, kan met deze twee signalen de telefoonstatus op ieder moment worden gecontroleerd.

Beide signalen tappen we via een buffer af en sturen die de uC in. Omdat de buffer niet nodig is als de uC in de slaapstand zit, wordt de voeding van de buffer ook vanuit de uC geregeld. De LED spanning is rond de 3 volt, hiermee kan dus rechtstreeks een IO poort bediend worden. De 2,7 volt van de lader pin is te laag om een IO poort mee te bedienen, dus dat doen we via de interne comparator van de uC.
Opmerking: De interne referentiespanning kan alleen op AIN0 ingesteld worden. Dit betekent dat de telefoon op de negatieve AIN1 moet. Hierdoor werkt het bitje geïnverteerd. Geen probleem maar wel ff opletten in de software.

Voeding

We voeden de uC vanuit de telefoon batterij, dus 3,7 volt.

IO

De uitvoer bestaat uit 3 poorten om de GSM toetsen aan te sturen, 1 uitgang voor de controle/status led en 1 uitgang voor de voeding van de buffer IC.

Een overzicht van de uC pinbezetting:

Pin Name Function
2 PD0 Uitgang naar controle/status indicatie LED
3 PD1 Uitgang naar voeding naar buffer IC
7 PD3 Uitgang naar selectknop
8 PD4 Uitgang naar keuze knop
9 PD5 Uitgang naar aanuitknop
10 GND massa microcontroller
12 AIN0 positieve ingang comparator; naar interne referentie spanning (1.1 volt)
13 AIN1 negatieve ingang comparator; naar de 'lader connector' (via buffer IC)
14 PB2 ingang vanaf telefoon achtergrond LED (via buffer IC met afvlak condensator), werkt alleen als de massapik erop zit
15 PB3/PCINT3 ingang vanaf spanningsdeler EH voeding
20 Vcc voeding microcontroller vanuit GSM accu
Elektrisch schema om de uC aan te sluiten

Het systeem heeft het schema dat is weergegeven in de afbeelding rechts. Hierin worden de volgende onderdelen gebruikt:

  • Microcontroller: Atmel Attiny 2313.
  • Buffer: LM324N.
  • Optocoupler: CNY17F.

De code die de uC draait is te vinden in de bijlage.

Status-LED

De status van de microcontroller wordt door door middel van een rode LED weergegeven. Deze LED is aan zolang de microcontroller draait, tenzij deze slaapt. De LED geeft de status van het systeem aan met een van de volgende lichtkarakters (1× knipperen betekent LED 1× uit):

Code Status-LED Uitleg
aan uC is wakker en is aan het wachten of een routine uitvoeren
uit uC slaapt
IQ(1) knippert 1× ETS gaat worden opgestart
IQ(2) knippert 2× ETS gaat worden uitgezet
IQ(3) knippert 3× uC gaat in de slaapstand


Voeding

Het hele ETS systeem wordt met 12 volt gevoed. Dit omdat we dan 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 is de 12 volt verbonden met:

  • Via een diode met de GSM adapter (om te voorkomen dat er stroom vanuit de GSM accu door de lader terug gaat lopen)
  • De GPS ontvanger adapter

Naast de voeding van de EH hebben de mobiele telefoon en GPS-ontvanger ook een interne accu. Hier kan het systeem ook op draaien. Hierbij moet de ETS handmatig opgestart worden met de externe toetsen en de uC moet uitgeschakeld worden anders gaat die de telefoon weer uitzetten. Het uitzetten van de uC kan eenvoudig door de 'laderplug' uit de telefoon te halen. Laden hoeft immers toch niet en de uC heeft zo geen massa en dus geen voeding meer.


Behuizing

De behuizing is een Curver trommel. Lekker 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 zitten:

  • Mobiele telefoon met externe knoppen en kabels.
  • GPS muis.
  • Microcontroller PCB.
  • 2x adapter PCB voor voeding GPS en GSM.
  • Opvulling.
ETS onderdelen in werkelijkheid
ETS in zijn behuizing


Software

Howto software op de GSM installeren

Met de Nokia Suite (zie ook de handleiding) 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.

Communicatie kan via IR, bluetooth of een kabel. Bij het installeren met behulp van Nokia Suite, moet er op gelet worden dat het .jad bestand (dat door de compiler aangemaakt wordt) 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, in dat geval moet je het gewoon nog een keer proberen.

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.

Na het installeren moeten de toegangsrechten van connectiviteit van het ETS programma nog even ingesteld worden op 'altijd toestaan'. 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 wordt daarom direct data (0kb) verstuurd 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.
  • Optie om boot te kiezen.
  • Logtijd variabel.
  • Upload tijd variabel.
  • Minimale verplaatsing variabel.
  • Tijd meesturen (vaste tijdzone).
  • Meetpunten meesturen.
  • Bufferen als er geen GPRS netwerk is.
  • Bluetooth verbinding opnieuw opzetten als de bluetooth communicatie uitvalt.

Gewenst:

  • Niet belangrijke meetpunten uitfilteren (bv: alle tussenliggende punten van een rechte lijn, of alleen als de koers verandert).

Interessante situaties

  • Wat gebeurt er als er geen GPS aanwezig is?
    • De ETS software merkt dit na een time-out, en gaat dan opnieuw een verbinding proberen op te zetten.
  • 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?
    • Het verzenden mis, waarna de niet verzonden coördinaten bij de volgende zendpoging alsnog worden verzonden.
  • Wat gebeurt er als we op een buitenlandse netwerken zitten?
    • Simyo biedt in het buitenland geen GPRS aan, dus gebeurt er hetzelfde als bij het vorige punt en hoeven we niet bang te zijn voor hoge kosten.
  • Wat gebeurt er als de GSM gebeld wordt?
    • De software draait gewoon door, als je afsluit zie een gemist bericht. Bellen tijdens de opstartprocedure zou misschien problemen kunnen veroorzaken, maar de kans dat precies dan wordt gebeld is zeer klein.

Broncode

Steven heeft de ETS broncode, Helmich en Gart hebben een backup.

In Enschede

De data die de GSM upload is dus helemaal gestript. Geen poespas, alleen de bootletter, UTC-tijd en GPS-lokatie. De server in Enschede haalt deze data weer uit elkaar en verwerkt het in een database.

De server regelt o.a. de volgende dingen:

  • Opslaan ontvangen data in database
  • Er wordt een nieuw track gedefinieerd als er 45 minuten lang geen data binnen gekomen is
  • Interfacing naar de ETS waterkaart

Ontwerpbeslissingen

Hier zullen de belangrijkste keuzes die gedaan zijn bij het maken van het systeem beschreven worden.

GPRS

Het gebruik van SMS is veel makkelijker dan het gebruik van GPRS, aangezien het vanaf een microcontroller mogelijk is om direct SMS berichten te versturen. Voor GPRS is dat een stuk lastiger. GPRS is echter vele malen goedkoper, omdat we zeer weinig data versturen: 10 bytes per coördinaat. Naar schatting zou SMS rond de 50 euro per jaar kosten, waar we met GPRS aan 1 à 2 euro genoeg zouden moeten hebben voor een vaarseizoen.

Java op de telefoon

Voor het versturen van de data zijn vier verschillende mogelijkheden:

  1. door Java op de telefoon,
  2. door andere software op de telefoon,
  3. door de microcontroller of
  4. door een PC.

Optie 2 is mogelijk bij een open source besturingssysteem op de telefoon (bijvoorbeeld Symbian) of een telefoon die toestaat software te draaien waarop geen veiligheidsrestricties van toepassing zijn. Helaas gaat dit alleen met de duurdere telefoons en was het voor ons geen optie.

Het gebruiken van de telefoon als GPRS modem zou niet moeilijk moeten zijn vanaf een PC. Het gebruik van een PC kost echter te veel ruimte en stroom om in de EH in te bouwen, aangezien we geen dure PC willen aanschaffen. Vanaf een microcontroller is hetzelfde mogelijk, maar lastig te implementeren. Dit komt omdat een telefoon slechts de mogelijkheid biedt om een PPP verbinding op te zetten, waarover de microcontroller dat nog zelf een TCP/IP stack moet opzetten. Dus vallen optie 3 en 4 ook af.

Uit het voorgaande kunnen we concluderen dat optie 1 het beste is, aangezien het gebruik van Java op de telefoon de makkelijkste optie is.

Starten m.b.v. microcontroller

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 of een vooraf ingesteld alarm. Helaas vraagt de Nokia uit Series 40 platform de gebruiker elke keer om bevestiging voor het programma echt gestart wordt door een Push-actie. Voor ons is dit dus geen handige optie.

Mogelijke andere opties waren:

  1. Altijd aanlaten; maar hiervoor was het stroomverbruik te hoog.
  2. Mechanisch starten door de knoppen in te drukken, maar dat leek een beetje omslachtig
  3. Elektronisch schakelaars aan de knoppen solderen en deze m.b.v. een microcontroller (uC) elektrisch aan sturen.

Uiteindelijke bleek de laatste optie het handigst.

Doorontwikkelingsinfo

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

Opties

IR in plaats van Bluetooth

Mogelijke optie is om GPRS GSM + IR GPS te gebruiken. Voor ongeveer 10 euro kunnen we misschien de seriële TTL GPS van Willem ombouwen naar IR (kennis nodig). Zie onderaan op http://www.lirc.org/receivers.html.

In het GPS tracking programmaatje op de 6230i kan je een optie 'seriële communicatie' kiezen inclusief baudrate etc. Daarna vraagt de telefoon of je verbinding via IR wil maken. Ziet er dus naar uit dat een verbinding via IR opgezet kan worden. Op deze site wordt dat beschreven: http://www.trackr.eu/faq/

Dit is relatief veel werk met een lage 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. Maar of het uit kan is de vraag, aangezien de telefoon sowieso geen power management doet als deze aan de lader zit (wat bij ons continu het geval is), is het stroomverbruik waarschijnlijk lastig te beperken.

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.

Gerelateerde linkjes

Kant en klaar alternatief:

Standaardmodule voor dit soort werk:

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.)

Info over de telefoons:

Pushregistery:

Communicatie via datakabel:

Toepasbare software:

Bijlagen

Code micro-controller

In de uC hebben we de volgende code geknald:
Let er bij AVR studio op dat je ook daad werkelijk de juiste HEX file upload. Dat moet je nog apart instellen bij de programmer opties.

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

#define F_CPU 1000000UL  // 1 MHz
#include <util/delay.h>


// PB3/PCINT3 PIN15 = EH voedingssignaal
// PB2/PCINT2 PIN14 = GSM Led, werkt alleen als er voeding is
// PB1/AIN0 PIN13 = GSM lader, werkt alleen als er geen voeding is, via comparator
// Comparator uitgang = (ACSR, ACO)

// PD0 PIN2 = controle led
// PD1 PIN3 = buffer
// PD3 PIN7 = selectknop
// PD4 PIN8 = keuze knop
// PD5 PIN9 = aanuitknop


void init() 					//Initialisatie poorten timer en interrups
{
	DDRD = 0x7f;				// PORTD PD0-PD6 als uitgang
	PORTD = 0;					// Zet alle uitgangen laag (geen pull-up aan)
	
	DDRB = 0; 					// PORTB PB0-PB7 volledig als ingang

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

	ACSR = (1 << ACBG);  		//comparator instellen op bandgap
  
	MCUCR = (1 << SM0); 		//slaapmodes instellen op 'power down'
	cli(); 						//globale interrupt uitschakelen

	PORTD |= (1 << PD1);		// buffer aan
	PORTD |= (1 << PD0);		// statusled aan
}


void slapen_gaan()				// commandos om in de slaapstand te 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 delay_long() 				// Create long delay for 20 sec
{
	_delay_ms(5000); 			// wait 5 sec
	_delay_ms(5000); 			// wait 5 sec
	_delay_ms(5000); 			// wait 5 sec
	_delay_ms(5000); 			// wait 5 sec
	// longest possible delay is: _delay_ms(6553)
}


void gsm_onoff() 				//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.
{
	PORTD |= (1 << PD5);		// Activeer aan/uit knop gedurende 3 sec
	_delay_ms(3000);
	PORTD &= ~(1 << PD5); 		// Deactiveer aan/uit knop
	delay_long(); 				// Wacht tot GSM daadwerkelijk aan of uit is
}


void ets_start() 				//Turn the GSM on and start the program. 
{
	PORTD |= (1 << PD4);		// Activeer keuze knop gedurende 0.1 sec om snelkeuze opties te kiezen
	_delay_ms(100);
	PORTD &= ~(1 << PD4);		
	_delay_ms(1900);			// wacht 2 sec voor openen snelkeuze menu

	PORTD |= (1 << PD3);		// Activeer select knop gedurende 0.1 sec om verzamel map te openen
	_delay_ms(100);
	PORTD &= ~(1 << PD3);		// Deactiveer select knop
	_delay_ms(2900);			// wacht 3 sec voor openen verzamelmap

	PORTD |= (1 << PD3);		// Activeer select knop gedurende 0.1 sec om ets programma te starten
	_delay_ms(100);
	PORTD &= ~(1 << PD3);		// Deactiveer select knop
	_delay_ms(2900);			// wacht 3 sec voor starten programma en tot netwerktoegang gevraagd wordt

	PORTD |= (1 << PD4);		// Activeer keuze knop gedurende 0.1 sec om netwerktoegang te bevestigen
	_delay_ms(100);
	PORTD &= ~(1 << PD4);		// Deactiveer keuze knop
}


void led(int i) {
	for (; i > 0; i--) {
		PORTD &= ~(1 << PD0);
		_delay_ms(500);
		PORTD |= (1 << PD0);
		_delay_ms(500);
	}
	_delay_ms(1000);
}


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

	_delay_ms(6000);		// wacht 6s voor stabilisatie

	// Oneindige loop
	while (1) 
	{
		if (bit_is_clear(PINB, PB3) && bit_is_clear(ACSR, ACO)) // Voeding is uit en GSM lader is aan: GSM uitzetten
		{
			led(1);
			// Wacht voor omzetten walstroom
			for (int i = 0; i < 10; i++) {
				_delay_ms(6000);
			}
			if (bit_is_clear(PINB, PB3) && bit_is_clear(ACSR, ACO)) // Voeding is uit en GSM lader is aan: GSM uitzetten
			{
				gsm_onoff();			// schakel GSM uit
			}
		}
		else if (bit_is_set(PINB, PB3) && bit_is_clear(PINB, PB2))  // Voeding is aan en GSM led is uit: GSM aanzetten
		{
			led(2);
			gsm_onoff();			// schakel GSM in	
			ets_start();			// Start de ETS op	
		}
		else // Alles is in orde, dus ga lekker slapen
		{
			led(3);
			slapen_gaan();			// hop in de slaapstand	
		}
	}

	return 0;
}

.