aenniw / arduino Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
without any load motor will run a few seconds and then stop will Err 1. Please advise.
Thank you.
It would be usefull to enable that if you want to reset (init) device instead of short press the three seconds press and hold (on tilt button) to reset should be implemented to avoid accidental resets.
Hi I have tested your new code and there is a bug. You can not set memory on keypad 1. It goes always to 0000.
I have been using this system now for a month and I have few suggestions:
Finding the right power supply is very hard. I have tried many and not all works the same. You can use also 19v one but some laptop ones has protection integrated.
One good option is to use old computer power supply. I would recomend to use something like this board https://www.ebay.com/itm/ATX-power-supply-adapter-changer-module-XH-M229-desktop-pc-board-24pin-OJBILU/183574137281 to easy hack it.
To stop power supply fan from spining all the time you could use https://www.ebay.com/itm/KSD9700-Degrees-Celsius-Thermostat-Control-Temperature-Switch-5A-250V-40-50/302834915986 to start the fan only when tepereture rises above 45 or something.
As a side use you can use the same power supply as a bench power supply. And with a decent voltage regulator you can make it even more versatile: https://www.banggood.com/custlink/333GKfKhHD
The screws I have used are
I have used coupler printed in ABS and it was destroyed immedietly. The 6mm hex key just spinned inside.
I think a metal part one shoud be used something like https://www.ebay.com/itm/2-3-4-5-6-7-8mm-Aluminum-Flexible-Shaft-Coupling-Rigid-Coupler-Motor-Connector/291882575832?hash=item43f58ea7d8:m:mJ7ZSkXCSVnDjsGM3CKchsQ:rk:5:pf:0
and only printed part would be the GT2 ring.
Hi there. I am grateful that you have put this together and made it a complete DIY project.
I was wondering if you'd consider sharing the raw source / CAD files that you used to render the .stl
files. I would like to "remix" this project and several of the modifications that i have in mind will be rather difficult if i have to edit the stl files.
Please release the CAD files behind the stl files :).
Hey there!
I built the Skarsta mod a few months ago and it has been doing decently. Unfortunately, recently the encoder started having problem and it seems like it just failed mechanically. That prompted me to look around for simpler encoding options and I found these:
https://de.aliexpress.com/item/4000043622861.html
From what I can tell the dimensions are a drop-in replacement for the current motors, but they include a rotary encoder, eliminating the need for the whole pulley / encoder combo.
In case the torque on those isn't quite enough there are also add-on encoders that should fit the current motor (provided a little room at the back)
https://www.aliexpress.com/item/4000260954064.html
Anyway, just wanted to let you know in case you hadn't seen these before. If it ends up working it could be a pretty nice refinement for this already amazing project 👍
I am hoping you can help. I am getting Err 3 at boot with nanoatmega328-ubridge. I am using the KY-040 Rotary Encoder. If I use nanoatmega328-bridge table will travel up and down but of course the counter doesn't work which I believe is expected.
Can you help?
Hi. Great update.
I have quickly checked the new models and have found that two are not scaled right.
Firs one is keypad-connector and the second is table-frame-tie.
They are way too big at least in simplify3d. Other models looks ok.
Q:
Commercial version of Ikea motor desk starts motors slowly. When you press the button up or. down it does not give full power to the motros but if stars them slow to avoid motor shocks and then accelerates to its full potentional.
Hi.
Is it possible to add an option for ultrasonic to not always do the measuring but only when the motors are on.
After the motors turns of it can stop measure after like 5 sec, And they should turn on after the press of the button.
It is annoying because i always get err.2 because of my legs moving or. vacuum cleaner triggering them. I could move the sensor to other position but it wont help because it has to be perfect spot to do the proper measuring.
TNX
Hi, I am using the project with the H-bridge and the HC-SR04. Going down is working perfectly but when going up it stops several times when trying to go to the top level, it doesn't slows down btw, it just stops. I already tries to adjust the watchdog parameters and the speed, but that doesn't make any difference other, than that the error doesn't occur so fast. What causes the motor to stop? Is it a security in the motor itself to stop it from overheating, or something else? I already leveled the desk and the legs are straight.
Thanks in advance, and keep up the good work!
I have tried to compile it and it throws an error below. Do you have any hints?
Verbose mode can be enabled via -v, --verbose
option
File "C:\Users\iLLiac4.platformio\platforms\atmelavr\builder\main.py", line 30
print "Please unplug/plug device ..."
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Please unplug/plug device ...")?
=============================================================================================== [FAILED] Took 0.51 seconds ===============================================================================================
Environment Status Duration
nanoatmega328-ubridge FAILED 00:00:00.508
========================================================================================= 1 failed, 0 succeeded in 00:00:00.508 =========================================================================================
The terminal process "C:\Users\iLLiac4.platformio\penv\Scripts\platformio.exe 'run'" terminated with exit code: 1.
Terminal will be reused by tasks, press any key to close it.
Hi,
I have some questions.
Nice idea. I have some printers and it makes fun to mod the table with a engine :)
Which part of the code for H-Bridge is responsible for the startup control of the motor?
I would like to tweak it so the motor will start to work at full speed quicker than at the moment.
ATM it takes almost 3 seconds to achieve the full throttle. And because it is so slow it falls into err.1.
Totally enought would be already 0,5 sec.
Hi. First of all thanks for the amazing work! I'm almost done, but I noticed a strange thing: apparently my desk is going up counter clock wise, and down clock wise. Is it something that can be adjusted, or maybe I made a mistake somewhere? I tried to just swap motor directions, but that causes the counter to stop working.
Hello,
I installed all libs and also ArduinoSTL for the vector because "#include"was not working.
But I get this error:
Arduino: 1.8.10 (Windows 10), Board: "Arduino Nano, ATmega328P"
libraries\display\Display.cpp.o (symbol from plugin): In function `Display::Display(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `Display::Display(unsigned char, unsigned char)'
sketch\Display.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\display\Display.cpp.o (symbol from plugin): In function `Display::Display(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `Display::Display(unsigned char, unsigned char)'
sketch\Display.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\display\Display.cpp.o (symbol from plugin): In function `Display::Display(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `Display::set_blink(bool)'
sketch\Display.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\display\Display.cpp.o (symbol from plugin): In function `Display::Display(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `Display::print(unsigned int)'
sketch\Display.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\display\Display.cpp.o (symbol from plugin): In function `Display::Display(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `Display::print(char const*)'
sketch\Display.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\display\Display.cpp.o (symbol from plugin): In function `Display::Display(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `Display::set_brightness(unsigned char)'
sketch\Display.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\display\Display.cpp.o (symbol from plugin): In function `Display::Display(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `Display::cycle()'
sketch\Display.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\display\Display.cpp.o (symbol from plugin): In function `Display::Display(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `Display::light_up()'
sketch\Display.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\display\Display.cpp.o (symbol from plugin): In function `Display::Display(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `Display::disable(unsigned char)'
sketch\Display.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\service\Service.cpp.o (symbol from plugin): In function `get_period(unsigned long, unsigned long)':
(.text+0x0): multiple definition of `get_period(unsigned long, unsigned long)'
sketch\Service.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\service\Service.cpp.o (symbol from plugin): In function `get_period(unsigned long, unsigned long)':
(.text+0x0): multiple definition of `setPwmFrequency(int, int)'
sketch\Service.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\TM1637\TM1637.cpp.o (symbol from plugin): In function `TM1637::TM1637(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `TM1637::TM1637(unsigned char, unsigned char)'
sketch\TM1637.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\TM1637\TM1637.cpp.o (symbol from plugin): In function `TM1637::TM1637(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `TM1637::TM1637(unsigned char, unsigned char)'
sketch\TM1637.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\TM1637\TM1637.cpp.o (symbol from plugin): In function `TM1637::TM1637(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `TM1637::writeByte(signed char)'
sketch\TM1637.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\TM1637\TM1637.cpp.o (symbol from plugin): In function `TM1637::TM1637(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `TM1637::start()'
sketch\TM1637.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\TM1637\TM1637.cpp.o (symbol from plugin): In function `TM1637::TM1637(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `TM1637::stop()'
sketch\TM1637.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\TM1637\TM1637.cpp.o (symbol from plugin): In function `TM1637::TM1637(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `TM1637::set(unsigned char, unsigned char, unsigned char)'
sketch\TM1637.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\TM1637\TM1637.cpp.o (symbol from plugin): In function `TM1637::TM1637(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `TM1637::point(bool)'
sketch\TM1637.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\TM1637\TM1637.cpp.o (symbol from plugin): In function `TM1637::TM1637(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `TM1637::coding(signed char*)'
sketch\TM1637.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\TM1637\TM1637.cpp.o (symbol from plugin): In function `TM1637::TM1637(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `TM1637::display(signed char*, bool)'
sketch\TM1637.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\TM1637\TM1637.cpp.o (symbol from plugin): In function `TM1637::TM1637(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `TM1637::coding(signed char)'
sketch\TM1637.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\TM1637\TM1637.cpp.o (symbol from plugin): In function `TM1637::TM1637(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `TM1637::display(unsigned char, signed char, bool)'
sketch\TM1637.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\TM1637\TM1637.cpp.o (symbol from plugin): In function `TM1637::TM1637(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `TM1637::clearDisplay()'
sketch\TM1637.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\TM1637\TM1637.cpp.o (symbol from plugin): In function `TM1637::TM1637(unsigned char, unsigned char)':
(.text+0x0): multiple definition of `TM1637::bitDelay()'
sketch\TM1637.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\keypad\Keypad.cpp.o (symbol from plugin): In function `preset_values':
(.text+0x0): multiple definition of `preset_values'
sketch\Keypad.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\keypad\Keypad.cpp.o (symbol from plugin): In function `preset_values':
(.text+0x0): multiple definition of `Keypad::cycle()'
sketch\Keypad.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\keypad\Keypad.cpp.o (symbol from plugin): In function `preset_values':
(.text+0x0): multiple definition of `Keypad::Keypad(Motor*, Display*)'
sketch\Keypad.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\keypad\Keypad.cpp.o (symbol from plugin): In function `preset_values':
(.text+0x0): multiple definition of `Keypad::Keypad(Motor*, Display*)'
sketch\Keypad.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\keypad\Keypad.cpp.o (symbol from plugin): In function `preset_values':
(.text+0x0): multiple definition of `Keypad::set_preset(unsigned char)'
sketch\Keypad.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\keypad\Keypad.cpp.o (symbol from plugin): In function `preset_values':
(.text+0x0): multiple definition of `Keypad::goto_preset(unsigned char)'
sketch\Keypad.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\keypad\Keypad.cpp.o (symbol from plugin): In function `preset_values':
(.text+0x0): multiple definition of `Keypad::~Keypad()'
sketch\Keypad.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\keypad\Keypad.cpp.o (symbol from plugin): In function `preset_values':
(.text+0x0): multiple definition of `Keypad::~Keypad()'
sketch\Keypad.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\keypad\Keypad.cpp.o (symbol from plugin): In function `preset_values':
(.text+0x0): multiple definition of `Keypad::stop_motor()'
sketch\Keypad.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::cycle()'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::Motor(unsigned char, unsigned char)'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::Motor(unsigned char, unsigned char)'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::off()'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::dir_cw()'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::dir_ccw()'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::get_position()'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::reset_position()'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::set_position(unsigned int)'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::update_position(unsigned char)'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::get_state()'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::get_mode()'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::set_mode(MotorMode)'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::set_end_stop(unsigned int)'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::initPin(unsigned char, unsigned char)'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::~Motor()'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::~Motor()'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::disable()'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor\Motor.cpp.o (symbol from plugin): In function `Motor::cycle()':
(.text+0x0): multiple definition of `Motor::get_position_change()'
sketch\Motor.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButtons::cycle()'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButton::cycle()'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButton::NIButton(int)'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButton::NIButton(int)'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButton::on_short_press(void (*)())'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButton::long_press(long)'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButton::on_long_press(void (*)())'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButton::on_press(void (*)())'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButton::on_release(void (*)())'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButton::pressed()'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButton::held()'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButtons::get_instance()'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButtons::~NIButtons()'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButtons::~NIButtons()'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\ni_buttons\NIButtons.cpp.o (symbol from plugin): In function `NIButtons::cycle()':
(.text+0x0): multiple definition of `NIButtons::add_button(unsigned char)'
sketch\NIButtons.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::PMButton(int)'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::PMButton(int)'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::begin()'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::debounce(long)'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::dcGap(long)'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::holdTime(long)'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::longHoldTime(long)'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::held()'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::heldLong()'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::clicked()'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::doubleClicked()'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::pressed()'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::released()'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\PolymorphicButtons-master\PMButton.cpp.o (symbol from plugin): In function `PMButton::PMButton(int)':
(.text+0x0): multiple definition of `PMButton::checkSwitch()'
sketch\PMButton.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\watchdog\Watchdog.cpp.o (symbol from plugin): In function `Watchdog::Watchdog(Motor*, Display*)':
(.text+0x0): multiple definition of `Watchdog::Watchdog(Motor*, Display*)'
sketch\Watchdog.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\watchdog\Watchdog.cpp.o (symbol from plugin): In function `Watchdog::Watchdog(Motor*, Display*)':
(.text+0x0): multiple definition of `Watchdog::Watchdog(Motor*, Display*)'
sketch\Watchdog.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\watchdog\Watchdog.cpp.o (symbol from plugin): In function `Watchdog::Watchdog(Motor*, Display*)':
(.text+0x0): multiple definition of `Watchdog::error(unsigned char)'
sketch\Watchdog.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\watchdog\Watchdog.cpp.o (symbol from plugin): In function `Watchdog::Watchdog(Motor*, Display*)':
(.text+0x0): multiple definition of `Watchdog::cycle()'
sketch\Watchdog.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor-relay\MotorRelay.cpp.o (symbol from plugin): In function `MotorRelay::_off()':
(.text+0x0): multiple definition of `MotorRelay::_off()'
sketch\MotorRelay.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor-relay\MotorRelay.cpp.o (symbol from plugin): In function `MotorRelay::_off()':
(.text+0x0): multiple definition of `MotorRelay::_dir_cw()'
sketch\MotorRelay.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\motor-relay\MotorRelay.cpp.o (symbol from plugin): In function `MotorRelay::_off()':
(.text+0x0): multiple definition of `MotorRelay::_dir_ccw()'
sketch\MotorRelay.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\Rotary\Rotary.cpp.o (symbol from plugin): In function `Rotary::Rotary(char, char)':
(.text+0x0): multiple definition of `Rotary::Rotary(char, char)'
sketch\Rotary.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\Rotary\Rotary.cpp.o (symbol from plugin): In function `Rotary::Rotary(char, char)':
(.text+0x0): multiple definition of `Rotary::Rotary(char, char)'
sketch\Rotary.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\Rotary\Rotary.cpp.o (symbol from plugin): In function `Rotary::Rotary(char, char)':
(.text+0x0): multiple definition of `Rotary::process()'
sketch\Rotary.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
Mehrere Bibliotheken wurden für "ArduinoSTL.h" gefunden
Benutzt: D:\Arduino\libraries\ArduinoSTL
Nicht benutzt: D:\Arduino\libraries\avr_stl
Mehrere Bibliotheken wurden für "Display.h" gefunden
Benutzt: D:\Arduino\libraries\display
Mehrere Bibliotheken wurden für "Service.h" gefunden
Benutzt: D:\Arduino\libraries\service
Mehrere Bibliotheken wurden für "MotorRelay.h" gefunden
Benutzt: D:\Arduino\libraries\motor-relay
Mehrere Bibliotheken wurden für "PinChangeInt.h" gefunden
Benutzt: D:\Arduino\libraries\PinChangeInt-master
Mehrere Bibliotheken wurden für "Rotary.h" gefunden
Benutzt: D:\Arduino\libraries\Rotary
Mehrere Bibliotheken wurden für "TM1637.h" gefunden
Benutzt: D:\Arduino\libraries\TM1637
Nicht benutzt: D:\Arduino\libraries\Grove_4Digital_Display-master
Mehrere Bibliotheken wurden für "Keypad.h" gefunden
Benutzt: D:\Arduino\libraries\keypad
Mehrere Bibliotheken wurden für "Motor.h" gefunden
Benutzt: D:\Arduino\libraries\motor
Mehrere Bibliotheken wurden für "NIButtons.h" gefunden
Benutzt: D:\Arduino\libraries\ni_buttons
Mehrere Bibliotheken wurden für "PMButton.h" gefunden
Benutzt: D:\Arduino\libraries\PolymorphicButtons-master
Mehrere Bibliotheken wurden für "Watchdog.h" gefunden
Benutzt: D:\Arduino\libraries\watchdog
exit status 1
Fehler beim Kompilieren für das Board Arduino Nano.
Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.
Today my motor has burned. Funny is that it has burned when the table was lowering, so no max current was used.
I have smelled something and then saw smoke from the motor box. I have quickly unscrew it and the motor was extremely hot and plastic was melting and smoking. I really do not know the cause why this has happened. Maybe the wires did not stand the high current and over time melted and cause the short of the motor.
I will definitely use silicone wires when I fix this.
Here are some pictures with motor already disassemble.
https://www.dropbox.com/s/4k363yrko571gem/20190115_073516.jpg?dl=0
https://www.dropbox.com/s/zhrmst5eu32usds/20190115_073553.jpg?dl=0
https://www.dropbox.com/s/2wht3zi3zr6kd62/20190115_080947.jpg?dl=0
https://www.dropbox.com/s/orfj8cq49ppir36/20190115_073524.jpg?dl=0
Any way I think the design has to be changed. Some kind of external accessible fuse should be implemented or. if you have in mind something better to protect the motor and wires against shorting or over current protection and to avoid burning. The motor is 6A continuous current rated. So a fuse 5A would be a good solution i think.
I know some power supply has short circuit protection integrated, but this one obviously did not have one. I thing it would be wise to integrate one into the box or. to check the supply first if it has short circuit protection.
I think ATX power supplies has all short circuit protection.
Fuse holder something like this maybee?
https://www.ebay.com/itm/10Pcs-Panel-Mount-Screw-Cap-Fuse-Holder-Case-for-Glass-Tube-Fuses-5x20mm/192480312005?epid=11020186223&hash=item2cd0b87ac5:g:n1YAAOSw22FcC1qy:rk:7:pf:0
Or maybe something like this:
https://www.ebay.co.uk/itm/DC-Motor-Overload-Current-Protector-Switch-Short-Circuit-Protection-Module-zhn/332506257526?epid=24012354943&hash=item4d6aead876:g:ltgAAOSwTA9X45SE:rk:2:pf:0
And also something like this:
https://www.ebay.com/itm/KSD9700-NC-NO-15-195C-Bimetal-Plastic-Ceram-TemperatureControl-Switch-Thermostat/273461638376?hash=item3fab9574e8:m:mIF76ipLtPUkANZQI2Qz1ww:rk:5:pf:1&frcectupt=true
Hi. After some extended testing and some burned fuses this are the settings that works good for me.
Also have tested it on heavy and low weight table. Also on original IKEA the slow start is very fast so parameter 10 is good and works also to lift heavy weight table at the top level without throving err.1.
#ifndef H_BRIDGE_MOTOR
#define WATCHDOG_TIMEOUT 10
#define WATCHDOG_DEADLOCK_CHANGE 1
#define WATCHDOG_OTHER_CHANGE 5
#define WATCHDOG_TOLERANCE 5
#else
#define WATCHDOG_TIMEOUT 100
#define WATCHDOG_DEADLOCK_CHANGE 2
#define WATCHDOG_OTHER_CHANGE 5
#define WATCHDOG_TOLERANCE 3
#endif
#define MIN_SPEED 100
#define MAX_SPEED 255
#define SPEED_STEP_DURATION 10
Some notes:
I think there is no need fo ''Optionally if your PSU doesn't provide any OV/SC protection Overload/Short Circuit Protection currenlty needs to be housed outside of case... later on will provide modified case...'' anymore because fuse with 3/4A works good.
Also worth mentioning is that tables should be perfectly leveled.
As an alternative power supply is ATX power supply with this board https://www.ebay.com/itm/24pin-ATX-Computer-PC-Power-Supply-Bench-Top-Breakout-Board-Module-Adapter-zg5J/223416171152
ATX power supply has already implemented short circuit protection and on the board there are all outputs fused. There are some small ATX power supplies from small form desktop computers that are much smaller and still provide aroud 200W.
EDIT 2:
Seems like I just messed up with cables all works now. Sorry for the inconvenience.
Hello,
First of all thank you for the project and sharing with the community. Lately I have assembled the project. Everything works except calibration.
As it's explained on the documentation while "----" blinking, I start lowering the table and press tilde for 3 seconds then "0000" appears and starts blinking on the screen. When I start pressing up motor rotates and moves up but number on the display doesn't change. From this point on I cannot continue because if I save by using tilde it saves start and end position as 0 and stops moving. If I just don't calibrate and let it blink I can use up and down buttons without any problem
At first I thought KY-040 Rotary Encoder is not working but I doubt that because when I remove the cables and try to move I get Err1. I assume if rotary encoder would be faulty it wouldn't move up and down while it's uncalibrated?
I'm using bridge version. Any idea what could be wrong?
EDIT:
I just realised on wire diagram, for rotary encoder it's written White: CLK, Gray: DIO. But when I connect White to CLK and Gray to DT(I'm not familiar with abbreviations but there is no DIO so I connected to DT) It gives Err2'
Thanks
Hi.
Have tested your latest code and it seems fine.
I had some strange behaviour with button preset 1 that I could not set the position because as soon as I have pressed and hold the button, the motor started to function insted to hold still and set the position. This has happened only with button preset 1.
After refleshing it once again and reseting it again I did not have the same issue or. at least I could not find it.
Otherwise the feature to stop the motor works great and also the resets of the arduino are now mostly gone. I had a reset of the arduino only when I was playing with button preset 1. And for a note when I am testing the new code I do not have arduino connected to USB, I am using just power when testing.
But overall the logic of the motor now functions much better and with latest patches much less stress is added to the shaft and motors.
I will continue to test it and will report back if I find something that I can definetly identify.
I am still waiting for a coupler from ebay so I will report back the finding as soon as I get the shaft.
One question. What screws have you used to mount the box under the table?
I was thinking to use something like this https://www.ebay.com/itm/M3-M4-Press-In-Copper-Brass-Inserts-Embedded-Knurl-Threaded-Nut-Part-for-Plastic/222518687942?hash=item33cf25b8c6:m:mk-fDQ1VXhikmUhhvSwtU2w:rk:149:pf:0 16mm and with m3 screws.
Also why have you decided to drop screen dim after some time that it was used in first version? Would it be possible to add this into code so that user could decide to enable or disable this feature in a code or. maybe even enable and disable this feature with simultaniusly button press? For example short simultanious press tilt and down button disables the dim and tilt and up button enables the dim function and displays on scren dim0 (disabled) and dim1 (enabled).
TNX
I have finally made it and it works at least on the bench for now :)
There is a problem if you have for example pos 1, 2 and 3 set.
If you press position 3 and the motor moves and then during the moving of the motor you press button UP the the display resets and it shows the reset position and not the real one. This way you loose the calibration.
The same happens if you go to position 1 and then during the moving presses the low button. It resets the display and also relays and shows the position of the set 1 and not the actual one.
Also it would be useful to cancel the movement during the call preset.
For example if i select number 3 and the motor starts the movement could be stopped with pressing any button. No matter if i press up, dow, 1, 2 or 3 the first press during the movement of the button should stop the motor.
Other-way it is very well documented.
I think that on frittzing schema there is one error. The clk and dio of the rotary encoder should be reversed. I am not 100% sure but will check for sure. So D3 and D2 on arduino should be connected in reverse order.
Hi, yesterday I tested my build but it seems the the DC engine you recommended has not enough power. It went slower and slower and stopped. And if I drive the table down it stucks maybe because its to fast. I dont think my table is to heavy ... I would use some other dc engine low for jalousi but I don't know which one. Or maybe my powersupply is not good enough. I uses a power supply with 12V 8,5A and also one with 12,5A. Maybe not enough
Try to migrate from manual MIN/MAX height calibration to automatic via WCS1700 and motor stall detection. (Possible also via position reading, however more risky as current spikes may burn fuses...)
float scalefactor = 0.011 // WCS5100
float current = ((5.0/1024.)*AnalogRead(A0)-2.5)/scalefactor;
Migrate from SevenSegmentTM1637.h as it causes unexpected restarts of arduino. Update to https://platformio.org/lib/show/5064/Grove%204-Digit%20Display
https://www.cs.sfu.ca/CourseCentral/433/bfraser/other/2016-student-howtos/Grove4DigitDisplay.pdf
Hi,
I am using a h bridge and conntected everything like you.
For testing I conntected first only one button. But Display shows me "----". And if I push and hold the button for motordriving it drives one or two seconds and stopps. Than it shows me "err 1". If i turn rotatory by hand nothing happens. Display shows me "----". Rotatory is working. I tested it with other application.
I have a 5 Pin encoder and conntected only CLK and DATA two arduino. The SW pin is not conntected. I think it's for pushing encoder button.
Hi. I think that the fuse position should be placed after dc input on dc+ line before going into dc switch.
This way all the component will be included for possible fail and not only motor.
Hello, Martin, I have observed that you also included some models for Hall effect motor encoder, but I'm not sure how the encoder would be mechanically connected to the motor.
Mind sharing some more details?
BTW, the link to "Magnetic Hall Encoder - 11PPR" is no longer working.
Hi.
I was searching for some hacks on ikea desks and found an interesting article claiming that it is 1cm accurate.
This is the article:
https://www.henrirantanen.fi/2016/04/18/smartdesk-sensor-upgrade/?utm_source=youtube.com&utm_medium=referral&utm_campaign=video&utm_content=IKEA+Bekant+SmartDesk+with+Arduino
Using echoing sensor it could replace rotary encoder.
For example this one https://www.ebay.com/itm/1PCS-Ultrasonic-Sensor-Module-HC-SR04-Distance-Measuring-Sensor-for-arduino-SR04/193011377769?hash=item2cf05fe669:g:~d8AAOSwW4Bd6f5J
What do you think would this be an option. I think it is possible but you are the master coder :)
And it this works it will always work and will not loose steps anymore.
Hi.
Have you already tested optical sensor?
Today I have mounted the motors into 'production' and some things I have noticed during operation.
Before printing the case for the motor, check if it is positioned right.
If you need to mirror it select "Mesh/Mirror Mesh/Mirror X" this is for Simplify3D.
I have one on the thingverse so you can download it. https://www.thingiverse.com/thing:3227567
Also maybee to consider a little bit of redesigned motors case with the option to access rotor encoder and coupler/shaft if something brake or loosens so there is no need to unscrew the whole case of the table.
Something like smal doors or. just an opening.
Hi everyone,
I have a question about the power output of the H-BRIDGE: When the speed is set to 255, the output voltage is just 3v and not 12v like the input. And because of that the motor spins with only about ~60RPM at max speed.
Am I doing something wrong, or is that expected behaviour?
Thanks for the help! :)
It looks like that somehow it losses steps and this causes to get decalibrated over time.
I saw this when I have lowered the table and it looked that it was getting always more lowered than it was after the initial calibration.
Eventely over time it would hit hard limit and burned the fuse.
Maybe the rotary encoder losses counts or arduino is not able to count it right.
And it is not losse GT belt.
Hi,
i have the problem that the motor moves in the wrong direction. If I look up at the shaft, it turns to the left when I press the button up and the count goes up. But the table goes down.
I checked the wiring but can't find the problem.
It seems to me that the rotary encoder (ky-040) is programmed the wrong way round.
Since last dim function the display does not wake up once it dims.
Would you mind updating the BOM list? Some of the links are no longer accessible and not knowing the specs of the items leaves some ambiguity on what to order.
Thanks for the work on this! Looking forward to building!
Q:
Also why have you decided to drop screen dim after some time that it was used in first version? Would it be possible to add this into code so that user could decide to enable or disable this feature in a code or. maybe even enable and disable this feature with simultaniusly button press? For example short simultanious press tilt and down button disables the dim and tilt and up button enables the dim function and displays on scren dim0 (disabled) and dim1 (enabled).
Do you know why version with H-bridge struggles more than with relay. It looks like the motor has less power when using H-Bridge compared to relay one.
I have finally received the coupler for the shaft.
This one works much better and is strong since it is made out of metal.
You have to buy one with 6-7mm specification
https://www.ebay.com/itm/2-3-4-5-6-7-8mm-Aluminum-Flexible-Shaft-Coupling-Rigid-Coupler-Motor-Connector/291882575832?ssPageName=STRK%3AMEBIDX%3AIT&var=590884618019&_trksid=p2057872.m2749.l2649
A have made quick mod for the GT2 wheel .It has 14mm hole.https://www.thingiverse.com/thing:3227567
To secure the screws I would recommned to use some kind of screw glue like this:
https://www.banggood.com/Suleve-M243-50mL-Threadlocker-Screw-Lock-Glue-Multipe-Surface-Medium-Strength-Anaerobic-Adhesive-p-1214087.html?p=8H180110948532015010&custlinkid=17674
Have tested latest release and it is very nice.
One thing that would make even less stress to the motor is for example:
I move to the position 1050 and save it to preset 2. If I am at lets say at 500 position and I select preset 2 it will move the motor to around 1050 but not excatly 1050. And if I press then again preset 2 it will move the motor again a small amount to around 1050. So if I keep pressing preset 2 the motor will always spin a little bit and stop. So to avoid accidental douple preset select of the same preset the logic could be that if the current position is less then 100 away from selected preset the motor will not react to the preset.
I hope i have understand this clearly otherwise I can try again?
TNX
I saw new models for h-bridge.
Can you add a little more space between keypad connector and dc jack.
This way the dc jack hole can be moded if there is more space.
For example I am using thise jacks https://www.ebay.com/itm/10pair-12V-3A-2-1x5-5mm-Male-Plug-Female-Socket-Panel-Mount-Jack-DC-Connector/273345758958?epid=17021273616&hash=item3fa4ad46ee:g:iYIAAOSw2FVbPxry:rk:46:pf:0
and I have to mod a hole a little.
ATM there is not enought space between dc connector and keypad connector to mod it.
P.S.
TNX
Hi,
I did the assembly with the first version (h-bridge and Ky-040) some time ago but I had error 1 all the time.
First time I thinking it was a faulty motor (there was hard spot on the gearing) so I change it but still Err1.
After receiving some other spare parts I changed what seemed to me to be the cause of this error (ky-040 and h-bridge) but still have err1.
The motor runs well with the 12V in direct.
I managed only once to have numbers on the display after testing a 3rd ky-040 but after some manipulation off going up and down it always ended with error 1, so i have to restart and after 4-5 time doing this it came back with the 4 blinking dashes (maybe it's important, I did the manipulation without connecting it to the desk)
I feel like the ky-040s are burning, what can lead to that? I have a good +5v on it.
Thank you
(Sorry for my english)
UPDATE :
I find a way to test my ky-040, one was faulty. And I check all the wires
I thing i'm closed to find the solution.
Now i can go up or down, but i got the err1 when i change direction.
If i go up no probleme, but as soon, as i want to go down, even if I wait few seconds, i directly got err1
Same thing if I go up first and then want do go down
The power supply linked in git is crappy china power supply. It could not lift the table and is far from 5amp.
I have tried then a good one from laptop. It was 16v but it has worked.
Hi.
Have compiled the latest version.
Set in platformio.ini to
[common]
watchdog_sleep = 60
And it does not go to sleep. It measures constantly.
Hi, could you please update the shopping list for this project? I am not sure what type of belt should I buy as the URL is not working anymore. The power adapter one too.
Thank you very much
It looks like the mesh of the panel cover v2 is broken. When I try to slice it with Cura, it fills the gap where the display should be stuck. Also the github preview of the cover shows a hole on the Botton: https://github.com/aenniw/ARDUINO/blob/master/skarsta/models/panel-v2/panel-cover.stl
Hi. Just yesterday I have bought two of those tables.
Can you upload some videos of the speed and noise and add a little more pictures of electronics inside the case to see the soldering connections.
P.S.:
Is it possible to add bin files for Arduino Nano so it can be flashed without compiling it?
TNX
Can you move Err 1 into plaformio. I have set those parameters into
#ifdef USENSOR
#define WATCHDOG_TIMEOUT 2000
#else
#define WATCHDOG_TIMEOUT 100
#endif
#define WATCHDOG_DEADLOCK_CHANGE 2000
#define WATCHDOG_OTHER_CHANGE 100
#ifndef WATCHDOG_OTHER_SLEEP
#define WATCHDOG_OTHER_SLEEP 0
#endif
#ifdef H_BRIDGE_MOTOR
#define WATCHDOG_TOLERANCE 5
#else
#define WATCHDOG_TOLERANCE 20
#endif
And it still throws Err.1 constantly. I can not uplift the desk without getting 5x err.1
And even when lowering it it throws err.1
Is there an option to disable err.1 check since i have fuses installed?
There are now two versions inside one is nanoatmega328-relays and other is nanoatmega328-bridge.
Is there a need to uncomment some code to select the needed one (relay or. bridge)?
Ok i found out:
Changed in platformio.ini and comment out the one i do not want to compile:
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; http://docs.platformio.org/page/projectconf.html
[common]
build_flags = -O2 -std=c++11 -Wall -D__EEPROM__
[env:nanoatmega328-relays]
platform = atmelavr
board = nanoatmega328
build_flags = ${common.build_flags}
framework = arduino
lib_extra_dirs = ../lib
#[env:nanoatmega328-bridge]
#platform = atmelavr
#board = nanoatmega328
#build_flags = ${common.build_flags} -D__H_BRIDGE_MOTOR__
#framework = arduino
#lib_extra_dirs = ../lib
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.