Hier kan je wat meer vinden over de PIR_SENSOR.
Wordt een mooi ding Karel, blijf het volgen.
Jeroen13
//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight
Ik ga eens op zoek naar geschikte (kleine), en betaalbare, pir's en ga hiermee eens aan het experimenteren.
Die 2 pir's lijkt me ook een goed idee, hoewel ik het met 1 pir op dezelfde manier zou kunnen doen als met de ultrasoon.
Dus de hoogste waarde zoeken, en die opslaan, en daarnaa Johnny laten draaien, todat die waarde weer is bereikt.
Ook zou ik het zoeken door de tracks kunnen laten doen, die kunnen Johnny 360 graden laten draaien.
Bedankt allemaal weer voor het meedenken.
p.s. Ik heb inmiddels een videocamera in bruikleen, dus de volgende filmpjes in betere kwaliteit.
keuninkske
!overload! to much information in this signature!
ga dan maar vlug een filmpje maken, ik volg dit topic al een tijdje en wil hem dringend in detail kunnen bewonderen 
btw:
nice job tot nu toe
Het is weer effe stil geweest, rond Johnny6.
Door drukte (een ander robotproject met grote spoed)ligt Johnny nog steeds 'verminkt' in een hoekje van de werkplaats.
Thuis ben ik nog wel steeds bezig met het uitpluizen van enkele sensoren, zoals een lichtsensor, zoals hierboven beschreven.
Die pir's zullen er waarschijnlijk wel komen, maar ik ben eerst aan het experimenteren met hetgeen wat ik hier nog op voorraad heb liggen, zoals een handvol ldr's en een paar bpw34's
Ten eerste wil ik proberen 2 ldr's lichtbronnen te laten detecteren op deze wijze:
als waarde links hoger is dan waarde rechts dan:
Draaien naar rechts
als waarde rechts hoger is dan waarde links dan:
draaien naar links
als waarde links gelijk is dan waarde rechts dan:
rechtdoorzo kan ik dan ofwel, tussen 2 lichtbronnen doorrijden, of juist er naar toe.
Na een hele avond stoeien en de nodige fustraties heb ik eindelijk (na een domme fout) die adc aan de praat gekregen.
ik heb die ldr aangesloten met een weerstand van 10K op de +5V
zoals hieronder
vraag: kan die ldr gevoeliger?
vraag2: werkt dit hetzelfde met een bpw34?
vraag3: Of kan ik beter een bpw40 nemen?
waarom die bpw's? de bpw34 heb ik hier liggen en een bpw40 kan ik bij andere spullen meebestellen, en is lekker goedkoop.
En voor de filmliefhebbers, oa. Keuninkske;), volgende week hoop ik weer te gaan testen, en deze keer met ultrasoon.
Misschien heb ik dan ook de bukfunktie voor mekaar.
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Je zal waarschijnlijk toch een klein stukje hysterese moeten hebben tussen links / rechts. B.v. kijken of het niet meer dan 5 afwijkt. Voorkomt dat 'ie heen en weer blijft hakketakken tussen linksaf en rechtsaf.
stukje code uit KLM3:
lightseek:
bump = 1
IR = 1
backlite = 0
GOSUB clearscreen
WHILE 1=1 'LET OP: eindeloze lus! gebruik ivrdd om terug naar menu te gaan!
ldr1 = ADIN 0
ldr2 = ADIN 7
PRINT AT 1,1, "1:" , DEC ldr1 , " "
PRINT AT 2,1, "2:" , DEC ldr2 , " "
motortijd = 100
IF ldr1 > (ldr2 + 5) THEN
GOSUB rechts
ELSE IF ldr2 > (ldr1 + 5) THEN
GOSUB links
ELSE
GOSUB vooruit
END IF
WEND
lightavoid:
IR = 1
bump = 1
backlite = 0
GOSUB clearscreen
WHILE 1=1 'LET OP: eindeloze lus! gebruik ivrdd om terug naar menu te gaan!
ldr1 = ADIN 0
ldr2 = ADIN 7
PRINT AT 1,1, "1:" , DEC ldr1 , " "
PRINT AT 2,1, "2:" , DEC ldr2 , " "
motortijd = 100
IF ldr1 < (ldr2 - 5) THEN
GOSUB rechts
ELSE IF ldr2 < (ldr1 - 5) THEN
GOSUB links
ELSE
GOSUB vooruit
END IF
WEND
lseekavoi:
IR = 1
bump = 1
backlite = 0
GOSUB clearscreen
PRINT AT 2,1, "light"
WHILE 1 = 1 'LET OP: eindeloze lus! gebruik ivrdd om terug naar menu te gaan!
ldr1 = ADIN 0
ldr2 = ADIN 7
motortijd = 100
IF wissel = 1 THEN
PRINT AT 1,1, "seek "
IF ldr1 > (ldr2 + 5) THEN
GOSUB rechts
ELSE IF ldr2 > (ldr1 + 5) THEN
GOSUB links
ELSE
GOSUB vooruit
END IF
ELSE
PRINT AT 1,1, "avoid"
IF ldr1 < (ldr2 - 5) THEN
GOSUB rechts
ELSE IF ldr2 < (ldr1 - 5) THEN
GOSUB links
ELSE
GOSUB vooruit
END IF
END IF
WEND
ivrdd is een lusje wat wordt aangeroepen door links/rechts/rechtdoor etc waarin een bepaalde tijd gewacht wordt (in te stellen door motortijd = iets ), en ondertussen o.a.* toetsen worden gelezen. Zodat als een toets is ingedrukt er naar het menu gesprongen word.
Wissel is een bitje dat geflipt wordt elke keer dat KLM3 een muur tegenkomt.
IR = 1 zet de eigen IR bron aan (voor de obstakeldetectie DMV een IR ontvanger)
bump is een bitje dat aangeeft of de robot achteruit moet gaan als 'ie een obstakel tegenkomt (wordt gebruikt in de subroutine bump, die wordt aangeroepen door ivrdd als de sensor een obstakel ziet. Ja, het is nogal spaghetti, die code)
Backlite = 0 zet de achtergrondverlichting van KLM3's 8x2 display aan.
Maar het gaat dus om wat ik met de LDR's doe. Even ter illustratie van hysterese. 't is verder niet zo hoogstaand.
*= toetsen lezen, IR sensor input, zelfs een poging tot het meten van de door de motoren opgenomen stroom, als obstakeldetectie, maar dat was niet zo succesvol (te zuinige motoren / te ongevoelige ADC. En de stroom is te erg afhankelijk van de batterijspanning want de motoren worden direct uit de batterij gevoed. KLM3 heeft ook geen ADC ingang meer over om ook de batterijspanning te gaan meten. Bedrading is sowiso een te erge spagheti om nog wat toe te voegen, hoewel daar verandering in gaat komen met de nieuwe motordriverprintplaat.
Wat betreft "kan die LDR gevoeliger": Ja, als je die 10k kleiner maakt valt er meer spanning over de LDR bij dezelfde hoeveelheid licht. Ik heb 1k8 in KLM3. bruin groen rood... 1k5 dan.
BPWiets weet ik niet meer van dat ik er ergens 1 in een laatje moet hebben liggen...
Hey Luke,
Dit is precies wat ik in gedachte had, en over die hysterese zat ik eigenlijk ook al over te dubben, daar die waarden best wel zenuwachtig op het scherm komen.
Door de deling door 100 is dat al een stuk minder geworden, maar zoals jij het hebt opgelost ziet er beter uit.
die 10K weerstand aan de LDR heb ik inmiddels ook vervangen door een 1K8 en dat maakt hem een stuk gevoeliger.
ik ging er met een lampje overheen, op ong. 1 meter, en de reactie was mijns inziens genoeg om er wat mee te doen.
Het was trouwens ook nogeens overdag, dus 'nevenlicht' genoeg.
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
vraag: kan die ldr gevoeliger?
Dat kan zeker, als je de weerstand vervangt door een stroombron. Hier kan je lezen welk effect dat heeft op een NTC. Vervang de NTC door een LDR, en je bekomt hetzelfde effect. Of door een BPW40, dat moet net zogoed werken.
In beide gevallen zal je wat met de weerstanden moeten experimenteren om het onderste uit de kan te halen.
Denk er wel aan, dat een BPW40 veel sneller reageert dan een LDR. Dat is belangrijk als er lampen branden op het lichtnet. Voor het menselijk oog branden die gelijkmatig, maar een BPW40 ziet ze duidelijk flikkeren op een frequentie van 100Hz (een LDR ook, maar niet in dezelfde mate). Uitmiddelen is dus een noodzaak.
Zoals jij die ntc in het bovenste plaatje aangesloten hebt, had ik die ldr aangesloten, maar dan die 10K als pull-up.
Dit lijkt mij geen verschil uit te maken: pull-up of pull-down.
Klopt dat?
Ik was al van plan om een paar bpw40's aan te schaffen, want die ldr's zijn inderdaad erg traag.
Is het ook mogelijk om de weergave van metingen stabieler te maken door bv bij 10 metingen (10x 5 ms)het gemiddelde weer te geven?
Ik heb alles in picbasic geprogrammeerd, en daar ik hierin nog een beginner ben, is het voor mij best wel moeilijk dat stukje code van jou in picbasic te vertalen.
Ik hoef het niet als hapklare brokken te ontvangen, maar een goeie hint in de juiste richting is erg welkom 
In ieder geval bedankt voor jou meedenken.
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Pull-up of pull-down maakt weinig verschil. Bij een pull-up weerstand wordt de spanning op het knoppunt lager als er meer licht op de LDR valt, en andersom.
Met picbasic ben ik nog minder bekend dan jij, vrees ik. Maar uitmiddelen is vrij eenvoudig. Stukje psudo-code:
Eenmalig:
GEMIDDELDE = ADC * 50
Loop:
GEMIDDELDE = GEMIDDELDE - (GEMIDDELDE / 50)
GEMIDDELDE = GEMIDDELDE + ADC
Bij een 10-bits ADC is gemiddelde dan een getal tussen 0 en 51150, wat nog netjes in een 16-bits (unsigned) variabele past.
electrical storm
"Je kunt een probleem niet oplossen met de denkwijze die het heeft veroorzaakt." - Albert Einstein
leuk project Kareltje. voor mij zelf is dit helaas nog iets te hoog gegrepen om te begrijpen....
maar ik heb even een vraagje: waar kan je die rupsbanden kopen?
ik heb zelf namelijk ook dit soort rupsbanden nodig voor een simpeler project. als ik op internet zoek kom ik uit bij te grote of te kleine rupsbanden. ik zoek ongeveer de zelfde dikte/breedte maar wel met een iets kleinere omtrek.
sorry mods dat dit niet helemaal on topic is
Rupsbanden kopen = peperduur
Wat ik voor mijn robot gebruikt heb, 2 omgekeerde distributieriemen van een auto.
Vraag bij een garagebedrijf wat van die riemen opzij te leggen, en je hebt zo keuze genoeg.
Ook op de sloop zullen ze massaal verkrijgbaar zijn.
Goedkoper kan toch niet?
En het voordeel van gebruikte riemen, is de soepelheid, ze zijn immers al 'ingereden'
Sukses
edit: mochten die riemen te lang zijn, en je wil er kopen?
http://www.robotmarketplace.com/products/tank_style_treads.html
betrouwbaar en snelle levering.
[Bericht gewijzigd door Kareltje op (18%)]
electrical storm
"Je kunt een probleem niet oplossen met de denkwijze die het heeft veroorzaakt." - Albert Einstein
Project max achter de rug, eindelijk weer tijd voor Johnny6.
Ik had inmiddels enkele BPW40's aangeschaft, en ben nu hiermee aan het experimenteren, i.p.v. die LDR
Met een weerstand van 100K als pull-up werkt dit uitstekend.
Ik blijf een mooie stabiele waarde houden.
Ik had een stukje zwarte krimpkous over die bpw gestoken, en er enkele lichtbronnen op laten schijnen.
Afgedekt had ik een waarde van +/- 500
Wat schemer in de kamer gecreeërd gaf een waarde van 320
Een aansteker op een 1/2 meter gaf een waarde van 280 en een klein zaklampje op dezelfde afstand <100
een zwart stuk papier, of een wit papier gaf al gauw een verschil van +/- 50
Dus, kortom, als ik deze op mijn robot monteer, met een zwart buisje er overheen zal ik met deze sensoren Johnny zowel naar, als vanaf, het licht kunnen laten rijden.
Met een hysterese, zoals in het voorbeeld van LL zou dit prima moeten werken.
Denk er wel aan, dat een BPW40 veel sneller reageert dan een LDR. Dat is belangrijk als er lampen branden op het lichtnet. Voor het menselijk oog branden die gelijkmatig, maar een BPW40 ziet ze duidelijk flikkeren op een frequentie van 100Hz
@Pros: Inderdaad geen 220v lichtbronnen in de buurt, er is dan geen fatsoenlijke waarde meer uit te lezen.
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
gemiddelde nemen
Dan werken flikkerende TL's ook nog.
Van 8 of 16 metingen oid, maar een macht van 2 deelt efficient, omdat je gewoon een paar bits op kunt schuiven.
Heb ik ook ergens een voorbeeldje van, op m'n andere PC...
komt neer op:
meting[0] = ADCin(inputchannel) ; nieuwe meting doen
meting[7] = meting[6] ; elke meting 1 plek opschuiven, oudste vervalt
meting[6] = meting[5]
meting[5] = meting[4]
meting[4] = meting[3]
meting[3] = meting[2]
meting[2] = meting[1]
meting[1] = meting[0]
meting[8] = meting[0]+meting[1]+meting[2]+meting[3]+meting[4]+meting[5]+meting[6]+meting[7]; som nemen
shift meting[8],right,3 ;delen door 8, gemiddelde nemen.
meting is dan een word array. Niet echt efficient qua ram, maar dat heb je toch genoeg op een 16f877
. Ook beetje inefficient qua code. Maar 't werkt wel.
EDIT: GRR, ergens in m'n achterhoofd zat nog wel dat pros een efficienter methode had. Maar niet meer dat die in dit topic stond...
Anyway, thanks pros!
. Wordt mijn code ook weer een stukje beter.
Ik ben een beetje aan het stoeien geweest met die code van Pros, maar ik krijg onder de lamp geen stabiele waarde.
Het knippert als de hel.
Mogelijk ligt het weer aan mijn programmeer ervaring 
De code die ik gebruikte:
licht:
Repeat
VAR1 = ADIn 3
VAR1 = VAR1 - (VAR1/50)
VAR1 = VAR1 + ADIn 3
DelayMS 10
Print At 1,1, "BPW40: "
Print At 1, 8, Dec VAR1, " "
Until toets1 = hoog xor toets5 = hoog xor toets3 = hoog xor toets9 = hoog xor toets0 = hoog
Return
Wat heb ik hierin fout gedaan?
pseudocode verkeerd begrepen?
Wat ik voorheen deed:
var1 = var1/100Het resultaat is, dat ik nu een 3 cijferige waarde heb, die erg stabiel is, en onder de lamp knippert dan alleen het laatste digit, wat op zich niet echt hinderlijk is, maar zeker niet mooi.
edit: er knipperen wel degelijk 2 digits
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Bijna...
licht:
VAR1 = (ADIn 3 * 50)
Repeat
VAR1 = VAR1 - (VAR1/50)
VAR1 = VAR1 + ADIn 3
DelayMS 10
Print At 1,1, "BPW40: "
Print At 1, 8, Dec VAR1, " "
Until toets1 = hoog xor toets5 = hoog xor toets3 = hoog xor toets9 = hoog xor toets0 = hoog
Return
Het werkt nu perfect!!
Luke en Pros, bedankt!
VAR1 = (ADIn 3 * 50)
Alleen vond Proton die 2 haakjes niet leuk, dus, weg gelaten.
Sorry voor de late reactie, druk, druk, druk
Volgende week weer met max op pad voor die gemiste scene's, en dan moet hij weer 'fit' zijn.
sorry, effe off-topic. 
edit: nu de invloed van het daglicht minder word, begint het geflikker weer 
Hoewel het nu wel beter gaat, dan maandag.
[Bericht gewijzigd door Kareltje op (17%)]
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Ik heb nu diverse waarden getest, maar het resultaat blijft hetzelfde.
Wat mij echter wel op viel: toen ik de delaytime op 500ms of 1000ms zette, was er een enorm verschil tussen de metingen.
Die liepen uiteen, van 100 tot 6000!
Ik ben eens proberen de theorie erachter te begrijpen.
lichtnet = 50Hz = 20ms per cyclus
mijn delaytime = 10ms = meting over een halve sinus.
moglijk meet hij de ene keer 2 nuldoorlatingen, en de andere keer een volle curve.
Wat ongeveer inhoud: volle curve = lage waarde, en de nuldoorlating(en) een hoge waarde.
Niks berekend, puur brainstormen.
Kortom, als ik verschillende metingen krijg met een snelheid van 10ms zal ik altijd dat geflikker blijven houden.
Alleen begrijp ik niet, dat als de metingen een volle sec. duren, waarom ik dan toch die enorme verschillen zie.
het zijn toch gemiddelde waarden?
Het is eindelijk gelukt om ook bij kunstlicht stabiele metingen te krijgen.
Ik heb een tantaaltje van 4,7 uf over die bpw40 gezet, en dat werkt echt perfect.
Mijn code ziet er nu alsvolgt uit: (met een rem op de oude code)
licht:
Repeat
bpwL = ADIn 3' * 150
'bpwL = bpwL - (bpwL/50)
'bpwL = bpwL + adin 3
bpwL = bpwL /10
DelayMS 10
Print At 1,1, "BPW40: "
Print At 1, 8, Dec bpwL, " "
Until toets1 = hoog xor toets5 = hoog xor toets3 = hoog xor toets9 = hoog xor toets0 = hoog
ReturnMet een buisje over de bpw reageert hij mooi op een meter afstand op een kleine lichtbron (aansteker)
Nu nog een geschikte bracket zien te maken voor de licht- en IR sensoren, en dan kan er weer getest worden.
edit: filmpje toegevoegd http://www.youtube.com/watch?v=fHBO_7O6l1E
en een veel beter filmpje van het hoofdvan Johnny
Hoi Kareltje,
Ik wil alleen even zeggen dat ik dit topic ook al een tijdje met belangstelling volg, het begint er echt goed op te lijken wat je daar hebt, grote klasse!
Groeten,
lfo
Dank je lfo 
Het begint er nu eindelijk een beetje op te lijken.
Al het metaalwerk ben ik nu per onderdeel af aan het werken, en een kleurtje te geven.
De borstplaat/bedieningspaneel en de zijschermen moeten nog uitgesneden worden, en dan is het mechanische deel (voorlopig) klaar.
De armen komen later pas.
Voor het bukken van Johnny hoef ik alleen nog maar de software aan te passen, ik wil die gebruiken van de automatische klapraambediening van picbasic.nl (dank aan Frits)
Wat de sensoren betreft: Ik heb 2 IR-sensoren klaar, 4 fototransistors als lichtsensoren en in het hoofd zit een ultrasoonsensor.
in 1 oog komt een minicamera die draadloos beelden naar mijn tv of pc-scherm zend.
Nu wil ik alleen nog iets doen met electret microfoons om Johnny ook nog oren te geven.
Hoe precies, weet ik nog niet, misschien hebben jullie hier ideeën over?
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Oeh, hoe duur mag het worden? Want ik heb een héél gaaf idee, wat niet eens moeilijk te maken is, maar wel aardig duur (€50 / 60).
Je hebt nu een afstandsbediening. Die zou je met wat moeite (*) kunnen vervangen door spraakherkenning.
deze module van sparkfun doet spraakherkenning. Hij is nu net uitverkocht, dat wel. Maar 't is een heel mooi ding. Bekijk dat filmpje wat erbij staat maar 's
.
Hij is te besturen een serieel protocol, dat zou de PIC die nu RC5 leest kunnen doen. Het echte "spraakherkennen" doet de module, als 'ie een woord herkend stuurt 'ie wat seriele data, om woorden in te leren is er een windowsprogramma. (je kunt ook gewoon via de terminal serieel met dat ding kletsen om 'm in te stellen, het protocol staat online. Leuk voor de nonwindows users. Je kunt dat dus ook vanaf een uC doen zodat je 'm zonder PC nieuwe woorden aan kan leren.)
Cheaper is gewoon een microfoontje via een versterkertje aan de ADC van de PIC te hangen en zelf iets te doen met het geluidsniveau. Daar kun je ook al hele leuke dingen mee.
*) Het lijkt me nog niet eens zo heel lastig, maar ik heb zo'n module niet... Misschien dat ik er wel ooit nog 's een in een projectje ga verwerken, uit bovenstaande kun je waarschijnlijk wel opmaken dat ik de documentatie e.d. vast doorgekeken heb 