Rook uit Arduino Mega, voltage regulator stuk?

Volgens mij was ik vandaag zo slim om met de +5V out via via volle sluiting naar de GND te maken. Een klein rookwolkje uit de Arduino tot gevolg, volgens mij zo snel ik kon zien in de buurt van de voltage regulator - mogelijk niet uit de voltage regulator zelf. Direct losgemaakt maar het kwaad was geschied.

Extern is geen schade te bespeuren, de Arduino start normaal en leek in eerste instantie normaal te werken, maar bleek toch van niet.

Er hangen 2x 8voudige relaisblok achter, in eerste instantie schakelen alle relais hoog maar na enkele momenten zakt de +5V zo onderuit dat de relais afvallen en niet meer willen schakelen (alleen de LEDjes op de relaisblokken branden nog zwak) Bij aansturen van de relais door de Arduino knipperen de zwakke ledjes op het relaisblok wel uit en aan maar de relais schakelen pas weer mee als bijna alle lampjes uit zijn - dan is het voltage dus hoog genoeg.

Mijn multimeter toont dat de +5V met alle relais ingeschakeld terug loopt naar zo'n 2,9V.... Koppel ik de +5V naar de relaisblokken af, dan heb ik weer +5V en werkt alles verder normaal. Dit zowel met een externe 12V voeding aangesloten als met een USB voeding.

Is deze Arduino te redden met een nieuwe regulator? Of is er misschien (ook) iets anders stuk? En wat heb ik dan nodig en waar kan ik dit kopen? :)

Even snel voorstellen is trouwens op zijn plaats; ik ben Joeri uit regio Nijmegen.

Ik heb MTS elektrotechniek gedaan 20jaar geleden maar gespecialiseerd op de energietechiek kant. Weet dus wel iets van elektronica maar is relatief beperkt. Ik werk als projectmanager bij een middelgroot elektrotechnisch installatiebedrijf.

Ik ben pas begonnen met Arduino om de LED verlichting onder de trap op een leuke manier te gaan aansturen :)

@joeri Voor we iets zinnigs kunnen zeggen is het belangrijk om meer te weten over je schakeling. De eerste vragen die bij mij opkomen 1) Hoe voedt je je arduino? Via USB of via jack? 2) stuur je de relais rechtstreeks via arduino of via transistors of mosfets? 3) hoeveel stroom trekken je relais. 4) Het gedrag dat je omschrijft had je vroeger niet zeg je. Maar ben je zeker dat je net dezelfde test doet?

Met vriendelijke groet Jantje

De 5V regulator kan slechts 500mA aan. Dus die moet je niet gebruiken om relais aan te sturen. Je moet dus een externe 5V voeding (met een paar Amperes) voor de relais aansturing gebruiken. Wel alle GNDs aan elkaar koppelen.

@Jantje: 1) Via USB of via Jack (12V DC aangesloten) reageert hetzelfde. 2) Zo ziet het relaisblok er uit wat ik gebruik, zit electronica in (maar weet niet precies wat) dus denk niet rechtstreeks (bij mij staat er geen merkje op) 3) Weet niet hoeveel stroom deze relais exact trekken, maar de Sainsmart die er exact hetzelfde uitziet trekt 15-20mA per relais. Zou dus met 16stuks moeten kunnen werken binnen de 500mA. 4) Ja, voor de rookwolk schakelden de relais wel normaal... Ook alle 16 tegelijk. Althans, via USB wel! Via de 12V jack gingen de relais staan knipperen (alles aan, alles uit, etc). Dit was ik juist aan het onderzoeken toen ik de rookpluim maakte.

@nicoverduin: Dit verklaart waarom de relais niet vanuit de signaalingangen bekrachtigd worden maar het relaisblok een aparte +5V en GND aansluiting heeft. Wellicht heb ik de regulator zodanig beschadigd dat hij nu minder mA's aan kan. Een aparte 5V voeding op het relaisblok, en de GND's koppelen. Gaan we uitproberen! Zal denk qua planning wel dinsdag worden. Ik laat het nog weten!

als je via USB gaat passeer je de voltage regulator niet. Dan kan ie ook niet stuk gaan. Als de arduino nog werkt op jack is de voltage regulator misschien wel kaduc maar toch niet stuk. Dat kaduc zou kunnen verklaren waarom je het ook met een USB voeding hebt.

