Since its development in the early 2000s, Arduino products like the Uno and Nano have revolutionized what people can make at home with inexpensive and easy-to-use components. Robotics and automation are no longer solely in the realm of engineers; anyone willing to spend the time to learn how these devices work can create their own inventions.
This has led to an influx of practical and innovative projects, and the technology to share them via video and social media has only accelerated the growth. We may be only halfway through 2018, but we’ve already seen a wide variety of innovative projects.
Here are a handful of our favorites so far—we can only imagine what else we’ll see in 2018!
HairIO interactive hair extensions
Human hair, as HairIO’s video describes it, “is a cultural material, with a rich history displaying individuality, cultural expression, and group identity.” While it may be difficult to determine what group you belong to while wearing this braided hair extension, it certainly marks you as a true individual and provides a novel interactive surface. The hair extensions, made of braids, are formed around a strip of nitinol wire, which changes shape when heated and can even change color with the help of thermochromic pigments. Control is via an Arduino Nano, and the hair can be used to signal the wearer or observers of outside stimulus via Bluetooth. Tugging on the extensions can even function as an input device.
Hand gesture-controlled rover
Remote control is usually accomplished via a transmitter with a series of joysticks and buttons, but instead, this little robot responds to your actual hand position. It reads position data via an Arduino Nano and MPU6050 accelerometer strapped to the user’s hand, then transmits movement commands to the robot. Interestingly, the robot body doesn’t contain a microcontroller itsel, but receives and decodes commands from the hand-mounted assembly and moves accordingly.
6 DOF robot arm
Jimmy Demello’s robot features six degrees of freedom, including the gripper. While interesting as a personal project, what gets it on this list is his integration of Oleg Mazurov’s inverse kinematic program to provide simple X/Y/Z positioning. Control is via an Arduino Uno with a sensor shield. You can see it in Demello’s video doing tasks such as throwing a ball, playing drums, cooling its human with a fan, and even unplugging itself at the end.
While we’re on the subject of robotic arms, if you’re interested in something really polished for your next project, check out the Tinkerkit Braccio.
OpenCat
While some would debate their usefulness, cats make relatively low-maintenance pets compared to their canine counterparts. On the other hand, if you have a robotic cat, you can simply turn it off when needed, and grooming and veterinarian visits are replaced by recharging, reprogramming, or perhaps a little work with a soldering iron. The OpenCat is just such a companion. It is able to walk on four legs and avoid objects in its way. It can even detect human faces, flipping on its backside to sit up and wave to its owner. It’s an impressive build in its current state, and it appears that development will continue into the foreseeable future.
WALL-E RC toy modified into an actual robot
As much fun as radio-controlled toys can be, if they’re made in the shape of a fictional robot—WALL-E, in this case—it doesn’t seem quite right for it not to feature any sort of automation. Fortunately, these pseudo-robots form an excellent base on which to construct an actual robot. The device features an Arduino Nano for control and uses a total of five servos to actuate its tracks, arms, and head. Most of the video is an explanation of the ‘bot’s components, but it finally ventures out into the world on its own (after 6:00), avoiding walls using an ultrasonic sensor mounted in its head.
Coin-shooting question block from Super Mario
When you played Mario as a kid, perhaps you thought it would be great if, whenever you bumped into something with your head, coins popped out. At some point, you likely realized that he’s supposed to be using his fist, though punching brick walls or even vending machines in the hope of finding spare change is both dangerous and legally discouraged. This 3D-printed device, however, senses taps with a vibration sensor. It then uses a clever mechanism to pull a spring back and releases it to shoot coin after coin out of the slot in the middle. While a simple robot, this Arduino Nano-controlled device is ingenious in its implementation.
推荐理由:Arduino 是一个基于易用硬件和软件的原型平台。由一款可编程的电路板和 Arduino IDE 软件组成,用于将计算机代码写入并上传到物理板。
Arduino板卡能够读取来自不同传感器的模拟或数字输入信号,并将其转换为输出,例如激活电机,打开/关闭 LED,连接到云端等多种操作。可以通过 Arduino IDE(上传软件)向板上的微控制器发送指令来控制,而Arduino IDE 使用的是 C++,很容易编程。此外,只需要一条 USB 线就能将代码上传到硬件上。
对于 Arduino 板:
1.电源USB
Arduino 板可以通过使用计算机上的 USB 线供电。你需要做的是将USB 线连接到 USB 接口。
One of the most common questions I get asked by my students is “How come you teach Node.js and not PHP in your course?” Telling people “trust me, I work in the industry” simply isn’t enough. So, this is my reason for including Node.js in the course and why if you want to invest in your future as a developer, you should ditch PHP. Although I use these two as an example, in this article, I show you a framework for deciding on what tools, programming languages, frameworks, and libraries you should learn next throughout your developer career.
With your limited time and resource as a developer, you have to make a decision on what to invest your time into to get the greatest return for this investment.
Now, the question you should be asking yourself: What can I invest time and effort into learning that has the greatest net value on my future career as a developer in terms of knowledge, salary, and satisfaction?
This doesn’t mean picking the easiest path. It means picking the tools that allow you to stay relevant and competitive for many years to come while also developing your skills to be a senior developer.
In the Conclusion of this article, you will find all of the technologies I recommend in 2018 if you want to be a web developer using the same analysis done below. So you know, you can skip to the end if you’re impatient. Otherwise, grab a fair trade, organic, made with love, yerba mate tea and let’s go on a nerdy adventure.
We are going to use two types of analysis in this post: Job Prospect Analysis and Technical Analysis. Here we go:
For the fifth year in a row, JavaScript was the most commonly used programming language. The use of Python overtook PHP for the first time in five years. Where is Node.js in here? Node.js is a javascript runtime. In non technical speak: Node.js is a way to use Javascript like you can PHP on the server side. For now, think of Node.js as Javascript.
As you can see, Node.js and Javascript rank at the top while PHP is significantly less popular.
In the five years Stackoverflow has been collecting data in the Developer Survey, they have seen languages such as Javascript and Node.js grow in popularity, while the usage of languages like PHP has been shrinking:
React is the most loved among developers, however, Node.js is the most wanted and second most loved:
Salaries and Opportunities:
Developers using languages listed below the blue line in the chart below, such as Go, Rust, and Clojure are being paid more given how much experience they have. Developers using languages below the blue line like PHP, however, are paid less even given years of experience. The size of the circles in this chart represents how many developers are using that language compared to the others. PHP significantly seems to be rewarding developers less and less with the number of years experience that they have.
On LinkedIn Jobs, you can see the job posting worldwide for Node.js developers far outweighs PHP developers by almost 10,000. This is despite the fact that Node.js is a much younger technology compared to PHP, and the fact that PHP is used heavily with WordPress which powers 30% of all websites on the internet.
Finally, you can see the average salary for technologies by Region (I didn’t include the Worldwide tab below because PHP didn’t even make it on there):
Again, we are not bashing PHP here. We are just looking at the numbers to decide what to chose to learn. It is clearly ranking consistently below other technologies like Javascript and Node.js.
UPDATE: Since releasing the post, stackoverflow came up with the result of the 2018 survey. The decline in PHP is growing.
Verdict:
PHP popularity is decreasing while the job market and popularity of Node.js is growing. Overall, PHP developers are paid significantly less than other developers and the trend seems to keep widening.
Node.js vs PHP — Technical Analysis
Let’s take a look at pros and cons of each technology.
Node.js Pros:
Especially suitable for applications that require real time communication between client and server. Tools like socket.io make building things like chat applications really easy. This same features makes Node.js suitable for applications that process data from IoT devices (Internet of Things) and Single Page Applications (SPAs) which are very common now.
Great for event driven applications that have non blocking Input/Output (I/O is the communication between an information processing system, such as a computer, and the outside world, possibly a human or another information processing systems like Databases)
You learn Javascript, you learn Node.js. You don’t need to learn another language like PHP. That means you can spend all your efforts learning Javascript really well and mastering it. You will be able to write both frontend and backend code with just one language.
Many popular client-side frameworks such as React, Vue, and Angular are written in JavaScript which is the main language of modern browsers. While using Node.js server-side, you have all the benefits of one scripting language across your application development stack. Having the same language both on the front and back end is excellent for maintainability: It makes the work between all team members easier for your application because both frontend and backend developers work with the same JavaScript data structures, functions, and language conventions.
The single-threaded event driven system is really fast when handling lots of requests at once from clients.
There are ever-growing 3rd party libraries and packages accessible through NPM for both client and server-side, as well as command-line tools for web development. Additionally, most of these are hosted on GitHub, where you can report an issue, or you can fork the code yourself to customize it.
It has become the standard environment in which to run Javascript related tools and other web developer related tools, including task runners, minifiers, linters, formatters, preprocessors, bundlers and analytics processors.
Natively supported on many new APIs and services like AWS Lambda.
We get all the performance gain of V8 which is the Google JavaScript interpreter that Node.js is built on top of. Since the Google’s engineering is constantly improving performance on V8, Node.js gets the benefit of this development for free.
Node.js Cons:
NPM packages mentioned above can bloat your code, can be insecure, and it is hard to find which packages are good since there are so many options (Looking at downloads and GitHub stats is one way to fix this issue).
Huge number of ways to build servers using Node.js and npm packages. This makes it harder for new developers to pick up.
Not ideal for servers that are dependent on heavy CPU consuming code (i.e. heavy algorithms like image processing or sorting). Generally, anything that isn’t I/O can be thought of as CPU consuming code. Usually a multi-threaded server environment is a better option than Node.js in this case (Solution: if needed, you can hand CPU intensive parts of your code to a program written in C).
Node does not utilize all cores of an underlying system or machine. You have to write logic by yourself to use multi core processors. This can be achieved in many ways but it requires a bit of extra work (This becomes a pro when you are able to maximize CPU usage of the system).
Node.js Verdict:
Node.js is well suited for applications that have a lot of concurrent connections and each request only needs very few CPU cycles. This makes it extremely ideal for many of the applications currently on the internet like SPAs and real time applications.
Using JavaScript’s built-in asynchronous processing, one can create highly scalable server-side code that maximize the usage of a single CPU and memory while being able to handle more concurrent requests than conventional multithreaded servers.
Node.js comes with very few dependencies, rules and guidelines, which allow a developer to have the freedom and creativity in developing their applications the way they want to. Developers can select the best architecture, design patterns, modules and features for their project while getting all the benefit from the community through NPM.
PHP Pros:
Strong and big community because of its age.
PHP has a powerful codebase that includes popular platforms for building websites (i.e. WordPress, Joomla, Drupal). CMS (Content Management Systems) such as WordPress, make it easy to deploy a blog or an e-commerce site in a matter of minutes and allow non-developers to customize them easily.
Easier to set up with non developer tools and preferred for individuals or small companies that don’t need to have knowledge of SSH and Linux servers. Numerous PHP applications (i.e. cPanel) are offered by basic hosting platforms which can be installed in one click.
Unlike other general purpose programming languages, PHP was designed specifically for the Web. PHP offers a great server side solution where there is no need to bother with JavaScript in the browser since all pages can be easily generated and rendered on the server. This is useful if you want to avoid shipping too much code on the client side. Node.js is able to do this as well, but the solution isn’t as simple.
PHP7 and HHVM (Supported by facebook) developments have improved on PHP performance.
PHP Cons:
PHP is only used on the back end. This means you still need to learn Javascript if you want to work on the client side or be considered a full stack developer.
With PHP, heavy server-side rendering and numerous requests to the server to generate and render pages is not be a good option for Single Page Applications.
Each active client eats up one server process. Not ideal for apps with many client connections.
Native support for PHP on new APIs and services like AWS Lambda is limited compared to Node.js.
It follows the classical client-server model where every page request initiates the application, database connection, and HTML rendering. This makes PHP slower as you navigate through a website in comparison to Node.js application that runs permanently and needs only to initialize once. Because of this, Node.js is more suitable for the newer direction that the web is evolving into with HTML5, AJAX and WebSockets.
PHP Verdict:
PHP is simpler to learn with a big community around it. It is a good choice for a standardized solution such as blogs or news sites. It has the power of WordPress which is the most popular CMS (Content Management System) which allows you to create customizable blogs without too much coding. However, simpler in this case is not a good quality. The easier it is to learn a technology, the easier it is for someone to enter the field and increase the supply pool, and the lower you will have to charge for your services.
Conclusion
PHP was one of the top languages in the Web 1.0 era with the popularity of WordPress. Node.js was launched in 2009 and is technically not a language but a runtime environment for Javascript. It is the champion of a younger web development generation and is better suited for building event-based, data driven , I/O heavy applications that you encounter more in the Web 2.0 era.
In particular, asynchronous and event-based architecture of Node.js makes it a great fit for real time applications such as messaging and collaborative apps in which many requests are happening concurrently and there is a lot of back and forth between the client and the server. Can’t live without WordPress? Well Node.js has it’s own CMS that is awesome called Keystone.js.
There are always going to be tradeoffs. There is never going to be one technology that you can learn that will solve all problems and will make you immune to job obsolescence. The best we can do is to analyze our options and pick the one that will have best return on investment. Looking at the job prospect analysis and technical analysis above, we can see a clear winner.
I pick Node.js.
Although all technologies are great if used in their own specific way, we live in a world where information is so abundant that we have to limit the amount of topics we can focus on and deeply learn.
In my course, I teach methodologies that are relevant today for a professional career in the field, and also the tools used by some of the biggest companies like Facebook, Netflix, Google and Amazon. If you want to be a full stack web developer in 2018, I recommend you learn:
HTML5
CSS3
Javascript
React.js
Node.js + Express.js
PostgreSQL and a few others…
You can learn about them more by reading my article on learning to code in 2018 or checking out my online course that takes your from zero experience to having the skillset to get hired as a developer(only $10.99 with coupon code: MEDIUMNODE1723
What are your thoughts?
UPDATE: discussions around technologies should have opinions from both sides. I recommend you read through the comments. Keep in mind that there are always tradeoffs, and what tools you use in your profession is ultimately up to you. The best we can do is be informed about our choices and not follow blindly. Finally, be willing to consider opinions different than yours.