arduino ac dimmer aansturen pwm?

Arduino specifieke Software
Berichten: 17
Geregistreerd: 23 Feb 2013, 14:51

Re: arduino ac dimmer aansturen pwm?

Berichtdoor ddarduino » 24 Feb 2013, 22:30

zo weer even gekeken en in de serieel monitor zie ik dat als ik dim tot pwm waarde 205 / dimming waarde 102, brand hij nog stabiel heel zachtjes, en als ik weer meer licht wil kan ik tot pwm waarde 38 / dimming waarde 19. maar zodra ik over deze laatste waarde heenga begint die te knipperen en loopt ie vast, dus terug dimmen gaat dan ook niet meer.
Dus als het mogelijk is dit te begrenzen, om tussen die waardes te houden ben ik er.

Advertisement

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: arduino ac dimmer aansturen pwm?

Berichtdoor astrofrostbyte » 24 Feb 2013, 23:24

Mooi,

De limits zijn makkelijk toe te voegen:
Code: Alles selecteren
if (packBuff[0] = 'P' && packBuff[1]=='W' && packBuff[2]=='M') // Wait for "PWMXXX", use XXX as PWM value
    {   
      pwmVal = (packBuff[3] - '0')*100 + (packBuff[4] - '0')*10 + (packBuff[5] - '0');
      Serial.print("PWM Waarde is: ");   Serial.println(pwmVal);
      if (pwmVal > 205) pwmVal = 205;        // limit
      if (pwmVal < 38  ) pwmVal = 0;           // limit
      dimming = (pwmVal>>1);           // dimming = pwm / 2;
      analogWrite(LED_Pin,pwmVal);     // Set LED_Pin to PWM Value
      Serial.print("Dimming Waarde is: ");   Serial.println(dimming);
    }


Het feit dat ie vast loopt is minder ... je zegt dus dat bij een dimming waarde van zeg 8, het geheel vastloopt en dat je er niet meer uitkomt.?
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Berichten: 17
Geregistreerd: 23 Feb 2013, 14:51

Re: arduino ac dimmer aansturen pwm?

Berichtdoor ddarduino » 24 Feb 2013, 23:30

hoi, ik had zelf dit gedaan:

if (pwmVal < 30) pwmVal=30;
in plaats van
if (pwmVal >255) pwmVal=255;
werkt opzich goed,
maar dan heb ik op het laatste stukje op de slider geen lichtsterkte verschil zal je jouwe is proberen kijken wat die dan doet...

Berichten: 17
Geregistreerd: 23 Feb 2013, 14:51

Re: arduino ac dimmer aansturen pwm?

Berichtdoor ddarduino » 24 Feb 2013, 23:46

hoi,

toch jouw code gebruikt omdat ik daar duidelijker grenzen kan merken, alleen heb ik de 0 in de if line (zie hieronder op 38, misschien was dit ook jouw gedachten. anders heb ik nog steeds dat knipperen)
if (pwmVal < 38 ) pwmVal = 0; hier heb ik dus if (pwmVal < 38 ) pwmVal = 38;

helemaal happy thnx

nu kijken om meerdere schakelingen en dimmers in 1 programmering te verwerken zonder dat ze elkaar beinvloeden.
k zal jullie op de hoogte houden, misschien dat er meer mensen zijn die er wat aan hebben.

Berichten: 17
Geregistreerd: 23 Feb 2013, 14:51

Re: arduino ac dimmer aansturen pwm?

Berichtdoor ddarduino » 27 Feb 2013, 22:29

Weet toevallig ook iemand of het mogelijk is om 2 puls drukkers te gebruiken om up en down te dimmen?
ik krijg het wel zo dat ik met een drukker een stand kan kiezen bv 4 knoppen, uit, 25%, 50%, 100%
maar ik wil dus 2 knoppen 1 knop aan en lichtsterkte omhoog, 1 knop uit en lichtsterkte omlaag.

groet

Berichten: 27
Geregistreerd: 23 Feb 2013, 12:07

Re: arduino ac dimmer aansturen pwm?

Berichtdoor walker » 27 Feb 2013, 23:24

Om met twee toetsen te werken kun je het volgende doen. Met de ene toets verlaag je de waarde van de variabele dimming en met de andere toets verhoog je de waarde. Daarna controleer je of de waarde van dimming nog binnen de grens ligt.
bijv.

toets 1:
dimming += 2;
if (dimming > 102) dimming = 102;

toets 2:
dimming -= 2;
if (dimming < 38 ) dimming = 38;

Als je met met hardware druktoetsen werkt moet je rekening houden met contact dender.

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: arduino ac dimmer aansturen pwm?

Berichtdoor astrofrostbyte » 28 Feb 2013, 15:37

Zoals Walker al aangeeft, ergens in je loop() een plek kiezen waar je periodiek komt en daar die toetsen afhandelen.

Altijd even rekening houden met die lastige dender. hier zijn vele voorbeelden van te vinden.
Wat je ook nog moet bedenken is dat als je de toets ingedrukt houd dat dan de dimming waarden in een rustige snelheid verhoogt/verlaagt wordt.
Als je gewoon bij key==high dimming++ zou doen en dat stukje code wordt 1000 keer per seconde in de loop aangeroepen , dan reageerd het veels te wild.
Je zal toch iets van een timing element bv millis() moeten toevoegen (geen delay() dit is 'slecht' voor je loop() )
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Berichten: 17
Geregistreerd: 23 Feb 2013, 14:51

Re: arduino ac dimmer aansturen pwm?

Berichtdoor ddarduino » 28 Feb 2013, 21:10

Allereerst,

Walker bedankt.
werkt erg mooi zo. thnx

ik kan nu dimmen via me telefoon/ipod en de puls drukkers, en de lamp op pin 6 aan en uit zetten.
En vandaag ben ik bezig geweest om een tweede dimmer toe te voegen, maar krijg dit niet voor elkaar,
ik denk zelf dat dit ligt aan de pwmVal = o; , maar ik kom er niet helemaal uit.
komt dit door het aantal interrupts op een arduino uno?

groet

Berichten: 17
Geregistreerd: 23 Feb 2013, 14:51

Re: arduino ac dimmer aansturen pwm?

Berichtdoor ddarduino » 28 Feb 2013, 21:12

ohw dit is de code zoals hij nu is:

#include <SPI.h> // voor Arduino versie 0018 en hoger
#include <EthernetUdp.h>
#include <Ethernet.h>
////////// NETWORK INFO ////////////////
byte mac[] = { 0x90, 0xa2, 0xda, 0x00, 0xf9, 0x64 }; // mac adres van deethernet shield
byte ip[] = { 192, 168, 1, 8 }; // het ip adres dat je aan je arduio wilt geven
unsigned int localPort = 7777; // de poort die je wilt gebruiken
IPAddress iPhoneIP(192, 168, 1, 15); //ip adres van je iphone/ipad/ipod
unsigned int iPhonePort = 7777; // poort van de iphone/ipad/ipod (zelfde als localport)
///////////////// UDP Variables //////////////////
char packBuff[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
///////// Pin verklaring /////////////////
int LED_Pin = 6; // maakt LED_Pin van Pin 6
const int dim_up = 7; // dim up
int dim_down = 9; //dim down
int AC_LOAD = 3; // Output to Opto Triac pin
///////// Variabelle //
int dimming = 128; // Dimming level (0-128) 0 = ON, 128 = OFF
int pwmVal = 0; // Integer that will hold our PWM values for later use
int buttonState = 0;
EthernetUDP Udp;
//-------------------------------------------------------------------------
void setup() {
Ethernet.begin(mac,ip);
Udp.begin(localPort);
Serial.begin(9600);
pinMode(LED_Pin, OUTPUT);
pinMode(AC_LOAD, OUTPUT);
pinMode(dim_up, INPUT);
pinMode(dim_down, INPUT);
attachInterrupt(0, zero_crosss_int, RISING);
}
//-------------------------------------------------------------------------
void zero_crosss_int() // function to be fired at the zero crossing to dim the light
{ // Firing angle calculation :: 50Hz-> 10ms (1/2 Cycle)
int dimtime = (75*dimming); // (10000us - 10us) / 128 = 75 (Approx)
delayMicroseconds(dimtime); // Off cycle
digitalWrite(AC_LOAD, HIGH); // triac firing
delayMicroseconds(10); // triac On propogation delay
digitalWrite(AC_LOAD, LOW); // triac Off
}
//-------------------------------------------------------------------------
void loop()
{
// read the state of the pushbutton value:
buttonState = digitalRead(dim_up);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
Serial.println("button higher");
dimming -= 2;
if (dimming < 20) dimming = 20;
}
{
// read the state of the pushbutton value:
buttonState = digitalRead(dim_down);
if (buttonState == HIGH) {
Serial.println("button lower");
// turn higher on:
dimming += 2;
if (dimming > 112) dimming = 125;
}
int packetSize = Udp.parsePacket();
if(packetSize)
{ packetSize = packetSize - 8; // subtract 8 byte header
Udp.read(packBuff,UDP_TX_PACKET_MAX_SIZE);
if (packBuff[0] = 'P' && packBuff[1]=='W' && packBuff[2]=='M') // Wait for "PWMXXX", use XXX as PWM value
{
pwmVal = (packBuff[3] - '0')*100 + (packBuff[4] - '0')*10 + (packBuff[5] - '0');
if (pwmVal > 250) pwmVal= 250; // limit
if (pwmVal < 15) pwmVal= 15; // limit
dimming = (pwmVal>>1); // dimming = pwm / 2;
Serial.println("Dimming Waarde is: "); Serial.println(dimming); // Write notification
}
else if (packBuff[0] = 'P' && packBuff[1]=='6' && packBuff[2]=='H') // If message "P6H", set LED_Pin (6) HIGH
{
digitalWrite(LED_Pin,HIGH); // Turn on LED_Pin
Serial.println("LED ON"); // Write notification
Udp.beginPacket(iPhoneIP,iPhonePort);
Udp.write("LED 6 is ON"); // Send Message back to iPhone
Udp.endPacket();
}
else if (packBuff[0] = 'P' && packBuff[1]=='6' && packBuff[2]=='L') // If message "P6L", set LED_Pin (6) LOW
{
digitalWrite(LED_Pin,LOW); // Turn off LED_Pin
Serial.println("LED OFF"); // Write notification
Udp.beginPacket(iPhoneIP, iPhonePort);
Udp.write("LED 6 is OFF"); // Send Message back to iPhone
Udp.endPacket();
}


delay(20);


}}}

Berichten: 17
Geregistreerd: 23 Feb 2013, 14:51

Re: arduino ac dimmer aansturen pwm?

Berichtdoor ddarduino » 01 Mrt 2013, 21:23

niemand?
die weet hoe ik de dimmerfunctie 2 keer kan toepassen?

VorigeVolgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 33 gasten