Je kan geen 500mA trekken uit de pinnen van een arduino. Als ik het goed heb kan je 200mA trekken maar best is daar toch flink onder te blijven. Op de foto van de relais zie ik niet zomaar een externe 5V. Het kan natuurlijk via de header gaan. Als dat zo is zal het wel met een mosfet of transistor zijn. Met vriendelijke groet Jantje

Hoi Joeri, welkom.

Ik kom uit dezelfde omgeving en heb even opgezocht waar je werkt, dat bedrijf is me bekend van naam. De foto die je laat zien laat een redelijk bekende oplossing zien. Die oplossing biedt ondersteuning van de relais met vrijwel geen belasting van Arduino pinnen. De elektronica die je ziet, zijn namelijk opto couplers (de grotere zwarte blokjes met 4 pootjes). Aan de Arduino kant zijn dat LEDjes, aan de relais kant zijn dat transistoren. Die transistoren sturen een tweede transistor aan (zodat de logica weer terug omgedraaid word), en die op zijn beurt weer het betreffende relais.

Ik raad je aan het boardje en diens opschrift goed te lezen. Rechts op het boardje kun je met dat blauwe jumpertje de GND verbinden of onderbreken. Ik raad je aan in dit geval de GND te onderbreken, en ga omdat ik de foto gezien heb dus tegen Nico's advies in. Je moet dan het boardje wel via die pinnen voeden met de externe 5 volt. Op die manier zijn Arduino en relais 100 % van elkaar gescheiden en kun je veilig werken.

Op de site van sainsmart kun je gegevens vinden over hoe dit boardje in elkaar zit. Als het een ander merk is, is de kans redelijk groot dat het toch op exact dezelfde wijze werkt.

Van de gebruikte relais kun je zo de specs vinden op het web.

