Page 2 of 8 FirstFirst 1234 ... LastLast
Results 11 to 20 of 71

Thread: Help design new AC controller

  1. #11
    Join Date
    May 2007
    Posts
    5,477
    Post Thanks / Like

    Default Re: Help design new AC controller

    The 328P itself has more than enough hardware resources to do the job, the question is whether the firmware implementation can make good use of all those resources.
    Phil

  2. #12
    Join Date
    Dec 2011
    Location
    UK S80 postcode
    Posts
    1,519
    Post Thanks / Like

    Default Re: Help design new AC controller

    Quote Originally Posted by Randomaker View Post
    Thats a good idea to set the IP to default, I didnt think of that. I may do that. Im already using i2c bus, so yes I could add a display without using any extra pins. If I have all dips off to return to default ip, is it worth the extra cost to add the screen though? The reason Im not using a 2560 (mega) is bc Im trying to stay to all tht components so anyone can build it. And yes, I am planning on making it open source once I build the first version to make sure this will even work.

    Edit- I guess I can make the screen optional, but that's another thing for an already underpowered (I think) arduino to do. But this project is for others as well as myself, so what do you think?
    Hi, an I2C screen is quite easy to do. In the extract below it uses 4 pins (SCL, SDA and two buttons) If a button is pressed at boot it runs the setup function using the two buttons to change values. Once set, reboot and don’t press a button and the main code will run. Using this method it always defaults to the main code.
    Code:
    #include <Wire.h>
    #include <EEPROM.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    #define SSD1306_128_32
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    
    
    // variables for screen and menu
    int screen_position = 0; // button a postion.
    int A_100 = 0; // value for 100s digit.
    int A_10 = 0; // value for 10s digit.
    int A_1 = 0; // value for 1s digit.
    int B_100 = 0; // value for 100s digit.
    int B_10 = 0; // value for 10s digit.
    int B_1 = 0; // value for 1s digit.
    int A_eeprom; // stored pixel value.
    int B_eeprom; // stored pixel value.
    int button_1 = 12; // button pin.
    int button_2 = 11; // button pin.
    int screen_short = 8; // screen detect pin.
    
    // variables for screen pixel data splitting.
    int count_A; // T2 count value.
    int count_B; // T2 count value.
    
    
    void setup() {
      solid_led(); // sets onboard LED on.
      // read previously set values
      A_eeprom = ((EEPROM.read(0) * 256) + EEPROM.read(1)); // read eeprom.
      B_eeprom = ((EEPROM.read(2) * 256) + EEPROM.read(3)); // read eeprom.
      count_A = ((A_eeprom * 24) - 1); // convert pixels to bits.
      count_B = (((A_eeprom + B_eeprom) * 24) - 1); // convert pixels to bits.
    
      //  setup and menu if button pressed at power up.
      pinMode(button_2, INPUT_PULLUP); // set button input with pullup.
      delay(1);
      if (digitalRead(button_2) == LOW) { // check if pin is low - screen connected.
        pinMode(button_1, INPUT_PULLUP); // set button input with pullup.
        display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // start oled instance.
        display.clearDisplay(); // clear display.
        display.setTextSize(2); // set text size to 2.
        display.setTextColor(WHITE); // set text colour to white.
        A_100 = A_eeprom / 100; // calculate 100s digit.
        A_eeprom -= A_100 * 100; // subtract 100s digit.
        A_10 = A_eeprom / 10; // calculate 10s digit.
        A_eeprom -= A_10 * 10; // subtract 10s digit.
        A_1 = A_eeprom; // calculate 1s digit.
        B_100 = B_eeprom / 100; // calculate 100s digit.
        B_eeprom -= B_100 * 100; // subtract 100s digit.
        B_10 = B_eeprom / 10; // calculate 10s digit.
        B_eeprom -= B_10 * 10; // subtract 10s digit.
        B_1 = B_eeprom; // calculate 1s digit.
        pix_num_find(); // run the menu function.
      }
    
    //----MAIN FUNCTION CODE REMOVED FROM HERE-----
    
    // all below here is menu and screen functions only called if screen fitted.
    void pix_num_find() { // the menu function.
      for (;;) { // start endless loop.
        if (digitalRead(button_1) == LOW) screen_position++; // if button 'a' pressed increment position.
        if (screen_position > 7) screen_position = 1; // if at end of menu goto start.
        switch (screen_position) { // switch dependant on button 'a' value.
          case 0:
            display.clearDisplay(); // clear display.
            display.setCursor(0, 0); // set curser to line 0 left position.
            display.print("Renard"); // text to print on screen.
            display.setCursor(25, 16); // set curser to line 2 left position.
            display.print("PLUS 0.4"); // text to print on screen.
            display.display(); // update screen and display new text.
            delay(1000); // delay.
            break; // back to the start and do it all again.
    
          case 1:
            if (digitalRead(button_2) == LOW) A_100++; // if button 'b' pressed increment 100s value.
            if (A_100 > 9) A_100 = 0; // if value more than 9 set back to 0.
            set_screen(); // function to update screen with new values.
            delay(500); // delay.
            flash_screen_1(); // a screen update with the current digit masked out.
            delay(500); // delay.
            break; // back to the start and do it all again.
    
          case 2:
            if (digitalRead(button_2) == LOW) A_10++;
            if (A_10 > 9) A_10 = 0;
            set_screen();
            delay(500);
            flash_screen_2();
            delay(500);
            break;
    
          case 3:
            if (digitalRead(button_2) == LOW) A_1++;
            if (A_1 > 9) A_1 = 0;
            set_screen();
            delay(500);
            flash_screen_3();
            delay(500);
            break;
    
          case 4:
            if (digitalRead(button_2) == LOW) B_100++;
            if (B_100 > 9) B_100 = 0;
            set_screen();
            delay(500);
            flash_screen_4();
            delay(500);
            break;
    
          case 5:
            if (digitalRead(button_2) == LOW) B_10++;
            if (B_10 > 9) B_10 = 0;
            set_screen();
            delay(500);
            flash_screen_5();
            delay(500);
            break;
    
          case 6:
            if (digitalRead(button_2) == LOW) B_1++;
            if (B_1 > 9) B_1 = 0;
            set_screen();
            delay(500);
            flash_screen_6();
            delay(500);
            break;
    
          case 7: // the save values bit of the menu.
            if (digitalRead(button_2) == LOW) { // if button 'b' pressed to save.
              // add up 100s + 10s + 1s to gat a decimal value.
              EEPROM.update(0, ((A_100 * 100) + (A_10 * 10) + A_1 >> 8)); // write to eeprom bits [15:8].
              EEPROM.update(1, ((A_100 * 100) + (A_10 * 10) + A_1)); // write to eeprom bits [7:0].
              EEPROM.update(2, ((B_100 * 100) + (B_10 * 10) + B_1 >> 8)); // write to eeprom bits [15:8].
              EEPROM.update(3, ((B_100 * 100) + (B_10 * 10) + B_1)); // write to eeprom bits [7:0].
              delay(500); // delay
              display.clearDisplay(); // clear display.
              display.setCursor(0, 0); display.print("A now "); // set cursor and print text.
              display.print((EEPROM.read(0) * 256) + EEPROM.read(1)); // read eeprom and convert to decimal number.
              display.setCursor(0, 16); display.print("B now "); // set cursor and print text.
              display.print((EEPROM.read(2) * 256) + EEPROM.read(3)); // read eeprom and convert to decimal number.
              display.display(); // update display.
              screen_position = 1; // reset menu position to start.
              delay(5000); // delay.
              break; // back to the start and do it all again.
            }
            display.clearDisplay(); // if button 'b' not pressed.
            display.setCursor(0, 0); display.print("Set val's?"); // set cursor and print text.
            display.setCursor(0, 16); display.print((A_100 * 100) + (A_10 * 10) + A_1); // set cursor and calculate value as digits.
            display.print(" & "); display.print((B_100 * 100) + (B_10 * 10) + B_1); // set cursor and calculate value as decimal digits.
            display.display(); // update display.
            delay(1000); // delay.
            break; // back to the start and do it all again.
        }
      }
    }
    void set_screen() {
      display.clearDisplay();
      display.setTextSize(2);
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_1() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(" "); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_2() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(" "); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_3() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(" ");
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_4() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(" "); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_5() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(" "); display.print(B_1);
      display.display();
    }
    
    void flash_screen_6() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(" ");
      display.display();
    }
    
    void solid_led() {
      DDRB = DDRB | B00100000; // set port B [5] as output
      delayMicroseconds(1);
      PORTB = PORTB | B00100000; // set port B [5] high
      delay(1000);
    }
    void loop() {
      // put your main code here, to run repeatedly:
    }

  3. #13
    Join Date
    Aug 2008
    Location
    Delaware, OH
    Posts
    4,573
    Post Thanks / Like

    Default Re: Help design new AC controller

    Most excellent!
    Can't beat those adafruit libraries!!
    Quote Originally Posted by Barnabybear View Post
    Hi, an I2C screen is quite easy to do. In the extract below it uses 4 pins (SCL, SDA and two buttons) If a button is pressed at boot it runs the setup function using the two buttons to change values. Once set, reboot and donít press a button and the main code will run. Using this method it always defaults to the main code.
    Code:
    #include <Wire.h>
    #include <EEPROM.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    #define SSD1306_128_32
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    
    
    // variables for screen and menu
    int screen_position = 0; // button a postion.
    int A_100 = 0; // value for 100s digit.
    int A_10 = 0; // value for 10s digit.
    int A_1 = 0; // value for 1s digit.
    int B_100 = 0; // value for 100s digit.
    int B_10 = 0; // value for 10s digit.
    int B_1 = 0; // value for 1s digit.
    int A_eeprom; // stored pixel value.
    int B_eeprom; // stored pixel value.
    int button_1 = 12; // button pin.
    int button_2 = 11; // button pin.
    int screen_short = 8; // screen detect pin.
    
    // variables for screen pixel data splitting.
    int count_A; // T2 count value.
    int count_B; // T2 count value.
    
    
    void setup() {
      solid_led(); // sets onboard LED on.
      // read previously set values
      A_eeprom = ((EEPROM.read(0) * 256) + EEPROM.read(1)); // read eeprom.
      B_eeprom = ((EEPROM.read(2) * 256) + EEPROM.read(3)); // read eeprom.
      count_A = ((A_eeprom * 24) - 1); // convert pixels to bits.
      count_B = (((A_eeprom + B_eeprom) * 24) - 1); // convert pixels to bits.
    
      //  setup and menu if button pressed at power up.
      pinMode(button_2, INPUT_PULLUP); // set button input with pullup.
      delay(1);
      if (digitalRead(button_2) == LOW) { // check if pin is low - screen connected.
        pinMode(button_1, INPUT_PULLUP); // set button input with pullup.
        display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // start oled instance.
        display.clearDisplay(); // clear display.
        display.setTextSize(2); // set text size to 2.
        display.setTextColor(WHITE); // set text colour to white.
        A_100 = A_eeprom / 100; // calculate 100s digit.
        A_eeprom -= A_100 * 100; // subtract 100s digit.
        A_10 = A_eeprom / 10; // calculate 10s digit.
        A_eeprom -= A_10 * 10; // subtract 10s digit.
        A_1 = A_eeprom; // calculate 1s digit.
        B_100 = B_eeprom / 100; // calculate 100s digit.
        B_eeprom -= B_100 * 100; // subtract 100s digit.
        B_10 = B_eeprom / 10; // calculate 10s digit.
        B_eeprom -= B_10 * 10; // subtract 10s digit.
        B_1 = B_eeprom; // calculate 1s digit.
        pix_num_find(); // run the menu function.
      }
    
    //----MAIN FUNCTION CODE REMOVED FROM HERE-----
    
    // all below here is menu and screen functions only called if screen fitted.
    void pix_num_find() { // the menu function.
      for (;;) { // start endless loop.
        if (digitalRead(button_1) == LOW) screen_position++; // if button 'a' pressed increment position.
        if (screen_position > 7) screen_position = 1; // if at end of menu goto start.
        switch (screen_position) { // switch dependant on button 'a' value.
          case 0:
            display.clearDisplay(); // clear display.
            display.setCursor(0, 0); // set curser to line 0 left position.
            display.print("Renard"); // text to print on screen.
            display.setCursor(25, 16); // set curser to line 2 left position.
            display.print("PLUS 0.4"); // text to print on screen.
            display.display(); // update screen and display new text.
            delay(1000); // delay.
            break; // back to the start and do it all again.
    
          case 1:
            if (digitalRead(button_2) == LOW) A_100++; // if button 'b' pressed increment 100s value.
            if (A_100 > 9) A_100 = 0; // if value more than 9 set back to 0.
            set_screen(); // function to update screen with new values.
            delay(500); // delay.
            flash_screen_1(); // a screen update with the current digit masked out.
            delay(500); // delay.
            break; // back to the start and do it all again.
    
          case 2:
            if (digitalRead(button_2) == LOW) A_10++;
            if (A_10 > 9) A_10 = 0;
            set_screen();
            delay(500);
            flash_screen_2();
            delay(500);
            break;
    
          case 3:
            if (digitalRead(button_2) == LOW) A_1++;
            if (A_1 > 9) A_1 = 0;
            set_screen();
            delay(500);
            flash_screen_3();
            delay(500);
            break;
    
          case 4:
            if (digitalRead(button_2) == LOW) B_100++;
            if (B_100 > 9) B_100 = 0;
            set_screen();
            delay(500);
            flash_screen_4();
            delay(500);
            break;
    
          case 5:
            if (digitalRead(button_2) == LOW) B_10++;
            if (B_10 > 9) B_10 = 0;
            set_screen();
            delay(500);
            flash_screen_5();
            delay(500);
            break;
    
          case 6:
            if (digitalRead(button_2) == LOW) B_1++;
            if (B_1 > 9) B_1 = 0;
            set_screen();
            delay(500);
            flash_screen_6();
            delay(500);
            break;
    
          case 7: // the save values bit of the menu.
            if (digitalRead(button_2) == LOW) { // if button 'b' pressed to save.
              // add up 100s + 10s + 1s to gat a decimal value.
              EEPROM.update(0, ((A_100 * 100) + (A_10 * 10) + A_1 >> 8)); // write to eeprom bits [15:8].
              EEPROM.update(1, ((A_100 * 100) + (A_10 * 10) + A_1)); // write to eeprom bits [7:0].
              EEPROM.update(2, ((B_100 * 100) + (B_10 * 10) + B_1 >> 8)); // write to eeprom bits [15:8].
              EEPROM.update(3, ((B_100 * 100) + (B_10 * 10) + B_1)); // write to eeprom bits [7:0].
              delay(500); // delay
              display.clearDisplay(); // clear display.
              display.setCursor(0, 0); display.print("A now "); // set cursor and print text.
              display.print((EEPROM.read(0) * 256) + EEPROM.read(1)); // read eeprom and convert to decimal number.
              display.setCursor(0, 16); display.print("B now "); // set cursor and print text.
              display.print((EEPROM.read(2) * 256) + EEPROM.read(3)); // read eeprom and convert to decimal number.
              display.display(); // update display.
              screen_position = 1; // reset menu position to start.
              delay(5000); // delay.
              break; // back to the start and do it all again.
            }
            display.clearDisplay(); // if button 'b' not pressed.
            display.setCursor(0, 0); display.print("Set val's?"); // set cursor and print text.
            display.setCursor(0, 16); display.print((A_100 * 100) + (A_10 * 10) + A_1); // set cursor and calculate value as digits.
            display.print(" & "); display.print((B_100 * 100) + (B_10 * 10) + B_1); // set cursor and calculate value as decimal digits.
            display.display(); // update display.
            delay(1000); // delay.
            break; // back to the start and do it all again.
        }
      }
    }
    void set_screen() {
      display.clearDisplay();
      display.setTextSize(2);
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_1() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(" "); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_2() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(" "); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_3() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(" ");
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_4() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(" "); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_5() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(" "); display.print(B_1);
      display.display();
    }
    
    void flash_screen_6() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(" ");
      display.display();
    }
    
    void solid_led() {
      DDRB = DDRB | B00100000; // set port B [5] as output
      delayMicroseconds(1);
      PORTB = PORTB | B00100000; // set port B [5] high
      delay(1000);
    }
    void loop() {
      // put your main code here, to run repeatedly:
    }

  4. #14
    Join Date
    Apr 2020
    Posts
    62
    Post Thanks / Like

    Default Re: Help design new AC controller

    You can overclock from 16mhz to 20, but then you run into some problems as the IDE is not set up for that. If Im using E131, Im also running into a problem with how to set mac addresses. The way I understand it, some ethernet modules have an eeprom chip on it that is pre programmed with a mac address that is not used on any other ethernet device in the world. That way you can just read the mac address from it and use that. But, I was planning on using the enc28J60 because its cheap and very easy to find, and that one doesnt have that chip. You must change the code for every single board you use to include a different mac address, and since I may be selling theese or something, I would need to buy the mac addresses. Then there is the problem with how to change the code everytime before uploading. So basically, I need to find a module that has that eeprom chip on it. I can look for one as they do exist but is it worth it? I mean, this is an AC controller. Who is really going to use E131? Origionally I was just planning on adding it because it was easy, so why not, but Im really starting to think its not worth ita dn I should just stick to DMX. If you disagree, its still possible, thats just what Im thinking.
    Last edited by Randomaker; 01-03-2021 at 01:26 PM.

  5. #15
    Join Date
    Apr 2020
    Posts
    62
    Post Thanks / Like

    Default Re: Help design new AC controller

    Quote Originally Posted by P. Short View Post
    The 328P itself has more than enough hardware resources to do the job, the question is whether the firmware implementation can make good use of all those resources.
    Before you say that, I should tell you how I am doing the dimming. All 16 channels are connected to the arduino through a 16 port i2c expander. Then I am using triacs. That means that there is 2 zero cross detectors that each send a pulse to a separate pin when the AC sine wave crosses zero, one for channels 1-8 and one for 9-16. Then, for each channel, whenever the zero cross detector fires, the arduino needs to wait a certain ammount of time depending on the brightness before sending out a pulse through the port expander to a triac connected to it.

  6. #16
    Join Date
    Apr 2020
    Posts
    62
    Post Thanks / Like

    Default Re: Help design new AC controller

    Im really thinking e131 isnt worth it anymore, Im running into a problem with MAC addresses now too. And like its an AC controller. Whats even the point of using E131? If you are just using theese controllers, then most likely you will be using DMX. Its easier and requires less hardware than E131. And if you are already using E131 for say pixel controllers, then most likely they have DMX outputs, so why buy extra switches to use e131 when its much easier to use DMX? Have you ever heard of a single other AC controller that has E131? And yes I know I could easily add a screen, but its not neccesary for just DMX. Without E131, I have plenty of pins to use dip switches with 4 extra pins, and thats how most other DMX devices do it. I mean yes I could use a screen and buttons to change DMX address, but the switches are cheaper and easier and will work just as well.
    Last edited by Randomaker; 01-03-2021 at 01:48 PM.

  7. #17
    Join Date
    May 2007
    Posts
    5,477
    Post Thanks / Like

    Default Re: Help design new AC controller

    I wouldn't give up on e131 just yet. Instead of using a wired Ethernet connection (you've mentioned the ENC28J60), why not go for the ESP2866. and interface over WiFi? That allows the controllers to be wired up with just an AC power cable. And the controllers come with pre-assigned MAC addresses.
    Phil

  8. #18
    Join Date
    May 2007
    Posts
    5,477
    Post Thanks / Like

    Default Re: Help design new AC controller

    Quote Originally Posted by Randomaker View Post
    Before you say that, I should tell you how I am doing the dimming. All 16 channels are connected to the arduino through a 16 port i2c expander. Then I am using triacs. That means that there is 2 zero cross detectors that each send a pulse to a separate pin when the AC sine wave crosses zero, one for channels 1-8 and one for 9-16. Then, for each channel, whenever the zero cross detector fires, the arduino needs to wait a certain ammount of time depending on the brightness before sending out a pulse through the port expander to a triac connected to it.
    My comment is based on my experiences with PICs and assembly-language programming, though I guess that is not within the scope of your plans.

    Are there not Arduino libraries that would do that for you?

    Also, you mention triacs without indicating any opto-couplers to provide galvanic isolation between the 110V (or 220V) AC and the rest of your design. I sort of assume that you had that in mind, and didn't mention it to keep your posts brief.
    Phil

  9. #19
    Join Date
    Apr 2020
    Posts
    62
    Post Thanks / Like

    Default Re: Help design new AC controller

    Quote Originally Posted by P. Short View Post
    My comment is based on my experiences with PICs and assembly-language programming, though I guess that is not within the scope of your plans.

    Are there not Arduino libraries that would do that for you?

    Also, you mention triacs without indicating any opto-couplers to provide galvanic isolation between the 110V (or 220V) AC and the rest of your design. I sort of assume that you had that in mind, and didn't mention it to keep your posts brief.
    Yeah of course I am using optocouplers. I never even looked up triac libraries before because no one used them in examples, but apparently there is one. Thanks for mentioning that, it will really help a lot with this project and others. And personally, I would never use wifi in my show. I think most people would go wired. But it wouldn't be a whole lot extra work. How many people out there use wifi? If a lot do, then I can absolutely add it.
    Last edited by Randomaker; 01-03-2021 at 03:44 PM.

  10. #20
    Join Date
    May 2007
    Posts
    5,477
    Post Thanks / Like

    Default Re: Help design new AC controller

    If I were you, I would put most of my focus on what I wanted, not on others. We're in the second decade of the 2000's, and most people seem to want huge, flashy shows using pixels and are moving away from AC lights. Not me, though. But just look at the number of people selling their AC controllers in the Buy/Sell/Trade sub-forum.

    Just so that I don't make (more) pointless or dumb comments, how are you implementing this hardware-wise? Are you planning on using mostly off-the-shelf modules, or are you going to implement most or all of your hardware using your own pcb designs?
    Phil

Page 2 of 8 FirstFirst 1234 ... LastLast

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •