daviddebestnl @ tweakers2 clash of clans || i5 4690 ~ gtx 750 ti
http://www.ebay.nl/sch/i.html?_sop=15&LH_BIN=1&_from=R40|R40&_sacat=0&_nkw=smart+robot+car+chassis&rt=nc&LH_PrefLoc=2
[ Voor 20% gewijzigd door mcDavid op 23-12-2014 15:53 ]
Kijk eens naar sensors zoals de CNY70 en TCRT5000. Beide in grote lijnen hetzelfde, alleen andere behuizing. Als je deze aan de onderkant van het autootje plaatst, en de ondergrond een duidelijk contrast/kleurverschil met de lijnen heeft, dan kun je daarmee denk ik wel lijnen volgen. Daarbij is er voor beide sensors genoeg documentatie en voorbeeldcode beschikbaar, zij het voor andere projecten. Ik heb bijvoorbeeld een CNY70 die de markering op de ronddraaiende schijf in de elektriciteitsmeter detecteert.
Woohoo, de watermeter lijkt ook een ronddraaiende magneet (of iig iets magnetisch) te hebben
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
Het lijkt erop dat ik mbv het digitale kompas elke 0.002m3 een puls kan laten vastleggen van de gasmeter, al lijkt het de ene keer iets meer en de andere keer iets minder dan 0.002m3 te zijn.
Bij de watermeter, met 4 getallen achter de komma op de meter, lijkt er met de huidige opstelling een puls vastgelegd te kunnen worden als de 0.0002m3 en 0.0005m3 in beeld staan, oftewel elke halve liter.
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
De led kan aan of uit zijn, maar kan ook snel of traag knipperen.
Door bij de verandering millis() te printen kwam ik erachter dat snel knipperen ongeveer 516 a 564ms is en traag 775 a 826ms.
Ik krijg echter geen goed resultaat met onderstaande code...weet er iemand wat ik misdoe?
Ik krijg dus soms een toestand 2 als het 3 moet zijn en omgekeerd....
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| schuifCurrentState = digitalRead(schuifpoortIN); unsigned long currentTimeSchuif = millis(); if (schuifCurrentState != schuifLastState){ // de status is aangepast SchuifTimeOfLastButtonEvent = currentTimeSchuif; } //0: staat volledig dicht, 1: staat in pauze of volledig open, 2: gaat open, 3: gaat dicht if (currentTimeSchuif - SchuifTimeOfLastButtonEvent > 1500){// meer dan 1.5 seconden geen verandering, dus het zal niet knipperen, dus AAN of UIT if (schuifCurrentState == LOW){ //het is omgekeerd, door de pull-up, dus ze is laag als er signaal is schuif_status = 1; //de led brand } else if (schuifCurrentState == HIGH) { schuif_status = 0; //de led brand niet } else { //er klopt iets niet... schuif_status = 5; //er is een probleem } } else if (currentTimeSchuif - SchuifTimeOfLastButtonEvent > 650){// meer dan 0.65 seconde geen verandering en minder dan 1.5 seconden schuif_status = 2; //de led knippert traag } else { // het was minder dan 0.65 seconde sinds een verandering dus het zal snel knipperen schuif_status = 3; //de led knippert snel } schuifLastState = schuifCurrentState; |
[ Voor 98% gewijzigd door klaboem op 16-01-2015 14:57 ]
mogelijk dat je door de timing een pulsje mist. Een ding als deze zou ik zelf toch met een pinchange interrupt aanpakken.Promy schreef op vrijdag 16 januari 2015 @ 14:23:
Ik wil met m'n arduino de status van een led nagaan.
De led kan aan of uit zijn, maar kan ook snel of traag knipperen.
Door bij de verandering millis() te printen kwam ik erachter dat snel knipperen ongeveer 516 a 564ms is en traag 775 a 826ms.
Ik krijg echter geen goed resultaat met onderstaande code...weet er iemand wat ik misdoe?
Ik krijg dus soms een toestand 2 als het 3 moet zijn en omgekeerd....
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 schuifCurrentState = digitalRead(schuifpoortIN); unsigned long currentTimeSchuif = millis(); if (schuifCurrentState != schuifLastState){ // de status is aangepast SchuifTimeOfLastButtonEvent = currentTimeSchuif; } //0: staat volledig dicht, 1: staat in pauze of volledig open, 2: gaat open, 3: gaat dicht if (currentTimeSchuif - SchuifTimeOfLastButtonEvent > 1500){// meer dan 1.5 seconden geen verandering, dus het zal niet knipperen, dus AAN of UIT if (schuifCurrentState == LOW){ //het is omgekeerd, door de pull-up, dus ze is laag als er signaal is schuif_status = 1; //de led brand } else if (schuifCurrentState == HIGH) { schuif_status = 0; //de led brand niet } else { //er klopt iets niet... schuif_status = 5; //er is een probleem } } else if (currentTimeSchuif - SchuifTimeOfLastButtonEvent > 650){// meer dan 0.65 seconde geen verandering en minder dan 1.5 seconden schuif_status = 2; //de led knippert traag } else { // het was minder dan 0.65 seconde sinds een verandering dus het zal snel knipperen schuif_status = 3; //de led knippert snel } schuifLastState = schuifCurrentState;
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
Ik was ondertussen nog wat verder zitten zoeken (het helpt door de zaken eens uit te tikken als vraag
en ik heb een oplossing (en mogelijk probleem) gevonden...
Volgens mij ligt het probleem in het feit dat ik telkens de currentTimeSchuif ververs en die dan gebruik om te weten hoe lang het geleden was dat de vorige change was. De uitkomst is dus afhankelijk van de loop.
Nu heb ik een extra variabele gemaakt die in de f (schuifCurrentState != schuifLastState) zit en die het verschil bevat. Dit is dus altijd de volledige tijd tussen pulsveranderingen.
Die ga ik dan nakijken of het groter of kleiner dan 650 is en zo werkt het wel telkens goed !
Een code=c maakt het iets leesbaarder.Promy schreef op vrijdag 16 januari 2015 @ 14:23:
Ik wil met m'n arduino de status van een led nagaan.
De led kan aan of uit zijn, maar kan ook snel of traag knipperen.
Door bij de verandering millis() te printen kwam ik erachter dat snel knipperen ongeveer 516 a 564ms is en traag 775 a 826ms.
Ik krijg echter geen goed resultaat met onderstaande code...weet er iemand wat ik misdoe?
Ik krijg dus soms een toestand 2 als het 3 moet zijn en omgekeerd....
De tweede IF staat buiten de eerste, dus de tijd sinds de laatste verandering is onvoorspelbaar maar je hoeft alleen te testen na een status update, dus beter binnen de eerste IF
"SchuifTimeOfLastButtonEvent = currentTimeSchuif;" heb ik naar het eind verplaatst. Eerst testen, dan nieuwe status
edit: millis() in IF block gezet, is ook alleen nodig na pin change, scheelt weer cpu tijd.
edit2: Oeps, dit werkt alleen bij een pin change, dus detectie van continu aan of uit lukt dan niet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| schuifCurrentState = digitalRead(schuifpoortIN); if (schuifCurrentState != schuifLastState) { unsigned long currentTimeSchuif = millis(); // de status is aangepast //0: staat volledig dicht, 1: staat in pauze of volledig open, 2: gaat open, 3: gaat dicht if (currentTimeSchuif - SchuifTimeOfLastButtonEvent > 1500) { // meer dan 1.5 seconden geen verandering, dus het zal niet knipperen, dus AAN of UIT if (schuifCurrentState == LOW) { //het is omgekeerd, door de pull-up, dus ze is laag als er signaal is schuif_status = 1; //de led brand } else if (schuifCurrentState == HIGH) { schuif_status = 0; //de led brand niet } else { //er klopt iets niet... schuif_status = 5; //er is een probleem } } else if (currentTimeSchuif - SchuifTimeOfLastButtonEvent > 650) { // meer dan 0.65 seconde geen verandering en minder dan 1.5 seconden schuif_status = 2; //de led knippert traag } else { // het was minder dan 0.65 seconde sinds een verandering dus het zal snel knipperen schuif_status = 3; //de led knippert snel } schuifLastState = schuifCurrentState; SchuifTimeOfLastButtonEvent = currentTimeSchuif; } |
[ Voor 8% gewijzigd door Ploink op 16-01-2015 15:35 ]
Ik had het ondertussen al iets anders aangepast.(zie mijn reactie boven) Volgens mij zal jouw oplossing niet 100% werken omdat hij niet meer kan zie of het gestopt is met veranderen? (omdat de >1500 binnen een if die eist dat er verandering is staat?
Een 2e vraagje die ik nog had: Diezelfde arduino leest en zet ook de status van m'n verluchtingsgroep (renson invisivent). Ik sluit aan cfr beschreven in deze link
Aan de arduino is een opto (4n25) aangesloten. Deze opto verbind de gnd van het toestel met de input van het toestel bij activering. (de input van het toestel is dus laag actief)
Nu werkt het wel, maar moet ik de opto veel langer aanzetten om een signaal te krijgen: de handleiding zegt dat er minder dan 5seconden gedrukt moet worden. Op de knoppen die naast het toestel staan, lukt dat door gewoon te drukken (dus 1 seconde ofzo).
Via de arduino moet ik echter 6 seconden doen, anders werkt het niet.
In het gelinkt document staat wel iets over de afstand klein houden (ifv ground). De kabelafstand (cat5e) is ongeveer 15 a 18m (enkele weg). Kan dit het probleem veroorzaken?
Zou het verplaatsen van de opo van bij de arduino naar bij de verluchtingsbox het probleem oplossen (dus de lange kabel tussen de arduino en de 4n25?)
Ik heb die ook besteld en hij is binnen. Ik heb hem alleen niet getest, duurde wel 30 dagen voordat ik hem binnen had.Verwijderd schreef op vrijdag 16 januari 2015 @ 17:34:
waarom moet een simpele breadboardvoeding 13 x duurder zijn ?
[afbeelding]
0.86 eurocent incl. verzenden of 11.10 'in de aanbieding' incl. verzenden..
[ Voor 3% gewijzigd door Frozen op 16-01-2015 19:35 ]
Misschien omdat het 13x sneller bij je in de brievenbus ligtVerwijderd schreef op vrijdag 16 januari 2015 @ 17:34:
waarom moet een simpele breadboardvoeding 13 x duurder zijn ?
Material 3 Thema's voor HA | Swiss Army Knife custom card voor HA | AmoebeLabs
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #include <LiquidCrystal_I2C.h> #include <Wire.h>; LiquidCrystal_I2C lcd(0x27, 20, 4); float start = 0.010000; float target = 0.100000; float stepChange = 0.010000; void setup() { // put your setup code here, to run once: Serial.begin(115200); lcd.init(); lcd.clear(); lcd.backlight(); } void loop() { if (start != target){ lcd.clear(); lcd.print(start); start+=stepChange; } delay(100); } |
Als ik kijk naar de code zou ik verwachten dat start wordt opgehoogd met 0.01 totdat start 0.10 is. Bij 0.10 zou het dus in principe moeten stoppen maar de code loopt vrolijk door...
Suggesties? Ik had zelf al gezocht en een topic gevonden ergens waarbij iemand de float 2.7 vergelijk met 2.7 (wat een double bleek) te zijn. Blijkbaar is de double preciezer dan de float en zou daar een verschil vandaan komen maar in mijn geval gebruik ik expliciet floats voor zowel start, target als stepChange.
Edit: Ik heb zojuist alle floats als double's gedefinieerd maar dat maakt ook geen verschil.
[ Voor 4% gewijzigd door C.44 op 19-01-2015 11:59 ]
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
edit: wacht, dat klopt ook niet. Ff denken.
edit2: <= , kleiner of gelijk aan.
Daarnaast heb ik mijn twijfels over "start+=stepChange;", hoort dat niet "start=start+stepChange;" te zijn?
[ Voor 30% gewijzigd door Raven op 19-01-2015 12:24 ]
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
Probleem is dat er floats worden gebruikt, en die hebben altijd afrondingsfouten. Oftewel in de praktijk is target 0.1000000032, en start dan 0.0999999976. En die zijn niet aan elkaar gelijk.
start <= target moet inderdaad wel goed werken. (Dan alsnog kan hij eentje meer/minder lopen dan wat je denkt, maar hij stopt wel. start <= target - stepChange / 2 zorgt ervoor dat je precies weet hoe ver hij komt).
1
2
3
4
5
6
7
| int valueInt = start *1000; int targetInt = target * 1000; if(targetInt == valueInt) { .... of ineens if((int)(value*1000) == (int)(target*1000)) { ... |
bij de tweede moet je wel opletten met de plaatsing van de haakjes, anders wordt het eerst afgekapt en dan pas met 1000 vermenigvuldigd. Met integers rekenen is veel sneller dan floats ook trouwens.
En x+=2 is kort voor x=x+2, en x++ is weer gelijk aan x+=1 allemaal standaard C
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
2.005 bereken je dan gewoon als 2005, meestal kan je floats helemaal vermijden. bijv. weergaven van float op display kan prima in twee integers met punt ertussen,
2005 kan je eerst delen door 1000 om 2 te krijgen die voor de punt moet, vervolgens gebruik je die uitkomst voor de volgende soms, dit geval is dat 2.
2005 / 1000 = 2
2005 - (2 * 1000) = 5
Nu heb je alle integers die je nodig hebt om je getal weer te geven zonder float te gebruiken.
Edit/
Die int kan wellicht te klein zijn, in arduino is een int een 16bit getal. Moet er een long van maken want we hebben grotere getal dan 32.767.RobV schreef op maandag 19 januari 2015 @ 13:30:
wat je ook kunt doen is de boel afronden. Stel je rond af op 3 decimalen, maak het getal 1000 keer groter en kap het af als integer:
code:
1 2 3 4 5 6 7 int valueInt = start *1000; int targetInt = target * 1000; if(targetInt == valueInt) { .... of ineens if((int)(value*1000) == (int)(target*1000)) { ...
bij de tweede moet je wel opletten met de plaatsing van de haakjes, anders wordt het eerst afgekapt en dan pas met 1000 vermenigvuldigd. Met integers rekenen is veel sneller dan floats ook trouwens.
En x+=2 is kort voor x=x+2, en x++ is weer gelijk aan x+=1 allemaal standaard C
[ Voor 50% gewijzigd door mad_max234 op 19-01-2015 13:44 ]
MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000
if(var > 0.0009 && var < 0.0011)
Floats vermijden doen we overigens om meer reden als we op 8itter programmeren, floats zijn relatief zwaar voor 8bitter, kost extra resource(gehuegen en ram) wat meestal schaars is.
Ik denk dat ik 't geheel dan gewoon in long vars ga zetten en waar ik een visuele weergave nodig heb (bijv. lcd) kan ik altijd nog delen door 1.000.000.
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
http://bd.eduweb.hhs.nl/pros1p1/double.htm
[ Voor 23% gewijzigd door mad_max234 op 19-01-2015 17:52 ]
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
[ Voor 20% gewijzigd door Promy op 21-01-2015 19:14 ]
edit:
Net de pdf gezien in jouw link. Verlaag eens die weerstand van 560 ohm naar 220 ohm.
edit 2:
Gisteren zat ik het bovenstaande op m'n iPad te tikken, net iets minder handig dan op pc
Even een snelle berekening;
BC547
De GPIO is 5V veronderstel ik? De VBE nemen we 0,7V dan is IB = (5V - 0,7V) / 27K = 0,159 mA. We stellen dat de versterkingsfactor hFE = 110. De maximale IC is dan 0,159 mA * 110 = 17,5 mA. Maar hoeveel is de IC van de BC547 werkelijk? Deze is logischergewijs gelijk aan de IF van de 4N25.
4N25
Laten we stellen dat de VCE van de BC547 in geleiding ongeveer 0,1V is. De VF is volgens de datasheet typical 1,3V. De stroom IF = (5V - 1,3V - 0,1V) / 560 ohm = 6,42 mA. Nu dien je er rekening mee te houden dat een optocoupler niet echt een "schakelaar" is, je kan het meer vergelijken met een transistor en dus heeft het ding iets wat lijkt op een versterkingsfactor. Hier wordt dit uitgedrukt in % en heet dit Current Transfer Ratio oftewel CTR. Volgens de datasheet minimum 20%, typisch 50%. Dit betekent dat in het slechte geval de output curren van de optocoupler 6,42 mA * 0,2 = 1,28 mA is. Kan best hoger zijn, dit is allemaal een snelle en ruwe schatting.

Toch kan dit een te lage stroom zijn voor de input van de module. Waarschijnlijk heeft de inputmodule een kleine RC kring om stoorpulsen er uit te filteren en een pull up weerstand de voedingsspanning. Waarschijnlijk 12V wat betrouwbaarder is bij lange dunne kabels
Bovenstaande is een snelle berekening en ik heb de helft van de formules terug moeten opzoeken omdat mijn elektronische kennis wat roestig is
[ Voor 115% gewijzigd door D-Three op 23-01-2015 00:43 ]
Die DRV8825 maakt een gruwelijke herrie als de stepper stil staat, het ding word ook super heet en is alles behalve betrouwbaar. Ik had ook al een tijdje een super plastic brandlucht die ik niet helemaal kon plaatsen. Toen ik zonet de driver van m'n breadboard trok was dat mysterie ook opgelost, de driver outputs hebben gewoon 't breadboard afgefakkeld.... Om 't zachtjes uit te drukken ben ik redelijk klaar met dat ding.
De B ED's werken super, geen herrie, stapvast, richtingvast en veel minder warmte ontwikkeling. Ze mochten alleen wat kleiner zijn. Alleen heeft iPrototype ze blijkbaar niet op voorraad meer, wat jammer is. Ik heb ze nog wel in een webshop in duitsland gevonden maar daar vragen ze de hoofdprijs voor die dingen. Suggesties?
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
Dat vind ik wat kort door de bocht. De DRV8825 wordt gemaakt door Texas Instruments, een heel gerespecteerde fabrikant, die maken geen rommel.C.44 schreef op vrijdag 23 januari 2015 @ 13:54:
Die DRV8825 maakt een gruwelijke herrie als de stepper stil staat, het ding word ook super heet en is alles behalve betrouwbaar. Ik had ook al een tijdje een super plastic brandlucht die ik niet helemaal kon plaatsen. Toen ik zonet de driver van m'n breadboard trok was dat mysterie ook opgelost, de driver outputs hebben gewoon 't breadboard afgefakkeld.... Om 't zachtjes uit te drukken ben ik redelijk klaar met dat ding.
Je hebt een module gekocht waar deze chip op zit en misschien dat de module bakker een foutje heeft gemaakt, maar waarschijnlijk heb je zelf iets verkeerd gedaan.
De DRV8825 heeft een current limiter. Als die niet goed ingesteld is, zal de maximale stroom gaan lopen. Daardoor kan enorm veel hitte ontstaan. Dat zal, zeker zonder koelvin, funest worden voor de DRV8825 (Blz 12: https://www.pololu.com/file/0J590/drv8825.pdf).C.44 schreef op vrijdag 23 januari 2015 @ 13:54:
Die DRV8825 maakt een gruwelijke herrie als de stepper stil staat, het ding word ook super heet en is alles behalve betrouwbaar. Ik had ook al een tijdje een super plastic brandlucht die ik niet helemaal kon plaatsen. Toen ik zonet de driver van m'n breadboard trok was dat mysterie ook opgelost, de driver outputs hebben gewoon 't breadboard afgefakkeld.... Om 't zachtjes uit te drukken ben ik redelijk klaar met dat ding.
Ik ben uiteraard niet zo makkelijk uit 't veld te slaan maar die driver maakt godsgruwelijke takkeherrie. Uiteraard heb ik met de potmeter het geheel eens flink naar beneden gedraaid. Gemeten op de potmeter zelf zit ik nu net onder de 1V (voorheen 1.15V) en is het gros van de herrie verdwenen alleen blijft er dus een pieptoon over die ondraaglijk is. Je hoort 't bijna niet vanwege de frequentie maar 't vreselijk irritant.
Ik ben op dit moment wel weer die driver in de gaten aan 't houden omdat er wederom een lichte brandlucht te bespeuren is. Het is dus niet de chip zelf die goed warm aan 't worden is maar de headers die ik in 't breadbord steek. En dan ook alleen die waar dan weer de motorspoelen op zijn aangesloten. Iets zegt me dat die breadbordjes hier niet voor bedoeld zijn xD
Buiten dat moet ik zeggen dat ik veel betere ervaringen heb met de Big EasyDrivers. Die produceren die gruwelijke pieptoon niet en zijn veel eenvoudiger af te stellen. Enig nadeel is wel dat ze behoorlijk aan de prijs zijn vergeleken met de DRV8825 en ze voor breadboards eigenlijk te groot zijn.
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
Volgens de datasheet moet de PWM frequency 30kHz zijn en dat is onhoorbaar. Misschien is de chip op die module een chinese fake? Ik zie de module op ebay voor $2 en de chip bij farnell is al duurder...C.44 schreef op vrijdag 23 januari 2015 @ 16:44:
Ik ben uiteraard niet zo makkelijk uit 't veld te slaan maar die driver maakt godsgruwelijke takkeherrie. Uiteraard heb ik met de potmeter het geheel eens flink naar beneden gedraaid. Gemeten op de potmeter zelf zit ik nu net onder de 1V (voorheen 1.15V) en is het gros van de herrie verdwenen alleen blijft er dus een pieptoon over die ondraaglijk is. Je hoort 't bijna niet vanwege de frequentie maar 't vreselijk irritant.
Dat je breadboard smelt ligt dus aan je breadboard als ik het goed begrijp, ook een Chinese fake
Is het niet een idee om een stuk gaatjesprint met echte headers te pakken en daar een lekker dikke baan soldeer onder te gooien?
Ik heb eens voor de eenvoud een relais gebruikt in plaats van de 4n25 en het probleem blijft. Het relais klap onmiddelijk, maar de ventillator reageert opnieuw traag.
Morgen nog eens proberen met een relais en dicht bij de ventillator, eens het verschil bekijken!
De DRV8825 is voor zover ik weet geen chinese fake, gewoon in Duitsland gekocht, kostte een euro of 8 geloof ikPloink schreef op vrijdag 23 januari 2015 @ 19:17:
[...]
Volgens de datasheet moet de PWM frequency 30kHz zijn en dat is onhoorbaar. Misschien is de chip op die module een chinese fake? Ik zie de module op ebay voor $2 en de chip bij farnell is al duurder...
Dat je breadboard smelt ligt dus aan je breadboard als ik het goed begrijp, ook een Chinese fake

Ik heb rond de tijd van aankoop rondgekeken en de gaande prijs voor dit Polulu design zat ongeveer rond die prijs. Het is natuurlijk altijd mogelijk dat het evengoed een fake chip is die op de module zit. Ik heb vandaag nog een beetje rondgezocht op 't net en ik ben blijkbaar niet de enige die die irritante pieptoon hoort.
Dat het wellicht geen snugger idee is om dergelijke aansluitingen over een breadboard te laten lopen ben ik met je eens, ik zit na het bouwen van m'n Hall limitswitches alleen even zonder gaatjesprint. Ik denk dat ik voor nu even de enable pins mee ga pakken in m'n code en die drivers uitschakel zogauw ze stil staan, lijkt me voorlopig een goed idee.
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
Nu staat er in de Arduino code:
1
2
3
4
5
| cmd = GET; cmd += tempF; cmd += " HTTP/1.1\r\n"; //construct http GET request cmd += "Host: 192.168.4.15\r\n\r\n"; //Change this IP to the IP-adress of your Domoticz Serial.print("AT+CIPSEND="); |
Die HTTP/1.1 en Host: heb ik zelf al toegevoegd, anders werkte het helemaal niet (voorbeeldsketch ergens weggehaald).
Nou zie ik echter dat ze bij Arduino zelf nog een 'Connection close' en een lege regel erachteraan doen. Dat lijkt mij ook wat netter (laten we ons maar wel aan de HTTP standaard houden he, ondanks dat het nu ook werkt), maar ik krijg het niet voor elkaar. Ik raak een beetje in de war met die \r\n
Net ff een oud mini-breadbordje getest. Dat ding is uit 1999, dat ze die nog verkopenC.44 schreef op vrijdag 23 januari 2015 @ 23:11:
De breadboards die ik gebruik zijn idd chinees, maar ik denk dat duurdere breadboards uit europa qua design niet beter zullen zijn eerlijk gezegd.
Bij 1A meet ik 13-14mV over 5 gaatjes, twee contacten en een paar mm draad, dus 13-14mΩ weerstand.
Ook bij 3A*42mV=126mW werd het amper warm. Kwaliteitsverschil is er dus wel degelijk.
Mijn request naar devicehub ziet er zo uit:ThinkPadd schreef op vrijdag 23 januari 2015 @ 23:48:
Ik ben wat aan het klooien met een Arduino + ESP8266. Nu lukt het mij om waarden van een DS18B20 via een GET request te versturen.
Nu staat er in de Arduino code:
C++:
1 2 3 4 5 cmd = GET; cmd += tempF; cmd += " HTTP/1.1\r\n"; //construct http GET request cmd += "Host: 192.168.4.15\r\n\r\n"; //Change this IP to the IP-adress of your Domoticz Serial.print("AT+CIPSEND=");
Die HTTP/1.1 en Host: heb ik zelf al toegevoegd, anders werkte het helemaal niet (voorbeeldsketch ergens weggehaald).
Nou zie ik echter dat ze bij Arduino zelf nog een 'Connection close' en een lege regel erachteraan doen. Dat lijkt mij ook wat netter (laten we ons maar wel aan de HTTP standaard houden he, ondanks dat het nu ook werkt), maar ik krijg het niet voor elkaar. Ik raak een beetje in de war met die \r\n
// Make a HTTP request:
client.print("GET /io/---ID----/?apiKey=");
client.print(apiKey);
client.print("&");
client.print(sensorName);
client.print("=");
client.print(sensorValue);
client.println(" HTTP/1.1");
client.println("Host: www.devicehub.net");
client.println("User-Agent: devicehub");
client.println("Connection: close");
client.println();
client.stop();
misschien heb je er wat aan
Dat er kwaliteitsverschil is betwijfel ik niet hoor, maar ik jaag er wel een klein beetje meer sap doorheen. Er staat aan die kant van 't breadboard ~12V @ max 2.5A opPloink schreef op zaterdag 24 januari 2015 @ 00:19:
[...]
Net ff een oud mini-breadbordje getest. Dat ding is uit 1999, dat ze die nog verkopen. Ik heb ook nog ergens een grote breadboard van ruim 25 jaar oud.
Bij 1A meet ik 13-14mV over 5 gaatjes, twee contacten en een paar mm draad, dus 13-14mΩ weerstand.
Ook bij 3A*42mV=126mW werd het amper warm. Kwaliteitsverschil is er dus wel degelijk.

Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
C.44 schreef op zaterdag 24 januari 2015 @ 16:03:
[...]
Dat er kwaliteitsverschil is betwijfel ik niet hoor, maar ik jaag er wel een klein beetje meer sap doorheen. Er staat aan die kant van 't breadboard ~12V @ max 2.5A op
DRV8825 max current is 2.5A!
Zowiezo is het bijzonder dat het werkt, want volgens mij moet je na de commando: "AT+CIPSEND=" het kanaal opgeven als je multi connection mode gebruikt en daarna de grote van de payload en anders als je single channel mode gebruikt moet je de lengte opgeven.ThinkPadd schreef op vrijdag 23 januari 2015 @ 23:48:
Ik ben wat aan het klooien met een Arduino + ESP8266. Nu lukt het mij om waarden van een DS18B20 via een GET request te versturen.
Nu staat er in de Arduino code:
C++:
1 2 3 4 5 cmd = GET; cmd += tempF; cmd += " HTTP/1.1\r\n"; //construct http GET request cmd += "Host: 192.168.4.15\r\n\r\n"; //Change this IP to the IP-adress of your Domoticz Serial.print("AT+CIPSEND=");
Die HTTP/1.1 en Host: heb ik zelf al toegevoegd, anders werkte het helemaal niet (voorbeeldsketch ergens weggehaald).
Nou zie ik echter dat ze bij Arduino zelf nog een 'Connection close' en een lege regel erachteraan doen. Dat lijkt mij ook wat netter (laten we ons maar wel aan de HTTP standaard houden he, ondanks dat het nu ook werkt), maar ik krijg het niet voor elkaar. Ik raak een beetje in de war met die \r\n
Zie: https://nurdspace.nl/ESP8266#AT_Commands
Thanks. Dat lijkt mij inderdaad de manier zoals het hoort, net als op de Arduino pagina. Maar ik kwam in de knoei met die \r\n e.d. Op een gegeven moment werkte het versturen helemaal niet meer.Tichelmanm schreef op zaterdag 24 januari 2015 @ 13:23:
[...]
Mijn request naar devicehub ziet er zo uit:
[..]
misschien heb je er wat aan
Thanks, maar dit is niet de gehele sketch natuurlijkVuikie schreef op zaterdag 24 januari 2015 @ 16:34:
[...]
ZSowiezso is het bijzonder dat het werkt, want volgens mij moet je na de commando: "AT+CIPSEND=" het kanaal opgeven als je multi connection mode gebruikt en daarna de grote van de payload en anders als je single channel mode gebruikt moet je de lengte opgeven.
Zie: https://nurdspace.nl/ESP8266#AT_Commands
Lengte stuurt hij wel, dus dat lijkt me wel in orde. Het werkt verder ook, alleen het afsluiten van het HTTP request kan wel wat netter volgens mij.
Sorry, ik moet beter lezen (en zorgen dat ik wakker ben van te voren :x) Jij heb 't over een paar mV verlies over 5 gaatjes. Ik heb aan die kant een voeding van 12v hangen en er kan vervolgens idd max 2.5A per spoel over die sporen gevoed worden. Wat het verlies is geen idee, niet gemeten maar ik vermoed dat die Chinese breadboards iets meer verliezen.Ploink schreef op zaterdag 24 januari 2015 @ 16:11:
[...]
Hoe hoog is je stroom dan wel niet?
DRV8825 max current is 2.5A!
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya
Nu lees ik op meerdere plekken om dat te doen met een RTC zoals hier omschreven, echter mis ik nog een basic tutorial voor het experimenteren met een RTC.
Nu dacht ik, om simpel te beginnen met een module van ebay om deze dan vervolgens in de Arduino te prikken. Is dat een slim idee? Ik probeer een idee te krijgen van hoe de constructie werkt om een RTC te gebruiken om de Arduino aan/uit te zetten. Ik hoef geen kant en klare brokken, maar ik zou graag weten in welke richting ik moet zoeken.
@Hieronder:
Die had ik inderdaad gespot, ga ik daar eens mee beginnen omdat dat toch een compleet pakketje is. Ik vroeg me alleen af of je daarmee hetzelfde kan bereiken als deze:
https://www.tindie.com/pr...gging-shield-for-arduino/
Want 0.03uA @ 7.2V in sleep mode klinkt wel erg deftig.
[ Voor 14% gewijzigd door Roet op 27-01-2015 22:58 ]
Verwijderd
dat is een print met onderdelen die je zo op een arduino uno kan steken.
Ik ben zojuist klaar met een semester/project en ik heb een Arduino, een hoop LEDjes en wat ander prullerei over (LDRs, een heus keypad, servo's). Jammer genoeg is het breadbordje van school geleend.
Nu zie ik op DealExtreme enkele goedkope kits (<$30) met wat handige onderdelen, onder ander een breadbord en meer draadjes. Kunnen jullie me een verzameling van dingen aanraden die ik ooit nodig zou kunnen hebben voor simpele projectjes? Ik heb sowieso een meer competente verzameling nodig van weerstandjes, meer plugjes en een breadboard.
Ik heb dit gevonden! Klik!
[ Voor 12% gewijzigd door ikt op 27-01-2015 23:41 ]
Er zijn tientallen van dat soort setjes te vinden, allemaal met andere samenstellingen met hun eigen voors en tegens. Er staan nog 2 setjes genoemd op die pagina met wat meer sensoren e.d. erin. Afhankelijk van wat je wilt doen moet je zelf bepalen wat je handig vind. Bedenk ook dat je altijd losse onderdelen kunt aanvullen vanaf ebay e.d.
Persoonlijk ben ik wel voorstander om te beginnen met een kit, een kleine grijpvoorraad heb je toch wel nodig.
@Roet:
Wil je je arduino voeden met een batterij? Dan is het wel interessant om naar low power modes te kijken, als je een netvoeding hebt zou ik me daar niet druk om maken.
soortgelijke shields zijn ook op ebay wel te krijgen voor een dollar of 4-5. Daarmee zul je ook met low power modes kunnen werken, alleen zul je dan zelf wat meer uitzoekwerk moeten doen.
Nu zit ik bij een project waar we een situatie hebben waarvan ik me afvraag of arduino hier ook een goed platform voor zal zijn (en niet té complex)
Het betreft een controlesysteem voor een testboot met draagvleugels
Op 3 plaatsen meet een sensor (verdeeld in een T met op de uiteinden een sensor)
Binnen bepaalde waarden (hoogte) gebeurt er niks, maar buiten een gespecificeerde range (moet instelbaar zijn) moet er een motor, een aanpassing maken (hoek van de vleugel iets veranderd).
Het punt is dat de waarde per sensor kan/zal verschillebn en dus ook de actie zal verschillen.
Kan dit dan met 1 arduino bordje of moet er per sensor/servo combo een plaatje gemaakt worden.
Een 2e is de polling rate van de sensor. Het ideaalbeeld is dat deze op 3 niveaus ingesteld kan worden.
Sorry van de vage omschrijving, maar veel duidelijker kan ik het zo niet echt maken volgens mij.
En denken jullie dat een arduino leek (medium php kennis, en basis begrip van C) dit zou kunnen doen?
Met een kennis van C moet dit wel lukken. Verwacht echter niet in een paar uur iets klaar te hebben als je totaal geen ervaring met microcontrollers of elektronica
Wat ik wel gevonden heb is dit:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| void WDT_Init(void) { //disable interrupts cli(); //reset watchdog wdt_reset(); //set up WDT interrupt WDTCSR = (1<<WDCE)|(1<<WDE); //Start watchdog timer with 4s prescaller WDTCSR = (1<<WDIE)|(1<<WDE)|(1<<WDP3); //Enable global interrupts sei(); } |
Werkt perfect. Interrupt op 4 seconden, reset na nog eens 4 seconden. Maar op mijn avr kennis zit serieuze roest op en ik heb geen idee hoe ik hem instel op 8 sec.
- Deze advertentie is geblokkeerd door Pi-Hole -
Nou ja, ietswat ervaring moet je wel hebben met electronica met een elektrisch aangedreven boot uiteraard.D-Three schreef op woensdag 28 januari 2015 @ 18:47:
Lijkt me zeker doenbaar met 1 bordje, 3 sensoren uitlezen en enkele waardes onthouden is een eitje voor zo'n ding. Al hangt het er uiteraard een beetje van af hoe complex en hoe snel er geregeld moet worden. Meerdere bordjes gebruiken lijkt me voor dit project zelfs minder interessant, de vleugels van 1 boot onafhankelijk gaan regelen is minder stabiel en veilig?
Met een kennis van C moet dit wel lukken. Verwacht echter niet in een paar uur iets klaar te hebben als je totaal geen ervaring met microcontrollers of elektronicaWat ons ook brengt bij het volgende, met een arduino alleen ben je niks. Je zal dus wat extra elektronica nodig hebben. Dikwijls kunnen bepaalde shields je op weg helpen maar meestal kom je er niet aan uit om zelf nog wat te knutselen.
We zouden het pas over een paar maand nodig hebben, dus ik heb tijd genoeg
Jij heldSissors schreef op woensdag 28 januari 2015 @ 22:52:
Als het een binaire deler is dan is |(1<<WDP0); toevoegen voldoende, maar dan ben ik nu redelijk aan het gokken.
- Deze advertentie is geblokkeerd door Pi-Hole -
Er is echter precies iets mis: hij reageert niet altijd even goed op seriele commando's: als je de eerste keer een commando stuurt krijg ik de foutmelding (zie code hieronder), en als ik hetzelfde commando opnieuw stuur, doet hij het wel goed.
Na een tijdje verliest hij echter de inhoud van variabele message2 ? (hij print enkel BOVEN: bij het sturen van commando S)
Ik kan het probleem niet vinden, want in principe is de code toch zeer simpel (de RS_buffer heb ik herbruikt van een ander project, waar die zonder probleem werkte?
Heeft er iemand een idee wat het probleem zou kunnen zijn?
De arduino en de relais trekken hun stroom via de usb poort.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
| /* Ontvanger voor zetten elek ventielen vloerverwarming dmv arduino nano met 8channel relais en elektrische ventielen (Salus Thermischer Stellantrieb T30NC230 (230V)) van ebaygebruiker: modere_de */ // voor de verwerking van de seriele commando's int RS_i=0 ; byte RS_byte; byte RS_data[40]; //Buffer voor RS232 int i; // variablen voor het relais int relais1 = 2; int relais2 = 3; int relais3 = 4; int relais4 = 5; int relais5 = 6; int relais6 = 7; //relais 7 buiten dienst wegens slechte aansluiting voorlopig int relais8 = 9; //////////////////////////////////////////////////////////////////////////////// // de kraan open zetten is relais op HIGH zetten, dit is dus bij een waarde 1 // // de kraan dicht zetten is relais op LOW zetten, dit is dus bij een waarde 0 // //////////////////////////////////////////////////////////////////////////////// void setup(void) { Serial.begin(9600); Serial.println("aansturing vloerverwarming_v5"); Serial.println("zetten van relais in formaat z010101e voor de eerste 6 relais"); Serial.println("status opvragen met commando S - geeft formaat z010101e voor de eerste 6 relais"); Serial.println("hierbij is 1 een open klep en 0 een gesloten klep"); //alle pinnen initialiseren en op 1 zetten, zo staan ze open in geval van geen werking van het geheel pinMode(relais1,OUTPUT);digitalWrite(relais1,HIGH); pinMode(relais2,OUTPUT);digitalWrite(relais2,HIGH); pinMode(relais3,OUTPUT);digitalWrite(relais3,HIGH); pinMode(relais4,OUTPUT);digitalWrite(relais4,HIGH); pinMode(relais5,OUTPUT);digitalWrite(relais5,HIGH); pinMode(relais6,OUTPUT);digitalWrite(relais6,HIGH); } void loop(void) { ///////////////////////////////////////////// // RS232 - seriele poort verwerken // ///////////////////////////////////////////// if (Serial.available()>0) // doe iets met de inkomende RS232 boodschappen { RS_byte=Serial.read(); RS_data[RS_i++]=RS_byte; if (RS_byte==10||RS_byte==13) {RS_datafilter();} } } //------------------------------------------------------------------------------- // Extra RS232 routines //------------------------------------------------------------------------------- void RS_datafilter() // Filter inkomende RS232 boodschappen { int aantal; boolean NB_init; //zetten van de status if(RS_data[0]=='z' && RS_data[7]=='e') //zetten van het relais waarbij het bericht in de format z010101e is waarbij eerste en laatste steeds z en e zijn, deze ertussen is de status van relais 1,2,3,4,5,6 // we negeren dus de achterkomende dingen { int goedcomm = 1; //we gaan ervanuit dat het lukt, if (RS_data[1]=='1'){digitalWrite(relais1, HIGH);}else if (RS_data[1]=='0'){digitalWrite(relais1, LOW);} else {goedcomm = 0;} //eerste relais - als het geen 0 of 1 was geven we een foutmelding if (RS_data[2]=='1'){digitalWrite(relais2, HIGH);}else if (RS_data[2]=='0'){digitalWrite(relais2, LOW);} else {goedcomm = 0;} //tweede relais if (RS_data[3]=='1'){digitalWrite(relais3, HIGH);}else if (RS_data[3]=='0'){digitalWrite(relais3, LOW);} else {goedcomm = 0;} //derde relais if (RS_data[4]=='1'){digitalWrite(relais4, HIGH);}else if (RS_data[4]=='0'){digitalWrite(relais4, LOW);} else {goedcomm = 0;} //vierde relais if (RS_data[5]=='1'){digitalWrite(relais5, HIGH);}else if (RS_data[5]=='0'){digitalWrite(relais5, LOW);} else {goedcomm = 0;} //vijfde relais if (RS_data[6]=='1'){digitalWrite(relais6, HIGH);}else if (RS_data[6]=='0'){digitalWrite(relais6, LOW);} else {goedcomm = 0;} //zesde relais //nu nog controleren of het gelukt is. int gelukt = 0; if ((RS_data[1]=='1' && digitalRead(relais1)== HIGH) || (RS_data[1]=='0' && digitalRead(relais1)== LOW)){gelukt = 1;} else {gelukt = 0;} if ((RS_data[2]=='1' && digitalRead(relais2)== HIGH) || (RS_data[2]=='0' && digitalRead(relais2)== LOW)){gelukt = 1;} else {gelukt = 0;} if ((RS_data[3]=='1' && digitalRead(relais3)== HIGH) || (RS_data[3]=='0' && digitalRead(relais3)== LOW)){gelukt = 1;} else {gelukt = 0;} if ((RS_data[4]=='1' && digitalRead(relais4)== HIGH) || (RS_data[4]=='0' && digitalRead(relais4)== LOW)){gelukt = 1;} else {gelukt = 0;} if ((RS_data[5]=='1' && digitalRead(relais5)== HIGH) || (RS_data[5]=='0' && digitalRead(relais5)== LOW)){gelukt = 1;} else {gelukt = 0;} if ((RS_data[6]=='1' && digitalRead(relais6)== HIGH) || (RS_data[6]=='0' && digitalRead(relais6)== LOW)){gelukt = 1;} else {gelukt = 0;} //nu nog feedback geven if (goedcomm == 0){ Serial.println("BOVEN:fout, formaat moet z010101e zijn met de status van relais 1 tem 6 met 1 voor kraan open en 0 voor kraan dicht "); //het was een slecht commando }else if (gelukt == 0) { Serial.println("BOVEN:FOUT, probeer opnieuw"); //de status is niet goed gezet } else { Serial.println("BOVEN:Status zetten OK"); //het is gelukt } } else if(RS_data[0]=='S') //status opvragen van het relais waarbij het bericht dat teruggaat in de format z010101e is waarbij eerste en laatste steeds z en e zijn, deze ertussen is de status van relais 1,2,3,4,5,6 { String message2 = "z"; if (digitalRead(relais1)== HIGH){message2 += '1';}else{message2 += '0';} //eerste relais if (digitalRead(relais2)== HIGH){message2 += '1';}else{message2 += '0';} //eerste relais if (digitalRead(relais3)== HIGH){message2 += '1';}else{message2 += '0';} //eerste relais if (digitalRead(relais4)== HIGH){message2 += '1';}else{message2 += '0';} //eerste relais if (digitalRead(relais5)== HIGH){message2 += '1';}else{message2 += '0';} //eerste relais if (digitalRead(relais6)== HIGH){message2 += '1';}else{message2 += '0';} //eerste relais message2 += 'e'; Serial.print("BOVEN:"); Serial.println(message2); } else { //foutmeling geven Serial.println("BOVEN:fout, formaat moet z010101e zijn met de status van relais 1 tem 6 met 1 voor kraan open en 0 voor kraan dicht of S om de status op te vragen"); } RS_cleardata(); } void RS_cleardata() // Wis RS232 buffer { for (i=0; i<sizeof(RS_data);i++) {RS_data[i]=0;} RS_i=0; } |
Daar heb ik in het verleden ook veel gezeur mee gehad (slimme meter uitlezen @ 115200 baud, verminkte data daarmee). Heb toen AltSoftSerial library gebruikt, ging al een stuk beter. Maar uiteindelijk na poosje debuggen was output naar de PC niet meer nodig en ben ik overgestapt naar hardware serial en 0 problemen sindsdien.
Oh en doe eens niet de hele lap code posten, gooi dat ff op www.pastebin.com ofzo, je verprutst de hele layout zo
[ Voor 13% gewijzigd door ThinkPad op 28-01-2015 23:19 ]
met de 10 bits die de Nano biedt kom ik net wat resolutie te kort. Ik weet dat er veel ADC's (vaak 8channel) bestaan die je via I2C kunt aansluiten alleen helaas ga ik die volle bandbreedte (400khz) al gebruiken voor communicatie tussen 5 nano's (slave) en een master (een mega2560); er is dus niet genoeg ruimte mee rop de I2C lijn om ook nog op 200hz 5 adc's te pollen (voor iedere nano een ADC op locatie).
Hebben jullie suggesties? Ik zou het graag zo goedkoop mogelijk willen houden (ADC<10 euro), maar omdat dit misschien op commercieel niveau gebruikt gaat worden ben ik zelfs bereid om een nano zelf her te ontwerpen en met 12bit adc's uit te rusten als dat goedkoper is.
De beste oplosisng zou zijn dat ik een ADC serieel kan uitlezen met een nano zodat ik maar 2 pinnen kwijt ben op de nano om een 12bit resolutie te krijgen; hebben jullie een suggestie welke ADC/package daar geschikt voor zou zijn?
T60P Widescreen
De communicatie verloopt via de usb kabel, dus via de hardware serial port als ik me niet vergisThinkPadd schreef op woensdag 28 januari 2015 @ 23:18:
Is dat relaisbord aangesloten op software serial pinnen van de Arduino?
Daar heb ik in het verleden ook veel gezeur mee gehad (slimme meter uitlezen @ 115200 baud, verminkte data daarmee). Heb toen AltSoftSerial library gebruikt, ging al een stuk beter. Maar uiteindelijk na poosje debuggen was output naar de PC niet meer nodig en ben ik overgestapt naar hardware serial en 0 problemen sindsdien.
Oh en doe eens niet de hele lap code posten, gooi dat ff op www.pastebin.com ofzo, je verprutst de hele layout zo
Het relaisbord is gewoon aangesloten op de digitale pinnen 2 tem 9
[ Voor 4% gewijzigd door Promy op 29-01-2015 12:39 ]
Ok, ik snap hetPromy schreef op donderdag 29 januari 2015 @ 12:38:
[...]
De communicatie verloopt via de usb kabel, dus via de hardware serial port als ik me niet vergis
Het relaisbord is gewoon aangesloten op de digitale pinnen 2 tem 9
Je zou ook eens kunnen kijken naar een eth8020. Is een relay board die je rechtstreeks via het netwerk kan aanspreken. Al is zelf maken een stuk goedkoper natuurlijk
Verwijderd
ook betaalbaarSissors schreef op donderdag 29 januari 2015 @ 13:26:
@Seesar, een SPI ADC is dan misschien een optie? Kost je geen I2C tijd, en normaal gesproken is SPI stuk sneller dan I2C.
code examples
[ Voor 7% gewijzigd door Verwijderd op 29-01-2015 22:42 ]
thanks, daar ga ik meteen mee aan de slag om te kijken of dit geschikt is, zo op het eerste oog zou dat wel geschikt zijn!
Top!
T60P Widescreen
Je zoekt een seriële adc en je hebt het over een I2C ADC? Dan heb je het reeds zelf het antwoord gegeven, I2C is serieelSeesar schreef op donderdag 29 januari 2015 @ 10:25:
Voor een projectje zoek ik een oplossing om met een Nano via een 12bit adc een voltage uit te kunnen lezen (tussen de 0-5v). De snelheid zal rond de 200hz liggen.
met de 10 bits die de Nano biedt kom ik net wat resolutie te kort. Ik weet dat er veel ADC's (vaak 8channel) bestaan die je via I2C kunt aansluiten alleen helaas ga ik die volle bandbreedte (400khz) al gebruiken voor communicatie tussen 5 nano's (slave) en een master (een mega2560); er is dus niet genoeg ruimte mee rop de I2C lijn om ook nog op 200hz 5 adc's te pollen (voor iedere nano een ADC op locatie).
Hebben jullie suggesties? Ik zou het graag zo goedkoop mogelijk willen houden (ADC<10 euro), maar omdat dit misschien op commercieel niveau gebruikt gaat worden ben ik zelfs bereid om een nano zelf her te ontwerpen en met 12bit adc's uit te rusten als dat goedkoper is.
De beste oplosisng zou zijn dat ik een ADC serieel kan uitlezen met een nano zodat ik maar 2 pinnen kwijt ben op de nano om een 12bit resolutie te krijgen; hebben jullie een suggestie welke ADC/package daar geschikt voor zou zijn?
Let wel op bij het kiezen van een ADC. Indien je één neemt die ook negatief meten kan meten, zal zo'n 12-bit ADC in feite maar een 11-bit zijn als je enkel postieve signalen wil meten.
thanks, maar zoals ik schreef heb ik geen bandbreedte meer op het I2C, dus ik zocht een andere mogelijkheid; de pinning vna SPI is nog wel vrij dus ik denk dat ik die maar eens ga gebruiken!D-Three schreef op donderdag 29 januari 2015 @ 19:02:
[...]
Je zoekt een seriële adc en je hebt het over een I2C ADC? Dan heb je het reeds zelf het antwoord gegeven, I2C is serieelJe kan met twee vrije pinnen bit bangen. SPI kan uiteraard ook. Voor beide zijn wel voorbeeldjes te vinden online waarop je je kan baseren.
Let wel op bij het kiezen van een ADC. Indien je één neemt die ook negatief meten kan meten, zal zo'n 12-bit ADC in feite maar een 11-bit zijn als je enkel postieve signalen wil meten.
En thnx voor je tip op over negatieve voltage, houd ik in mijn achterhoofd!
T60P Widescreen
Daarom zeg ik ook bit bangingSeesar schreef op donderdag 29 januari 2015 @ 20:42:
[...]
thanks, maar zoals ik schreef heb ik geen bandbreedte meer op het I2C, dus ik zocht een andere mogelijkheid; de pinning vna SPI is nog wel vrij dus ik denk dat ik die maar eens ga gebruiken!
En thnx voor je tip op over negatieve voltage, houd ik in mijn achterhoofd!
http://en.wikipedia.org/wiki/Bit_banging
http://codinglab.blogspot...vr-using-bit-banging.html
Maar als de SPI pinnen vrij zijn (4 pinnen dacht ik?), kan je inderaad ook die gebruiken
[ Voor 6% gewijzigd door D-Three op 29-01-2015 22:22 ]
+5V via pin 27 voeden is volgens arduino.cc nochthans een toegelaten optie? (ik deed dit om na te gaan of mijn probleem(zie iets hoger) het gevolg was van onvoldoende stroom...)
IVM onvoldoende stroom... je bedoelt mss dat de pinnen te weinig mA leveren.. dat ga je niet oplossen daardoor.. dan moet je met transistoren werken... die je schakelt
[ Voor 84% gewijzigd door Icekiller2k6 op 30-01-2015 10:29 ]
MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000
Een ander mogelijke oorzaken (de ene al onlogische dan de andere?)
- de cap van 10uF die ik tussen de gnd en de reset heb gehangen (om reset on connect) te voorkomen?
- interferentie van de 220V voedingskabel van het relais die vlak naast de kabeltjes tussen het relais en de arduino loopt
- of natuurlijk iets anders wat ik over het hoofd zie...
[ Voor 18% gewijzigd door Promy op 30-01-2015 13:02 ]
Mijn nixie klok en weersstation is bijna af. Ik ben bezig met de laatste software tweaks en heb de behuizing getekend in autocad.
De klok bestaat uit twee prints, de basis print met de Atmel, voeding, 433 MHz receiver, barometer en RTC.

Het tweede board is met de 74595 latches en de drivers voor de buizen:


Dit is het compleet:

En hier een filmpje:
All electric components run on smoke. If you let the smoke out, they won't work anymore.
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
Voeding niet aansluiten?Promy schreef op vrijdag 30 januari 2015 @ 09:35:
Is het normaal dat als je een arduino nano aansluit via usb en tegelijkertijd hem aansluit op een +5V voeding via pin 27 (+5V) je een foutmelding krijgt op de windows computer dat het usb apparaat niet werkt?![]()
+5V via pin 27 voeden is volgens arduino.cc nochthans een toegelaten optie? (ik deed dit om na te gaan of mijn probleem(zie iets hoger) het gevolg was van onvoldoende stroom...)
edit:
Verlies je gewoon even de verbinding en reconnect de Nano dzan terug? Of blijft de verbinding verbroken?
Check eens of D1 niet stuk is?? Of meet eens de spanning op Vusb zonder de voeding aangesloten. En meet daarna de spanning op Vusb met de voeding aangesloten. Misschien is D1 stuk en zet je spanning op de voeding van jouw usb poort

[ Voor 24% gewijzigd door D-Three op 31-01-2015 07:56 ]
Wat niet stabiel was via de windows laptop is hier wel stabiel?

Deze ochtend dan de door de relais te schakelen 220V ook opnieuw aangesloten en onmiddelijk ging het mis... (na de usb kabel uitgetrokken te hebben en opnieuw in ging het wel terug goed?)
Het is wel zo dat de signaalkabeltjes tussen de arduino en het relais (dupond wires) de 220V voedingdraad kruisen (ertegenaan liggen) en dat de arduino ook ongeveer tegende 220V voedingskabel zit (zie foto)
Het geheel is gebouwd op de metalen onderplaat van een oude router (tussen de arduino en het metaal natuurlijk een plastic transparant ter isolatie.
Kan het zijn dat die 220V storing geeft?
@D-Three: had ik eigenlijk met verschillende nano's (ook toen ik met de esp8266 bezig was)
[ Voor 9% gewijzigd door Promy op 01-02-2015 13:14 ]
Het relais bedient 8 220V signalen (via de NC).
Het kastje is niet geaard omdat er tussen het metaal en de componenten een plastic folie zit (een overhead transparant).
Voorlopig lijkt het goed te gaan, nog geen uitval sinds deze ochtend...
Maar wanneer ik hier 1 float omzet naar een int in een sketch van 19840 bytes groot krijg ik een grote van: 20062 bytes...
Heb ik dat zo verkeert begrepen? Ben ik gek aan het worden? Spookt het hier?
Dan wil je eens iets optimaliseren


- Deze advertentie is geblokkeerd door Pi-Hole -
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Klopt:SnowDude schreef op maandag 02 februari 2015 @ 11:43:
Ik vermoed dat je de waarde ergens in een functie gebruikt. Als er voor die functie 2 versies gedefinieerd staan, 1 voor een float en 1 voor een int dan worden nu beide versies gecompiled.
1
| currentWatt = (3600000 / (C * pulseTime) * 1000); |
De pulsTime is uiteraard een Long. Dus ik verander currentWatt van int naar long om geheugen te besparen
Thx, it makes sense
- Deze advertentie is geblokkeerd door Pi-Hole -
1
2
3
4
5
6
7
8
9
10
11
12
| println(const __FlashStringHelper *); println(const String &s); println(const char[]); println(char); println(unsigned char, int = DEC); println(int, int = DEC); println(unsigned int, int = DEC); println(long, int = DEC); println(unsigned long, int = DEC); println(double, int = 2); println(const Printable&); println(void); |
Er zijn 12 verschillende functies en die kunnen daardoor dus ook 12 keer gecompileerd worden als je ze alle 12 gebruikt.
All electric components run on smoke. If you let the smoke out, they won't work anymore.
De motor zal zowel links om als rechtsom moeten draaien, dit door het omdraaien van de polariteit. Ik heb wat onderzoek gedaan op internet en de meeste shields/drivers kunnen het net niet aan qua vermogen.
Er is een labvoeding beschikbaar en het doel zal op een vaste snelheid bewegen dus dat scheelt al een hoop regelwerk.
Als ik het zo zie zullen de meeste transistors en h-bruggen het vermogen ook niet zo prettig vinden dus ik denk er over om gewoon met twee 24V relais te werken, maar weet iemand of een Arduino genoeg vermogen kan leveren om zo'n relais te bekrachtigen?
Of wellicht is er een andere oplossing die ik compleet over het hoofd zie
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Gewoon tweetraps zeg maarSnowDude schreef op maandag 02 februari 2015 @ 16:26:
Met een mosfet het relais bedienen?
[afbeelding]
Volgens dit document zou per pin 20mA mogelijk moeten zijn voor een nano (328at5V), maar sommige combinaties moeten beperkt blijven tot 100mA
Als ik het echter lees dan zou ik wel binnen de toleranties vallen?

--of zou het aan het feit kunnen liggen dat ik ook pin 9 en 10 heb verbonden met het relais en dat deze niet gedefinieerd zijn in de sketch (dus niet als output gezet)
[ Voor 13% gewijzigd door Promy op 05-02-2015 22:51 ]
[ Voor 23% gewijzigd door Promy op 05-02-2015 23:24 ]
Hoe heb je het aangesloten? 5V van de relais moet rechtstreeks aan de voeding, anders trek je alle stroom door de arduino voltage regulator heen, dat is minder zuinig en kan voor noise zorgen die dan ook door het arduino bordje loopt.
Als het zo ebay bordje is dan zou het zonder problemen moeten werken, die doen het prima met arduino, die belasten maar paar mA per relay, er loopt wat stroom van 5v door weerstand en twee leds heen naar GPIO. 5v voeding moet echter wel voldoende zijn om relays zelf te kunnen aansturen.
Schakel ze eens allemaal een voor een in.
Meet de totale stroom eens, en meet voedingslijnen voltage of die niet dipt bij inschakelen van de relays.
Test eens met extra condensator op de vcc lijn.
Nee dat heeft geen effect, default state van pin is hoge impedantie(hoge complexe weerstand).--of zou het aan het feit kunnen liggen dat ik ook pin 9 en 10 heb verbonden met het relais en dat deze niet gedefinieerd zijn in de sketch (dus niet als output gezet)
Precies, ga eerst eens na of het ook fout gaat als er maar 1 of twee relais worden geschakeld, dan kan je controleren of het een power probleem is. Een ongeschakeld relais zou geen effect moeten hebben op de schakeling.mad_max234 schreef op vrijdag 06 februari 2015 @ 09:38:
Schakel ze eens allemaal een voor een in.
[...]
[ Voor 18% gewijzigd door SnowDude op 06-02-2015 10:25 ]
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Het is wel zo dat de arduino verbonden is met een usb hub (op speciale poort met extra stroom voor het opladen van dingen) via een lange kabel (utp verlengkabel met usb-rj45 verlengsnoeren).
Ik ga eens een test doen met een externe stroomvoorziening(op de usb poort) en een aparte serial-usb adapter op de pinnen rx en tx , want ik heb de indruk dat hij de usb spanning voorneemt op andere voedingen.

Is het normaal dat de led op de arduino nano (half) gaat oplichten bij het aansluiten van de tx/rx en gnd pinnen (dus zonder stroom erop te zetten?)
Verder zou ik er gewoon eens een multimeter op zetten. Vanaf een volt of 3,6 zou je arduino iig gewoon stabiel moeten zijn, dus je hebt best wat ruimte. Maar zeker met zo'n lange kabel heb je natuurlijk wel grote kans op spanningsdips als er even iets geschakeld wordt of zo.
Als het goed is zit er een diode tussen de 5V lijn en de Vin, dus als de spanning op Vin ongeveer 1,2V hoger is dan de USB-spanning, zou hij automatisch de Vin moeten gaan gebruiken.
die diode is ook het verschil tussen Vin en de 5v aansluitingmcDavid schreef op vrijdag 06 februari 2015 @ 22:24:
Als het goed is zit er een diode tussen de 5V lijn en de Vin, dus als de spanning op Vin ongeveer 1,2V hoger is dan de USB-spanning, zou hij automatisch de Vin moeten gaan gebruiken.
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Heb uiteindelijk maar een servo gekochtD-Three schreef op dinsdag 03 februari 2015 @ 10:20:
Veel fet's kunnen perfect veel hogere stromen schakelen hoor. Maar de meeste shieldjes zijn inderdaad daar niet voor uitgerust.
Dat sinken slaat op de signalen niet op de voeding van de relais zelf, relais zal zelf ook nog stroom nodig hebben, dat is source en geen sink. Deze bordjes maken gebruik van srd-05vdc-sl-c relays.Promy schreef op vrijdag 06 februari 2015 @ 22:07:
Het is inderdaad zo'n bordje van ebay (komen allemaal op zelfde neer). Bij de uitleg stond er dat het 15 a 20mA moet kunnen sinken.
Het is wel zo dat de arduino verbonden is met een usb hub (op speciale poort met extra stroom voor het opladen van dingen) via een lange kabel (utp verlengkabel met usb-rj45 verlengsnoeren).
Per ingeschakelde relays word er zo +-90mA(of 70mA) getrokken.
www.datasheet-pdf.com/datasheetdownload.php?id=720556
Hoe bedoel je voorneemt? Normale arduino met externe voeding aansluiting zal zodra je externe voedig aansluit met hogere voltage dan 5.5v zal mosfet gaan geleiden en VUSB alsuiten en externe voeding zal dan het circuit voeden. Geen idee of nano dat ook heeft, zal je het schema even moeten nakijken van de nano.Ik ga eens een test doen met een externe stroomvoorziening(op de usb poort) en een aparte serial-usb adapter op de pinnen rx en tx , want ik heb de indruk dat hij de usb spanning voorneemt op andere voedingen.Ik had immers het relais eens niet aangesloten en het ging ook mis na een tijd...dus misschien ligt het niet aan het relais...
Maar is het niet handiger om de relays op eigen voeding aan te sluiten. Dan moet je de jumper eraf halen, die tussen VCC en VCC JD zit, dat is 3 pin header, je kan de externe voeding op GND en VCC aansluiten, VCC JD(middelste pin) niet aansluiten. Bij de andere pin headre(10p) sluit je gewoon de VCC en GND aan van de arduino, dan zitten de beide(arduino en de externe voeding van de relais) GND aan elkaar en VCC niet, externe voeding voed dan de relais spoelen en arduino voed de opto coupler en led.
Als je USB printje wel heb aangesloten op de usb en dus stroom staat op TX pin, TX is immers actief high en er kan beetje stroom leveren worden door TX pin, niet veel maar zat om paar leds zwak op te lichten of atmega niet uit te laten gaan als je voeding eruit trekt.s het normaal dat de led op de arduino nano (half) gaat oplichten bij het aansluiten van de tx/rx en gnd pinnen (dus zonder stroom erop te zetten?)
Zo kan zijn dat als usb van nano eruit trekt wanneer je de usb->serial printje er nog aan heb hangen dat arduino gewoon lekker doordraait, zal instabiel zijn uiteraard. Zo heb ik wel eens gehad dat ik dacht dat ik een reset had uitgevoerd door stroom eraf te halen, maar bleef toch nog raar doen, bleek die helemaal niet uit te zijn geweest, gevoed door I/O pin.

Nog eens wat verder wachten of de huidige setup stabiel is (ging mis na een 20tal uur...)