zoek op sainsmart relay dan vindt je ook een elektrisch schema
pin 1 sluit je aan op de 0 van de extravoedingsstekker.
pin 2 gaat naar +5V van de arduino
de IN0 kan naar elke pin van de arduino gaan.
als je nu de poortpin LOW maakt gaat de interne led aan en dus de optocoupler.
dan gaat er ook stroom lopen van pin3 via de opto naar het relais dat dan aan zal gaan.
door In0 loopt hooguit 20 mA
maar door de optocoupler loopt veel meer.
en dat gaat de 5V van USB of de 5V regelaar op de arduino echt niet redden.
De spanning van pin3 is afhankelijk van de spoelspanning en is of 05 of 12 of zelfs 24 Volt.
en ik denk inderdaad dat je regelaar kapot is, dus een nieuwe erop (of een nieuwe UNO kopen, is misschien net zo goedkoop.

shooter:
en ik denk inderdaad dat je regelaar kapot is, dus een nieuwe erop (of een nieuwe UNO kopen, is misschien net zo goedkoop.

't is een mega… ff duurder…

Ok, we zijn wat verder gegaan inmiddels.
Zelf ook de schema’s geraadpleegd en ervoor gekozen om de externe 5V op de relais volledig gescheiden aan te sluiten.
De relais worden nu prima bekrachtigd en aangestuurd door de Arduino.

In de testopstelling met de sensoren werkte het prima. Maar met alle sensoren op de eindbestemming gemonteerd (via UTP’s aangesloten/gesoldeerd) gaf het toch problemen, ben lang aan het zoeken geweest maar kon niet vinden waar dit vandaan kan komen.

Korte uitleg van wat ik gemaakt heb;

Uitgangen:

  • 16x uitgang naar relais voor LED verlichting onder 16 traptreden
  • Aantal PWM uitgangen met verschillende presets geprogrammeerd om 1 transistor aan te sturen met PWM voor centraal dimmen van alle LED’s (omsteken naar andere PWM uitgang voor andere dimwaarde)

Ingangen:
-Afstandsmeter HC-SR04 onder onderste trede (schakelen bij <80cm)
-Afstandsmeter HC-SR04 op bovenste trede (schakelen bij <80cm)
-PIR HC-SR501 halverwege de trap voor inschakelen eerste trede als orientatieverlichting bij beweging in de gang
-Lichtsensor om de boel bij voldoende daglicht te blokkeren.

Het doel is dat alle treden 1 voor 1 aanschakelen, even blijven branden en daarna weer 1 voor 1 uit gaan in de richting van de persoon die op de trap loopt.

Na aansluiten van de kabels leek alles te functioneren maar steeds werd de trapverlichting ingeschakeld als zou er iemand voor de afstandsmeters staan (soms boven naar benden, soms andersom).
Ik kon maar niet vinden waar het vandaan kwam. Inmiddels had ik voor de zekerheid ook maar een nieuwe Arduino Mega aangeschaft, eventueel om mee te blijven prutsen als alles werkend zou worden op de andere.

Toch voor de zekerheid dus de nieuwe arduino even het programma erin geschoten en deze in de schakeling gemaakt. Werken!! Heeft toch vast met voltages en signalen te maken, de vorige arduino functioneert gewoon niet meer optimaal.

Het enige probleem wat ik nog wel heb is dat willekeurig, soms met enkele minuten ertussen er toch door de arduino een echo gezien wordt en de trapverlichting inschakeld… Enig idee wat dat nog kan zijn??
Zal zo mijn code posten…

#include <NewPing.h>

int lichtPin= 14;
int pirPin = 15;

#define TRIGGER_PIN  16  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     17  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 400 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

#define TRIGGER_PIN2  18  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN2     19  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE2 400 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

int fadePin1 = 2;
int fadePin2 = 3;
int fadePin3 = 4;
int fadePin4 = 5;
int fadePin5 = 6;
int fadePin6 = 7;
int fadePin7 = 8;
int fadePin8 = 9;
int fadePin9 = 10;
int fadePin10 = 11;
int fadePin11 = 12;
int fadePin12 = 13;

int LedPin01 = 44;
int LedPin02 = 42;
int LedPin03 = 40;
int LedPin04 = 38;
int LedPin05 = 36;
int LedPin06 = 34;
int LedPin07 = 32;
int LedPin08 = 30;

int LedPin09 = 45;
int LedPin10 = 43;
int LedPin11 = 41;
int LedPin12 = 39;
int LedPin13 = 37;
int LedPin14 = 35;
int LedPin15 = 33;
int LedPin16 = 31;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); 
NewPing sonar2(TRIGGER_PIN2, ECHO_PIN2, MAX_DISTANCE2);



void setup()
{
  pinMode(lichtPin, INPUT);
  pinMode(pirPin, INPUT);
  
  pinMode(fadePin1, OUTPUT);
  pinMode(fadePin2, OUTPUT);
  pinMode(fadePin3, OUTPUT);
  pinMode(fadePin4, OUTPUT);  
  pinMode(fadePin5, OUTPUT);  
  pinMode(fadePin6, OUTPUT);    
  pinMode(fadePin7, OUTPUT);
  pinMode(fadePin8, OUTPUT);
  pinMode(fadePin9, OUTPUT);
  pinMode(fadePin10, OUTPUT);  
  pinMode(fadePin11, OUTPUT);  
  pinMode(fadePin12, OUTPUT);   
    
  pinMode(LedPin01, OUTPUT);
  pinMode(LedPin02, OUTPUT);
  pinMode(LedPin03, OUTPUT);
  pinMode(LedPin04, OUTPUT);
  pinMode(LedPin05, OUTPUT);
  pinMode(LedPin06, OUTPUT);
  pinMode(LedPin07, OUTPUT);
  pinMode(LedPin08, OUTPUT);
  pinMode(LedPin09, OUTPUT);
  pinMode(LedPin10, OUTPUT);
  pinMode(LedPin11, OUTPUT);
  pinMode(LedPin12, OUTPUT);
  pinMode(LedPin13, OUTPUT);
  pinMode(LedPin14, OUTPUT);
  pinMode(LedPin15, OUTPUT);
  pinMode(LedPin16, OUTPUT);

  analogWrite(fadePin1, 20);
  analogWrite(fadePin2, 40);  
  analogWrite(fadePin3, 60);
  analogWrite(fadePin4, 80);
  analogWrite(fadePin5, 100);
  analogWrite(fadePin6, 120);
  analogWrite(fadePin7, 140);
  analogWrite(fadePin8, 160);  
  analogWrite(fadePin9, 180);
  analogWrite(fadePin10, 200);
  analogWrite(fadePin11, 220);
  analogWrite(fadePin12, 240);
  }



void loop()
{
  if (digitalRead(lichtPin) == HIGH)
  {
    
    
    if (digitalRead(pirPin) == HIGH)
    {
      digitalWrite(LedPin01, HIGH);
    }
    else
    {
      digitalWrite(LedPin01, LOW);
    }


    delay(100);
    unsigned int uS = sonar.ping();
    int distanceCMs = (uS / US_ROUNDTRIP_CM);

    if (distanceCMs < 80)
    {
      digitalWrite(LedPin01, HIGH);
      delay (300);
      digitalWrite(LedPin02, HIGH);
      delay (300);
      digitalWrite(LedPin03, HIGH);
      delay (300);
      digitalWrite(LedPin04, HIGH);
      delay (300);
      digitalWrite(LedPin05, HIGH);
      delay (300);
      digitalWrite(LedPin06, HIGH);
      delay (300);
      digitalWrite(LedPin07, HIGH);
      delay (300);
      digitalWrite(LedPin08, HIGH);
      delay (300);
      digitalWrite(LedPin09, HIGH);
      delay (300);
      digitalWrite(LedPin10, HIGH);
      delay (300);
      digitalWrite(LedPin11, HIGH);
      delay (300);
      digitalWrite(LedPin12, HIGH);
      delay (300);
      digitalWrite(LedPin13, HIGH);
      delay (300);
      digitalWrite(LedPin14, HIGH);
      delay (300);
      digitalWrite(LedPin15, HIGH);
      delay (300);
      digitalWrite(LedPin16, HIGH);

      delay (8000);

      digitalWrite(LedPin01, LOW);
      delay (300);
      digitalWrite(LedPin02, LOW);
      delay (300);
      digitalWrite(LedPin03, LOW);
      delay (300);
      digitalWrite(LedPin04, LOW);
      delay (300);
      digitalWrite(LedPin05, LOW);
      delay (300);
      digitalWrite(LedPin06, LOW);
      delay (300);
      digitalWrite(LedPin07, LOW);
      delay (300);
      digitalWrite(LedPin08, LOW);
      delay (300);
      digitalWrite(LedPin09, LOW);
      delay (300);
      digitalWrite(LedPin10, LOW);
      delay (300);
      digitalWrite(LedPin11, LOW);
      delay (300);
      digitalWrite(LedPin12, LOW);
      delay (300);
      digitalWrite(LedPin13, LOW);
      delay (300);
      digitalWrite(LedPin14, LOW);
      delay (300);
      digitalWrite(LedPin15, LOW);
      delay (300);
      digitalWrite(LedPin16, LOW);
    }

    delay(100);
    unsigned int uS2 = sonar2.ping();
    int distanceCMs2 = (uS2 / US_ROUNDTRIP_CM);

    if (distanceCMs2 < 80)
    {
      digitalWrite(LedPin16, HIGH);
      delay (300);
      digitalWrite(LedPin15, HIGH);
      delay (300);
      digitalWrite(LedPin14, HIGH);
      delay (300);
      digitalWrite(LedPin13, HIGH);
      delay (300);
      digitalWrite(LedPin12, HIGH);
      delay (300);
      digitalWrite(LedPin11, HIGH);
      delay (300);
      digitalWrite(LedPin10, HIGH);
      delay (300);
      digitalWrite(LedPin09, HIGH);
      delay (300);
      digitalWrite(LedPin08, HIGH);
      delay (300);
      digitalWrite(LedPin07, HIGH);
      delay (300);
      digitalWrite(LedPin06, HIGH);
      delay (300);
      digitalWrite(LedPin05, HIGH);
      delay (300);
      digitalWrite(LedPin04, HIGH);
      delay (300);
      digitalWrite(LedPin03, HIGH);
      delay (300);
      digitalWrite(LedPin02, HIGH);
      delay (300);
      digitalWrite(LedPin01, HIGH);

      delay (8000);

      digitalWrite(LedPin16, LOW);
      delay (300);
      digitalWrite(LedPin15, LOW);
      delay (300);
      digitalWrite(LedPin14, LOW);
      delay (300);
      digitalWrite(LedPin13, LOW);
      delay (300);
      digitalWrite(LedPin12, LOW);
      delay (300);
      digitalWrite(LedPin11, LOW);
      delay (300);
      digitalWrite(LedPin10, LOW);
      delay (300);
      digitalWrite(LedPin09, LOW);
      delay (300);
      digitalWrite(LedPin08, LOW);
      delay (300);
      digitalWrite(LedPin07, LOW);
      delay (300);
      digitalWrite(LedPin06, LOW);
      delay (300);
      digitalWrite(LedPin05, LOW);
      delay (300);
      digitalWrite(LedPin04, LOW);
      delay (300);
      digitalWrite(LedPin03, LOW);
      delay (300);
      digitalWrite(LedPin02, LOW);
      delay (300);
      digitalWrite(LedPin01, LOW);
    }

 }




}

NB: Ik weet het, de relais moeten eigenlijk LOW gestuurd worden om hoog te worden. Maar ik heb het wisselcontact van de uitgang andersom aangesloten om dit te corrigeren. :)

Zo dus is het resultaat nu:

ik vind het prachtig, heel mooi effect. dat af en toe fout kun je oplossen door eenfilter, insoftware, met bijv de waarde een paar keer redelijk gelijk zijn. een piekje is dan niet genoeg.

Super! Bedankt voor de tip! Zo een filter zit zelfs in de newping library standaard al in: ping_median(); Deze zoekt het gemiddelde van 5 pings om de meting betrouwbaarder te maken.

Verder heb ik een extra regel toegevoegd zodat de ping tussen de 10cm en 80cm in moet liggen. Ik vermoed dat er soms wat stof/hondenhaar in de sensor komt en dat dat mogelijk ook storingen geeft.

Ben benieuw of het met deze maatregelen helemaal is opgelost!

NB: Inmiddels heb ik ook de libray SoftPWM ontdekt. Ik wil de LED's onder de trap nu via PWM gaan aansturen. De relais gaan er tussenuit, ik heb 16 transistoren met voorweerstanden besteld, een stuk prototyping printplaat, een printheader en printklemmen. Eens zien of we nog kunnen solderen :) Dan wil ik de LED's op de treden laten infaden en uitfaden. Op mijn "deels" kaduc'e Arduino heb ik dit al draaien voor normale 5v LED's op mijn breadboard, dit ziet er leuk uit :)

JoeriAardweg: Ik vermoed dat er soms wat stof/hondenhaar in de sensor komt en dat dat mogelijk ook storingen geeft.

Tip voor je volgende project: YAVaC (Yet Another Vacuum Cleaner).

Een volautomatische stofzuiger dus. Ook leuk voor de huisdieren trouwens.

JoeriAardweg: Zo dus is het resultaat nu: http://youtu.be/VyC86fnDZVA

mooi gedaan

JoeriAardweg: Zo dus is het resultaat nu: http://youtu.be/VyC86fnDZVA

Wow ! Heel mooi effect !

JoeriAardweg: Inmiddels heb ik ook de libray SoftPWM ontdekt. Ik wil de LED's onder de trap nu via PWM gaan aansturen. De relais gaan er tussenuit, ik heb 16 transistoren met voorweerstanden besteld, een stuk prototyping printplaat, een printheader en printklemmen. Eens zien of we nog kunnen solderen :) Dan wil ik de LED's op de treden laten infaden en uitfaden.

Het werkt! Na wat soldeerwerk de 16 relais eruit, schakeling via 16 transistors erin, programma aangepast en hoppa!

Nadeel, de LED's hebben een zichtbare flikker. Wat nazoeken levert op dat de SoftPWM slechts een frequentie van 30Hz uitstuurt! Dit is misschien op 5mm LED's niet zichtbaar maar als je een hele trap verlicht dus zeker wel :( Zou er een manier zijn om de SoftPWM frequentie omhoog te krijgen zodat het geflikker niet meer zichtbaar is voor het oog?

Of een andere optie; de Mega die ik gebruik heeft 14 PWM uitgangen, dus kan 14 treden direct via PWM laten infaden en uitfaden maar kan ik dan de laatste 2 treden nog via SoftPWM doen? Ben al aan het zoeken maar valt voor een beginneling als ik nog niet mee om dan te maken wat ik precies wil...